@moku-labs/game 0.15.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/app/page.d.mts +1 -1
  2. package/dist/app/page.mjs +2 -2
  3. package/dist/app/system.d.mts +3 -3
  4. package/dist/app.d.mts +3 -3
  5. package/dist/app.mjs +1 -1
  6. package/dist/assets.d.mts +1 -1
  7. package/dist/cli.mjs +75 -36
  8. package/dist/{commands-DAETmK86.d.mts → commands-BynjWVVy.d.mts} +7 -6
  9. package/dist/control.d.mts +30 -18
  10. package/dist/control.mjs +2 -2
  11. package/dist/{define-BASd9ZUh.d.mts → define-Ckj_TMWu.d.mts} +2 -2
  12. package/dist/{dev-DbHgx-R-.mjs → dev-BNndV-hU.mjs} +4 -4
  13. package/dist/{headless-cFveciuY.d.mts → headless-B0mH9qYg.d.mts} +1 -1
  14. package/dist/{index-DedbED3T.d.mts → index-CCiTo1_3.d.mts} +16 -4
  15. package/dist/index.d.mts +5 -5
  16. package/dist/index.mjs +2 -2
  17. package/dist/inspect.d.mts +6 -6
  18. package/dist/inspect.mjs +1 -1
  19. package/dist/jsx-dev-runtime.d.mts +1 -1
  20. package/dist/jsx-runtime.d.mts +1 -1
  21. package/dist/project.d.mts +4 -4
  22. package/dist/project.mjs +1 -1
  23. package/dist/{run-BbipFRc6.mjs → run-C07NXds7.mjs} +35 -25
  24. package/dist/{runtime-DoSlRx8X.d.mts → runtime-BV3xv6gx.d.mts} +1 -1
  25. package/dist/{sources-Cdvb0rOS.mjs → sources-OvHvyeJS.mjs} +1 -1
  26. package/dist/{src-BEbJ_sSx.mjs → src-CwVzErzN.mjs} +1921 -652
  27. package/dist/testing.d.mts +4 -4
  28. package/dist/testing.mjs +1 -1
  29. package/dist/{types-GHE4J5Uf.d.mts → types-Bw-qLjFZ.d.mts} +2 -2
  30. package/dist/{types-C73hbmxi.d.mts → types-CpdkyhaC.d.mts} +4 -4
  31. package/dist/{types-DngFQJro.d.mts → types-D44EL4gT.d.mts} +2 -2
  32. package/dist/{types-BGcda5Le.d.mts → types-E2ykwIUO.d.mts} +556 -42
  33. package/dist/{types-7GXcXxxv.d.mts → types-G3ZAAsbd.d.mts} +20 -1
  34. package/dist/{visual-_XhoGeIC.d.mts → visual-DoHwXeQi.d.mts} +6 -6
  35. package/dist/visual.d.mts +1 -1
  36. package/dist/visual.mjs +2 -2
  37. package/dist/{watch-BEdrp80i.mjs → watch-BSgptowj.mjs} +16 -6
  38. package/llms.txt +6 -4
  39. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { m as StartedPage, r as GameConfig, t as AnyGameApp, u as PageOptions } from "../types-C73hbmxi.mjs";
1
+ import { m as StartedPage, r as GameConfig, t as AnyGameApp, u as PageOptions } from "../types-CpdkyhaC.mjs";
2
2
 
3
3
  //#region src/app/page.d.ts
