@moku-labs/game 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +107 -31
  2. package/dist/assets.d.mts +58 -6
  3. package/dist/assets.mjs +1630 -234
  4. package/dist/commands-C0BljsM5.d.mts +99 -0
  5. package/dist/control.d.mts +3 -92
  6. package/dist/control.mjs +3 -757
  7. package/dist/define-CjP_4H0G.d.mts +51 -0
  8. package/dist/{registry-DlpRCibU.mjs → dev-CcwFrwok.mjs} +30 -1
  9. package/dist/index.d.mts +362 -303
  10. package/dist/index.mjs +12717 -6654
  11. package/dist/inspect.d.mts +10 -8
  12. package/dist/inspect.mjs +2 -518
  13. package/dist/jsx-dev-runtime.d.mts +1 -1
  14. package/dist/jsx-runtime.d.mts +1 -1
  15. package/dist/{rolldown-runtime-D7D4PA-g.mjs → rolldown-runtime-8H4AJuhK.mjs} +1 -0
  16. package/dist/run-tlcn1w7y.mjs +944 -0
  17. package/dist/{runtime-DiOTkDZz.d.mts → runtime-Bn5TXNxP.d.mts} +1 -1
  18. package/dist/sources-BooL2MsX.mjs +545 -0
  19. package/dist/testing.d.mts +328 -3
  20. package/dist/testing.mjs +2126 -2
  21. package/dist/types-BZ1OLf24.d.mts +5999 -0
  22. package/dist/{types-DWILGrPn.d.mts → types-C47fKNcn.d.mts} +93 -20
  23. package/dist/types-CqkrEY06.d.mts +1734 -0
  24. package/dist/types-CxZy7Pi4.d.mts +1210 -0
  25. package/dist/{define-sFoO3y6X.d.mts → types-DmhTHRVW.d.mts} +180 -51
  26. package/dist/{types-yg_ywtT-.d.mts → types-X9jXjka3.d.mts} +230 -31
  27. package/dist/{visual-BDUHSRvf.mjs → visual-NPrDkvUk.mjs} +19 -13
  28. package/package.json +22 -2
  29. package/dist/headless-CvamCUcR.mjs +0 -186
  30. package/dist/headless-KaSWcd0s.d.mts +0 -181
  31. package/dist/types-BxkNNYul.d.mts +0 -2840
  32. package/dist/types-CTPS9GBu.d.mts +0 -742
  33. package/dist/types-DD-QrG_z.d.mts +0 -588
  34. package/dist/types-DYLnSgMI.d.mts +0 -570
  35. package/dist/types-JNc_UQBo.d.mts +0 -2896
package/dist/index.d.mts CHANGED
@@ -1,16 +1,17 @@
1
- import { $ as PauseReason, A as Config$4, B as types_d_exports$8, C as SceneIdOf, D as Hint, E as GuideOptions, F as Config$3, G as SaveUnreadableError, J as RngApi, L as Json, N as types_d_exports$12, R as Root, T as Descriptor, V as Patch, X as Api$2, Z as Config$2, _ as DefineNode, a as GameTypes, at as State, c as TextStylesOf, ct as Events, d as exit, et as State$2, f as slot, h as FeatureDescription, i as FeaturePlugin, j as State$4, k as Api$3, l as types_d_exports$4, m as type, n as BundlesOf, nt as Api, ot as types_d_exports$3, p as to, q as StoreApi, r as Config$1, rt as Config, s as State$1, st as Config$5, t as Api$1, tt as types_d_exports$7, u as defineFlow, z as State$3 } from "./types-JNc_UQBo.mjs";
2
- import { A as ComponentHandle, B as SystemDefinition, C as ProjectionSpec, F as Mut, I as Narrowed, M as ComponentValue, R as QueryTerm, S as ProjectionMotion, V as TagType, a as types_d_exports$9, d as Config$7, f as State$6, g as Ease, h as DescriptionNode, i as State$5, j as ComponentType, k as AnyComponentValue, l as ViewportSize, n as Config$6, p as types_d_exports$14, t as Api$4, u as Api$5, x as NumericFields, z as ResourceType } from "./types-BxkNNYul.mjs";
3
- import { a as DefineBundles, c as LoadReason, d as Tier, i as Config$8, n as BundleMap, p as types_d_exports$1, r as BundleSpec, s as LoadBundles, t as Api$6, u as State$7 } from "./types-DWILGrPn.mjs";
4
- import { A as Transform, B as types_d_exports$5, C as NineSliceValue, D as Sprite, E as ShapeValue, H as InputApi, I as I18nApi, L as Message, M as sprite, N as Argument, O as SpriteOptions, P as Config$9, R as State$8, S as NineSlice, T as Shape, U as State$9, V as Config$10, W as types_d_exports$6, _ as Style, b as defineComponent, d as popup, f as defineTokens, g as ResolvedStyle, h as IsFlags, j as TransformValue, k as SpriteValue, l as Box, p as IntrinsicElementsFor, s as PopupComponent, u as LocalWrite, w as Parent, x as Display, y as WhenFlags, z as TypedTr } from "./types-yg_ywtT-.mjs";
5
- import { a as Config$11, c as TextApi, d as TextValue, f as types_d_exports$11, i as types_d_exports$13, l as TextStyleInput, n as State$11, o as Point, r as UiApi, s as State$10, t as Config$12, u as TextStyles } from "./types-DD-QrG_z.mjs";
6
- import { a as Config$13, c as SlotValues, d as types_d_exports, f as ExternalPlayer, g as Step, h as SfxDescriptor, i as BuildTools, l as State$12, m as PlayDescriptor, n as AnimationDefinition, o as MotionKeyframe, p as HapticDescriptor, r as AnimationSpec, s as SlotTags, t as AnimApi, u as Target } from "./types-CTPS9GBu.mjs";
7
- import { c as AnySceneProjection, d as SceneDefinition, f as SceneSpec, h as types_d_exports$10, i as MusicOptions, l as DefineScene, m as State$14, n as Config$14, o as State$13, p as ScenesApi, r as MusicDescriptor, s as types_d_exports$2, t as AudioApi, u as LayerMap } from "./types-DYLnSgMI.mjs";
1
+ import { $t as types_d_exports$3, At as Json, B as Mut, Bt as StoreApi, Ct as Config$6, D as ProjectionMotion, E as NumericFields, Et as types_d_exports$14, F as ComponentHandle, G as SystemDefinition, Gt as Events, I as ComponentType, J as BundlesOf, Jt as types_d_exports$8, K as TagType, Kt as PauseReason, L as ComponentValue, Mt as State$4, Nt as types_d_exports$9, O as ProjectionSpec, Ot as Config$4, Pt as Patch, Q as GameTypes, Qt as State$1, Rt as SaveUnreadableError, St as Api$4, U as QueryTerm, Ut as Api$2, V as Narrowed, Vt as RngApi, W as ResourceType, Wt as Config$3, X as EmitterIdOf, Xt as Config$1, Y as Config$2, Yt as Api, Z as FeaturePlugin, _ as State$7, at as slot, b as DescriptionNode, bt as Hint, c as types_d_exports$11, ct as FeatureDescription, en as Config$8, et as State$2, g as Config$7, gt as SceneIdOf, h as Api$5, it as exit, jt as Root, m as ViewportSize, n as Config$5, nn as Require, nt as types_d_exports$5, ot as to, q as Api$1, qt as State$3, rt as defineFlow, s as State$5, st as type, t as Api$3, tn as Events$1, tt as TextStylesOf, ut as DefineNode, v as types_d_exports$16, vt as Descriptor, wt as State$6, x as Ease, yt as GuideOptions } from "./types-BZ1OLf24.mjs";
2
+ import { a as DefineBundles, c as LoadReason, d as Tier, i as Config$9, n as BundleMap, p as types_d_exports$1, r as BundleSpec, s as LoadBundles, t as Api$6, u as State$8 } from "./types-C47fKNcn.mjs";
3
+ import { A as Transform, B as types_d_exports$6, C as NineSliceValue, D as Sprite, E as ShapeValue, H as InputApi, I as I18nApi, L as Message, M as sprite, N as Argument, O as SpriteOptions, P as Config$10, R as State$9, S as NineSlice, T as Shape, U as State$10, V as Config$11, W as types_d_exports$7, _ as Style, b as defineComponent, d as popup, f as defineTokens, g as ResolvedStyle, h as IsFlags, j as TransformValue, k as SpriteValue, l as Box, p as IntrinsicElementsFor, s as PopupComponent, u as LocalWrite, w as Parent, x as Display, y as WhenFlags, z as TypedTr } from "./types-X9jXjka3.mjs";
4
+ import { A as UiApi, C as spawned, D as wait, E as use, F as TextApi, I as TextStyleInput, L as TextStyles, M as Config$13, N as Point, O as Config$14, P as State$12, R as TextValue, S as spawn, T as tween, _ as parallel, a as State$11, b as set, c as HapticKind, d as HAPTIC_KINDS, f as defineAnimation, g as mark, h as haptic, i as MotionKeyframe, j as types_d_exports$15, k as State$13, l as SfxDescriptor, m as frames, n as Config$12, o as Target, p as external, r as FramesValue, s as types_d_exports, t as AnimApi, u as Step, v as play, w as stagger, x as sfx, y as sequence, z as types_d_exports$13 } from "./types-CqkrEY06.mjs";
5
+ import { A as FilterValueOf, C as EmitterValue, D as DisplacementValue, E as ColorMatrixValue, M as NoiseValue, N as OutlineValue, O as FilterComponent, P as UniformDeclaration, S as EmitterDefinition, T as BlurValue, _ as EffectsApi, b as types_d_exports$4, c as AnySceneProjection, d as SceneDefinition, f as SceneSpec, g as Config$16, h as types_d_exports$12, i as MusicOptions, j as GlowValue, k as FilterSpec, l as DefineScene, m as State$16, n as Config$15, o as State$14, p as ScenesApi, r as MusicDescriptor, s as types_d_exports$2, t as AudioApi, u as LayerMap, w as AlphaValue, x as EmitterConfig, y as State$15 } from "./types-CxZy7Pi4.mjs";
6
+ import { Log } from "@moku-labs/common/browser";
7
+ import { PluginCtx } from "@moku-labs/core";
8
8
 
