@diffenderfer-games/hub 2.0.0-next.4 → 2.0.0-next.6

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 (173) hide show
  1. package/CHANGELOG.md +54 -11
  2. package/README.md +3 -6
  3. package/dist/auto.d.ts +5 -5
  4. package/dist/auto.js +2 -2
  5. package/dist/avatar-pixi.d.ts +147 -0
  6. package/dist/avatar-pixi.d.ts.map +1 -0
  7. package/dist/avatar-pixi.js +280 -0
  8. package/dist/avatar-pixi.js.map +1 -0
  9. package/dist/avatar-svg.d.ts +4 -0
  10. package/dist/avatar-svg.js +5 -0
  11. package/dist/avatar-three.d.ts +69 -0
  12. package/dist/avatar-three.d.ts.map +1 -0
  13. package/dist/avatar-three.js +49 -0
  14. package/dist/avatar-three.js.map +1 -0
  15. package/dist/avatar.d.ts +7 -0
  16. package/dist/avatar.js +487 -0
  17. package/dist/avatar.js.map +1 -0
  18. package/dist/daily.d.ts +2 -2
  19. package/dist/doctor/cli.mjs +1 -1
  20. package/dist/index.d.ts +5 -5
  21. package/dist/index.js +2 -2
  22. package/dist/input.d.ts +2 -2
  23. package/dist/shared/animator.d.ts +104 -0
  24. package/dist/shared/animator.d.ts.map +1 -0
  25. package/dist/shared/art.js +1804 -0
  26. package/dist/shared/art.js.map +1 -0
  27. package/dist/shared/atlas.d.ts +134 -0
  28. package/dist/shared/atlas.d.ts.map +1 -0
  29. package/dist/shared/avatar.d.ts +117 -0
  30. package/dist/shared/avatar.d.ts.map +1 -0
  31. package/dist/shared/bridge.js +13 -5
  32. package/dist/shared/bridge.js.map +1 -1
  33. package/dist/shared/client-version.gen.js +1 -1
  34. package/dist/shared/daily.d.ts +129 -18
  35. package/dist/shared/daily.d.ts.map +1 -1
  36. package/dist/shared/daily.js +120 -26
  37. package/dist/shared/daily.js.map +1 -1
  38. package/dist/shared/defineProperty.js +39 -0
  39. package/dist/shared/describe.d.ts +32 -0
  40. package/dist/shared/describe.d.ts.map +1 -0
  41. package/dist/shared/describe.js +101 -0
  42. package/dist/shared/describe.js.map +1 -0
  43. package/dist/shared/globals.js +1 -39
  44. package/dist/shared/globals.js.map +1 -1
  45. package/dist/shared/index.d.ts +537 -17
  46. package/dist/shared/index.d.ts.map +1 -1
  47. package/dist/shared/input.d.ts +31 -13
  48. package/dist/shared/input.d.ts.map +1 -1
  49. package/dist/shared/input.js +40 -2
  50. package/dist/shared/input.js.map +1 -1
  51. package/dist/shared/json-guards.js +48 -0
  52. package/dist/shared/json-guards.js.map +1 -0
  53. package/dist/shared/live-canvas.js +62 -0
  54. package/dist/shared/live-canvas.js.map +1 -0
  55. package/dist/shared/mp.js +1 -1
  56. package/dist/shared/overlays.js +800 -0
  57. package/dist/shared/overlays.js.map +1 -0
  58. package/dist/shared/page-stack.js +2 -1
  59. package/dist/shared/page-stack.js.map +1 -1
  60. package/dist/shared/pose-key.js +249 -0
  61. package/dist/shared/pose-key.js.map +1 -0
  62. package/dist/shared/race.js +1 -1
  63. package/dist/shared/rooms.js +1 -1
  64. package/dist/shared/scene.d.ts +90 -0
  65. package/dist/shared/scene.d.ts.map +1 -0
  66. package/dist/shared/social.d.ts +55 -4
  67. package/dist/shared/social.d.ts.map +1 -1
  68. package/dist/shared/src.js +2217 -199
  69. package/dist/shared/src.js.map +1 -1
  70. package/dist/shared/svg-markup.js +1860 -0
  71. package/dist/shared/svg-markup.js.map +1 -0
  72. package/dist/shared/svg.js +27 -0
  73. package/dist/shared/svg.js.map +1 -0
  74. package/dist/shared/types.d.ts +166 -0
  75. package/dist/shared/types.d.ts.map +1 -0
  76. package/dist/social.d.ts +2 -2
  77. package/dist/social.js +2 -2
  78. package/dist/turns.d.ts +39 -0
  79. package/dist/turns.d.ts.map +1 -0
  80. package/dist/turns.js +117 -0
  81. package/dist/turns.js.map +1 -0
  82. package/package.json +33 -3
  83. package/src/avatar/adapters/pixi-avatar.ts +73 -0
  84. package/src/avatar/adapters/pixi-crowd.ts +302 -0
  85. package/src/avatar/adapters/pixi-types.ts +84 -0
  86. package/src/avatar/adapters/three.ts +126 -0
  87. package/src/avatar/animator/animator.ts +285 -0
  88. package/src/avatar/animator/reactions.ts +44 -0
  89. package/src/avatar/animator/schedule.ts +73 -0
  90. package/src/avatar/art/beard.ts +49 -0
  91. package/src/avatar/art/glasses.ts +9 -0
  92. package/src/avatar/art/hair.ts +254 -0
  93. package/src/avatar/art/headwear.ts +75 -0
  94. package/src/avatar/art/index.ts +21 -0
  95. package/src/avatar/art/shape.ts +68 -0
  96. package/src/avatar/art-store.ts +36 -0
  97. package/src/avatar/atlas.ts +236 -0
  98. package/src/avatar/catalog-view.ts +14 -0
  99. package/src/avatar/colour.ts +109 -0
  100. package/src/avatar/describe.ts +76 -0
  101. package/src/avatar/face.ts +187 -0
  102. package/src/avatar/geom.ts +168 -0
  103. package/src/avatar/layout.ts +47 -0
  104. package/src/avatar/look-like.ts +52 -0
  105. package/src/avatar/outputs/bitmap.ts +75 -0
  106. package/src/avatar/outputs/canvas-paint.ts +177 -0
  107. package/src/avatar/outputs/canvas.ts +62 -0
  108. package/src/avatar/outputs/custom-element.ts +140 -0
  109. package/src/avatar/outputs/element.ts +58 -0
  110. package/src/avatar/outputs/live-canvas.ts +57 -0
  111. package/src/avatar/outputs/overlay-svg.ts +22 -0
  112. package/src/avatar/outputs/pose-key.ts +30 -0
  113. package/src/avatar/outputs/svg-markup.ts +113 -0
  114. package/src/avatar/outputs/svg.ts +41 -0
  115. package/src/avatar/overlays.ts +128 -0
  116. package/src/avatar/render/body.ts +116 -0
  117. package/src/avatar/render/colours.ts +81 -0
  118. package/src/avatar/render/compose.ts +258 -0
  119. package/src/avatar/render/context.ts +117 -0
  120. package/src/avatar/render/eyes.ts +78 -0
  121. package/src/avatar/render/eyewear.ts +56 -0
  122. package/src/avatar/render/frame.ts +60 -0
  123. package/src/avatar/render/head.ts +81 -0
  124. package/src/avatar/render/mouth.ts +86 -0
  125. package/src/avatar/render/props.ts +91 -0
  126. package/src/avatar/render/types.ts +84 -0
  127. package/src/avatar/scene.ts +119 -0
  128. package/src/avatar-pixi.ts +20 -0
  129. package/src/avatar-svg.ts +21 -0
  130. package/src/avatar-three.ts +18 -0
  131. package/src/avatar.ts +62 -0
  132. package/src/core/avatar/avatar-cache.ts +95 -0
  133. package/src/core/avatar/avatar-ref.ts +34 -0
  134. package/src/core/avatar/avatar-types.ts +43 -0
  135. package/src/core/avatar/hub-avatar.ts +308 -0
  136. package/src/core/connection.ts +9 -0
  137. package/src/core/errors.ts +15 -2
  138. package/src/core/hub-progress.ts +269 -202
  139. package/src/core/hub.ts +174 -6
  140. package/src/core/offline/cloud-saves.ts +62 -0
  141. package/src/core/offline/hub-kinds/avatar-kind.ts +42 -0
  142. package/src/core/offline/hub-kinds/index.ts +14 -3
  143. package/src/core/offline/hub-kinds/progress-kinds.ts +21 -4
  144. package/src/core/offline/hub-kinds/saved-kind.ts +93 -0
  145. package/src/core/offline/local-store.ts +46 -1
  146. package/src/core/page-account.ts +121 -0
  147. package/src/core/rest/routes.gen.ts +31 -1
  148. package/src/core/resume/hub-resume.ts +39 -5
  149. package/src/core/resume/resume-types.ts +2 -2
  150. package/src/core/saved/daily-saves.ts +196 -0
  151. package/src/core/saved/daily-seed.ts +16 -0
  152. package/src/core/saved/hub-saved.ts +221 -0
  153. package/src/core/saved/local-saved.ts +122 -0
  154. package/src/core/saved/saved-list.ts +129 -0
  155. package/src/core/saved/saved-open.ts +104 -0
  156. package/src/core/saved/saved-order.ts +49 -0
  157. package/src/core/saved/saved-types.ts +24 -0
  158. package/src/core/turns/hub-turns.ts +140 -0
  159. package/src/core/turns/turn-game.ts +388 -0
  160. package/src/core/version/client-version.gen.ts +2 -2
  161. package/src/daily/daily-system.ts +112 -13
  162. package/src/daily/page-daily.ts +2 -2
  163. package/src/daily/types.ts +46 -9
  164. package/src/doctor/hub-version-fetch.ts +43 -43
  165. package/src/index.ts +11 -1
  166. package/src/input/input-system.ts +10 -1
  167. package/src/input/navigator.ts +11 -0
  168. package/src/input.ts +1 -0
  169. package/src/overlay/overlay.ts +25 -1
  170. package/src/realtime/runtime-api.ts +14 -3
  171. package/src/social.ts +1 -0
  172. package/src/turns-kit/check-rules.ts +182 -0
  173. package/src/turns.ts +13 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-pixi.js","names":[],"sources":["../src/avatar/adapters/pixi-types.ts","../src/avatar/adapters/pixi-avatar.ts","../src/avatar/adapters/pixi-crowd.ts"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { b as isExpression, c as Pose, h as Expression, i as Frame, l as RenderOptions, m as EXPRESSION_NAMES, o as LookLike, r as Facing } from "./shared/types.js";