4
4
  /**
package/dist/app/page.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { r as systemSource, t as memory } from "../memory-CWlqhS7l.mjs";
2
2
  import { t as applyTo } from "../drafts-BawpSaVp.mjs";
3
- import { i as isControl } from "../dev-DbHgx-R-.mjs";
4
- import { n as read, r as watch, t as sources } from "../sources-Cdvb0rOS.mjs";
3
+ import { i as isControl } from "../dev-BNndV-hU.mjs";
4
+ import { n as read, r as watch, t as sources } from "../sources-OvHvyeJS.mjs";
5
5
  import { t as resolveConfig } from "../config-B87aFTW-.mjs";
6
6
  //#region src/app/save.ts
7
7
  /**
@@ -1,6 +1,6 @@
1
- import { hr as PlayerStateProvider } from "../types-BGcda5Le.mjs";
2
- import { ft as PlatformProvider } from "../index-DedbED3T.mjs";
3
- import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-C73hbmxi.mjs";
1
+ import { Tr as PlayerStateProvider } from "../types-E2ykwIUO.mjs";
2
+ import { pt as PlatformProvider } from "../index-CCiTo1_3.mjs";
3
+ import { _ as SystemShellFactory, g as SystemName, h as SystemModules } from "../types-CpdkyhaC.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 { ur as Json } from "./types-BGcda5Le.mjs";
2
- import { V as StringTable } from "./types-7GXcXxxv.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-C73hbmxi.mjs";
1
+ import { br as Json } from "./types-E2ykwIUO.mjs";
2
+ import { V as StringTable } from "./types-G3ZAAsbd.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-CpdkyhaC.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 { Dt as effectsPlugin, K as platformPlugin, Rt as audioPlugin, i as screen, p as flattenFeatures, t as createApp } from "./src-BEbJ_sSx.mjs";
1
+ import { Dt as effectsPlugin, K as platformPlugin, Rt as audioPlugin, i as screen, p as flattenFeatures, t as createApp } from "./src-CwVzErzN.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-BGcda5Le.mjs";
1
+ import { d as Manifest } from "./types-E2ykwIUO.mjs";
2
2
 
3
3
  //#region src/plugins/assets/scan/cli.d.ts
4
4
  /**
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { t as resolveConfig } from "./config-B87aFTW-.mjs";
2
2
  import { t as findFeatureOwners } from "./features-DowEilZm.mjs";
3
- import { r as watchTree, t as createBatcher, x as isSkippedFolder$1 } from "./watch-BEdrp80i.mjs";
3
+ import { r as watchTree, t as createBatcher, x as isSkippedFolder$1 } from "./watch-BSgptowj.mjs";
4
4
  import { a as runCli$1, i as compileStrings, n as importStrings, t as exportStrings } from "./assets-CEMfBogh.mjs";
5
5
  import { constants, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, watch, writeFileSync } from "node:fs";
6
6
  import path from "node:path";
@@ -631,10 +631,10 @@ function devFlag(engine) {
631
631
  ].join("\n");
632
632
  }
633
633
  /**
634
- * The in-memory `agent.ts` module of a debug page, imported after the startup mark: six lines
635
- * that set the build id, the engine id and the editor address, each through `JSON.stringify`, the
636
- * control flag of the profile, the agent flag, and the dev flag `false`. No header: nobody opens
637
- * it.
634
+ * The in-memory `agent.ts` module of a debug page, imported after the startup mark: lines that
635
+ * set the build id, the engine id, the editor address and, when the game has one, the app id, each
636
+ * through `JSON.stringify`, the control flag of the profile, the agent flag, and the dev flag
637
+ * `false`. No header: nobody opens it.
638
638
  *
639
639
  * @param page - What the page is built with.
640
640
  * @returns The text.
@@ -648,6 +648,7 @@ function agentFlag(page) {
648
648
  `globalThis.__MOKU_GAME_BUILD__ = ${JSON.stringify(page.build)};`,
649
649
  `globalThis.__MOKU_GAME_ENGINE__ = ${JSON.stringify(page.engine)};`,
650
650
  `globalThis.__MOKU_GAME_EDITOR__ = ${JSON.stringify(page.editor)};`,
651
+ ...page.app === void 0 ? [] : [`globalThis.__MOKU_GAME_APP__ = ${JSON.stringify(page.app)};`],
651
652
  `globalThis.__MOKU_GAME_CONTROL__ = ${String(page.control)};`,
652
653
  "globalThis.__MOKU_GAME_AGENT__ = true;",
653
654
  "globalThis.__MOKU_GAME_DEV__ = false;",
@@ -1465,7 +1466,7 @@ async function serveChild(run, deps) {
1465
1466
  * under a virtual `<game>/.moku/build/` that is never written, then the packed assets copied
1466
1467
  * beside the page. A release page that carries the editor's agent is refused and removed. With
1467
1468
  * `--debug` the page is a debug page instead: the editor's page agent, the game's `.dev` modules,
1468
- * the agent flag and a control profile, a marked title and a build id. The output works from any
1469
+ * the agent and control flags, a marked title, a build id and the app id. The output works from any
1469
1470
  * http sub-path and from the Tauri protocol: every link starts with `./`, and the page reads
1470
1471
  * `manifest.json` next to itself. Node and Bun only: the bin bundles it.
1471
1472
  */
@@ -1629,24 +1630,41 @@ async function loadPlugins(files) {
1629
1630
  }));
1630
1631
  }
1631
1632
  /**
1632
- * The id of a debug build: the profile and the UTC time of the run, `YYYYMMDDTHHMMSSZ`.
1633
+ * The id of a debug build: the UTC time of the run, `YYYYMMDDTHHMMSSZ`, the same for both
1634
+ * profiles (the editor tells them apart by the CONTROL flag).
1633
1635
  *
1634
- * @param debug - The profile.
1635
1636
  * @param now - The wall-clock time of the run, ms.
1636
1637
  * @returns The id.
1637
1638
  * @example
1638
1639
  * ```ts
1639
- * buildIdOf("read", Date.UTC(2026, 9, 14, 15, 30, 12)); // "debug-20261014T153012Z"
1640
+ * buildIdOf(Date.UTC(2026, 9, 14, 15, 30, 12)); // "debug-20261014T153012Z"
1640
1641
  * ```
1641
1642
  */