9
9
  //#region src/plugins/text/components.d.ts
10
10
  /**
11
11
  * Words on the screen: a string or a message, the style it is drawn in, and the string `text`
12
- * resolved out of it. A game writes `content`, `style`, `bind` and `anchor`; `resolved` is
13
- * engine-owned and `ui` and the tests read it.
12
+ * resolved out of it. A game writes `content`, `style`, `bind`, `anchor` and `alpha`; `resolved`
13
+ * is engine-owned and `ui` and the tests read it. `alpha` (1 by default) fades the whole block and
14
+ * is patched in place, so a tween on it rebuilds nothing.
14
15
  */
15
16
  declare const Text: ComponentType<TextValue>;
16
17
  /**
@@ -37,7 +38,7 @@ type LabelOptions = {
37
38
  * ```ts
38
39
  * label({ text: "+5", style: "board.float", at: { x: 90, y: 180 } });
39
40
  * // [Text({ content: "+5", style: "board.float", bind: undefined,
40
- * // anchor: { x: 0.5, y: 0.5 }, resolved: "" }),
41
+ * // anchor: { x: 0.5, y: 0.5 }, alpha: 1, resolved: "" }),
41
42
  * // Transform({ x: 90, y: 180, rotation: 0, scale: 1 })]
42
43
  * ```
43
44
  */
@@ -112,7 +113,7 @@ type ProjectionFor<Player, Session> = <const LayerName extends string, const Lif
112
113
  * app.anim.play(coinsFly, { from: purse, to: counter }).marks(); // []: the first frame is next
113
114
  * ```
114
115
  */
115
- declare const animPlugin: import("@moku-labs/core").PluginInstance<"anim", Config$13, State$12, AnimApi, {
116
+ declare const animPlugin: import("@moku-labs/core").PluginInstance<"anim", Config$12, State$11, AnimApi, {
116
117
  "anim:mark": {
117
118
  animation: string;
118
119
  mark: string;
@@ -138,7 +139,7 @@ declare const animPlugin: import("@moku-labs/core").PluginInstance<"anim", Confi
138
139
  * app.assets.usage().textureMb; // 0.188, the boot tier
139
140
  * ```
140
141
  */