2
+ import { a as renderSvg, i as ready, n as describe } from "./shared/describe.js";
3
+ import { AvatarLook, decodeLook, defaultLook, encodeLook } from "@diffenderfer-games/hub-contract/avatar";
4
+ export { type AvatarLook, EXPRESSION_NAMES, type Expression, type Facing, type Frame, type LookLike, type Pose, type RenderOptions, decodeLook, defaultLook, describe, encodeLook, isExpression, ready, renderSvg };
@@ -0,0 +1,5 @@
1
+ import { f as EXPRESSION_NAMES, h as isExpression, v as ready } from "./shared/svg-markup.js";
2
+ import { n as renderSvg } from "./shared/svg.js";
3
+ import { n as describe } from "./shared/describe.js";
4
+ import { decodeLook, defaultLook, encodeLook } from "@diffenderfer-games/hub-contract/avatar";
5
+ export { EXPRESSION_NAMES, decodeLook, defaultLook, describe, encodeLook, isExpression, ready, renderSvg };
@@ -0,0 +1,69 @@
1
+ import { c as Pose, l as RenderOptions, o as LookLike } from "./shared/types.js";
2
+ import { t as Animator } from "./shared/animator.js";
3
+ //#region src/avatar/adapters/three.d.ts
4
+ /**
5
+ * The slice of three.js {@link avatarCanvasTexture} uses: `import * as THREE
6
+ * from 'three'`, or an object of the named imports. Generic over the game's
7
+ * own `CanvasTexture`, inferred from what is passed, so the texture that comes
8
+ * back is three's own type.
9
+ */
10
+ interface ThreeTextureNs<TTexture extends ThreeTexture = ThreeTexture> {
11
+ readonly CanvasTexture: new (canvas: HTMLCanvasElement | OffscreenCanvas) => TTexture;
12
+ readonly SRGBColorSpace?: string;
13
+ }
14
+ /**
15
+ * The slice of three.js {@link avatarSprite} uses (the namespace, or the named
16
+ * imports). The sprite that comes back is three's own `Sprite`, so
17
+ * `scene.add(sprite)` needs no cast. `TMap` is what the game's
18
+ * `SpriteMaterial` takes as its `map` (three's `Texture`); it is inferred on
19
+ * its own so an inline object of the named imports infers too.
20
+ */
21
+ interface ThreeNs<TTexture extends ThreeTexture = ThreeTexture, TMaterial extends ThreeMaterial = ThreeMaterial, TSprite extends ThreeSprite = ThreeSprite, TMap = TTexture> extends ThreeTextureNs<TTexture> {
22
+ readonly SpriteMaterial: new (params: {
23
+ map: TMap;
24
+ transparent: boolean;
25
+ }) => TMaterial;
26
+ readonly Sprite: new (material: TMaterial) => TSprite;
27
+ }
28
+ /** A texture. */
29
+ interface ThreeTexture {
30
+ needsUpdate: boolean;
31
+ colorSpace?: string;
32
+ dispose(): void;
33
+ }
34
+ /** A material. */
35
+ interface ThreeMaterial {
36
+ dispose(): void;
37
+ }
38
+ /** A sprite. */
39
+ interface ThreeSprite {
40
+ readonly scale: {
41
+ set(x: number, y: number, z: number): void;
42
+ };
43
+ }
44
+ /** Options for the three.js helpers. */
45
+ interface ThreeAvatarOptions extends RenderOptions {
46
+ readonly animator?: Animator;
47
+ /** Texture pixels per `size` pixel (default 2). */
48
+ readonly resolution?: number;
49
+ }
50
+ /** A live avatar texture; `texture` is the game's own `CanvasTexture`. */
51
+ interface ThreeAvatarTexture<TTexture extends ThreeTexture = ThreeTexture> {
52
+ readonly texture: TTexture;
53
+ /** Redraws for the animator's pose at `t` (or a given pose), at most 30 times a second. */
54
+ update(t: number | Pose): void;
55
+ setLook(like: LookLike): void;
56
+ dispose(): void;
57
+ }
58
+ /** A `CanvasTexture` showing the avatar. */
59
+ export declare function avatarCanvasTexture<TTexture extends ThreeTexture>(three: ThreeTextureNs<TTexture>, like: LookLike, opts?: ThreeAvatarOptions): ThreeAvatarTexture<TTexture>;
60
+ /** A billboard `Sprite` of the avatar, `height` world units tall (default 1). */
61
+ export declare function avatarSprite<TTexture extends ThreeTexture & TMap, TMaterial extends ThreeMaterial, TSprite extends ThreeSprite, TMap>(three: ThreeNs<TTexture, TMaterial, TSprite, TMap>, like: LookLike, opts?: ThreeAvatarOptions & {
62
+ readonly height?: number;
63
+ }): {
64
+ readonly sprite: TSprite;
65
+ readonly avatar: ThreeAvatarTexture<TTexture>;
66
+ };
67
+ //#endregion
68
+ export type { ThreeAvatarOptions, ThreeAvatarTexture, ThreeNs, ThreeTextureNs };
69
+ //# sourceMappingURL=avatar-three.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-three.d.ts","names":[],"sources":["../src/avatar/adapters/three.ts"],"mappings":";;;;;;;;;UAgBiB,eAAe,iBAAiB,eAAe;WACrD,oBAAoB,QAAQ,oBAAoB,oBAAoB;WACpE;;;;;;;;;UAUM,QACf,iBAAiB,eAAe,cAChC,kBAAkB,gBAAgB,eAClC,gBAAgB,cAAc,aAC9B,OAAO,kBACC,eAAe;WACd,qBAAqB;IAAU,KAAK;IAAM;QAA2B;WACrE,aAAa,UAAU,cAAc;;;UAI/B;EACf;EACA;EACA;;;UAIe;EACf;;;UAIe;WACN;IAAS,IAAI,WAAW,WAAW;;;;UAI7B,2BAA2B;WACjC,WAAW;;WAEX;;;UAIM,mBAAmB,iBAAiB,eAAe;WACzD,SAAS;;EAElB,OAAO,YAAY;EACnB,QAAQ,MAAM;EACd;;;wBAMc,oBAAoB,iBAAiB,cACnD,OAAO,eAAe,WACtB,MAAM,UACN,OAAM,qBACL,mBAAmB;;wBAoCN,aAAa,iBAAiB,eAAe,MAAM,kBAAkB,eAAe,gBAAgB,aAAa,MAC/H,OAAO,QAAQ,UAAU,WAAW,SAAS,OAC7C,MAAM,UACN,OAAM;WAAgC;;WAC1B,QAAQ;WAAkB,QAAQ,mBAAmB"}
@@ -0,0 +1,49 @@
1
+ import { t as liveCanvas } from "./shared/live-canvas.js";
2
+ //#region src/avatar/adapters/three.ts
3
+ const MIN_FRAME_MS = 1e3 / 30;
4
+ /** A `CanvasTexture` showing the avatar. */
5
+ function avatarCanvasTexture(three, like, opts = {}) {
6
+ const live = liveCanvas(like, opts, opts.resolution ?? 2);
7
+ live.draw(opts.pose);
8
+ const texture = new three.CanvasTexture(live.canvas);
9
+ if (three.SRGBColorSpace) texture.colorSpace = three.SRGBColorSpace;
10
+ let last = -Infinity;
11
+ return {
12
+ texture,
13
+ update(t) {
14
+ if (typeof t === "number") {
15
+ if (t - last < MIN_FRAME_MS) return;
16
+ last = t;
17
+ }
18
+ const pose = typeof t === "number" ? opts.animator?.pose(t) : t;
19
+ if (live.draw(pose ?? opts.pose)) texture.needsUpdate = true;
20
+ },
21
+ setLook(next) {
22
+ live.setLook(next);
23
+ opts.animator?.setLook(next);
24
+ if (live.draw(opts.pose)) texture.needsUpdate = true;
25
+ },
26
+ dispose() {
27
+ texture.dispose();
28
+ }
29
+ };
30
+ }
31
+ /** A billboard `Sprite` of the avatar, `height` world units tall (default 1). */
32
+ function avatarSprite(three, like, opts = {}) {
33
+ const avatar = avatarCanvasTexture(three, like, opts);
34
+ const sprite = new three.Sprite(new three.SpriteMaterial({
35
+ map: avatar.texture,
36
+ transparent: true
37
+ }));
38
+ const h = opts.height ?? 1;
39
+ const aspect = opts.frame === "full" ? 172 / 206 : 1;
40
+ sprite.scale.set(h * aspect, h, 1);
41
+ return {
42
+ sprite,
43
+ avatar
44
+ };
45
+ }
46
+ //#endregion
47
+ export { avatarCanvasTexture, avatarSprite };
48
+
49
+ //# sourceMappingURL=avatar-three.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-three.js","names":[],"sources":["../src/avatar/adapters/three.ts"],"mappings":";;AAuEA,MAAM,eAAe,MAAO;;AAG5B,SAAgB,oBACd,OACA,MACA,OAA2B,CAAC,GACE;CAC9B,MAAM,OAAO,WAAW,MAAM,MAAM,KAAK,cAAc,CAAC;CACxD,KAAK,KAAK,KAAK,IAAI;CACnB,MAAM,UAAU,IAAI,MAAM,cAAc,KAAK,MAAM;CACnD,IAAI,MAAM,gBACR,QAAQ,aAAa,MAAM;CAE7B,IAAI,OAAO;CACX,OAAO;EACL;EACA,OAAO,GAAG;GACR,IAAI,OAAO,MAAM,UAAU;IACzB,IAAI,IAAI,OAAO,cACb;IAEF,OAAO;GACT;GACA,MAAM,OAAO,OAAO,MAAM,WAAW,KAAK,UAAU,KAAK,CAAC,IAAI;GAC9D,IAAI,KAAK,KAAK,QAAQ,KAAK,IAAI,GAC7B,QAAQ,cAAc;EAE1B;EACA,QAAQ,MAAM;GACZ,KAAK,QAAQ,IAAI;GACjB,KAAK,UAAU,QAAQ,IAAI;GAC3B,IAAI,KAAK,KAAK,KAAK,IAAI,GACrB,QAAQ,cAAc;EAE1B;EACA,UAAU;GACR,QAAQ,QAAQ;EAClB;CACF;AACF;;AAGA,SAAgB,aACd,OACA,MACA,OAA0D,CAAC,GACkB;CAC7E,MAAM,SAAS,oBAAoB,OAAO,MAAM,IAAI;CACpD,MAAM,SAAS,IAAI,MAAM,OAAO,IAAI,MAAM,eAAe;EAAE,KAAK,OAAO;EAAS,aAAa;CAAK,CAAC,CAAC;CACpG,MAAM,IAAI,KAAK,UAAU;CACzB,MAAM,SAAS,KAAK,UAAU,SAAS,MAAM,MAAM;CACnD,OAAO,MAAM,IAAI,IAAI,QAAQ,GAAG,CAAC;CACjC,OAAO;EAAE;EAAQ;CAAO;AAC1B"}
@@ -0,0 +1,7 @@
1
+ import { A as partById, B as lightness, C as defaultLook, D as isValidLook, E as isLookCode, F as resolveColour, G as overlaySvg, H as toLook, I as sameLook, J as facingFrom, K as paintOverlay, L as seededRng, M as partsOf, N as randomLook, O as lookProblem, P as render, Q as CanvasPlacement, R as contrast, S as decodeLook, T as encodeLook, U as sceneToSvg, V as toCode, W as catalog, X as lookToward, Y as layout, Z as AvatarElement, _ as Preset, a as CATALOG_REVISION, c as DecodedLook, d as LookColour, f as LookPart, g as PartCategory, h as PaletteName, i as CATALOG, j as partName, k as normaliseHex, l as LOOK_CODE_PREFIX, m as PALETTES, n as AccessorySlot, o as CatalogEntry, p as LookProblem, q as defineAvatarElement, r as AvatarLook, s as DEFAULT_GEN, t as ACCESSORY_SLOTS, u as LookAccessory, v as RandomLookOptions, w as distinctLooks, x as canonicalLook, y as Rng, z as deltaE } from "./shared/avatar.js";
2
+ import { _ as FaceParams, a as LookDir, b as isExpression, c as Pose, d as View, f as BrowParams, g as FaceExtra, h as Expression, i as Frame, l as RenderOptions, m as EXPRESSION_NAMES, n as BodyPose, o as LookLike, p as EXPRESSIONS, r as Facing, s as Point, t as Anchor, u as StatusProp, v as MouthParams, x as mix, y as expressionFromEmote } from "./shared/types.js";
3
+ import { t as SceneNode } from "./shared/scene.js";
4
+ import { a as ActivityIcon, c as overlays, i as createAtlas, l as Ctx2D, n as AtlasOptions, o as Overlay, r as AvatarAtlas, s as ReactionGlyph, t as AtlasFrame, u as paintNodes } from "./shared/atlas.js";
5
+ import { c as composeAvatar, i as ready, n as describe, o as Composed, r as onArtReady, s as HEAD_Y, t as avatarEmoji } from "./shared/describe.js";
6
+ import { a as animator, i as Feeling, n as AnimatorOptions, o as REACTIONS, r as At, s as Reaction, t as Animator } from "./shared/animator.js";
7
+ export { ACCESSORY_SLOTS, type AccessorySlot, type ActivityIcon, type Anchor, Animator, type AnimatorOptions, type At, type AtlasFrame, type AtlasOptions, AvatarAtlas, type AvatarElement, type AvatarLook, type BodyPose, type BrowParams, CATALOG, CATALOG_REVISION, type CanvasPlacement, type CatalogEntry, type Composed, type Ctx2D, DEFAULT_GEN, type DecodedLook, EXPRESSIONS, EXPRESSION_NAMES, type Expression, type FaceExtra, type FaceParams, type Facing, type Feeling, type Frame, HEAD_Y, LOOK_CODE_PREFIX, type LookAccessory, type LookColour, type LookDir, type LookLike, type LookPart, type LookProblem, type MouthParams, type Overlay, PALETTES, type PaletteName, type PartCategory, type Point, type Pose, type Preset, REACTIONS, type RandomLookOptions, type Reaction, type ReactionGlyph, type RenderOptions, type Rng, type SceneNode, type StatusProp, type View, animator, avatarEmoji, canonicalLook, catalog, composeAvatar, contrast, createAtlas, decodeLook, defaultLook, defineAvatarElement, deltaE, describe, distinctLooks, encodeLook, expressionFromEmote, facingFrom, isExpression, isLookCode, isValidLook, layout, lightness, lookProblem, lookToward, mix, normaliseHex, onArtReady, overlaySvg, overlays, paintNodes, paintOverlay, partById, partName, partsOf, randomLook, ready, render, resolveColour, sameLook, sceneToSvg, seededRng, toCode, toLook };
package/dist/avatar.js ADDED
@@ -0,0 +1,487 @@
1
+ import { t as _defineProperty } from "./shared/defineProperty.js";
2
+ import { A as contrast, M as lightness, N as toCode, P as toLook, _ as onArtReady, a as composeAvatar, c as n, d as EXPRESSIONS, f as EXPRESSION_NAMES, g as mix, h as isExpression, i as HEAD_Y, j as deltaE, p as expressionFromEmote, r as sceneToSvg, v as ready } from "./shared/svg-markup.js";
3
+ import { a as paintNodes, i as renderCanvasAt, n as defaultLayer, r as renderCanvas, t as renderKey } from "./shared/pose-key.js";
4
+ import { n as renderSvg, t as nextPrefix } from "./shared/svg.js";
5
+ import { a as Animator, i as lookToward, l as renderBitmap, n as facingFrom, o as animator, r as layout, s as REACTIONS, t as overlays, u as renderDataUrl } from "./shared/overlays.js";
6
+ import { n as describe, t as avatarEmoji } from "./shared/describe.js";
7
+ import { ACCESSORY_SLOTS, CATALOG, CATALOG_REVISION, CATALOG_REVISION as CATALOG_REVISION$1, DEFAULT_GEN, LOOK_CODE_PREFIX, PALETTES, PALETTES as PALETTES$1, canonicalLook, decodeLook, defaultLook, distinctLooks, encodeLook, isLookCode, isValidLook, lookProblem, normaliseHex, partById, partName, partsOf, partsOf as partsOf$1, randomLook, resolveColour, sameLook, seededRng } from "@diffenderfer-games/hub-contract/avatar";
8
+ //#region src/avatar/outputs/element.ts
9
+ /**
10
+ * `render.element`: a live DOM avatar. `update(pose)` re-renders only when
11
+ * the quantised pose changes, which is cheap enough for a dozen avatars at
12
+ * 30 fps in DOM games.
13
+ */
14
+ /** A live avatar element; it upgrades itself from the silhouette when the art loads. */
15
+ function renderElement(like, opts = {}, doc = document) {
16
+ const el = doc.createElement("span");
17
+ el.className = "dg-avatar";
18
+ el.style.display = "inline-block";
19
+ el.style.lineHeight = "0";
20
+ let look = like;
21
+ let options = opts;
22
+ let key = "";
23
+ const draw = (isForced = false) => {
24
+ const next = renderKey(toCode(look), options);
25
+ if (!isForced && next === key) return;
26
+ key = next;
27
+ el.innerHTML = renderSvg(look, options);
28
+ };
29
+ draw(true);
30
+ onArtReady(() => {
31
+ draw(true);
32
+ });
33
+ return {
34
+ el,
35
+ update(pose) {
36
+ options = {
37
+ ...options,
38
+ pose
39
+ };
40
+ draw();
41
+ },
42
+ setLook(next) {
43
+ look = next;
44
+ draw(true);
45
+ },
46
+ setOptions(next) {
47
+ options = {
48
+ ...next,
49
+ ...options.pose ? { pose: options.pose } : {}
50
+ };
51
+ draw(true);
52
+ }
53
+ };
54
+ }
55
+ //#endregion
56
+ //#region src/avatar/outputs/custom-element.ts
57
+ /**
58
+ * `<dg-avatar>` (§3.8), registered by `defineAvatarElement()` (never as a
59
+ * side effect of importing). For DOM and React games and static pages:
60
+ *
61
+ * ```html
62
+ * <dg-avatar look="AV1…" size="48" expression="happy" look-x="-1" animate title="Sam's avatar"></dg-avatar>
63
+ * ```
64
+ *
65
+ * With `animate` it runs its own animator (blinks, idle motion) at up to
66
+ * 30 fps while visible; its `animator` property gives full control.
67
+ */
68
+ const FACINGS = [
69
+ "S",
70
+ "SE",
71
+ "E",
72
+ "NE",
73
+ "N",
74
+ "NW",
75
+ "W",
76
+ "SW"
77
+ ];
78
+ const FRAMES = [
79
+ "head",
80
+ "bust",
81
+ "full"
82
+ ];
83
+ const BODIES = [
84
+ "idle",
85
+ "walk",
86
+ "run",
87
+ "sit",
88
+ "play",
89
+ "wave",
90
+ "cheer",
91
+ "jump",
92
+ "dance",
93
+ "away"
94
+ ];
95
+ const STATUSES = [
96
+ "goggles",
97
+ "headset",
98
+ "cards",
99
+ "controller",
100
+ "trophy",
101
+ "crown",
102
+ "book"
103
+ ];
104
+ const FRAME_MS = 1e3 / 30;
105
+ /** The list member equal to `value`, if any (attribute values are untrusted). */
106
+ const oneOf = (list, value) => list.find((item) => item === value);
107
+ const toNumber = (value) => {
108
+ const parsed = value === null ? NaN : Number(value);
109
+ return Number.isFinite(parsed) ? parsed : void 0;
110
+ };
111
+ /** The attributes `<dg-avatar>` watches. */
112
+ const AVATAR_ATTRIBUTES = [
113
+ "look",
114
+ "size",
115
+ "frame",
116
+ "facing",
117
+ "expression",
118
+ "look-x",
119
+ "look-y",
120
+ "animate",
121
+ "title",
122
+ "background",
123
+ "body",
124
+ "status"
125
+ ];
126
+ /**
127
+ * Registers `<dg-avatar>` (or another tag). Safe to call more than once;
128
+ * a no-op outside a browser.
129
+ */
130
+ function defineAvatarElement(tag = "dg-avatar") {
131
+ if (typeof customElements === "undefined" || customElements.get(tag)) return;
132
+ class DgAvatar extends HTMLElement {
133
+ constructor(..._args) {
134
+ super(..._args);
135
+ _defineProperty(this, "view", null);
136
+ _defineProperty(this, "anim", null);
137
+ _defineProperty(this, "raf", 0);
138
+ _defineProperty(this, "last", 0);
139
+ _defineProperty(this, "base", "neutral");
140
+ }
141
+ /** The animator driving this element (created on first use). */
142
+ get animator() {
143
+ this.anim ?? (this.anim = animator(this.getAttribute("look") ?? "", { seed: this.getAttribute("look") ?? "dg" }));
144
+ return this.anim;
145
+ }
146
+ options() {
147
+ const background = this.getAttribute("background");
148
+ const frame = oneOf(FRAMES, this.getAttribute("frame"));
149
+ const facing = oneOf(FACINGS, this.getAttribute("facing"));
150
+ const title = this.getAttribute("title");
151
+ return {
152
+ size: toNumber(this.getAttribute("size")) ?? 48,
153
+ ...frame ? { frame } : {},
154
+ ...facing ? { facing } : {},
155
+ ...title ? { title } : {},
156
+ ...background === "none" || background === "badge" ? { background } : background?.startsWith("#") ? { background: `#${background.slice(1)}` } : {}
157
+ };
158
+ }
159
+ stillPose() {
160
+ const expression = this.getAttribute("expression") ?? "";
161
+ const body = oneOf(BODIES, this.getAttribute("body"));
162
+ const status = oneOf(STATUSES, this.getAttribute("status"));
163
+ return {
164
+ ...isExpression(expression) ? { expression } : {},
165
+ look: {
166
+ x: toNumber(this.getAttribute("look-x")) ?? 0,
167
+ y: toNumber(this.getAttribute("look-y")) ?? 0
168
+ },
169
+ ...body ? { body } : {},
170
+ ...status ? { status } : {}
171
+ };
172
+ }
173
+ connectedCallback() {
174
+ var _this$style, _this$style2;
175
+ (_this$style = this.style).display || (_this$style.display = "inline-block");
176
+ (_this$style2 = this.style).lineHeight || (_this$style2.lineHeight = "0");
177
+ this.view = renderElement(this.getAttribute("look") ?? "", this.options(), this.ownerDocument);
178
+ this.replaceChildren(this.view.el);
179
+ this.view.update(this.stillPose());
180
+ ready();
181
+ this.loop();
182
+ }
183
+ disconnectedCallback() {
184
+ cancelAnimationFrame(this.raf);
185
+ this.raf = 0;
186
+ }
187
+ attributeChangedCallback(name) {
188
+ if (!this.view) return;
189
+ if (name === "look") {
190
+ const look = this.getAttribute("look") ?? "";
191
+ this.view.setLook(look);
192
+ this.anim?.setLook(look);
193
+ } else this.view.setOptions(this.options());
194
+ this.view.update(this.stillPose());
195
+ this.loop();
196
+ }
197
+ loop() {
198
+ if (!this.hasAttribute("animate") || this.raf !== 0 || !this.isConnected) return;
199
+ const tick = (t) => {
200
+ this.raf = 0;
201
+ if (!this.isConnected || !this.hasAttribute("animate")) return;
202
+ if (t - this.last >= FRAME_MS) {
203
+ this.last = t;
204
+ const expression = this.getAttribute("expression") ?? "neutral";
205
+ if (expression !== this.base && isExpression(expression)) {
206
+ this.base = expression;
207
+ this.animator.setBase(expression, { at: t });
208
+ }
209
+ const still = this.stillPose();
210
+ this.view?.update({
211
+ ...this.animator.pose(t),
212
+ ...still.body ? { body: still.body } : {},
213
+ ...still.status ? { status: still.status } : {}
214
+ });
215
+ }
216
+ this.raf = requestAnimationFrame(tick);
217
+ };
218
+ this.raf = requestAnimationFrame(tick);
219
+ }
220
+ }
221
+ _defineProperty(DgAvatar, "observedAttributes", AVATAR_ATTRIBUTES);
222
+ customElements.define(tag, DgAvatar);
223
+ }
224
+ //#endregion
225
+ //#region src/avatar/outputs/overlay-svg.ts
226
+ /** An overlay as a standalone `<svg>` (for DOM surfaces) or painted on a canvas at its anchor. */
227
+ /** The overlay as an `<svg>` of its own size (decorative). */
228
+ function overlaySvg(overlay, scale = 1) {
229
+ const [left, top, w, h] = overlay.box;
230
+ const { body, defs } = sceneToSvg(overlay.nodes, nextPrefix({}));
231
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${n(left)} ${n(top)} ${n(w)} ${n(h)}" width="${n(w * scale)}" height="${n(h * scale)}" aria-hidden="true">${defs ? `<defs>${defs}</defs>` : ""}${body}</svg>`;
232
+ }
233
+ /** Paints an overlay with its anchor at (x, y). */
234
+ function paintOverlay(ctx, overlay, atX, atY, scale = 1) {
235
+ ctx.save();
236
+ ctx.translate(atX, atY);
237
+ ctx.scale(scale, scale);
238
+ paintNodes(ctx, overlay.nodes);
239
+ ctx.restore();
240
+ }
241
+ //#endregion
242
+ //#region src/avatar/catalog-view.ts
243
+ /** The catalog as the designer and games see it: parts per category, palettes and the revision. */
244
+ /** The catalog view. */
245
+ const catalog = {
246
+ /** The parts of a category in designer order (retired parts hidden). */
247
+ parts(category) {
248
+ return partsOf$1(category);
249
+ },
250
+ /** Every colour palette. */
251
+ palettes: PALETTES$1,
252
+ /** The catalog revision this build knows. */
253
+ revision: CATALOG_REVISION$1
254
+ };
255
+ //#endregion
256
+ //#region src/avatar/atlas.ts
257
+ const MIRRORED = {
258
+ W: "E",
259
+ SW: "SE",
260
+ NW: "NE"
261
+ };
262
+ const STEPS = {
263
+ walk: 8,
264
+ run: 8,
265
+ idle: 4,
266
+ dance: 8,
267
+ jump: 6,
268
+ cheer: 6
269
+ };
270
+ /** The rig box every frame bakes: wide enough for hats, props and the rim. */
271
+ const BOX = {
272
+ x: -90,
273
+ y: -210,
274
+ w: 180,
275
+ h: 226
276
+ };
277
+ /** The atlas. */
278
+ var AvatarAtlas = class {
279
+ constructor(opts = {}) {
280
+ _defineProperty(this, "pageSize", void 0);
281
+ _defineProperty(this, "scale", void 0);
282
+ _defineProperty(this, "maxPages", void 0);
283
+ _defineProperty(this, "rim", void 0);
284
+ _defineProperty(this, "makeCanvas", void 0);
285
+ _defineProperty(this, "pages", []);
286
+ _defineProperty(this, "frames", /* @__PURE__ */ new Map());
287
+ _defineProperty(this, "queue", /* @__PURE__ */ new Map());
288
+ _defineProperty(this, "latestByLook", /* @__PURE__ */ new Map());
289
+ _defineProperty(this, "clock", 0);
290
+ this.pageSize = opts.pageSize ?? 2048;
291
+ this.maxPages = opts.maxPages ?? 4;
292
+ this.scale = opts.scale ?? .32;
293
+ this.rim = opts.rim ?? true;
294
+ this.makeCanvas = opts.makeCanvas ?? ((size) => defaultLayer(size, size));
295
+ }
296
+ /** The frame for a key: the baked frame, or `null` (queued for {@link bake}). */
297
+ frame(key) {
298
+ const id = this.keyOf(key);
299
+ const isMirror = MIRRORED[key.facing ?? "S"] !== void 0;
300
+ const hit = this.live(id);
301
+ if (hit) return {
302
+ ...hit,
303
+ mirror: isMirror
304
+ };
305
+ this.queue.set(id, key);
306
+ const standIn = this.live(this.latestByLook.get(toCode(key.look)) ?? "");
307
+ return standIn ? {
308
+ ...standIn,
309
+ mirror: isMirror
310
+ } : null;
311
+ }
312
+ /** A baked frame whose page still holds it (touching the page for the LRU). */
313
+ live(id) {
314
+ const hit = this.frames.get(id);
315
+ const page = hit ? this.pages[hit.page] : void 0;
316
+ if (!hit || page?.version !== hit.version) return;
317
+ page.used = this.clock += 1;
318
+ return hit;
319
+ }
320
+ /** Bakes queued frames for up to `budgetMs` (default 4 ms), oldest first. Returns how many were baked. */
321
+ bake(budgetMs = 4, now = () => typeof performance === "undefined" ? Date.now() : performance.now()) {
322
+ const start = now();
323
+ let baked = 0;
324
+ for (const [id, key] of this.queue) {
325
+ if (baked > 0 && now() - start > budgetMs) break;
326
+ this.queue.delete(id);
327
+ if (this.bakeOne(id, key)) baked += 1;
328
+ }
329
+ return baked;
330
+ }
331
+ /** Frames still waiting to bake. */
332
+ get pending() {
333
+ return this.queue.size;
334
+ }
335
+ /** Every page's image (for texture uploads). */
336
+ get sources() {
337
+ return this.pages.map((p) => p.canvas);
338
+ }
339
+ keyOf(key) {
340
+ const facing = MIRRORED[key.facing ?? "S"] ?? key.facing ?? "S";
341
+ const body = key.body ?? "idle";
342
+ const steps = STEPS[body] ?? 1;
343
+ const step = Math.floor((key.phase ?? 0) % 1 * steps);
344
+ return [
345
+ toCode(key.look),
346
+ facing,
347
+ body,
348
+ String(step),
349
+ key.face ?? "neutral",
350
+ key.status ?? "",
351
+ String(key.scale ?? this.scale)
352
+ ].join("~");
353
+ }
354
+ place(w, h) {
355
+ for (let i = 0; i < this.pages.length; i += 1) {
356
+ const p = this.pages[i];
357
+ if (!p) continue;
358
+ if (p.shelfX + w > this.pageSize) {
359
+ p.shelfY += p.shelfH;
360
+ p.shelfX = 0;
361
+ p.shelfH = 0;
362
+ }
363
+ if (p.shelfY + h <= this.pageSize) {
364
+ const spot = {
365
+ page: i,
366
+ x: p.shelfX,
367
+ y: p.shelfY
368
+ };
369
+ p.shelfX += w;
370
+ p.shelfH = Math.max(p.shelfH, h);
371
+ return spot;
372
+ }
373
+ }
374
+ if (this.pages.length < this.maxPages) {
375
+ const made = this.makeCanvas(this.pageSize);
376
+ if (!made) return null;
377
+ this.pages.push({
378
+ canvas: made.canvas,
379
+ ctx: made.ctx,
380
+ shelfX: 0,
381
+ shelfY: 0,
382
+ shelfH: 0,
383
+ used: 0,
384
+ version: 1
385
+ });
386
+ return this.place(w, h);
387
+ }
388
+ let oldest = 0;
389
+ this.pages.forEach((p, i) => {
390
+ if (p.used < (this.pages[oldest]?.used ?? Infinity)) oldest = i;
391
+ });
392
+ const page = this.pages[oldest];
393
+ if (!page) return null;
394
+ page.ctx.clearRect(0, 0, this.pageSize, this.pageSize);
395
+ page.version += 1;
396
+ page.shelfX = 0;
397
+ page.shelfY = 0;
398
+ page.shelfH = 0;
399
+ return this.place(w, h);
400
+ }
401
+ bakeOne(id, key) {
402
+ const scale = key.scale ?? this.scale;
403
+ const w = Math.ceil(BOX.w * scale) + 2;
404
+ const h = Math.ceil(BOX.h * scale) + 2;
405
+ const spot = this.place(w, h);
406
+ const page = spot ? this.pages[spot.page] : void 0;
407
+ if (!spot || !page) return false;
408
+ const facing = MIRRORED[key.facing ?? "S"] ?? key.facing ?? "S";
409
+ const body = key.body ?? "idle";
410
+ const steps = STEPS[body] ?? 1;
411
+ const phase = (Math.floor((key.phase ?? 0) % 1 * steps) + .5) / steps;
412
+ const face = key.face ?? "neutral";
413
+ const { nodes } = composeAvatar(toLook(key.look), {
414
+ frame: "full",
415
+ facing,
416
+ rim: this.rim,
417
+ shadow: false,
418
+ pose: {
419
+ expression: face,
420
+ body,
421
+ phase,
422
+ status: key.status ?? null
423
+ }
424
+ });
425
+ const scratch = defaultLayer(w, h);
426
+ if (!scratch) return false;
427
+ scratch.ctx.translate(1 - BOX.x * scale, 1 - BOX.y * scale);
428
+ scratch.ctx.scale(scale, scale);
429
+ paintNodes(scratch.ctx, nodes, defaultLayer);
430
+ page.ctx.clearRect(spot.x, spot.y, w, h);
431
+ page.ctx.drawImage(scratch.canvas, spot.x, spot.y);
432
+ page.used = this.clock += 1;
433
+ this.latestByLook.set(toCode(key.look), id);
434
+ this.frames.set(id, {
435
+ page: spot.page,
436
+ source: page.canvas,
437
+ x: spot.x,
438
+ y: spot.y,
439
+ w,
440
+ h,
441
+ footX: 1 - BOX.x * scale,
442
+ footY: 1 - BOX.y * scale,
443
+ mirror: false,
444
+ version: page.version
445
+ });
446
+ return true;
447
+ }
448
+ };
449
+ /** A new atlas (one per scene; pages are shared by every avatar in it). */
450
+ function createAtlas(opts = {}) {
451
+ return new AvatarAtlas(opts);
452
+ }
453
+ //#endregion
454
+ //#region src/avatar.ts
455
+ /**
456
+ * `@diffenderfer-games/hub/avatar`: draw players' avatars in any game.
457
+ *
458
+ * ```ts
459
+ * import { ready, render, animator } from '@diffenderfer-games/hub/avatar';
460
+ *
461
+ * await ready(); // loads the art once
462
+ * el.innerHTML = render.svg(seat.look, { size: 48 });
463
+ * const anim = animator(seat.look, { seed: seat.userId });
464
+ * anim.express('happy');
465
+ * render.canvas(ctx, seat.look, { x, y, size: 64, pose: anim.pose(now) });
466
+ * ```
467
+ *
468
+ * The art loads lazily (`ready()`); before it does, renders draw the
469
+ * silhouette. Zero dependencies; the Pixi and three.js adapters take the
470
+ * library as an argument (`/avatar/pixi`, `/avatar/three`). Docs: "Avatars"
471
+ * in docs/hub.md.
472
+ *
473
+ * @packageDocumentation
474
+ */
475
+ /** Every output: SVG markup, a live element, Canvas 2D, a bitmap or a data URL. */
476
+ const render = {
477
+ svg: renderSvg,
478
+ element: renderElement,
479
+ canvas: renderCanvas,
480
+ canvasAt: renderCanvasAt,
481
+ bitmap: renderBitmap,
482
+ dataUrl: renderDataUrl
483
+ };
484
+ //#endregion
485
+ export { ACCESSORY_SLOTS, Animator, AvatarAtlas, CATALOG, CATALOG_REVISION, DEFAULT_GEN, EXPRESSIONS, EXPRESSION_NAMES, HEAD_Y, LOOK_CODE_PREFIX, PALETTES, REACTIONS, animator, avatarEmoji, canonicalLook, catalog, composeAvatar, contrast, createAtlas, decodeLook, defaultLook, defineAvatarElement, deltaE, describe, distinctLooks, encodeLook, expressionFromEmote, facingFrom, isExpression, isLookCode, isValidLook, layout, lightness, lookProblem, lookToward, mix, normaliseHex, onArtReady, overlaySvg, overlays, paintNodes, paintOverlay, partById, partName, partsOf, randomLook, ready, render, resolveColour, sameLook, sceneToSvg, seededRng, toCode, toLook };
486
+
487
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.js","names":["partsOf","PALETTES","CATALOG_REVISION"],"sources":["../src/avatar/outputs/element.ts","../src/avatar/outputs/custom-element.ts","../src/avatar/outputs/overlay-svg.ts","../src/avatar/catalog-view.ts","../src/avatar/atlas.ts","../src/avatar.ts"],"mappings":";;;;;;;;;;;;;;AAwBA,SAAgB,cAAc,MAAgB,OAAsB,CAAC,GAAG,MAAgB,UAAyB;CAC/G,MAAM,KAAK,IAAI,cAAc,MAAM;CACnC,GAAG,YAAY;CACf,GAAG,MAAM,UAAU;CACnB,GAAG,MAAM,aAAa;CACtB,IAAI,OAAO;CACX,IAAI,UAAU;CACd,IAAI,MAAM;CACV,MAAM,QAAQ,WAAW,UAAgB;EACvC,MAAM,OAAO,UAAU,OAAO,IAAI,GAAG,OAAO;EAC5C,IAAI,CAAC,YAAY,SAAS,KACxB;EAEF,MAAM;EACN,GAAG,YAAY,UAAU,MAAM,OAAO;CACxC;CACA,KAAK,IAAI;CACT,iBAAiB;EAAE,KAAK,IAAI;CAAG,CAAC;CAChC,OAAO;EACL;EACA,OAAO,MAAM;GACX,UAAU;IAAE,GAAG;IAAS;GAAK;GAC7B,KAAK;EACP;EACA,QAAQ,MAAM;GACZ,OAAO;GACP,KAAK,IAAI;EACX;EACA,WAAW,MAAM;GACf,UAAU;IAAE,GAAG;IAAM,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;GAAG;GACrE,KAAK,IAAI;EACX;CACF;AACF;;;;;;;;;;;;;;ACxCA,MAAM,UAA6B;CAAC;CAAK;CAAM;CAAK;CAAM;CAAK;CAAM;CAAK;AAAI;AAC9E,MAAM,SAA2B;CAAC;CAAQ;CAAQ;AAAM;AACxD,MAAM,SAA8B;CAAC;CAAQ;CAAQ;CAAO;CAAO;CAAQ;CAAQ;CAAS;CAAQ;CAAS;AAAM;AACnH,MAAM,WAAkC;CAAC;CAAW;CAAW;CAAS;CAAc;CAAU;CAAS;AAAM;AAC/G,MAAM,WAAW,MAAO;;AAGxB,MAAM,SAA2B,MAAoB,UAAwC,KAAK,MAAM,SAAS,SAAS,KAAK;AAE/H,MAAM,YAAY,UAA6C;CAC7D,MAAM,SAAS,UAAU,OAAO,MAAa,OAAO,KAAK;CACzD,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS,KAAA;AAC5C;;AAGA,MAAa,oBAAoB;CAAC;CAAQ;CAAQ;CAAS;CAAU;CAAc;CAAU;CAAU;CAAW;CAAS;CAAc;CAAQ;AAAQ;;;;;AAMzJ,SAAgB,oBAAoB,MAAM,aAAmB;CAC3D,IAAI,OAAO,mBAAmB,eAAe,eAAe,IAAI,GAAG,GACjE;CAGF,MAAM,iBAAiB,YAAY;;;GAEzB,gBAAA,MAAA,QAA6B,IAAA;GAC7B,gBAAA,MAAA,QAAwB,IAAA;GACxB,gBAAA,MAAA,OAAM,CAAA;GACN,gBAAA,MAAA,QAAO,CAAA;GACP,gBAAA,MAAA,QAAO,SAAA;;;EAGf,IAAI,WAAqB;GACvB,KAAK,SAAL,KAAK,OAAS,SAAS,KAAK,aAAa,MAAM,KAAK,IAAI,EAAE,MAAM,KAAK,aAAa,MAAM,KAAK,KAAK,CAAC;GACnG,OAAO,KAAK;EACd;EAEA,UAAiC;GAC/B,MAAM,aAAa,KAAK,aAAa,YAAY;GACjD,MAAM,QAAQ,MAAM,QAAQ,KAAK,aAAa,OAAO,CAAC;GACtD,MAAM,SAAS,MAAM,SAAS,KAAK,aAAa,QAAQ,CAAC;GACzD,MAAM,QAAQ,KAAK,aAAa,OAAO;GACvC,OAAO;IACL,MAAM,SAAS,KAAK,aAAa,MAAM,CAAC,KAAK;IAC7C,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;IACzB,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;IAC3B,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;IACzB,GAAI,eAAe,UAAU,eAAe,UAAU,EAAE,WAAW,IAAI,YAAY,WAAW,GAAG,IAAI,EAAE,YAAY,IAAI,WAAW,MAAM,CAAC,IAAI,IAAI,CAAC;GACpJ;EACF;EAEA,YAA0B;GACxB,MAAM,aAAa,KAAK,aAAa,YAAY,KAAK;GACtD,MAAM,OAAO,MAAM,QAAQ,KAAK,aAAa,MAAM,CAAC;GACpD,MAAM,SAAS,MAAM,UAAU,KAAK,aAAa,QAAQ,CAAC;GAC1D,OAAO;IACL,GAAI,aAAa,UAAU,IAAI,EAAE,WAAW,IAAI,CAAC;IACjD,MAAM;KAAE,GAAG,SAAS,KAAK,aAAa,QAAQ,CAAC,KAAK;KAAG,GAAG,SAAS,KAAK,aAAa,QAAQ,CAAC,KAAK;IAAE;IACrG,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;IACvB,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;GAC7B;EACF;EAEA,oBAA0B;;GACxB,CAAA,cAAA,KAAK,MAAA,CAAM,YAAA,YAAA,UAAY;GACvB,CAAA,eAAA,KAAK,MAAA,CAAM,eAAA,aAAA,aAAe;GAC1B,KAAK,OAAO,cAAc,KAAK,aAAa,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG,KAAK,aAAa;GAC7F,KAAK,gBAAgB,KAAK,KAAK,EAAE;GACjC,KAAK,KAAK,OAAO,KAAK,UAAU,CAAC;GACjC,MAAW;GACX,KAAK,KAAK;EACZ;EAEA,uBAA6B;GAC3B,qBAAqB,KAAK,GAAG;GAC7B,KAAK,MAAM;EACb;EAEA,yBAAyB,MAAoB;GAC3C,IAAI,CAAC,KAAK,MACR;GAEF,IAAI,SAAS,QAAQ;IACnB,MAAM,OAAO,KAAK,aAAa,MAAM,KAAK;IAC1C,KAAK,KAAK,QAAQ,IAAI;IACtB,KAAK,MAAM,QAAQ,IAAI;GACzB,OACE,KAAK,KAAK,WAAW,KAAK,QAAQ,CAAC;GAErC,KAAK,KAAK,OAAO,KAAK,UAAU,CAAC;GACjC,KAAK,KAAK;EACZ;EAEA,OAAqB;GACnB,IAAI,CAAC,KAAK,aAAa,SAAS,KAAK,KAAK,QAAQ,KAAK,CAAC,KAAK,aAC3D;GAEF,MAAM,QAAQ,MAAoB;IAChC,KAAK,MAAM;IACX,IAAI,CAAC,KAAK,eAAe,CAAC,KAAK,aAAa,SAAS,GACnD;IAEF,IAAI,IAAI,KAAK,QAAQ,UAAU;KAC7B,KAAK,OAAO;KACZ,MAAM,aAAa,KAAK,aAAa,YAAY,KAAK;KACtD,IAAI,eAAe,KAAK,QAAQ,aAAa,UAAU,GAAG;MACxD,KAAK,OAAO;MACZ,KAAK,SAAS,QAAQ,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7C;KACA,MAAM,QAAQ,KAAK,UAAU;KAC7B,KAAK,MAAM,OAAO;MAAE,GAAG,KAAK,SAAS,KAAK,CAAC;MAAG,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;MAAI,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;KAAG,CAAC;IAChJ;IACA,KAAK,MAAM,sBAAsB,IAAI;GACvC;GACA,KAAK,MAAM,sBAAsB,IAAI;EACvC;CACF;CA5FkB,gBAAA,UAAA,sBAAqB,iBAAA;CA8FvC,eAAe,OAAO,KAAK,QAAQ;AACrC;;;;;ACnIA,SAAgB,WAAW,SAAkB,QAAQ,GAAW;CAC9D,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,QAAQ;CAClC,MAAM,EAAE,MAAM,SAAS,WAAW,QAAQ,OAAO,WAAW,CAAC,CAAC,CAAC;CAC/D,OAAO,oDAAoD,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,YAAY,EAAE,IAAI,KAAK,EAAE,uBAAuB,OAAO,SAAS,KAAK,WAAW,KAAK,KAAK;AACjN;;AAGA,SAAgB,aAAa,KAAY,SAAkB,KAAa,KAAa,QAAQ,GAAS;CACpG,IAAI,KAAK;CACT,IAAI,UAAU,KAAK,GAAG;CACtB,IAAI,MAAM,OAAO,KAAK;CACtB,WAAW,KAAK,QAAQ,KAAK;CAC7B,IAAI,QAAQ;AACd;;;;;ACjBA,MAAa,UAAU;;CAErB,MAAM,UAAiD;EACrD,OAAOA,UAAQ,QAAQ;CACzB;;CAEA,UAAUC;;CAEV,UAAUC;AACZ;;;ACuDA,MAAM,WAAsD;CAAE,GAAG;CAAK,IAAI;CAAM,IAAI;AAAK;AACzF,MAAM,QAAqD;CAAE,MAAM;CAAG,KAAK;CAAG,MAAM;CAAG,OAAO;CAAG,MAAM;CAAG,OAAO;AAAE;;AAEnH,MAAM,MAAM;CAAE,GAAG;CAAK,GAAG;CAAM,GAAG;CAAK,GAAG;AAAI;;AAG9C,IAAa,cAAb,MAAyB;CAavB,YAAY,OAAqB,CAAC,GAAG;EAZ5B,gBAAA,MAAA,YAAA,KAAA,CAAA;EACA,gBAAA,MAAA,SAAA,KAAA,CAAA;EACQ,gBAAA,MAAA,YAAA,KAAA,CAAA;EACA,gBAAA,MAAA,OAAA,KAAA,CAAA;EACA,gBAAA,MAAA,cAAA,KAAA,CAAA;EACA,gBAAA,MAAA,SAAgB,CAAC,CAAA;EACjB,gBAAA,MAAA,0BAAS,IAAI,IAAuD,CAAA;EACpE,gBAAA,MAAA,yBAAQ,IAAI,IAAsB,CAAA;EAElC,gBAAA,MAAA,gCAAe,IAAI,IAAoB,CAAA;EAChD,gBAAA,MAAA,SAAQ,CAAA;EAGd,KAAK,WAAW,KAAK,YAAY;EACjC,KAAK,WAAW,KAAK,YAAY;EACjC,KAAK,QAAQ,KAAK,SAAS;EAC3B,KAAK,MAAM,KAAK,OAAO;EACvB,KAAK,aAAa,KAAK,gBAAgB,SAAS,aAAa,MAAM,IAAI;CACzE;;CAGA,MAAM,KAAkC;EACtC,MAAM,KAAK,KAAK,MAAM,GAAG;EACzB,MAAM,WAAW,SAAS,IAAI,UAAU,SAAS,KAAA;EACjD,MAAM,MAAM,KAAK,KAAK,EAAE;EACxB,IAAI,KACF,OAAO;GAAE,GAAG;GAAK,QAAQ;EAAS;EAEpC,KAAK,MAAM,IAAI,IAAI,GAAG;EAEtB,MAAM,UAAU,KAAK,KAAK,KAAK,aAAa,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE;EACvE,OAAO,UAAU;GAAE,GAAG;GAAS,QAAQ;EAAS,IAAI;CACtD;;CAGA,KAAa,IAAqE;EAChF,MAAM,MAAM,KAAK,OAAO,IAAI,EAAE;EAC9B,MAAM,OAAO,MAAM,KAAK,MAAM,IAAI,QAAQ,KAAA;EAC1C,IAAI,CAAC,OAAO,MAAM,YAAY,IAAI,SAChC;EAEF,KAAK,OAAQ,KAAK,SAAS;EAC3B,OAAO;CACT;;CAGA,KAAK,WAAW,GAAG,YAA2B,OAAO,gBAAgB,cAAc,KAAK,IAAI,IAAI,YAAY,IAAI,GAAY;EAC1H,MAAM,QAAQ,IAAI;EAClB,IAAI,QAAQ;EACZ,KAAK,MAAM,CAAC,IAAI,QAAQ,KAAK,OAAO;GAClC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,UAC/B;GAEF,KAAK,MAAM,OAAO,EAAE;GACpB,IAAI,KAAK,QAAQ,IAAI,GAAG,GACtB,SAAS;EAEb;EACA,OAAO;CACT;;CAGA,IAAI,UAAkB;EACpB,OAAO,KAAK,MAAM;CACpB;;CAGA,IAAI,UAAwC;EAC1C,OAAO,KAAK,MAAM,KAAK,MAAM,EAAE,MAAM;CACvC;CAEA,MAAc,KAAuB;EACnC,MAAM,SAAS,SAAS,IAAI,UAAU,QAAQ,IAAI,UAAU;EAC5D,MAAM,OAAO,IAAI,QAAQ;EACzB,MAAM,QAAQ,MAAM,SAAS;EAC7B,MAAM,OAAO,KAAK,OAAQ,IAAI,SAAS,KAAK,IAAK,KAAK;EACtD,OAAO;GAAC,OAAO,IAAI,IAAI;GAAG;GAAQ;GAAM,OAAO,IAAI;GAAG,IAAI,QAAQ;GAAW,IAAI,UAAU;GAAI,OAAO,IAAI,SAAS,KAAK,KAAK;EAAC,CAAC,CAAC,KAAK,GAAG;CAC1I;CAEA,MAAc,GAAW,GAAqF;EAC5G,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK,GAAG;GAC7C,MAAM,IAAI,KAAK,MAAM;GACrB,IAAI,CAAC,GACH;GAEF,IAAI,EAAE,SAAS,IAAI,KAAK,UAAU;IAChC,EAAE,UAAU,EAAE;IACd,EAAE,SAAS;IACX,EAAE,SAAS;GACb;GACA,IAAI,EAAE,SAAS,KAAK,KAAK,UAAU;IACjC,MAAM,OAAO;KAAE,MAAM;KAAG,GAAG,EAAE;KAAQ,GAAG,EAAE;IAAO;IACjD,EAAE,UAAU;IACZ,EAAE,SAAS,KAAK,IAAI,EAAE,QAAQ,CAAC;IAC/B,OAAO;GACT;EACF;EACA,IAAI,KAAK,MAAM,SAAS,KAAK,UAAU;GACrC,MAAM,OAAO,KAAK,WAAW,KAAK,QAAQ;GAC1C,IAAI,CAAC,MACH,OAAO;GAET,KAAK,MAAM,KAAK;IAAE,QAAQ,KAAK;IAAQ,KAAK,KAAK;IAAK,QAAQ;IAAG,QAAQ;IAAG,QAAQ;IAAG,MAAM;IAAG,SAAS;GAAE,CAAC;GAC5G,OAAO,KAAK,MAAM,GAAG,CAAC;EACxB;EAEA,IAAI,SAAS;EACb,KAAK,MAAM,SAAS,GAAG,MAAM;GAAE,IAAI,EAAE,QAAQ,KAAK,MAAM,OAAO,EAAE,QAAQ,WAAY,SAAS;EAAI,CAAC;EACnG,MAAM,OAAO,KAAK,MAAM;EACxB,IAAI,CAAC,MACH,OAAO;EAET,KAAK,IAAI,UAAU,GAAG,GAAG,KAAK,UAAU,KAAK,QAAQ;EACrD,KAAK,WAAW;EAChB,KAAK,SAAS;EACd,KAAK,SAAS;EACd,KAAK,SAAS;EACd,OAAO,KAAK,MAAM,GAAG,CAAC;CACxB;CAEA,QAAgB,IAAY,KAAwB;EAClD,MAAM,QAAQ,IAAI,SAAS,KAAK;EAChC,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI;EACrC,MAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI;EACrC,MAAM,OAAO,KAAK,MAAM,GAAG,CAAC;EAC5B,MAAM,OAAO,OAAO,KAAK,MAAM,KAAK,QAAQ,KAAA;EAC5C,IAAI,CAAC,QAAQ,CAAC,MACZ,OAAO;EAET,MAAM,SAAS,SAAS,IAAI,UAAU,QAAQ,IAAI,UAAU;EAC5D,MAAM,OAAO,IAAI,QAAQ;EACzB,MAAM,QAAQ,MAAM,SAAS;EAC7B,MAAM,SAAS,KAAK,OAAQ,IAAI,SAAS,KAAK,IAAK,KAAK,IAAI,MAAO;EACnE,MAAM,OAAmB,IAAI,QAAQ;EACrC,MAAM,EAAE,UAAU,cAAc,OAAO,IAAI,IAAI,GAAG;GAChD,OAAO;GAAQ;GAAQ,KAAK,KAAK;GAAK,QAAQ;GAAO,MAAM;IAAE,YAAY;IAAM;IAAM;IAAO,QAAQ,IAAI,UAAU;GAAK;EACzH,CAAC;EAED,MAAM,UAAU,aAAa,GAAG,CAAC;EACjC,IAAI,CAAC,SACH,OAAO;EAET,QAAQ,IAAI,UAAU,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK;EAC1D,QAAQ,IAAI,MAAM,OAAO,KAAK;EAC9B,WAAW,QAAQ,KAAK,OAAO,YAAY;EAC3C,KAAK,IAAI,UAAU,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;EACvC,KAAK,IAAI,UAAU,QAAQ,QAAQ,KAAK,GAAG,KAAK,CAAC;EACjD,KAAK,OAAQ,KAAK,SAAS;EAC3B,KAAK,aAAa,IAAI,OAAO,IAAI,IAAI,GAAG,EAAE;EAC1C,KAAK,OAAO,IAAI,IAAI;GAClB,MAAM,KAAK;GAAM,QAAQ,KAAK;GAAQ,GAAG,KAAK;GAAG,GAAG,KAAK;GAAG;GAAG;GAC/D,OAAO,IAAI,IAAI,IAAI;GAAO,OAAO,IAAI,IAAI,IAAI;GAAO,QAAQ;GAAO,SAAS,KAAK;EACnF,CAAC;EACD,OAAO;CACT;AACF;;AAGA,SAAgB,YAAY,OAAqB,CAAC,GAAgB;CAChE,OAAO,IAAI,YAAY,IAAI;AAC7B;;;;;;;;;;;;;;;;;;;;;;;;ACrLA,MAAa,SAAS;CACpB,KAAK;CACL,SAAS;CACT,QAAQ;CACR,UAAU;CACV,QAAQ;CACR,SAAS;AACX"}