1642
- function buildIdOf(debug, now) {
1643
- const stamp = `${new Date(now).toISOString().slice(0, 19).replaceAll(/[-:]/g, "")}Z`;
1644
- return debug === "full" ? `debug-full-${stamp}` : `debug-${stamp}`;
1643
+ function buildIdOf(now) {
1644
+ return `debug-${new Date(now).toISOString().slice(0, 19).replaceAll(/[-:]/g, "")}Z`;
1645
+ }
1646
+ /**
1647
+ * The app id a debug page carries, so the editor pairs a device stream with its project: the
1648
+ * native bundle identifier, with `.debug` when native builds its debug app
1649
+ * (`MOKU_NATIVE_PROFILE=debug`), which installs under that id.
1650
+ *
1651
+ * @param identifier - `native.identifier` of `config.ts`, `undefined` without a native section.
1652
+ * @param profile - `MOKU_NATIVE_PROFILE` of the run.
1653
+ * @returns The app id, or `undefined` without an identifier.
1654
+ * @example
1655
+ * ```ts
1656
+ * appIdOf("com.mokulabs.timber", "debug"); // "com.mokulabs.timber.debug"
1657
+ * ```
1658
+ */
1659
+ function appIdOf(identifier, profile) {
1660
+ if (identifier === void 0) return void 0;
1661
+ return profile === "debug" ? `${identifier}.debug` : identifier;
1645
1662
  }
1646
1663
  /**
1647
1664
  * The `define` map of a page: a release page defines the three flags `false`; a debug page the
1648
1665
  * dev flag `false`, the agent flag `true`, the control flag of its profile, and the build id, the
1649
- * engine id and the editor address as strings.
1666
+ * engine id, the editor address and, when the game has one, the app id (`__MOKU_GAME_APP__`) as
1667
+ * strings.
1650
1668
  *
1651
1669
  * @param page - What a debug page is built with; `undefined` for a release page.
1652
1670
  * @returns The defines for `Bun.build`.
@@ -1667,7 +1685,8 @@ function definesOf(page) {
1667
1685
  __MOKU_GAME_CONTROL__: page.level === "full" ? "true" : "false",
1668
1686
  __MOKU_GAME_BUILD__: JSON.stringify(page.build),
1669
1687
  __MOKU_GAME_ENGINE__: JSON.stringify(page.engine),
1670
- __MOKU_GAME_EDITOR__: JSON.stringify(page.editor)
1688
+ __MOKU_GAME_EDITOR__: JSON.stringify(page.editor),
1689
+ ...page.app === void 0 ? {} : { __MOKU_GAME_APP__: JSON.stringify(page.app) }
1671
1690
  };
1672
1691
  }
1673
1692
  /**
@@ -1695,7 +1714,8 @@ function pageFiles(run, settings, page) {
1695
1714
  const flags = {
1696
1715
  build: page.build,
1697
1716
  control: page.level === "full",
1698
- engine: page.engine
1717
+ engine: page.engine,
1718
+ app: page.app
1699
1719
  };
1700
1720
  return {
1701
1721
  ...release,
@@ -1842,17 +1862,18 @@ function refuseStoreDebug(run, env) {
1842
1862
  throw new Error("[game] build: MOKU_NATIVE_PROFILE is store: a store page must not carry the editor agent.\n Build the store app without --debug.");
1843
1863
  }
1844
1864
  /**
1845
- * What a debug run builds its page with: the editor's page agent must resolve from the game, and
1846
- * the engine the page bundles is fingerprinted.
1865
+ * What a debug run builds its page with: the editor's page agent must resolve from the game, the
1866
+ * engine the page bundles is fingerprinted, and the app id comes from the native identifier.
1847
1867
  *
1848
1868
  * @param run - The flags of a debug run.
1849
1869
  * @param level - Its profile.
1850
- * @param deps - The resolver and the clock.
1870
+ * @param settings - The resolved config, for the native identifier.
1871
+ * @param deps - The resolver, the clock and the environment.
1851
1872
  * @returns The debug page and the engine fingerprint.
1852
1873
  * @throws {Error} With the install line when the game cannot resolve `@moku-labs/editor`, and
1853
1874
  * when it cannot resolve `@moku-labs/game/hot`.
1854
1875
  */
1855
- function debugPageOf(run, level, deps) {
1876
+ function debugPageOf(run, level, settings, deps) {
1856
1877
  try {
1857
1878
  deps.resolve(DEBUG_AGENT, run.root);
1858
1879
  } catch (error) {
@@ -1862,9 +1883,10 @@ function debugPageOf(run, level, deps) {
1862
1883
  return {
1863
1884
  page: {
1864
1885
  level,
1865
- build: buildIdOf(level, deps.now()),
1886
+ build: buildIdOf(deps.now()),
1866
1887
  engine: engine.id,
1867
- editor: run.editor ?? "127.0.0.1:47600"
1888
+ editor: run.editor ?? "127.0.0.1:47600",
1889
+ app: appIdOf(settings.native?.identifier, deps.env.MOKU_NATIVE_PROFILE)
1868
1890
  },
1869
1891
  engine
1870
1892
  };
@@ -1902,7 +1924,7 @@ async function runBuild(run, deps) {
1902
1924
  refuseStoreDebug(run, deps.env);
1903
1925
  const settings = await loadGame(run.root);
1904
1926
  refuseOut(run.root, run.out);
1905
- const debug = run.debug === void 0 ? void 0 : debugPageOf(run, run.debug, deps);
1927
+ const debug = run.debug === void 0 ? void 0 : debugPageOf(run, run.debug, settings, deps);
1906
1928
  const packed = await deps.assets(packArguments(run.root, settings, false));
1907
1929
  if (packed !== 0) return packed;
1908
1930
  rmSync(run.out, {
@@ -2192,13 +2214,17 @@ const DEFAULT_PORT = "3000";
2192
2214
  const MAX_PORT = 65535;
2193
2215
  /** A host of `--editor`: a name or an IPv4 address, or an IPv6 address in brackets. */
2194
2216
  const EDITOR_HOST = /^(?:[\w.-]+|\[[\da-f:.]+\])$/i;
2217
+ /** The value a bare `--debug` reads as: the full profile, with no alias note. */
2218
+ const BARE_DEBUG = "";
2219
+ /** The one line `--debug=full` prints: the alias builds the same page as `--debug`. */
2220
+ const FULL_ALIAS_NOTE = "--debug already includes control; =full is no longer needed";
2195
2221
  /** The text of `moku-game help`. */
2196
2222
  const USAGE = [
2197
2223
  "moku-game <command> [options]",
2198
2224
  "",
2199
2225
  " dev [--port 3000] [--packed] serve the game with hot reload",
2200
- " build [--out dist/web] [--debug[=full] [--editor host:port]] pack the assets and build the page; --debug adds the editor agent",
2201
- " native build <target> [--simulator] [--debug[=full] [--editor host:port]] build the native app (ios, macos, android)",
2226
+ " build [--out dist/web] [--debug [--editor host:port]] pack the assets and build the page; --debug adds the editor agent and control",
2227
+ " native build <target> [--simulator] [--debug [--editor host:port]] build the native app (ios, macos, android)",
2202
2228
  " native dev <target> run the native shell on the dev server",
2203
2229
  " native doctor | native clean check or remove the native project",
2204
2230
  " keys [--check] write generated/assets.ts and generated/manifest.json",
@@ -2279,8 +2305,8 @@ function checkTokens(command, tokens) {
2279
2305
  }
2280
2306
  /**
2281
2307
  * Reads the command line into one command with its flags, the paths resolved against the
2282
- * working directory. A bare `--debug` reads as `--debug=read`: a string flag without its value
2283
- * would take the next word.
2308
+ * working directory. A bare `--debug` reads as `--debug=` (the empty value, the full profile): a
2309
+ * string flag without its value would take the next word.
2284
2310
  *
2285
2311
  * @param given - The arguments after the bin.
2286
2312
  * @param cwd - The working directory.
@@ -2288,7 +2314,7 @@ function checkTokens(command, tokens) {
2288
2314
  * @throws {Error} When the command is unknown or a flag is refused.
2289
2315
  */
2290
2316
  function parseCommand(given, cwd) {
2291
- const argv = given.map((word) => word === "--debug" ? "--debug=read" : word);
2317
+ const argv = given.map((word) => word === "--debug" ? `--debug=${BARE_DEBUG}` : word);
2292
2318
  const loose = parseLoose(argv);
2293
2319
  const word = loose.positionals[0];
2294
2320
  if (loose.values.help === true || word === "help") return "help";
@@ -2316,27 +2342,38 @@ function parseCommand(given, cwd) {
2316
2342
  function refuseExtra(parsed, count) {
2317
2343
  const extra = parsed.rest[count];
2318
2344
  if (extra === void 0) return;
2319
- const advice = parsed.values.debug !== void 0 && (extra === "full" || extra === "read") ? ` Write --debug=${extra}.` : "";
2345
+ const advice = parsed.values.debug !== void 0 && (extra === "full" || extra === "read") ? ` Write ${extra === "read" ? "--debug=read" : "--debug"}.` : "";
2320
2346
  throw new Error(`[game] ${parsed.command}: unexpected argument "${extra}".${advice}`);
2321
2347
  }
2322
2348
  /**
2323
- * Reads `--debug`: no flag is a release page, a bare flag or `read` the read profile, `full`
2324
- * every command.
2349
+ * Reads `--debug`: no flag is a release page, a bare flag or its alias `full` every command,
2350
+ * `read` the read and cosmetic commands only.
2325
2351
  *
2326
- * @param value - The value of the flag, `read` for a bare `--debug`.
2352
+ * @param value - The value of the flag, the empty value for a bare `--debug`.
2327
2353
  * @param command - The command word, for the message.
2328
2354
  * @returns The profile, or `undefined` without the flag.
2329
2355
  * @throws {Error} When the value is another word.
2330
2356
  * @example
2331
2357
  * ```ts
2332
- * debugLevelOf("full"); // "full"
2358
+ * debugLevelOf(""); // "full"
2333
2359
  * ```
2334
2360
  */
2335
2361
  function debugLevelOf(value, command = "build") {
2362
+ if (value === BARE_DEBUG) return "full";
2336
2363
  if (value === void 0 || value === "read" || value === "full") return value;
2337
2364
  throw new Error(`[game] ${command}: --debug takes no value, "read" or "full", got "${value}".`);
2338
2365
  }
2339
2366
  /**
2367
+ * Prints the alias note once when the command line spells the full profile out: `--debug=full`
2368
+ * builds the same page as `--debug`.
2369
+ *
2370
+ * @param parsed - The command line.
2371
+ * @param ui - The console.
2372
+ */
2373
+ function noteFullAlias(parsed, ui) {
2374
+ if (parsed.values.debug === "full") ui.info(FULL_ALIAS_NOTE);
2375
+ }
2376
+ /**
2340
2377
  * Reads `--editor`: the `host:port` the page agent of a debug page dials, 127.0.0.1:47600 when
2341
2378
  * left out.
2342
2379
  *
@@ -2425,6 +2462,7 @@ async function runNativeVerb(parsed, deps) {
2425
2462
  if (verb === void 0) throw new Error(`[game] native: no verb "${word}". Name one of build, dev, doctor, clean.`);
2426
2463
  refuseExtra(parsed, 2);
2427
2464
  const debug = nativeDebugOf(parsed, verb, target);
2465
+ noteFullAlias(parsed, deps.ui);
2428
2466
  const settings = await loadSettings(parsed.root);
2429
2467
  const where = {
2430
2468
  cwd: parsed.root,
@@ -2537,8 +2575,8 @@ function hop(argv, parsed, deps) {
2537
2575
  }).exited;
2538
2576
  }
2539
2577
  /**
2540
- * Runs `moku-game build`: a release page, or with `--debug[=full]` a debug page whose agent dials
2541
- * `--editor`.
2578
+ * Runs `moku-game build`: a release page, or with `--debug` a debug page whose agent dials
2579
+ * `--editor` (`--debug=read` for the rare read-only page).
2542
2580
  *
2543
2581
  * @param parsed - The command line.
2544
2582
  * @param deps - The process seams.
@@ -2550,6 +2588,7 @@ function runBuildCommand(parsed, deps) {
2550
2588
  const debug = debugLevelOf(parsed.values.debug);
2551
2589
  const editor = parsed.values.editor;
2552
2590
  if (debug === void 0 && editor !== void 0) throw new Error("[game] build: --editor goes with --debug.");
2591
+ noteFullAlias(parsed, deps.ui);
2553
2592
  const out = parsed.values.out ?? path.join(parsed.root, "dist", "web");
2554
2593
  return runBuild({
2555
2594
  root: parsed.root,
@@ -2955,12 +2994,12 @@ function systemRowsOf(settings) {
2955
2994
  * @returns The command.
2956
2995
  * @example
2957
2996
  * ```ts
2958
- * webBuildOf({ cwd: "/g", command: '"bun" "/g/bin/moku-game.mjs"' }, { level: "full", editor: "192.168.1.20:47600" }); // '"bun" "/g/bin/moku-game.mjs" build --debug=full --editor 192.168.1.20:47600'
2997
+ * webBuildOf({ cwd: "/g", command: '"bun" "/g/bin/moku-game.mjs"' }, { level: "full", editor: "192.168.1.20:47600" }); // '"bun" "/g/bin/moku-game.mjs" build --debug --editor 192.168.1.20:47600'
2959
2998
  * ```
2960
2999
  */
2961
3000
  function webBuildOf(where, debug) {
2962
3001
  if (debug === void 0) return `${where.command} build`;
2963
- const level = debug.level === "full" ? "--debug=full" : "--debug";
3002
+ const level = debug.level === "full" ? "--debug" : "--debug=read";
2964
3003
  const editor = debug.editor === void 0 ? "" : ` --editor ${debug.editor}`;
2965
3004
  return `${where.command} build ${level}${editor}`;
2966
3005
  }
@@ -1,14 +1,14 @@
1
- import { Hn as FlowState, I as Captured, Ir as Time, Mr as FrameRate, S as ScenesApi, T as Api$1, ht as DebugSwitches, wr as Api, xr as StoreApi, yr as Snapshot, zn as Bookmark, zt as Api$2 } from "./types-BGcda5Le.mjs";
2
- import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-GHE4J5Uf.mjs";
3
- import { j as InputApi } from "./types-7GXcXxxv.mjs";
4
- import { t as HeadlessApp } from "./headless-cFveciuY.mjs";
5
- import { n as Command, r as ControlApp } from "./types-DngFQJro.mjs";
1
+ import { Hr as FrameRate, I as Captured, Kr as Time, Pr as Api, Qn as FlowState, S as ScenesApi, T as Api$1, Tt as DebugSwitches, Yn as Bookmark, Yt as Api$2, jr as StoreApi, kr as Snapshot } from "./types-E2ykwIUO.mjs";
2
+ import { P as AnimApi, a as AudioApi, h as EffectsApi, r as UiApi } from "./types-Bw-qLjFZ.mjs";
3
+ import { j as InputApi } from "./types-G3ZAAsbd.mjs";
4
+ import { t as HeadlessApp } from "./headless-B0mH9qYg.mjs";
5
+ import { n as Command, r as ControlApp } from "./types-D44EL4gT.mjs";
6
6
 
7
7
  //#region src/plugins/flow/doors/commands.d.ts
8
8
  /**
9
9
  * Every command of the engine, keyed by its short name: what an editor lists as buttons and MCP
10
10
  * tools. Frozen. Each runs on the dev page and on a debug page, by the profile `run` checks: a
11
- * `--debug` page runs the read and cosmetic ones.
11
+ * `--debug` page runs every one, a `--debug=read` page the read and cosmetic ones.
12
12
  *
13
13
  * @example
14
14
  * ```ts
@@ -115,6 +115,7 @@ declare const commands: Readonly<{
115
115
  nineSlice: "boolean?";
116
116
  verifyFrames: "boolean?";
117
117
  kept: "boolean?";
118
+ overdraw: "boolean?";
118
119
  }, DebugSwitches, HeadlessApp & {
119
120
  readonly log: import("@moku-labs/common/browser").LogApi;
120
121
  } & {
@@ -1,7 +1,7 @@
1
- import { t as HeadlessApp } from "./headless-cFveciuY.mjs";
2
- import { i as InputArguments, n as Command, o as InputSchema, s as Ran } from "./types-DngFQJro.mjs";
3
- import { t as commands } from "./commands-DAETmK86.mjs";
4
- import { t as defineCommand } from "./define-BASd9ZUh.mjs";
1
+ import { t as HeadlessApp } from "./headless-B0mH9qYg.mjs";
2
+ import { i as InputArguments, n as Command, o as InputSchema, s as Ran } from "./types-D44EL4gT.mjs";
3
+ import { t as commands } from "./commands-BynjWVVy.mjs";
4
+ import { t as defineCommand } from "./define-Ckj_TMWu.mjs";
5
5
 
6
6
  //#region src/plugins/flow/doors/dev.d.ts
7
7
  /**
@@ -42,18 +42,18 @@ declare global {
42
42
  var __MOKU_GAME_AGENT__: boolean | undefined;
43
43
  /**
44
44
  * The control flag: every /control command runs, the state-changing ones too (`route`, `cheat`, `raw`).
45
- * `moku-game dev` and `moku-game build --debug=full` set it; `--debug` and `moku-game build` define it `false`.
45
+ * `moku-game dev` and `moku-game build --debug` set it; `--debug=read` and `moku-game build` define it `false`.
46
46
  *
47
47
  * @example
48
48
  * ```ts
49
- * // The in-memory agent.ts of `moku-game build --debug=full`.
49
+ * // The in-memory agent.ts of `moku-game build --debug`.
50
50
  * globalThis.__MOKU_GAME_CONTROL__ = true;
51
51
  * ```
52
52
  */
53
53
  var __MOKU_GAME_CONTROL__: boolean | undefined;
54
54
  /**
55
- * The id of the build the page came from: `"dev"` on the dev page, `"debug-20261014T153012Z"` or
56
- * `"debug-full-20261014T153012Z"` on a debug build, undefined on a release build.
55
+ * The id of the build the page came from: `"dev"` on the dev page, `"debug-20261014T153012Z"` on a
56
+ * debug build of either profile, undefined on a release build.
57
57
  *
58
58
  * @example
59
59
  * ```ts
@@ -86,6 +86,18 @@ declare global {
86
86
  * ```
87
87
  */
88
88
  var __MOKU_GAME_EDITOR__: string | undefined;
89
+ /**
90
+ * The app id of a debug build, so the editor pairs a device stream with its project: `native.identifier` of
91
+ * `config.ts`, with `.debug` in the native debug app (`MOKU_NATIVE_PROFILE=debug`), which installs under that id.
92
+ * Undefined on a debug build of a game with no native section, on the dev page and on a release build.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * // moku-game native build android --debug, a game with native: { identifier: "com.mokulabs.timber" }
97
+ * globalThis.__MOKU_GAME_APP__; // "com.mokulabs.timber.debug"
98
+ * ```
99
+ */
100
+ var __MOKU_GAME_APP__: string | undefined;
89
101
  /**
90
102
  * The overlay channel of the page agent: the editor's page agent sets it when it starts and deletes it when it stops.
91
103
  * `open()` shows the card; `open({ mode: "pill" })` the small pill; `toggle()` switches between hidden and the last
@@ -107,7 +119,7 @@ declare global {
107
119
  } | undefined;
108
120
  }
109
121
  /**
110
- * The error `run` throws on a `--debug` page for a command that changes the game: its `reason`
122
+ * The error `run` throws on a `--debug=read` page for a command that changes the game: its `reason`
111
123
  * tells it apart from any other failure.
112
124
  *
113
125
  * @example
@@ -123,7 +135,7 @@ type ControlReadOnlyError = Error & {
123
135
  /**
124
136
  * The error a control command throws when its body runs outside the builds its guard allows. It
125
137
  * carries `reason: "dev-only"`, so an editor tells a refusal by the body's guard apart from a
126
- * failure, as `reason: "read-only"` tells the refusal of `run` on a `--debug` page.
138
+ * failure, as `reason: "read-only"` tells the refusal of `run` on a `--debug=read` page.
127
139
  *
128
140
  * @example
129
141
  * ```ts
@@ -147,14 +159,14 @@ type ControlRefusedError = Error & {
147
159
  */
148
160
  declare function controlRefused(): ControlRefusedError;
149
161
  /**
150
- * Builds the error `run` throws on a `--debug` page for a command whose effect is `route`,
162
+ * Builds the error `run` throws on a `--debug=read` page for a command whose effect is `route`,
151
163
  * `cheat` or `raw`. It carries `reason: "read-only"`, so an editor tells it apart from a failure.
152
164
  *
153
165
  * @param id - The id of the refused command.
154
166
  * @returns The error, ready to throw.
155
167
  * @example
156
168
  * ```ts
157
- * // The editor on a --debug page.
169
+ * // The editor on a --debug=read page.
158
170
  * try { await run(app, commands.tap, { key: "play" }); } catch (error) { Reflect.get(Object(error), "reason"); // "read-only" }
159
171
  * ```
160
172
  */
@@ -162,17 +174,17 @@ declare function controlReadOnly(id: string): ControlReadOnlyError;
162
174
  //#endregion
163
175
  //#region src/plugins/flow/doors/run.d.ts
164
176
  /**
165
- * Runs a command in a dev build or a debug build. A debug build of `--debug` runs the read and
166
- * cosmetic commands only; `--debug=full` and the dev page run every command. A `cheat` or `raw`
177
+ * Runs a command in a dev build or a debug build. A `--debug` build and the dev page run every
178
+ * command; a `--debug=read` build runs the read and cosmetic ones only. A `cheat` or `raw`
167
179
  * command taints the session and is journaled before it runs, so a failing one still counts.
168
180
  *
169
181
  * @param app - The app the command acts on.
170
182
  * @param command - The command.
171
183
  * @param input - Its input; left out when every field of its schema is optional.
172
184
  * @returns The command's value and the envelope read after it.
173
- * @throws {Error} Outside dev builds and debug builds (read and cosmetic commands; every command
174
- * with `--debug=full`), the read-only refusal of `controlReadOnly` for a `route`, `cheat` or
175
- * `raw` command on a `--debug` page, and whatever the command throws.
185
+ * @throws {Error} Outside dev builds and debug builds (every command with `--debug`; the read and
186
+ * cosmetic ones alone with `--debug=read`), the read-only refusal of `controlReadOnly` for a
187
+ * `route`, `cheat` or `raw` command on a `--debug=read` page, and whatever the command throws.
176
188
  * @example
177
189
  * ```ts
178
190
  * // An e2e script: load the bug report, then tap Play.
@@ -180,7 +192,7 @@ declare function controlReadOnly(id: string): ControlReadOnlyError;
180
192
  * const ran = await run(app, commands.answer, { intent: "play" });
181
193
  * ran.value; // true
182
194
  * ran.state; // { path: "board/awaitIntent", frame: 14, tainted: true }
183
- * // On a --debug page: await run(app, commands.tap, { key: "play" }); // throws "[game] The command game.tap changes the game: …"
195
+ * // On a --debug=read page: await run(app, commands.tap, { key: "play" }); // throws "[game] The command game.tap changes the game: …"
184
196
  * ```
185
197
  */
186
198
  declare function run<S extends InputSchema, O, App extends HeadlessApp>(app: App, command: Command<S, O, App>, ...input: InputArguments<S>): Promise<Ran<O>>;
package/dist/control.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { n as controlRefused, t as controlReadOnly } from "./dev-DbHgx-R-.mjs";
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-BbipFRc6.mjs";
3
+ import { n as commands, t as run } from "./run-C07NXds7.mjs";
4
4
  export { commands, controlReadOnly, controlRefused, defineCommand, run };
@@ -1,5 +1,5 @@
1
- import { t as HeadlessApp } from "./headless-cFveciuY.mjs";
2
- import { c as Source, n as Command, o as InputSchema } from "./types-DngFQJro.mjs";
1
+ import { t as HeadlessApp } from "./headless-B0mH9qYg.mjs";
2
+ import { c as Source, n as Command, o as InputSchema } from "./types-D44EL4gT.mjs";
3
3
 
4
4
  //#region src/plugins/flow/doors/define.d.ts
5
5
  /**
@@ -33,7 +33,7 @@ function isAgent() {
33
33
  * @returns True only when `__MOKU_GAME_CONTROL__` is exactly `true`.
34
34
  * @example
35
35
  * ```ts
36
- * isControl(); // true on the page of moku-game build --debug=full, false on a --debug page
36
+ * isControl(); // true on the page of moku-game build --debug, false on a --debug=read page
37
37
  * ```
38
38
  */
39
39
  function isControl() {
@@ -54,19 +54,19 @@ function controlRefused() {
54
54
  return Object.assign(/* @__PURE__ */ new Error("[game] Control commands run in dev builds only.\n Define __MOKU_GAME_DEV__ as true in the dev build."), { reason: "dev-only" });
55
55
  }
56
56
  /**
57
- * Builds the error `run` throws on a `--debug` page for a command whose effect is `route`,
57
+ * Builds the error `run` throws on a `--debug=read` page for a command whose effect is `route`,
58
58
  * `cheat` or `raw`. It carries `reason: "read-only"`, so an editor tells it apart from a failure.
59
59
  *
60
60
  * @param id - The id of the refused command.
61
61
  * @returns The error, ready to throw.
62
62
  * @example
63
63
  * ```ts
64
- * // The editor on a --debug page.
64
+ * // The editor on a --debug=read page.
65
65
  * try { await run(app, commands.tap, { key: "play" }); } catch (error) { Reflect.get(Object(error), "reason"); // "read-only" }
66
66
  * ```
67
67
  */
68
68
  function controlReadOnly(id) {
69
- return Object.assign(/* @__PURE__ */ new Error(`[game] The command ${id} changes the game: this debug build runs read and cosmetic commands only.\n Build with moku-game build --debug=full to run it.`), { reason: "read-only" });
69
+ return Object.assign(/* @__PURE__ */ new Error(`[game] The command ${id} changes the game: this debug build runs read and cosmetic commands only.\n Build with moku-game build --debug to run it.`), { reason: "read-only" });
70
70
  }
71
71
  /**
72
72
  * Builds the error a door source or command throws when the opt-in plugin it uses is not
@@ -1,4 +1,4 @@
1
- import { Ar as Api, Cr as RngState, Gn as RouteStep, Hn as FlowState, Un as JournalEntry, bn as Api$1, er as Answer, ur as Json } from "./types-BGcda5Le.mjs";
1
+ import { $n as JournalEntry, An as Api$1, Br as Api, Nr as RngState, Qn as FlowState, br as Json, tr as RouteStep, ur as Answer } from "./types-E2ykwIUO.mjs";
2
2
 
3
3
  //#region src/plugins/flow/headless.d.ts
4
4
  /**
@@ -1,6 +1,6 @@
1
- import { An as defineFlow, Ar as Api$5, Bn as DefineNode, Br as Require, Bt as Config$8, C as State$7, Cn as EmitterIdOf, Dn as State$3, Dr as PauseReason, E as Config$6, Er as Events, Et as NineSliceValue, Fn as FeatureDescription, Fr as ThermalReading, H as FrameRing, Ht as State$9, In as FeaturePlugin, It as TransformValue, Jn as Descriptor, Kn as SceneIdOf, Ln as FeatureTree, Lt as sprite, N as State$6, Nr as RateChange, Nt as SpriteOptions, On as TextStylesOf, Or as State$4, Ot as OverlayValue, Pr as State$8, Pt as SpriteValue, Qn as Hint, Rr as Config$9, S as ScenesApi, Sn as Config$3, Sr as RngApi, T as Api$4, Tn as HudKeysOf, Tr as Config$4, V as FrameRecord, Xn as EffectOptions, Xt as ComponentValue, Yn as Effect, Yt as ComponentType, Zn as GuideOptions, _ as DefineScene, a as Config$1, an as SystemFor, ar as State$2, b as SceneDefinition, bn as Api$2, bt as ViewportSize, c as LoadBundles, cn as DescriptionNode, cr as Config$5, dr as Root, en as Mut, er as Answer, f as State$1, fr as State$5, g as AnySceneProjection, gn as ReducedMotion, hn as ProjectionSpec, i as BundleSpec, in as SystemDefinition, jr as Config$7, jt as ShapeValue, l as LoadReason, ln as Ease, mn as ProjectionMotion, mr as Patch, nn as QueryTerm, o as DefineBundles, on as TagType, p as Tier, pn as NumericFields, qt as ComponentHandle, r as BundleMap, rn as ResourceType, rr as Config$2, t as Api, tn as Narrowed, tr as Api$1, u as LoadResult, ur as Json, wn as GameTypes, wr as Api$3, wt as HudPartValue, x as SceneSpec, xn as BundlesOf, xr as StoreApi, y as LayerMap, zr as Events$1, zt as Api$6 } from "./types-BGcda5Le.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-GHE4J5Uf.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-7GXcXxxv.mjs";
1
+ import { An as Api$2, At as ViewportSize, Bn as defineFlow, Br as Api$5, C as State$7, Cn as NumericFields, E as Config$6, En as ReducedMotion, Fn as HudKeysOf, Fr as Config$4, Gn as FeatureDescription, Gr as ThermalReading, H as FrameRecord, Ir as Events, It as NineSliceValue, Jr as Config$9, Kn as FeaturePlugin, Kt as TransformValue, Ln as State$3, Lr as PauseReason, Mn as Config$3, Mr as RngApi, N as State$6, Nn as EmitterIdOf, Pn as GameTypes, Pr as Api$3, Pt as HudPartValue, Qt as State$9, Rn as TextStylesOf, Rr as State$4, Rt as OverlayValue, S as ScenesApi, Sr as State$5, T as Api$4, Tn as ProjectionSpec, U as FrameRing, Ur as RateChange, Ut as SpriteOptions, Vr as Config$7, Vt as ShapeValue, Wr as State$8, Wt as SpriteValue, Xn as DefineNode, Xr as Require, Xt as Config$8, Yr as Events$1, Yt as Api$6, Z as PassKind, _ as DefineScene, a as Config$1, an as ComponentType, ar as Effect, b as SceneDefinition, br as Json, c as LoadBundles, cr as Hint, dn as Narrowed, dr as Api$1, f as State$1, fn as QueryTerm, g as AnySceneProjection, gn as TagType, hn as SystemFor, hr as State$2, i as BundleSpec, ir as Descriptor, jn as BundlesOf, jr as StoreApi, l as LoadReason, mn as SystemDefinition, nr as SceneIdOf, o as DefineBundles, on as ComponentValue, or as EffectOptions, p as Tier, pn as ResourceType, pr as Config$2, qn as FeatureTree, qt as sprite, r as BundleMap, rn as ComponentHandle, sr as GuideOptions, t as Api, u as LoadResult, un as Mut, ur as Answer, vn as DescriptionNode, vr as Config$5, wn as ProjectionMotion, wr as Patch, x as SceneSpec, xr as Root, y as LayerMap, yn as Ease } from "./types-E2ykwIUO.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-Bw-qLjFZ.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-G3ZAAsbd.mjs";
4
4
  import { Log } from "@moku-labs/common/browser";
5
5
  import { PluginCtx } from "@moku-labs/core";
6
6
 
@@ -977,6 +977,18 @@ declare const Now: ResourceType<{
977
977
  }>;
978
978
  //#endregion
979
979
  //#region src/plugins/renderer/monitor/ring.d.ts
980
+ /**
981
+ * The pass kinds by their index in the pass ring's `kind` column: 0 the canvas, 1 a texture, 2 a filter. A root export,
982
+ * so a reader of the ring names a pass's kind without building a record.
983
+ *
984
+ * @example
985
+ * ```ts
986
+ * // The editor's pass strip names the newest pass of a debug build from the ring.
987
+ * const { passes } = app.renderer.monitor.frames();
988
+ * PASS_KINDS[passes.kind[passes.newest] ?? 0]; // "filter"
989
+ * ```
990
+ */
991
+ declare const PASS_KINDS: readonly PassKind[];
980
992
  /**
981
993
  * One slot of the ring as a plain record, `age` 0 the newest frame; `undefined` beyond the frames held. Allocates: for
982
994
  * tests and tools, never per frame. A root export.
@@ -1918,4 +1930,4 @@ declare const screen: readonly [import("@moku-labs/core").PluginInstance<"world"
1918
1930
  };
1919
1931
  }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"text", Config$16, State$16, TextApi, {}> & Record<never, never>, import("@moku-labs/core").PluginInstance<"ui", Config$13, State$13, UiApi, {}> & Record<never, never>];
1920
1932
  //#endregion
1921
- export { guide as $, Held as A, label as At, Traced as B, Animation as C, assetsPlugin as Ct, load as D, Text as Dt, defineBundles as E, Countdown as Et, Pressed as F, Order as G, Exiting as H, Swipeable as I, mut as J, Tree as K, Tappable as L, Pointer as M, PointerOver as N, Draggable as O, bind as Ot, Pressable as P, defineEffect as Q, Touchable as R, AnimPlayer as S, audioPlugin as St, defineScene as T, projection as Tt, Layer as U, frameAt as V, Now as W, system as X, resource as Y, tag as Z, defineStyle as _, i18nPlugin as _t, defineEmitter as a, uiPlugin as at, messageDuration as b, debugPlugin as bt, Alpha as c, scenesPlugin as ct, Displacement as d, BackResult as dt, hint as et, Glow as f, PlatformProvider as ft, resolve as g, inputPlugin as gt, music as h, lifecyclePlugin as ht, screen as i, worldPlugin as it, Hovered as j, DropTarget as k, defineTextStyles as kt, Blur as l, rendererPlugin as lt, Outline as m, modelPlugin as mt, createPlugin as n, defineFeature as nt, Emitter as o, timePlugin as ot, Noise as p, types_d_exports as pt, component as q, defineGame as r, flattenFeatures as rt, defineFilter as s, textPlugin as st, createApp as t, schedule as tt, ColorMatrix as u, platformPlugin as ut, tr as v, flowPlugin as vt, Frames as w, animPlugin as wt, defineMotion as x, clockPlugin as xt, messageArgument as y, effectsPlugin as yt, Traceable as z };
1933
+ export { defineEffect as $, Held as A, defineTextStyles as At, Traced as B, Animation as C, audioPlugin as Ct, load as D, Countdown as Dt, defineBundles as E, projection as Et, Pressed as F, Now as G, frameAt as H, Swipeable as I, component as J, Order as K, Tappable as L, Pointer as M, PointerOver as N, Draggable as O, Text as Ot, Pressable as P, tag as Q, Touchable as R, AnimPlayer as S, clockPlugin as St, defineScene as T, animPlugin as Tt, Exiting as U, PASS_KINDS as V, Layer as W, resource as X, mut as Y, system as Z, defineStyle as _, inputPlugin as _t, defineEmitter as a, worldPlugin as at, messageDuration as b, effectsPlugin as bt, Alpha as c, textPlugin as ct, Displacement as d, platformPlugin as dt, guide as et, Glow as f, BackResult as ft, resolve as g, lifecyclePlugin as gt, music as h, modelPlugin as ht, screen as i, flattenFeatures as it, Hovered as j, label as jt, DropTarget as k, bind as kt, Blur as l, scenesPlugin as lt, Outline as m, types_d_exports as mt, createPlugin as n, schedule as nt, Emitter as o, uiPlugin as ot, Noise as p, PlatformProvider as pt, Tree as q, defineGame as r, defineFeature as rt, defineFilter as s, timePlugin as st, createApp as t, hint as tt, ColorMatrix as u, rendererPlugin as ut, tr as v, i18nPlugin as vt, Frames as w, assetsPlugin as wt, defineMotion as x, debugPlugin as xt, messageArgument as y, flowPlugin as yt, Traceable as z };