141
- declare const assetsPlugin: import("@moku-labs/core").PluginInstance<"assets", Config$8, State$7, Api$6, {
142
+ declare const assetsPlugin: import("@moku-labs/core").PluginInstance<"assets", Config$9, State$8, Api$6, {
142
143
  "assets:bundle-loaded": {
143
144
  bundle: string;
144
145
  tier: Tier;
@@ -173,7 +174,7 @@ declare const assetsPlugin: import("@moku-labs/core").PluginInstance<"assets", C
173
174
  * });
174
175
  * ```
175
176
  */
176
- declare const audioPlugin: import("@moku-labs/core").PluginInstance<"audio", Config$14, State$13, AudioApi, {}> & Record<never, never>;
177
+ declare const audioPlugin: import("@moku-labs/core").PluginInstance<"audio", Config$15, State$14, AudioApi, {}> & Record<never, never>;
177
178
  //#endregion
178
179
  //#region src/plugins/clock/index.d.ts
179
180
  /**
@@ -188,7 +189,24 @@ declare const audioPlugin: import("@moku-labs/core").PluginInstance<"audio", Con
188
189
  * });
189
190
  * ```
190
191
  */
191
- declare const clockPlugin: import("@moku-labs/core").PluginInstance<"clock", Config, State, Api, {}> & Record<never, never>;
192
+ declare const clockPlugin: import("@moku-labs/core").PluginInstance<"clock", Config$1, State$1, Api, {}> & Record<never, never>;
193
+ //#endregion
194
+ //#region src/plugins/effects/index.d.ts
195
+ /**
196
+ * Effects plugin: `app.effects.stats()`; the `Emitter` component and every filter component do
197
+ * the rest as data on entities.
198
+ *
199
+ * @example
200
+ * ```ts
201
+ * // A game composes it next to the screen set; its features bring the emitters and filters.
202
+ * const app = createApp({
203
+ * plugins: [...screen, effectsPlugin, boardFeature],
204
+ * pluginConfigs: { renderer: { mount: "#game" }, effects: { maxPasses: 16 } }
205
+ * });
206
+ * app.effects.stats(); // { particles: 0, emitters: 0, filters: 0, renderPasses: 0 }: nothing runs before start
207
+ * ```
208
+ */
209
+ declare const effectsPlugin: import("@moku-labs/core").PluginInstance<"effects", Config$16, State$15, EffectsApi, {}> & Record<never, never>;
192
210
  //#endregion
193
211
  //#region src/plugins/flow/index.d.ts
194
212
  /**
@@ -205,7 +223,7 @@ declare const clockPlugin: import("@moku-labs/core").PluginInstance<"clock", Con
205
223
  * });
206
224
  * ```
207
225
  */
208
- declare const flowPlugin: import("@moku-labs/core").PluginInstance<"flow", Config$1, State$1, Api$1, {
226
+ declare const flowPlugin: import("@moku-labs/core").PluginInstance<"flow", Config$2, State$2, Api$1, {
209
227
  "flow:edge": {
210
228
  flow: string;
211
229
  node: string;
@@ -246,7 +264,7 @@ declare const flowPlugin: import("@moku-labs/core").PluginInstance<"flow", Confi
246
264
  * await app.i18n.setLocale("en"); // text re-resolves every message on i18n:locale-changed
247
265
  * ```
248
266
  */
249
- declare const i18nPlugin: import("@moku-labs/core").PluginInstance<"i18n", Config$9, State$8, I18nApi, {
267
+ declare const i18nPlugin: import("@moku-labs/core").PluginInstance<"i18n", Config$10, State$9, I18nApi, {
250
268
  "i18n:locale-changed": {
251
269
  locale: string;
252
270
  };
@@ -271,7 +289,7 @@ declare const i18nPlugin: import("@moku-labs/core").PluginInstance<"i18n", Confi
271
289
  * });
272
290
  * ```
273
291
  */
274
- declare const inputPlugin: import("@moku-labs/core").PluginInstance<"input", Config$10, State$9, InputApi, {}> & Record<never, never>;
292
+ declare const inputPlugin: import("@moku-labs/core").PluginInstance<"input", Config$11, State$10, InputApi, {}> & Record<never, never>;
275
293
  //#endregion
276
294
  //#region src/plugins/lifecycle/index.d.ts
277
295
  /**
@@ -286,7 +304,7 @@ declare const inputPlugin: import("@moku-labs/core").PluginInstance<"input", Con
286
304
  * });
287
305
  * ```
288
306
  */
289
- declare const lifecyclePlugin: import("@moku-labs/core").PluginInstance<"lifecycle", Config$2, State$2, Api$2, {
307
+ declare const lifecyclePlugin: import("@moku-labs/core").PluginInstance<"lifecycle", Config$3, State$3, Api$2, {
290
308
  "lifecycle:changed": {
291
309
  reason: PauseReason;
292
310
  action: "push" | "pop";
@@ -311,7 +329,7 @@ declare const lifecyclePlugin: import("@moku-labs/core").PluginInstance<"lifecyc
311
329
  * });
312
330
  * ```
313
331
  */
314
- declare const modelPlugin: import("@moku-labs/core").PluginInstance<"model", Config$3, State$3, {
332
+ declare const modelPlugin: import("@moku-labs/core").PluginInstance<"model", Config$4, State$4, {
315
333
  store: StoreApi;
316
334
  rng: RngApi;
317
335
  }, {
@@ -320,6 +338,141 @@ declare const modelPlugin: import("@moku-labs/core").PluginInstance<"model", Con
320
338
  cause: "edge" | "rollback" | "restore" | "load";
321
339
  };
322
340
  }> & Record<never, never>;
341
+ declare namespace types_d_exports$10 {
342
+ export { BackResult, Config, HapticKind, KernelSlice, LifecycleChanged, PlatformApi, PlatformProvider, ProviderMethod, State };
343
+ }
344
+ /**
345
+ * The seam a game fills, usually from `@moku-labs/system` in its own bridge. The engine never
346
+ * imports a native package: the provider is built in the application layer. Every `on*` returns
347
+ * its remover, which the plugin calls on stop.
348
+ *
349
+ * @example
350
+ * ```ts
351
+ * // A headless test drives the plugin with a fake of six functions.
352
+ * const ticks: string[] = [];
353
+ * const provider: PlatformProvider = {
354
+ * onPause: () => () => undefined,
355
+ * onResume: () => () => undefined,
356
+ * onBack: () => () => undefined,
357
+ * haptic: kind => ticks.push(kind),
358
+ * keepAwake: () => undefined,
359
+ * exit: () => undefined
360
+ * };
361
+ * createApp({ plugins: [...screen, platformPlugin], pluginConfigs: { platform: { provider } } });
362
+ * ```
363
+ */
364
+ type PlatformProvider = {
365
+ /** Calls `fn` when the app goes to the background. Returns the remover. */onPause(fn: () => void): () => void; /** Calls `fn` when the app comes back to the foreground. Returns the remover. */
366
+ onResume(fn: () => void): () => void;
367
+ /**
368
+ * Calls `fn` on every press of the system Back button. `fn` returns whether the engine took the
369
+ * press; `false` lets the provider do its default, which on Android leaves the app.
370
+ */
371
+ onBack(fn: () => boolean): () => void; /** Plays one haptic tick. */
372
+ haptic(kind: HapticKind): void; /** Keeps the screen on while `on` is true. */
373
+ keepAwake(on: boolean): void; /** Leaves the app. */
374
+ exit(): void;
375
+ };
376
+ /**
377
+ * What took one Back press: the Escape button of the top popup, the intent `back` of the resting
378
+ * node, the provider leaving the app, or nothing at all because the app has no provider.
379
+ *
380
+ * @example
381
+ * ```ts
382
+ * // Home rests and does not list "back": the provider leaves the app.
383
+ * const result: BackResult = app.platform.back(); // "exit"
384
+ * ```
385
+ */
386
+ type BackResult = "popup" | "intent" | "exit" | "none";
387
+ /**
388
+ * What a game sets on `pluginConfigs.platform`: the provider seam its application layer fills
389
+ * from the native shell, and whether the screen stays on while the game runs.
390
+ *
391
+ * @example
392
+ * ```ts
393
+ * // app.ts of a game in the native shell; `provider` is the game's own bridge to the shell.
394
+ * const config: Platform.Config = { provider, keepAwake: true };
395
+ * config.keepAwake; // true
396
+ * ```
397
+ */
398
+ type Config = {
399
+ /** The provider. `undefined`, the default: the plugin is inert, as on the web without a bridge and in headless tests. */provider: PlatformProvider | undefined; /** Keep the screen on while the game runs. Default `false`. */
400
+ keepAwake: boolean;
401
+ };
402
+ /**
403
+ * platform plugin state.
404
+ */
405
+ type State = {
406
+ /** Whether `provider.keepAwake(true)` is in force. */awake: boolean; /** Removers of the provider subscriptions and of the haptic handler, called on stop. */
407
+ offs: Array<() => void>; /** Haptic kinds already warned about in a dev build, so each warns once. */
408
+ warned: Set<string>;
409
+ };
410
+ /**
411
+ * platform plugin API, `app.platform`. The rest of the plugin runs on its own: the provider's
412
+ * pause, resume and Back press, the `haptic` effect and keep-awake need no call.
413
+ *
414
+ * @example
415
+ * ```ts
416
+ * // An e2e test plays the Android Back button on Home, which rests without "back".
417
+ * app.platform.back(); // "exit": the provider leaves the app
418
+ * ```
419
+ */
420
+ type PlatformApi = {
421
+ /**
422
+ * Runs the Back chain once, exactly as a press of the system Back button does. The first step
423
+ * that takes the press wins: Escape taps the `escape` button of the top ui root (`"popup"`),
424
+ * then the intent `back` is answered to the resting node (`"intent"`), and otherwise the
425
+ * provider leaves the app (`"exit"`). While the graph moves between nodes the gate is closed and
426
+ * holds the answer for one frame, so the press answers `"intent"` and never leaves the app.
427
+ * Escape also ends the editing of a ui text field, so a
428
+ * press while a field is edited ends the edit and answers `"popup"`. Without a provider nothing
429
+ * is pressed and the answer is `"none"`.
430
+ *
431
+ * @returns What took the press.
432
+ * @example
433
+ * ```ts
434
+ * // An e2e test plays the Android Back button over the settings popup, then on Home.
435
+ * app.platform.back(); // "popup": the settings popup was open and closed like Escape
436
+ * // ...the runner settles on Home, which does not list "back"...
437
+ * app.platform.back(); // "exit": the provider leaves the app
438
+ * ```
439
+ */
440
+ back(): BackResult;
441
+ };
442
+ /**
443
+ * What the kernel context offers the files of the plugin.
444
+ *
445
+ * `platform` owns no event, so `emit` is the kernel's and never called here.
446
+ */
447
+ type KernelSlice = PluginCtx<Config, State> & {
448
+ readonly global: object;
449
+ readonly log: Log.LogApi;
450
+ readonly require: Require;
451
+ };
452
+ /**
453
+ * Payload of the `lifecycle:changed` hook: the pause that releases keep-awake.
454
+ */
455
+ type LifecycleChanged = Events["lifecycle:changed"];
456
+ /**
457
+ * A method of the provider, named in the log when it throws.
458
+ */
459
+ type ProviderMethod = keyof PlatformProvider;
460
+ //#endregion
461
+ //#region src/plugins/platform/index.d.ts
462
+ /**
463
+ * Platform plugin: `app.platform`, the handler of the effect kind `haptic`, and the provider's
464
+ * pause, resume and Back press. Inert without a provider.
465
+ *
466
+ * @example
467
+ * ```ts
468
+ * // A game in the native shell composes it last and hands it the bridge it built.
469
+ * createApp({
470
+ * plugins: [...screen, effectsPlugin, audioPlugin, platformPlugin, ...features],
471
+ * pluginConfigs: { platform: { provider: fromSystem(system), keepAwake: true } }
472
+ * });
473
+ * ```
474
+ */
475
+ declare const platformPlugin: import("@moku-labs/core").PluginInstance<"platform", Config, State, PlatformApi, {}> & Record<never, never>;
323
476
  //#endregion
324
477
  //#region src/plugins/renderer/index.d.ts
325
478
  /**
@@ -338,7 +491,7 @@ declare const modelPlugin: import("@moku-labs/core").PluginInstance<"model", Con
338
491
  * app.renderer.host.kind(); // "webgpu" in Chrome, "webgl" on an older device
339
492
  * ```
340
493
  */
341
- declare const rendererPlugin: import("@moku-labs/core").PluginInstance<"renderer", Config$6, State$5, Api$4, {
494
+ declare const rendererPlugin: import("@moku-labs/core").PluginInstance<"renderer", Config$5, State$5, Api$3, {
342
495
  "renderer:device-lost": {
343
496
  kind: "webgpu" | "webgl";
344
497
  reason: string;
@@ -361,7 +514,7 @@ declare const rendererPlugin: import("@moku-labs/core").PluginInstance<"renderer
361
514
  * export const awaitIntent = defineNode({ scene: "board", rest: true, outcomes: { merge: type() } });
362
515
  * ```
363
516
  */
364
- declare const scenesPlugin: import("@moku-labs/core").PluginInstance<"scenes", Record<string, never>, State$14, ScenesApi, {
517
+ declare const scenesPlugin: import("@moku-labs/core").PluginInstance<"scenes", Record<string, never>, State$16, ScenesApi, {
365
518
  "scenes:changed": {
366
519
  from: string | undefined;
367
520
  to: string;
@@ -386,7 +539,7 @@ declare const scenesPlugin: import("@moku-labs/core").PluginInstance<"scenes", R
386
539
  * app.text.styles(); // ["body", "digits", "hud.digits"]
387
540
  * ```
388
541
  */
389
- declare const textPlugin: import("@moku-labs/core").PluginInstance<"text", Config$11, State$10, TextApi, {}> & Record<never, never>;
542
+ declare const textPlugin: import("@moku-labs/core").PluginInstance<"text", Config$13, State$12, TextApi, {}> & Record<never, never>;
390
543
  //#endregion
391
544
  //#region src/plugins/time/index.d.ts
392
545
  /**
@@ -401,11 +554,12 @@ declare const textPlugin: import("@moku-labs/core").PluginInstance<"text", Confi
401
554
  * });
402
555
  * ```
403
556
  */
404
- declare const timePlugin: import("@moku-labs/core").PluginInstance<"time", Config$4, State$4, Api$3, {}> & Record<never, never>;
557
+ declare const timePlugin: import("@moku-labs/core").PluginInstance<"time", Config$6, State$6, Api$4, {}> & Record<never, never>;
405
558
  //#endregion
406
559
  //#region src/plugins/ui/index.d.ts
407
560
  /**
408
- * Ui plugin: `app.ui.tree()`, `app.ui.find(...)`, `app.ui.lint()`, the components `Box` and
561
+ * Ui plugin: `app.ui.tree()`, `app.ui.find(...)`, `app.ui.lint()`, `app.ui.fill(...)`, the
562
+ * text field `<input local>`, the components `Box` and
409
563
  * `LocalWrite`, and the helpers `defineComponent`, `defineStyle`, `defineTokens` and `popup`.
410
564
  *
411
565
  * @example
@@ -417,7 +571,7 @@ declare const timePlugin: import("@moku-labs/core").PluginInstance<"time", Confi
417
571
  * app.input.tap(app.ui.find("claim") ?? 0);
418
572
  * ```
419
573
  */
420
- declare const uiPlugin: import("@moku-labs/core").PluginInstance<"ui", Config$12, State$11, UiApi, {}> & Record<never, never>;
574
+ declare const uiPlugin: import("@moku-labs/core").PluginInstance<"ui", Config$14, State$13, UiApi, {}> & Record<never, never>;
421
575
  //#endregion
422
576
  //#region src/plugins/world/index.d.ts
423
577
  /**
@@ -433,7 +587,7 @@ declare const uiPlugin: import("@moku-labs/core").PluginInstance<"ui", Config$12
433
587
  * app.world.projection.entityOf("board.items", "i7"); // 1048576
434
588
  * ```
435
589
  */
436
- declare const worldPlugin: import("@moku-labs/core").PluginInstance<"world", Config$7, State$6, Api$5, {
590
+ declare const worldPlugin: import("@moku-labs/core").PluginInstance<"world", Config$7, State$7, Api$5, {
437
591
  "world:reconciled": {
438
592
  mode: "play" | "direct";
439
593
  projections: number;
@@ -789,6 +943,22 @@ declare function defineScene<Layers extends LayerMap, const Projections extends
789
943
  declare const Animation: ComponentType<{
790
944
  playing: number;
791
945
  }>;
946
+ /**
947
+ * A frame loop on an entity, for as long as the entity carries it: every `1000 / fps` ms
948
+ * `Sprite.texture` becomes the next key of `keys`, after the last key it wraps to the first. No
949
+ * timeline around it, not counted by `Animation` or `app.anim.active()`. A running `frames` step on
950
+ * the same entity owns the sprite until it ends; the loop goes on from where its clock stands.
951
+ * Paused and fast world modes and reduced motion stop the clock on the frame it shows.
952
+ *
953
+ * @example
954
+ * ```ts
955
+ * // A coin spins on the board for its whole life: a projection view returns both components.
956
+ * const coinSpin = ["items.coin-0", "items.coin-1", "items.coin-2", "items.coin-3"] as const;
957
+ * const coin = [Sprite({ texture: "items.coin-0" }), Frames({ keys: coinSpin, fps: 12 })];
958
+ * Frames({ keys: coinSpin, fps: 12 }).value.loop; // true: the default
959
+ * ```
960
+ */
961
+ declare const Frames: ComponentType<FramesValue>;
792
962
  //#endregion
793
963
  //#region src/plugins/anim/motion.d.ts
794
964
  /**
@@ -888,359 +1058,234 @@ type MotionSpec = {
888
1058
  */
889
1059
  declare function defineMotion(spec: MotionSpec): ProjectionMotion<unknown>;
890
1060
  //#endregion
891
- //#region src/plugins/anim/timeline/steps.d.ts
892
- /**
893
- * Runs the steps one after another. The remainder past a step's end reaches the next step in the
894
- * same frame, so the tree takes exactly the sum of its durations.
895
- *
896
- * @param steps - The steps, in order.
897
- * @returns The sequence step.
898
- * @example
899
- * ```ts
900
- * sequence(wait(100), mark("done"));
901
- * // { kind: "sequence", steps: [{ kind: "wait", ms: 100 }, { kind: "mark", name: "done" }] }
902
- * ```
903
- */
904
- declare function sequence(...steps: readonly Step[]): Step;
905
- /**
906
- * Runs every step at once and ends with the longest one.
907
- *
908
- * @param steps - The steps.
909
- * @returns The parallel step.
910
- * @example
911
- * ```ts
912
- * parallel(wait(100), wait(300)); // ends after 300 ms
913
- * ```
914
- */
915
- declare function parallel(...steps: readonly Step[]): Step;
916
- /**
917
- * Builds one step per item and starts each one `staggerMs` later than the one before. The build
918
- * function runs here, so no function survives in the data.
919
- *
920
- * @param items - What to build a step for.
921
- * @param staggerMs - Delay between two neighbouring items, in game milliseconds.
922
- * @param build - Builds the step of one item.
923
- * @returns The parallel of delayed sequences.
924
- * @example
925
- * ```ts
926
- * stagger(["a", "b"], 60, item => mark(item));
927
- * // parallel(sequence(wait(0), mark("a")), sequence(wait(60), mark("b")))
928
- * ```
929
- */
930
- declare function stagger<Item>(items: readonly Item[], staggerMs: number, build: (item: Item, index: number) => Step): Step;
931
- /**
932
- * Holds still for a while.
933
- *
934
- * @param durationMs - How long to wait, in game milliseconds.
935
- * @returns The wait step.
936
- * @example
937
- * ```ts
938
- * wait(120); // { kind: "wait", ms: 120 }
939
- * ```
940
- */
941
- declare function wait(durationMs: number): Step;
942
- /**
943
- * Names a point in the choreography. Reaching it emits `anim:mark`, calls the `onMark` listeners
944
- * and appends the name to `marks()`. It is the only way out of a timeline.
945
- *
946
- * @param name - Name of the mark.
947
- * @returns The mark step.
948
- * @example
949
- * ```ts
950
- * mark("landed"); // { kind: "mark", name: "landed" }
951
- * ```
952
- */
953
- declare function mark(name: string): Step;
1061
+ //#region src/plugins/i18n/tr.d.ts
954
1062
  /**
955
- * Moves the numeric fields of one component of one target to an exact target value. The component
956
- * is any handle `world.ecs` takes, so the kit's `Sprite` and `NineSlice` of `defineGame` pass as
957
- * they are.
958
- *
959
- * By default the fields are local: they are written into the target's own `Transform`. With
960
- * `space: "root"` the `x`, `y`, `rotation` and `scale` of a `Transform` are a root pose, the space
961
- * `at()` answers in, and are turned into the space of the target's `Parent` when the track starts.
962
- * That aims a hosted view, such as a board item inside the board slot, at another element. A
963
- * field the step does not name stays where it is, so under a turned parent name `x` and `y`
964
- * together. A target without a parent, and a component other than `Transform`, move as in the
965
- * local space.
1063
+ * Builds a message. The result is frozen and the parameters are copied, so the caller's object
1064
+ * stays its own and nothing downstream can rewrite a label in place.
966
1065
  *
967
- * @param target - The projection key or the entity to animate.
968
- * @param component - The component to animate.
969
- * @param to - The numeric target fields.
970
- * @param options - Duration, easing, delay, the additive flag and the space of the fields.
971
- * @param options.ms - Duration in game milliseconds.
972
- * @param options.ease - Easing curve; `"out"` when omitted.
973
- * @param options.delayMs - How long the track waits before it reads its start values.
974
- * @param options.additive - `true` adds an offset instead of owning the fields.
975
- * @param options.space - `"root"` reads the `Transform` fields as a root pose; `"local"` when
976
- * omitted.
977
- * @returns The tween step.
1066
+ * @param key - The message key, one of the keys `compileStrings` generated.
1067
+ * @param params - The parameters the message declares. An element parameter is kept as it is.
1068
+ * @returns The message, frozen.
978
1069
  * @example
979
1070
  * ```ts
980
- * // An order is delivered: the board item flies out of the scaled board slot onto the order card.
981
- * const deliverFly = defineAnimation("orders.deliverFly", {
982
- * slots: { item: type<Target>(), card: type<Target>() },
983
- * build: ({ item, card }, { at }) =>
984
- * tween(item, Transform, { x: at(card).x, y: at(card).y, scale: at(card).scale }, {
985
- * ms: 400, ease: "inCubic", space: "root"
986
- * })
987
- * });
988
- * app.anim.play(deliverFly, {
989
- * item: { projection: "board.items", key: "i1" },
990
- * card: { projection: "hud", key: "card0" }
991
- * });
992
- * // 400 ms later the item covers the card at the card's size; its Transform stays slot-local
1071
+ * tr("hud.orders", { n: 3 }); // { key: "hud.orders", params: { n: 3 } }
1072
+ * tr("orders.complete"); // { key: "orders.complete" }
993
1073
  * ```
994
1074
  */
995
- declare function tween<Value extends object>(target: Target, component: ComponentHandle<Value>, to: Partial<NumericFields<Value>>, options: {
996
- ms: number;
997
- ease?: Ease;
998
- delayMs?: number;
999
- additive?: boolean;
1000
- space?: "local" | "root";
1001
- }): Step;
1075
+ declare function tr(key: string, params?: Record<string, Argument>): Message;
1076
+ //#endregion
1077
+ //#region src/plugins/ui/styles/define.d.ts
1002
1078
  /**
1003
- * Writes a component patch at once. Any field may be written, not only the numeric ones. The
1004
- * component is any handle `world.ecs` takes, the kit's `Sprite` and `NineSlice` included.
1079
+ * Declares one style. The work is the type: a field outside the vocabulary, or a value outside
1080
+ * its union, is an error where the style is written, not where it is used.
1005
1081
  *
1006
- * @param target - The projection key or the entity to write.
1007
- * @param component - The component to write.
1008
- * @param patch - The fields to overwrite.
1009
- * @returns The set step.
1082
+ * @param style - The style, with its `is` and `when` variants.
1083
+ * @returns The same object, frozen.
1010
1084
  * @example
1011
1085
  * ```ts
1012
- * set({ projection: "hud", key: "coins" }, Sprite, { texture: "hud.coin-gold" });
1013
- * // { kind: "set", patch: { texture: "hud.coin-gold" }, ... }
1086
+ * defineStyle({ direction: "row", gap: 12 }).gap; // 12
1014
1087
  * ```
1015
1088
  */
1016
- declare function set<Value extends object>(target: Target, component: ComponentHandle<Value>, patch: Partial<Value>): Step;
1089
+ declare function defineStyle<const Given extends Style>(style: Given): Readonly<Given>;
1090
+ //#endregion
1091
+ //#region src/plugins/ui/styles/resolve.d.ts
1017
1092
  /**
1018
- * Plays a frame sprite: one texture key of the list per frame of `fps`, written into `Sprite`.
1093
+ * The flags one element is resolved against: the viewport flags of the frame plus its own state.
1019
1094
  *
1020
- * @param target - The projection key or the entity to animate.
1021
- * @param options - The keys, the frame rate and whether the list repeats.
1022
- * @param options.keys - The texture keys, in play order.
1023
- * @param options.fps - Frames per second of the list.
1024
- * @param options.loop - `true` repeats the list until the step is finished.
1025
- * @returns The frames step.
1026
1095
  * @example
1027
1096
  * ```ts
1028
- * frames({ projection: "board", key: "c3" }, { keys: ["fx.pop-1", "fx.pop-2"], fps: 12 });
1029
- * // { kind: "frames", keys: ["fx.pop-1", "fx.pop-2"], fps: 12, loop: false, ... }
1097
+ * const flags: StyleFlags = {
1098
+ * portrait: true, landscape: false, tall: false, wide: false,
1099
+ * pressed: false, hover: false, focus: false, disabled: false, active: true, selected: false,
1100
+ * covered: false
1101
+ * };
1030
1102
  * ```
1031
1103
  */
1032
- declare function frames(target: Target, options: {
1033
- keys: readonly string[];
1034
- fps: number;
1035
- loop?: boolean;
1036
- }): Step;
1104
+ type StyleFlags = WhenFlags & IsFlags;
1037
1105
  /**
1038
- * Makes a temporary entity when the step is reached: a flying coin, a toast sign, a sparkle. The
1039
- * entity is owned by `anim`, drawn in `layer` at `order`, and despawned when the timeline ends, is
1040
- * finished or is cancelled. Later steps of the same timeline aim at it with `spawned(id)`.
1106
+ * Resolves one style against the flags of the frame and the viewport.
1041
1107
  *
1042
- * @param id - Name of the entity inside this timeline; one timeline spawns each id once.
1043
- * @param components - The component values the entity starts with, as `world.ecs.spawn` takes.
1044
- * @param options - Where the entity is drawn.
1045
- * @param options.layer - The layer; `"ui"` when omitted.
1046
- * @param options.order - The draw order inside the layer; `0` when omitted.
1047
- * @returns The spawn step.
1108
+ * @param style - The style a game wrote, or nothing.
1109
+ * @param flags - The four viewport flags and the seven state flags. While `disabled` is true the
1110
+ * `hover` and `pressed` variants are skipped.
1111
+ * @param viewport - What `renderer.viewport.size()` answered, for the safe-area tokens.
1112
+ * @returns The frozen style the layout and the visual are written from.
1048
1113
  * @example
1049
1114
  * ```ts
1050
- * spawn("coin1", [Sprite({ texture: "ui.icon-coin" }), Transform({ x: 540, y: 900 })], { order: 50 });
1051
- * // { kind: "spawn", id: "coin1", components: [...], layer: "ui", order: 50 }
1115
+ * resolve(
1116
+ * { gap: 8, is: { pressed: { gap: 4 } } },
1117
+ * { portrait: true, landscape: false, tall: false, wide: false,
1118
+ * pressed: true, hover: false, focus: false, disabled: false, active: false, selected: false,
1119
+ * covered: false },
1120
+ * { width: 1080, height: 1920, scale: 1, orientation: "portrait",
1121
+ * safeArea: { top: 0, right: 0, bottom: 0, left: 0 } }
1122
+ * ).gap; // 4
1052
1123
  * ```
1053
1124
  */
1054
- declare function spawn(id: string, components: readonly AnyComponentValue[], options?: {
1055
- layer?: string;
1056
- order?: number;
1057
- }): Step;
1125
+ declare function resolve(style: Style | undefined, flags: StyleFlags, viewport: ViewportSize): ResolvedStyle;
1126
+ //#endregion
1127
+ //#region src/plugins/audio/descriptors.d.ts
1058
1128
  /**
1059
- * Aims a later step at the entity a `spawn` step of the same timeline made. Before that step is
1060
- * reached nothing answers the id, so a step aimed at it ends silently.
1129
+ * Creates the awaited effect that switches the music track. The same key as the one playing does
1130
+ * nothing, and `null` fades the current track out. An absent `fadeMs` leaves the key out of the
1131
+ * payload, so the descriptor stays plain JSON and the plugin's `musicFadeMs` decides at play time.
1061
1132
  *
1062
- * @param id - The id the `spawn` step was given.
1063
- * @returns The target.
1133
+ * @param key - Asset key of an `.mp3`, or `null` to stop the music.
1134
+ * @param options - `fadeMs` overrides the configured cross-fade for this switch.
1135
+ * @returns The descriptor a node awaits, frozen.
1064
1136
  * @example
1065
1137
  * ```ts
1066
- * tween(spawned("coin1"), Transform, { x: 40, y: 120 }, { ms: 600, ease: "inCubic" });
1067
- * // { kind: "tween", target: { spawned: "coin1" }, ... }
1138
+ * // A node of a game: the menu goes quiet before the ending cinematic starts.
1139
+ * await fx(music(null, { fadeMs: 1500 }));
1140
+ * // music("board.theme") is { kind: "music", payload: { key: "board.theme" }, cosmetic: true }
1068
1141
  * ```
1069
1142
  */
1070
- declare function spawned(id: string): {
1071
- spawned: string;
1072
- };
1143
+ declare function music(key: string | null, options?: MusicOptions): Descriptor;
1144
+ //#endregion
1145
+ //#region src/plugins/effects/filters/builtins.d.ts
1073
1146
  /**
1074
- * A sound. `anim` owns the descriptor because it sits below `audio`; `audio` owns the handler,
1075
- * and a game without `audio` plays nothing and hears no error.
1147
+ * A soft halo of `color` around the opaque pixels of a view and its subtree, `distance` pixels
1148
+ * wide, that follows the shape: rounded corners stay rounded. Its alpha is
1149
+ * `strength × alpha ×` the share of the disc of radius `distance` around the pixel the view
1150
+ * covers, so `strength: 2` is full next to a straight edge and fades to nothing at `distance`.
1151
+ * The view is padded by its live `distance`. One render pass per apply.
1076
1152
  *
1077
- * @param key - Asset key of the sound.
1078
- * @param options - The bus to play it on.
1079
- * @param options.bus - `"sfx"` when omitted.
1080
- * @returns The descriptor, usable as a timeline step and as `fx(...)` in a node.
1081
1153
  * @example
1082
1154
  * ```ts
1083
- * sfx("board.merge"); // { kind: "sfx", payload: { key: "board.merge", bus: "sfx" }, cosmetic: true }
1155
+ * // A merged item glows, and a motion hook tweens the glow away.
1156
+ * Glow({ strength: 4 }).value; // { strength: 4, distance: 10, color: 0xffffff, alpha: 1, enabled: true, order: 0 }
1157
+ * view.tween(Glow, { strength: 0 }, { ms: 200 });
1084
1158
  * ```
1085
1159
  */
1086
- declare function sfx(key: string, options?: {
1087
- bus?: string;
1088
- }): SfxDescriptor;
1160
+ declare const Glow: FilterComponent<GlowValue>;
1089
1161
  /**
1090
- * A haptic tick. `platform` owns the handler; a device without one stays still.
1162
+ * A ring of `thickness` pixels in `color` around the opaque pixels of a view and its subtree; the
1163
+ * view is padded by its live `thickness`. One render pass per apply.
1091
1164
  *
1092
- * @param kind - Which tick to play, for example `"light"`.
1093
- * @returns The descriptor, usable as a timeline step and as `fx(...)` in a node.
1094
1165
  * @example
1095
1166
  * ```ts
1096
- * haptic("light"); // { kind: "haptic", payload: { kind: "light" }, cosmetic: true }
1167
+ * // The selected card is outlined in honey.
1168
+ * Outline({ thickness: 4, color: 0xffc233 }).value; // { thickness: 4, color: 0xffc233, alpha: 1, enabled: true, order: 0 }
1097
1169
  * ```
1098
1170
  */
1099
- declare function haptic(kind: string): HapticDescriptor;
1171
+ declare const Outline: FilterComponent<OutlineValue>;
1100
1172
  /**
1101
- * Reserved for Spine and the other external players. It throws until one arrives, so nobody
1102
- * builds a choreography on a door that is not open yet.
1173
+ * Pixi's blur over a view and its subtree. `quality: 0` means `config.blur.quality`;
1174
+ * `resolution: 0` means `config.blur.phoneResolution` on a phone, otherwise 1. `repeatEdgePixels`
1175
+ * keeps the padding at 0. Costs `2 × quality` render passes per apply.
1103
1176
  *
1104
- * @param _player - The player that would run the clip.
1105
- * @param _clip - Name of the clip.
1106
- * @throws {Error} Always.
1107
1177
  * @example
1108
1178
  * ```ts
1109
- * external(spine, "idle"); // throws: External players arrive with Spine.
1179
+ * // The board behind a popup: the filter sits on the ui slot that hosts the board.
1180
+ * Blur({ strength: 6 }).value; // { strength: 6, quality: 0, resolution: 0, repeatEdgePixels: true, enabled: true, order: 0 }
1110
1181
  * ```
1111
1182
  */
1112
- declare function external(_player: ExternalPlayer, _clip: string): never;
1183
+ declare const Blur: ComponentType<BlurValue>;
1113
1184
  /**
1114
- * Nests one animation inside another. The nested tree is built here, so its marks are reported
1115
- * under the nested id and no function survives in the data. Pass the outer `tools` when the
1116
- * nested `build` reads `at`.
1185
+ * Pixi's colour matrix: brightness, saturation, contrast, hue in degrees and grayscale, composed
1186
+ * in that order from the identity on every change. Every default is the identity.
1117
1187
  *
1118
- * @param animation - The animation to nest.
1119
- * @param slots - One target, or a list of targets, per slot of the nested animation.
1120
- * @param tools - The build tools of the outer animation; without them `at` is the identity pose.
1121
- * @returns The use step.
1122
1188
  * @example
1123
1189
  * ```ts
1124
- * use(popCard, { card: { projection: "hud", key: "order" } });
1125
- * // { kind: "use", id: "hud.popCard", step: { kind: "sequence", ... } }
1190
+ * // A locked card goes gray.
1191
+ * ColorMatrix({ grayscale: 1 }).value.grayscale; // 1
1126
1192
  * ```
1127
1193
  */
1128
- declare function use<Tags extends SlotTags>(animation: AnimationDefinition<Tags>, slots: SlotValues<Tags>, tools?: BuildTools): Step;
1194
+ declare const ColorMatrix: ComponentType<ColorMatrixValue>;
1129
1195
  /**
1130
- * The effect descriptor a node awaits to play a choreography. The payload names the animation,
1131
- * so the handler resolves the definition from the registry the features filled.
1196
+ * Pixi's noise. The seed is always given, never Pixi's random default, so two runs draw the same
1197
+ * grain.
1132
1198
  *
1133
- * @param animation - The animation to play.
1134
- * @param slots - One target, or a list of targets, per slot.
1135
- * @returns The descriptor, cosmetic, so a failing build never breaks the node.
1136
1199
  * @example
1137
1200
  * ```ts
1138
- * play(coinsFly, { from: { projection: "hud", key: "purse" } });
1139
- * // { kind: "play", payload: { animation: "hud.coinsFly", slots: { from: { ... } } }, cosmetic: true }
1201
+ * Noise({ amount: 0.2, seed: 7 }).value; // { amount: 0.2, seed: 7, enabled: true, order: 0 }
1140
1202
  * ```
1141
1203
  */
1142
- declare function play<Tags extends SlotTags>(animation: AnimationDefinition<Tags>, slots: SlotValues<Tags>): PlayDescriptor;
1204
+ declare const Noise: ComponentType<NoiseValue>;
1143
1205
  /**
1144
- * Declares one animation: an id, the slots it takes and the pure function that builds its step
1145
- * tree. `build` runs once per play, so the same animation may play twice at once.
1206
+ * Pixi's displacement over the texture of the asset key `map`. Nothing is drawn while the map is
1207
+ * not loaded; a missing key warns once.
1146
1208
  *
1147
- * @param id - Animation id, unique across the features of a game.
1148
- * @param spec - The slots and the build function.
1149
- * @returns The animation as frozen plain data.
1150
1209
  * @example
1151
1210
  * ```ts
1152
- * const coinsFly = defineAnimation("hud.coinsFly", {
1153
- * slots: { from: type<Target>() },
1154
- * build: ({ from }) => tween(from, Transform, { scale: 0.4 }, { ms: 600 })
1155
- * });
1156
- * coinsFly.id; // "hud.coinsFly"
1211
+ * // Heat haze over the furnace.
1212
+ * Displacement({ map: "fx.ripple", scaleX: 8, scaleY: 8 }).value.map; // "fx.ripple"
1157
1213
  * ```
1158
1214
  */
1159
- declare function defineAnimation<Tags extends SlotTags>(id: string, spec: AnimationSpec<Tags>): AnimationDefinition<Tags>;
1160
- //#endregion
1161
- //#region src/plugins/i18n/tr.d.ts
1215
+ declare const Displacement: ComponentType<DisplacementValue>;
1162
1216
  /**
1163
- * Builds a message. The result is frozen and the parameters are copied, so the caller's object
1164
- * stays its own and nothing downstream can rewrite a label in place.
1217
+ * Pixi's alpha over a view and its subtree as one layer, so overlapping children do not show
1218
+ * through each other.
1165
1219
  *
1166
- * @param key - The message key, one of the keys `compileStrings` generated.
1167
- * @param params - The parameters the message declares. An element parameter is kept as it is.
1168
- * @returns The message, frozen.
1169
1220
  * @example
1170
1221
  * ```ts
1171
- * tr("hud.orders", { n: 3 }); // { key: "hud.orders", params: { n: 3 } }
1172
- * tr("orders.complete"); // { key: "orders.complete" }
1222
+ * Alpha({ alpha: 0.5 }).value; // { alpha: 0.5, enabled: true, order: 0 }
1173
1223
  * ```
1174
1224
  */
1175
- declare function tr(key: string, params?: Record<string, Argument>): Message;
1225
+ declare const Alpha: ComponentType<AlphaValue>;
1176
1226
  //#endregion
1177
- //#region src/plugins/ui/styles/define.d.ts
1227
+ //#region src/plugins/effects/filters/define.d.ts
1178
1228
  /**
1179
- * Declares one style. The work is the type: a field outside the vocabulary, or a value outside
1180
- * its union, is an error where the style is written, not where it is used.
1229
+ * Turns a WGSL fragment body and its GLSL ES 3.0 twin into a filter component type; Pixi draws
1230
+ * the one of the running backend. To the WGSL the engine prepends the vertex stage, the input
1231
+ * bindings and a `FilterUniforms` struct in declaration order, bound as `fu`. To the GLSL it
1232
+ * prepends `#version 300 es`, `vTextureCoord`, `finalColor`, `uTexture`, the global filter
1233
+ * uniforms as `vec4` and one `uniform` per declared uniform under its bare name. Every number
1234
+ * uniform is a number field, so the existing `tween` drives it; a colour is one hex field sent as
1235
+ * a `vec3`; a tuple is an array field and not tweenable. Every filter component also carries
1236
+ * `enabled: true` and `order: 0`. Register it through the `filters` key of a feature.
1181
1237
  *
1182
- * @param style - The style, with its `is` and `when` variants.
1183
- * @returns The same object, frozen.
1238
+ * @param id - The filter id, also the component name; unique, and not one of the built-ins.
1239
+ * @param spec - Both bodies, the uniforms, the passes one apply costs and the padding.
1240
+ * @returns The component type, with the frozen `filter` definition attached.
1241
+ * @throws {Error} When the id is empty, the WGSL has no `mainFragment`, the GLSL no `void main(`,
1242
+ * a uniform is reserved, badly named or of no known form, or the passes or the padding break
1243
+ * their rules.
1184
1244
  * @example
1185
1245
  * ```ts
1186
- * defineStyle({ direction: "row", gap: 12 }).gap; // 12
1246
+ * // features/board/effects.ts: a gold tint a motion hook tweens on a merge, on WebGPU and WebGL.
1247
+ * const Tint = defineFilter("fx.tint", { wgsl: tintWgsl, glsl: tintGlsl, uniforms: { amount: 0, color: { color: 0xffd700 } } });
1248
+ * Tint({ amount: 1 }).value; // { amount: 1, color: 0xffd700, enabled: true, order: 0 }
1249
+ * Tint.filter.glsl.includes("uniform vec3 color;"); // true
1187
1250
  * ```
1188
1251
  */
1189
- declare function defineStyle<const Given extends Style>(style: Given): Readonly<Given>;
1252
+ declare function defineFilter<Uniforms extends Record<string, UniformDeclaration> = Record<never, never>>(id: string, spec: FilterSpec<Uniforms>): FilterComponent<FilterValueOf<Uniforms>>;
1190
1253
  //#endregion
1191
- //#region src/plugins/ui/styles/resolve.d.ts
1254
+ //#region src/plugins/effects/particles/component.d.ts
1192
1255
  /**
1193
- * The flags one element is resolved against: the viewport flags of the frame plus its own state.
1256
+ * A particle effect on an entity. A `burst` effect emits when the component appears or its
1257
+ * `effect` changes; a `rate` effect emits while `active` is true and the entity lives. An effect in
1258
+ * `"world"` space outlives the entity, one in `"local"` space moves and dies with it. `""` draws
1259
+ * nothing. Plain JSON: it shows in `snapshot()`.
1194
1260
  *
1195
1261
  * @example
1196
1262
  * ```ts
1197
- * const flags: StyleFlags = {
1198
- * portrait: true, landscape: false, tall: false, wide: false,
1199
- * pressed: false, hover: false, focus: false, disabled: false, active: true, selected: false,
1200
- * covered: false
1201
- * };
1263
+ * // A merged item bursts stars from its enter hook; the generator steams for its whole life.
1264
+ * view.set(Emitter, { effect: "fx.starsBurst" });
1265
+ * Emitter({ effect: "fx.steam" }).value; // { effect: "fx.steam", active: true }
1202
1266
  * ```
1203
1267
  */
1204
- type StyleFlags = WhenFlags & IsFlags;
1205
- /**
1206
- * Resolves one style against the flags of the frame and the viewport.
1207
- *
1208
- * @param style - The style a game wrote, or nothing.
1209
- * @param flags - The four viewport flags and the seven state flags. While `disabled` is true the
1210
- * `hover` and `pressed` variants are skipped.
1211
- * @param viewport - What `renderer.viewport.size()` answered, for the safe-area tokens.
1212
- * @returns The frozen style the layout and the visual are written from.
1213
- * @example
1214
- * ```ts
1215
- * resolve(
1216
- * { gap: 8, is: { pressed: { gap: 4 } } },
1217
- * { portrait: true, landscape: false, tall: false, wide: false,
1218
- * pressed: true, hover: false, focus: false, disabled: false, active: false, selected: false,
1219
- * covered: false },
1220
- * { width: 1080, height: 1920, scale: 1, orientation: "portrait",
1221
- * safeArea: { top: 0, right: 0, bottom: 0, left: 0 } }
1222
- * ).gap; // 4
1223
- * ```
1224
- */
1225
- declare function resolve(style: Style | undefined, flags: StyleFlags, viewport: ViewportSize): ResolvedStyle;
1268
+ declare const Emitter: ComponentType<EmitterValue>;
1226
1269
  //#endregion
1227
- //#region src/plugins/audio/descriptors.d.ts
1270
+ //#region src/plugins/effects/particles/define.d.ts
1228
1271
  /**
1229
- * Creates the awaited effect that switches the music track. The same key as the one playing does
1230
- * nothing, and `null` fades the current track out. An absent `fadeMs` leaves the key out of the
1231
- * payload, so the descriptor stays plain JSON and the plugin's `musicFadeMs` decides at play time.
1272
+ * Describes a particle effect. Every field is optional except `textures` and exactly one of
1273
+ * `burst` and `rate`; the definition is frozen, registered through the `emitters` key of a feature
1274
+ * and started by an `Emitter` component naming its id.
1232
1275
  *
1233
- * @param key - Asset key of an `.mp3`, or `null` to stop the music.
1234
- * @param options - `fadeMs` overrides the configured cross-fade for this switch.
1235
- * @returns The descriptor a node awaits, frozen.
1276
+ * @param id - The effect id, unique across the features of the game.
1277
+ * @param config - The effect as data.
1278
+ * @returns The frozen definition `{ id, config }`, the config with every default filled in.
1279
+ * @throws {Error} When the id is empty or a field breaks its rule.
1236
1280
  * @example
1237
1281
  * ```ts
1238
- * // A node of a game: the menu goes quiet before the ending cinematic starts.
1239
- * await fx(music(null, { fadeMs: 1500 }));
1240
- * // music("board.theme") is { kind: "music", payload: { key: "board.theme" }, cosmetic: true }
1282
+ * // features/board/effects.ts: the steam over the generator.
1283
+ * const steam = defineEmitter("fx.steam", { textures: ["fx.puff"], rate: 12, space: "local" });
1284
+ * steam.config.rate; // 12
1285
+ * steam.config.lifeMs; // [600, 1000], the default
1241
1286
  * ```
1242
1287
  */
1243
- declare function music(key: string | null, options?: MusicOptions): Descriptor;
1288
+ declare function defineEmitter(id: string, config: EmitterConfig): EmitterDefinition;
1244
1289
  //#endregion
1245
1290
  //#region src/index.d.ts
1246
1291
  /**
@@ -1255,7 +1300,7 @@ declare function music(key: string | null, options?: MusicOptions): Descriptor;
1255
1300
  * });
1256
1301
  * ```
1257
1302
  */
1258
- declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs/core").AnyPluginInstance[] = readonly []>(options?: import("@moku-labs/core").CreateAppOptions<Config$5, Events, (import("@moku-labs/core").PluginInstance<"time", Config$4, State$4, Api$3, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"lifecycle", Config$2, State$2, Api$2, {
1303
+ declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs/core").AnyPluginInstance[] = readonly []>(options?: import("@moku-labs/core").CreateAppOptions<Config$8, Events$1, (import("@moku-labs/core").PluginInstance<"time", Config$6, State$6, Api$4, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"lifecycle", Config$3, State$3, Api$2, {
1259
1304
  "lifecycle:changed": {
1260
1305
  reason: PauseReason;
1261
1306
  action: "push" | "pop";
@@ -1263,7 +1308,7 @@ declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs
1263
1308
  paused: boolean;
1264
1309
  resumed: boolean;
1265
1310
  };
1266
- }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"model", Config$3, State$3, {
1311
+ }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"model", Config$4, State$4, {
1267
1312
  store: StoreApi;
1268
1313
  rng: RngApi;
1269
1314
  }, {
@@ -1271,7 +1316,7 @@ declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs
1271
1316
  roots: readonly Root[];
1272
1317
  cause: "edge" | "rollback" | "restore" | "load";
1273
1318
  };
1274
- }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"clock", Config, State, Api, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"flow", Config$1, State$1, Api$1, {
1319
+ }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"clock", Config$1, State$1, Api, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"flow", Config$2, State$2, Api$1, {
1275
1320
  "flow:edge": {
1276
1321
  flow: string;
1277
1322
  node: string;
@@ -1295,7 +1340,7 @@ declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs
1295
1340
  rolledBackTo: string;
1296
1341
  retry: boolean;
1297
1342
  };
1298
- }> & Record<never, never>) | ExtraPlugins[number], [...ExtraPlugins], import("@moku-labs/core").CoreApisFromTuple<[import("@moku-labs/core").CorePluginInstance<"log", import("@moku-labs/common/browser").LogConfig, import("@moku-labs/common/browser").LogState, import("@moku-labs/common/browser").LogApi>, import("@moku-labs/core").CorePluginInstance<"env", import("@moku-labs/common/browser").EnvConfig, import("@moku-labs/common/browser").EnvState, import("@moku-labs/common/browser").EnvApi>]>> | undefined) => import("@moku-labs/core").App<Config$5, Events, (import("@moku-labs/core").PluginInstance<"time", Config$4, State$4, Api$3, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"lifecycle", Config$2, State$2, Api$2, {
1343
+ }> & Record<never, never>) | ExtraPlugins[number], [...ExtraPlugins], import("@moku-labs/core").CoreApisFromTuple<[import("@moku-labs/core").CorePluginInstance<"log", import("@moku-labs/common/browser").LogConfig, import("@moku-labs/common/browser").LogState, import("@moku-labs/common/browser").LogApi>, import("@moku-labs/core").CorePluginInstance<"env", import("@moku-labs/common/browser").EnvConfig, import("@moku-labs/common/browser").EnvState, import("@moku-labs/common/browser").EnvApi>]>> | undefined) => import("@moku-labs/core").App<Config$8, Events$1, (import("@moku-labs/core").PluginInstance<"time", Config$6, State$6, Api$4, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"lifecycle", Config$3, State$3, Api$2, {
1299
1344
  "lifecycle:changed": {
1300
1345
  reason: PauseReason;
1301
1346
  action: "push" | "pop";
@@ -1303,7 +1348,7 @@ declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs
1303
1348
  paused: boolean;
1304
1349
  resumed: boolean;
1305
1350
  };
1306
- }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"model", Config$3, State$3, {
1351
+ }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"model", Config$4, State$4, {
1307
1352
  store: StoreApi;
1308
1353
  rng: RngApi;
1309
1354
  }, {
@@ -1311,7 +1356,7 @@ declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs
1311
1356
  roots: readonly Root[];
1312
1357
  cause: "edge" | "rollback" | "restore" | "load";
1313
1358
  };
1314
- }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"clock", Config, State, Api, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"flow", Config$1, State$1, Api$1, {
1359
+ }> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"clock", Config$1, State$1, Api, {}> & Record<never, never>) | (import("@moku-labs/core").PluginInstance<"flow", Config$2, State$2, Api$1, {
1315
1360
  "flow:edge": {
1316
1361
  flow: string;
1317
1362
  node: string;
@@ -1348,14 +1393,15 @@ declare const createApp: <const ExtraPlugins extends readonly import("@moku-labs
1348
1393
  * });
1349
1394
  * ```
1350
1395
  */
1351
- declare const createPlugin: import("@moku-labs/core").BoundCreatePluginFunction<Config$5, Events, import("@moku-labs/core").CoreApisFromTuple<[import("@moku-labs/core").CorePluginInstance<"log", import("@moku-labs/common/browser").LogConfig, import("@moku-labs/common/browser").LogState, import("@moku-labs/common/browser").LogApi>, import("@moku-labs/core").CorePluginInstance<"env", import("@moku-labs/common/browser").EnvConfig, import("@moku-labs/common/browser").EnvState, import("@moku-labs/common/browser").EnvApi>]>>;
1396
+ declare const createPlugin: import("@moku-labs/core").BoundCreatePluginFunction<Config$8, Events$1, import("@moku-labs/core").CoreApisFromTuple<[import("@moku-labs/core").CorePluginInstance<"log", import("@moku-labs/common/browser").LogConfig, import("@moku-labs/common/browser").LogState, import("@moku-labs/common/browser").LogApi>, import("@moku-labs/core").CorePluginInstance<"env", import("@moku-labs/common/browser").EnvConfig, import("@moku-labs/common/browser").EnvState, import("@moku-labs/common/browser").EnvApi>]>>;
1352
1397
  /**
1353
1398
  * Binds the authoring helpers to the types of one game: "createApp for a game". Each plugin binds
1354
1399
  * its own helpers (`flowFor`, `projectionFor`, `componentsFor`, `bundlesFor`, `scenesFor`); this
1355
1400
  * only spreads them, so the kit's type is inferred and never written by hand. At run time these
1356
1401
  * are the same functions and component objects the plugins export.
1357
1402
  *
1358
- * @returns The helpers typed with the game's `player`, `session`, `assets`, `bundles` and `strings`.
1403
+ * @returns The helpers typed with the game's `player`, `session`, `assets`, `bundles`, `strings`
1404
+ * and `emitters`.
1359
1405
  * @example
1360
1406
  * ```ts
1361
1407
  * // kit.ts of a game: bound once, imported by every node, flow and view file.
@@ -1364,6 +1410,16 @@ declare const createPlugin: import("@moku-labs/core").BoundCreatePluginFunction<
1364
1410
  * ```
1365
1411
  */
1366
1412
  declare function defineGame<Types extends GameTypes>(): {
1413
+ defineEmitter: (id: EmitterIdOf<Types>, config: Omit<EmitterConfig, "textures"> & {
1414
+ readonly textures: readonly Types["assets"][];
1415
+ }) => EmitterDefinition;
1416
+ Emitter: Narrowed<EmitterValue, {
1417
+ effect?: EmitterIdOf<Types>;
1418
+ active?: boolean;
1419
+ }>;
1420
+ Displacement: Narrowed<DisplacementValue, Partial<Omit<DisplacementValue, "map">> & {
1421
+ map?: Types["assets"];
1422
+ }>;
1367
1423
  music: MusicDescriptor<Types["assets"]>;
1368
1424
  defineComponent: typeof defineComponent;
1369
1425
  defineStyle: <const Given extends Style<Types["assets"]>>(style: Given) => Readonly<Given>;
@@ -1392,6 +1448,9 @@ declare function defineGame<Types extends GameTypes>(): {
1392
1448
  bus?: string;
1393
1449
  }) => SfxDescriptor;
1394
1450
  play: typeof play;
1451
+ Frames: Narrowed<FramesValue, Partial<Omit<FramesValue, "keys">> & {
1452
+ keys?: readonly Types["assets"][];
1453
+ }>;
1395
1454
  defineScene: DefineScene<Types["assets"], BundlesOf<Types>>;
1396
1455
  defineBundles: DefineBundles<BundlesOf<Types>>;
1397
1456
  load: LoadBundles<BundlesOf<Types>>;
@@ -1415,14 +1474,14 @@ declare function defineGame<Types extends GameTypes>(): {
1415
1474
  };
1416
1475
  /**
1417
1476
  * The screen plugins, in dependency order. A game with a screen spreads them into `plugins`;
1418
- * a headless test leaves them out. V2: `world`, `renderer`, `input`, `assets`, `scenes`. V3 appends `anim`, `i18n`, `text`, `ui`; `audio` stays opt-in: `[...screen, audioPlugin]`.
1477
+ * a headless test leaves them out. V2: `world`, `renderer`, `input`, `assets`, `scenes`. V3 appends `anim`, `i18n`, `text`, `ui`; `audio`, `effects` and `platform` stay opt-in: `[...screen, effectsPlugin, audioPlugin, platformPlugin]`.
1419
1478
  *
1420
1479
  * @example
1421
1480
  * ```ts
1422
1481
  * createApp({ plugins: [...screen, boardFeature], pluginConfigs: { renderer: { mount: "#game" } } });
1423
1482
  * ```
1424
1483
  */
1425
- declare const screen: readonly [import("@moku-labs/core").PluginInstance<"world", Config$7, State$6, Api$5, {
1484
+ declare const screen: readonly [import("@moku-labs/core").PluginInstance<"world", Config$7, State$7, Api$5, {
1426
1485
  "world:reconciled": {
1427
1486
  mode: "play" | "direct";
1428
1487
  projections: number;
@@ -1434,12 +1493,12 @@ declare const screen: readonly [import("@moku-labs/core").PluginInstance<"world"
1434
1493
  hintsRouted: number;
1435
1494
  hintsDropped: number;
1436
1495
  };
1437
- }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"renderer", Config$6, State$5, Api$4, {
1496
+ }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"renderer", Config$5, State$5, Api$3, {
1438
1497
  "renderer:device-lost": {
1439
1498
  kind: "webgpu" | "webgl";
1440
1499
  reason: string;
1441
1500
  };
1442
- }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"input", Config$10, State$9, InputApi, {}> & Record<never, never>, import("@moku-labs/core").PluginInstance<"assets", Config$8, State$7, Api$6, {
1501
+ }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"input", Config$11, State$10, InputApi, {}> & Record<never, never>, import("@moku-labs/core").PluginInstance<"assets", Config$9, State$8, Api$6, {
1443
1502
  "assets:bundle-loaded": {
1444
1503
  bundle: string;
1445
1504
  tier: Tier;
@@ -1458,13 +1517,13 @@ declare const screen: readonly [import("@moku-labs/core").PluginInstance<"world"
1458
1517
  reason: "budget" | "request";
1459
1518
  keys: readonly string[];
1460
1519
  };
1461
- }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"scenes", Record<string, never>, State$14, ScenesApi, {
1520
+ }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"scenes", Record<string, never>, State$16, ScenesApi, {
1462
1521
  "scenes:changed": {
1463
1522
  from: string | undefined;
1464
1523
  to: string;
1465
1524
  music: string | undefined;
1466
1525
  };
1467
- }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"anim", Config$13, State$12, AnimApi, {
1526
+ }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"anim", Config$12, State$11, AnimApi, {
1468
1527
  "anim:mark": {
1469
1528
  animation: string;
1470
1529
  mark: string;
@@ -1472,10 +1531,10 @@ declare const screen: readonly [import("@moku-labs/core").PluginInstance<"world"
1472
1531
  "anim:finished": {
1473
1532
  animation: string;
1474
1533
  };
1475
- }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"i18n", Config$9, State$8, I18nApi, {
1534
+ }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"i18n", Config$10, State$9, I18nApi, {
1476
1535
  "i18n:locale-changed": {
1477
1536
  locale: string;
1478
1537
  };
1479
- }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"text", Config$11, State$10, TextApi, {}> & Record<never, never>, import("@moku-labs/core").PluginInstance<"ui", Config$12, State$11, UiApi, {}> & Record<never, never>];
1538
+ }> & Record<never, never>, import("@moku-labs/core").PluginInstance<"text", Config$13, State$12, TextApi, {}> & Record<never, never>, import("@moku-labs/core").PluginInstance<"ui", Config$14, State$13, UiApi, {}> & Record<never, never>];
1480
1539
  //#endregion
1481
- export { types_d_exports as Anim, Animation, types_d_exports$1 as Assets, types_d_exports$2 as Audio, Box, types_d_exports$3 as Clock, type DescriptionNode, Display, Draggable, DropTarget, Exiting, types_d_exports$4 as Flow, Held, Hovered, types_d_exports$5 as I18n, types_d_exports$6 as Input, Layer, types_d_exports$7 as Lifecycle, LocalWrite, types_d_exports$8 as Model, NineSlice, Order, Parent, Pointer, PointerOver, Pressable, Pressed, types_d_exports$9 as Renderer, SaveUnreadableError, types_d_exports$10 as Scenes, Shape, Sprite, Swipeable, Tappable, Text, types_d_exports$11 as TextTypes, types_d_exports$12 as Time, Touchable, Transform, Tree, types_d_exports$13 as Ui, types_d_exports$14 as World, animPlugin, assetsPlugin, audioPlugin, clockPlugin, component, createApp, createPlugin, defineAnimation, defineBundles, defineComponent, defineFeature, defineGame, defineMotion, defineScene, defineStyle, defineTextStyles, defineTokens, exit, external, flowPlugin, frames, guide, haptic, hint, i18nPlugin, inputPlugin, label, lifecyclePlugin, load, mark, modelPlugin, music, mut, parallel, 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 };
1540
+ export { Alpha, types_d_exports as Anim, Animation, types_d_exports$1 as Assets, types_d_exports$2 as Audio, type BackResult, Blur, Box, types_d_exports$3 as Clock, ColorMatrix, type DescriptionNode, Displacement, Display, Draggable, DropTarget, types_d_exports$4 as Effects, Emitter, Exiting, types_d_exports$5 as Flow, Frames, Glow, HAPTIC_KINDS, type HapticKind, Held, Hovered, types_d_exports$6 as I18n, types_d_exports$7 as Input, Layer, types_d_exports$8 as Lifecycle, LocalWrite, types_d_exports$9 as Model, NineSlice, Noise, Order, Outline, Parent, types_d_exports$10 as Platform, type PlatformProvider, Pointer, PointerOver, Pressable, Pressed, types_d_exports$11 as Renderer, SaveUnreadableError, types_d_exports$12 as Scenes, Shape, Sprite, Swipeable, Tappable, Text, types_d_exports$13 as TextTypes, types_d_exports$14 as Time, Touchable, Transform, Tree, types_d_exports$15 as Ui, types_d_exports$16 as World, animPlugin, assetsPlugin, audioPlugin, clockPlugin, component, createApp, createPlugin, defineAnimation, defineBundles, defineComponent, defineEmitter, defineFeature, defineFilter, defineGame, defineMotion, defineScene, defineStyle, defineTextStyles, defineTokens, effectsPlugin, exit, external, flowPlugin, frames, guide, haptic, hint, i18nPlugin, inputPlugin, label, lifecyclePlugin, load, mark, 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 };