@aura3d/controls 1.0.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 (76) hide show
  1. package/dist/ControlState.d.ts +14 -0
  2. package/dist/ControlState.d.ts.map +1 -0
  3. package/dist/ControlState.js +11 -0
  4. package/dist/ControlState.js.map +1 -0
  5. package/dist/DragControls.d.ts +8 -0
  6. package/dist/DragControls.d.ts.map +1 -0
  7. package/dist/DragControls.js +14 -0
  8. package/dist/DragControls.js.map +1 -0
  9. package/dist/FirstPersonControls.d.ts +5 -0
  10. package/dist/FirstPersonControls.d.ts.map +1 -0
  11. package/dist/FirstPersonControls.js +8 -0
  12. package/dist/FirstPersonControls.js.map +1 -0
  13. package/dist/FlyControls.d.ts +8 -0
  14. package/dist/FlyControls.d.ts.map +1 -0
  15. package/dist/FlyControls.js +12 -0
  16. package/dist/FlyControls.js.map +1 -0
  17. package/dist/InteractionControls.d.ts +83 -0
  18. package/dist/InteractionControls.d.ts.map +1 -0
  19. package/dist/InteractionControls.js +163 -0
  20. package/dist/InteractionControls.js.map +1 -0
  21. package/dist/MapControls.d.ts +6 -0
  22. package/dist/MapControls.d.ts.map +1 -0
  23. package/dist/MapControls.js +9 -0
  24. package/dist/MapControls.js.map +1 -0
  25. package/dist/NativeControlTypes.d.ts +49 -0
  26. package/dist/NativeControlTypes.d.ts.map +1 -0
  27. package/dist/NativeControlTypes.js +58 -0
  28. package/dist/NativeControlTypes.js.map +1 -0
  29. package/dist/OrbitControls.d.ts +11 -0
  30. package/dist/OrbitControls.d.ts.map +1 -0
  31. package/dist/OrbitControls.js +25 -0
  32. package/dist/OrbitControls.js.map +1 -0
  33. package/dist/Picking.d.ts +41 -0
  34. package/dist/Picking.d.ts.map +1 -0
  35. package/dist/Picking.js +149 -0
  36. package/dist/Picking.js.map +1 -0
  37. package/dist/PickingAnnotations.d.ts +134 -0
  38. package/dist/PickingAnnotations.d.ts.map +1 -0
  39. package/dist/PickingAnnotations.js +221 -0
  40. package/dist/PickingAnnotations.js.map +1 -0
  41. package/dist/PointerLockControls.d.ts +9 -0
  42. package/dist/PointerLockControls.d.ts.map +1 -0
  43. package/dist/PointerLockControls.js +14 -0
  44. package/dist/PointerLockControls.js.map +1 -0
  45. package/dist/SelectionManager.d.ts +8 -0
  46. package/dist/SelectionManager.d.ts.map +1 -0
  47. package/dist/SelectionManager.js +15 -0
  48. package/dist/SelectionManager.js.map +1 -0
  49. package/dist/TrackballControls.d.ts +18 -0
  50. package/dist/TrackballControls.d.ts.map +1 -0
  51. package/dist/TrackballControls.js +99 -0
  52. package/dist/TrackballControls.js.map +1 -0
  53. package/dist/TransformControls.d.ts +11 -0
  54. package/dist/TransformControls.d.ts.map +1 -0
  55. package/dist/TransformControls.js +19 -0
  56. package/dist/TransformControls.js.map +1 -0
  57. package/dist/index.d.ts +21 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +15 -0
  60. package/dist/index.js.map +1 -0
  61. package/package.json +16 -0
  62. package/src/ControlState.ts +24 -0
  63. package/src/DragControls.ts +17 -0
  64. package/src/FirstPersonControls.ts +8 -0
  65. package/src/FlyControls.ts +14 -0
  66. package/src/InteractionControls.ts +224 -0
  67. package/src/MapControls.ts +10 -0
  68. package/src/NativeControlTypes.ts +93 -0
  69. package/src/OrbitControls.ts +25 -0
  70. package/src/Picking.ts +234 -0
  71. package/src/PickingAnnotations.ts +391 -0
  72. package/src/PointerLockControls.ts +15 -0
  73. package/src/SelectionManager.ts +18 -0
  74. package/src/TrackballControls.ts +116 -0
  75. package/src/TransformControls.ts +19 -0
  76. package/src/index.ts +58 -0
@@ -0,0 +1,14 @@
1
+ import { ControlVector3 } from "./NativeControlTypes";
2
+ export interface ThreeCompatControlEvent {
3
+ readonly type: string;
4
+ readonly delta?: ControlVector3;
5
+ }
6
+ export interface ThreeCompatControlState {
7
+ readonly target: ControlVector3;
8
+ readonly position: ControlVector3;
9
+ readonly rotation: ControlVector3;
10
+ readonly zoom: number;
11
+ readonly enabled: boolean;
12
+ }
13
+ export declare function createDefaultControlState(): ThreeCompatControlState;
14
+ //# sourceMappingURL=ControlState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlState.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/ControlState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,IAAI,uBAAuB,CAQnE"}
@@ -0,0 +1,11 @@
1
+ import { ControlVector3 } from "./NativeControlTypes.js";
2
+ export function createDefaultControlState() {
3
+ return {
4
+ target: new ControlVector3(),
5
+ position: new ControlVector3(0, 0, 5),
6
+ rotation: new ControlVector3(),
7
+ zoom: 1,
8
+ enabled: true
9
+ };
10
+ }
11
+ //# sourceMappingURL=ControlState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlState.js","sourceRoot":"","sources":["../../../../packages/controls/src/ControlState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAetD,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,MAAM,EAAE,IAAI,cAAc,EAAE;QAC5B,QAAQ,EAAE,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrC,QAAQ,EAAE,IAAI,cAAc,EAAE;QAC9B,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type ControlObject3DLike, type Vector3Like } from "./NativeControlTypes";
2
+ export declare class DragControls {
3
+ dragging: ControlObject3DLike | null;
4
+ start(object: ControlObject3DLike): void;
5
+ drag(delta: Vector3Like): void;
6
+ end(): void;
7
+ }
8
+ //# sourceMappingURL=DragControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DragControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/DragControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE9F,qBAAa,YAAY;IACvB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAE5C,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAIxC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI9B,GAAG,IAAI,IAAI;CAGZ"}
@@ -0,0 +1,14 @@
1
+ import { addVector3 } from "./NativeControlTypes.js";
2
+ export class DragControls {
3
+ dragging = null;
4
+ start(object) {
5
+ this.dragging = object;
6
+ }
7
+ drag(delta) {
8
+ addVector3(this.dragging?.position, delta);
9
+ }
10
+ end() {
11
+ this.dragging = null;
12
+ }
13
+ }
14
+ //# sourceMappingURL=DragControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DragControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/DragControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA8C,MAAM,sBAAsB,CAAC;AAE9F,MAAM,OAAO,YAAY;IACvB,QAAQ,GAA+B,IAAI,CAAC;IAE5C,KAAK,CAAC,MAA2B;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { FlyControls } from "./FlyControls";
2
+ export declare class FirstPersonControls extends FlyControls {
3
+ look(deltaX: number, deltaY: number): void;
4
+ }
5
+ //# sourceMappingURL=FirstPersonControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirstPersonControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/FirstPersonControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAI3C"}
@@ -0,0 +1,8 @@
1
+ import { FlyControls } from "./FlyControls.js";
2
+ export class FirstPersonControls extends FlyControls {
3
+ look(deltaX, deltaY) {
4
+ this.state.rotation.y += deltaX;
5
+ this.state.rotation.x += deltaY;
6
+ }
7
+ }
8
+ //# sourceMappingURL=FirstPersonControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirstPersonControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/FirstPersonControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,IAAI,CAAC,MAAc,EAAE,MAAc;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { type ThreeCompatControlState } from "./ControlState";
2
+ export declare class FlyControls {
3
+ readonly state: ThreeCompatControlState;
4
+ movementSpeed: number;
5
+ moveForward(distance: number): void;
6
+ strafe(distance: number): void;
7
+ }
8
+ //# sourceMappingURL=FlyControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlyControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/FlyControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzF,qBAAa,WAAW;IACtB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAA+B;IACtE,aAAa,SAAK;IAElB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAG/B"}
@@ -0,0 +1,12 @@
1
+ import { createDefaultControlState } from "./ControlState.js";
2
+ export class FlyControls {
3
+ state = createDefaultControlState();
4
+ movementSpeed = 1;
5
+ moveForward(distance) {
6
+ this.state.position.z -= distance * this.movementSpeed;
7
+ }
8
+ strafe(distance) {
9
+ this.state.position.x += distance * this.movementSpeed;
10
+ }
11
+ }
12
+ //# sourceMappingURL=FlyControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlyControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/FlyControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAgC,MAAM,gBAAgB,CAAC;AAEzF,MAAM,OAAO,WAAW;IACb,KAAK,GAA4B,yBAAyB,EAAE,CAAC;IACtE,aAAa,GAAG,CAAC,CAAC;IAElB,WAAW,CAAC,QAAgB;QAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IACzD,CAAC;CACF"}
@@ -0,0 +1,83 @@
1
+ import { InputSnapshot } from "@aura3d/input";
2
+ import { FlyControls } from "./FlyControls";
3
+ import { OrbitControls } from "./OrbitControls";
4
+ import { Picking, type PickingOptions, type PickingReport, type ThreeCompatPickResult } from "./Picking";
5
+ import { type ControlObject3DLike, type Vector3Like } from "./NativeControlTypes";
6
+ export type InteractionControlMode = "orbit" | "fly";
7
+ export type InteractionControlsEventType = "mode-change" | "hover-enter" | "hover-exit" | "pick" | "hotspot-click";
8
+ export interface InteractionRay {
9
+ readonly origin: Vector3Like;
10
+ readonly direction: Vector3Like;
11
+ }
12
+ export type InteractionRayProvider = (snapshot: InputSnapshot) => InteractionRay;
13
+ export type InteractionRootProvider = () => ControlObject3DLike | undefined;
14
+ export type InteractionControlsListener = (event: InteractionControlsEvent) => void;
15
+ export type HotspotHandler = (event: InteractionControlsEvent & {
16
+ readonly hit: ThreeCompatPickResult;
17
+ }) => void;
18
+ export interface InteractionControlsOptions {
19
+ readonly mode?: InteractionControlMode;
20
+ readonly orbit?: OrbitControls;
21
+ readonly fly?: FlyControls;
22
+ readonly picking?: Picking;
23
+ readonly root?: ControlObject3DLike | InteractionRootProvider;
24
+ readonly rayProvider?: InteractionRayProvider;
25
+ readonly pickOptions?: PickingOptions;
26
+ readonly rotateButton?: number;
27
+ readonly panButton?: number;
28
+ readonly rotateSpeed?: number;
29
+ readonly panSpeed?: number;
30
+ readonly dollySpeed?: number;
31
+ readonly flyMoveSpeed?: number;
32
+ }
33
+ export interface InteractionControlsEvent {
34
+ readonly type: InteractionControlsEventType;
35
+ readonly mode: InteractionControlMode;
36
+ readonly snapshot: InputSnapshot;
37
+ readonly hit?: ThreeCompatPickResult;
38
+ readonly previousHit?: ThreeCompatPickResult;
39
+ }
40
+ export interface InteractionControlsUpdate {
41
+ readonly mode: InteractionControlMode;
42
+ readonly pickReport?: PickingReport;
43
+ readonly hit: ThreeCompatPickResult | null;
44
+ }
45
+ export declare class InteractionControls {
46
+ readonly orbit: OrbitControls;
47
+ readonly fly: FlyControls;
48
+ readonly picking: Picking;
49
+ enabled: boolean;
50
+ private controlMode;
51
+ private rootRef?;
52
+ private rayProvider?;
53
+ private pickOptions;
54
+ private readonly listeners;
55
+ private readonly hotspotHandlers;
56
+ private hoverHit;
57
+ private disposed;
58
+ private readonly rotateButton;
59
+ private readonly panButton;
60
+ private readonly rotateSpeed;
61
+ private readonly panSpeed;
62
+ private readonly dollySpeed;
63
+ private readonly flyMoveSpeed;
64
+ constructor(options?: InteractionControlsOptions);
65
+ get mode(): InteractionControlMode;
66
+ setMode(mode: InteractionControlMode, snapshot?: InputSnapshot): void;
67
+ setRoot(root: ControlObject3DLike | InteractionRootProvider | undefined): void;
68
+ setRayProvider(provider: InteractionRayProvider | undefined): void;
69
+ setPickOptions(options: PickingOptions): void;
70
+ subscribe(listener: InteractionControlsListener): () => void;
71
+ onHotspot(id: string, handler: HotspotHandler): () => void;
72
+ update(snapshot: InputSnapshot): InteractionControlsUpdate;
73
+ pick(snapshot: InputSnapshot): PickingReport | undefined;
74
+ dispose(): void;
75
+ private updateOrbit;
76
+ private updateFly;
77
+ private updatePicking;
78
+ private emitHotspot;
79
+ private emit;
80
+ private resolveRoot;
81
+ private resolveRay;
82
+ }
83
+ //# sourceMappingURL=InteractionControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractionControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/InteractionControls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ import { InputSnapshot } from "@aura3d/input";
2
+ import { FlyControls } from "./FlyControls.js";
3
+ import { OrbitControls } from "./OrbitControls.js";
4
+ import { Picking } from "./Picking.js";
5
+ import { ControlVector3 } from "./NativeControlTypes.js";
6
+ export class InteractionControls {
7
+ orbit;
8
+ fly;
9
+ picking;
10
+ enabled = true;
11
+ controlMode;
12
+ rootRef;
13
+ rayProvider;
14
+ pickOptions;
15
+ listeners = new Set();
16
+ hotspotHandlers = new Map();
17
+ hoverHit = null;
18
+ disposed = false;
19
+ rotateButton;
20
+ panButton;
21
+ rotateSpeed;
22
+ panSpeed;
23
+ dollySpeed;
24
+ flyMoveSpeed;
25
+ constructor(options = {}) {
26
+ this.orbit = options.orbit ?? new OrbitControls();
27
+ this.fly = options.fly ?? new FlyControls();
28
+ this.picking = options.picking ?? new Picking();
29
+ this.controlMode = options.mode ?? "orbit";
30
+ this.rootRef = options.root;
31
+ this.rayProvider = options.rayProvider;
32
+ this.pickOptions = options.pickOptions ?? {};
33
+ this.rotateButton = options.rotateButton ?? 0;
34
+ this.panButton = options.panButton ?? 1;
35
+ this.rotateSpeed = options.rotateSpeed ?? 0.005;
36
+ this.panSpeed = options.panSpeed ?? 0.01;
37
+ this.dollySpeed = options.dollySpeed ?? 0.001;
38
+ this.flyMoveSpeed = options.flyMoveSpeed ?? 1;
39
+ }
40
+ get mode() {
41
+ return this.controlMode;
42
+ }
43
+ setMode(mode, snapshot = new InputSnapshot()) {
44
+ if (this.controlMode === mode)
45
+ return;
46
+ this.controlMode = mode;
47
+ this.emit({ type: "mode-change", mode, snapshot });
48
+ }
49
+ setRoot(root) {
50
+ this.rootRef = root;
51
+ this.hoverHit = null;
52
+ }
53
+ setRayProvider(provider) {
54
+ this.rayProvider = provider;
55
+ }
56
+ setPickOptions(options) {
57
+ this.pickOptions = options;
58
+ }
59
+ subscribe(listener) {
60
+ this.listeners.add(listener);
61
+ return () => this.listeners.delete(listener);
62
+ }
63
+ onHotspot(id, handler) {
64
+ const handlers = this.hotspotHandlers.get(id) ?? new Set();
65
+ handlers.add(handler);
66
+ this.hotspotHandlers.set(id, handlers);
67
+ return () => {
68
+ handlers.delete(handler);
69
+ if (handlers.size === 0)
70
+ this.hotspotHandlers.delete(id);
71
+ };
72
+ }
73
+ update(snapshot) {
74
+ if (this.disposed || !this.enabled) {
75
+ return { mode: this.controlMode, hit: this.hoverHit };
76
+ }
77
+ if (this.controlMode === "orbit") {
78
+ this.updateOrbit(snapshot);
79
+ }
80
+ else {
81
+ this.updateFly(snapshot);
82
+ }
83
+ const pickReport = this.updatePicking(snapshot);
84
+ return { mode: this.controlMode, pickReport, hit: pickReport?.hit ?? null };
85
+ }
86
+ pick(snapshot) {
87
+ const root = this.resolveRoot();
88
+ if (!root)
89
+ return undefined;
90
+ const ray = this.resolveRay(snapshot);
91
+ return this.picking.report(root, ray.origin, ray.direction, this.pickOptions);
92
+ }
93
+ dispose() {
94
+ this.disposed = true;
95
+ this.listeners.clear();
96
+ this.hotspotHandlers.clear();
97
+ this.hoverHit = null;
98
+ }
99
+ updateOrbit(snapshot) {
100
+ if (snapshot.button(this.rotateButton).down) {
101
+ this.orbit.rotate(snapshot.pointer.deltaX * this.rotateSpeed, snapshot.pointer.deltaY * this.rotateSpeed);
102
+ }
103
+ if (snapshot.button(this.panButton).down) {
104
+ this.orbit.pan(snapshot.pointer.deltaX * this.panSpeed, -snapshot.pointer.deltaY * this.panSpeed);
105
+ }
106
+ if (snapshot.pointer.wheelY !== 0) {
107
+ this.orbit.dolly(Math.max(0.01, 1 + snapshot.pointer.wheelY * this.dollySpeed));
108
+ }
109
+ }
110
+ updateFly(snapshot) {
111
+ const distance = this.flyMoveSpeed;
112
+ if (snapshot.key("KeyW").down || snapshot.key("ArrowUp").down)
113
+ this.fly.moveForward(distance);
114
+ if (snapshot.key("KeyS").down || snapshot.key("ArrowDown").down)
115
+ this.fly.moveForward(-distance);
116
+ if (snapshot.key("KeyA").down || snapshot.key("ArrowLeft").down)
117
+ this.fly.strafe(-distance);
118
+ if (snapshot.key("KeyD").down || snapshot.key("ArrowRight").down)
119
+ this.fly.strafe(distance);
120
+ }
121
+ updatePicking(snapshot) {
122
+ const pickReport = this.pick(snapshot);
123
+ const hit = pickReport?.hit ?? null;
124
+ const previousHit = this.hoverHit;
125
+ if (previousHit?.object !== hit?.object) {
126
+ if (previousHit)
127
+ this.emit({ type: "hover-exit", mode: this.controlMode, snapshot, previousHit });
128
+ if (hit)
129
+ this.emit({ type: "hover-enter", mode: this.controlMode, snapshot, hit, previousHit: previousHit ?? undefined });
130
+ this.hoverHit = hit;
131
+ }
132
+ if (hit && snapshot.button(0).released) {
133
+ const event = { type: "pick", mode: this.controlMode, snapshot, hit, previousHit: previousHit ?? undefined };
134
+ this.emit(event);
135
+ this.emitHotspot(event);
136
+ }
137
+ return pickReport;
138
+ }
139
+ emitHotspot(event) {
140
+ const id = event.hit.metadata?.id ?? event.hit.object.name;
141
+ if (!id)
142
+ return;
143
+ const hotspotEvent = { ...event, type: "hotspot-click" };
144
+ this.emit(hotspotEvent);
145
+ for (const handler of [...(this.hotspotHandlers.get(id) ?? [])]) {
146
+ handler(hotspotEvent);
147
+ }
148
+ }
149
+ emit(event) {
150
+ for (const listener of [...this.listeners])
151
+ listener(event);
152
+ }
153
+ resolveRoot() {
154
+ return typeof this.rootRef === "function" ? this.rootRef() : this.rootRef;
155
+ }
156
+ resolveRay(snapshot) {
157
+ return this.rayProvider?.(snapshot) ?? {
158
+ origin: new ControlVector3(),
159
+ direction: new ControlVector3(0, 0, -1)
160
+ };
161
+ }
162
+ }
163
+ //# sourceMappingURL=InteractionControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractionControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/InteractionControls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { OrbitControls } from "./OrbitControls";
2
+ export declare class MapControls extends OrbitControls {
3
+ readonly screenSpacePanning = false;
4
+ truck(deltaX: number, deltaZ: number): void;
5
+ }
6
+ //# sourceMappingURL=MapControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/MapControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,WAAY,SAAQ,aAAa;IAC5C,QAAQ,CAAC,kBAAkB,SAAS;IAEpC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAI5C"}
@@ -0,0 +1,9 @@
1
+ import { OrbitControls } from "./OrbitControls.js";
2
+ export class MapControls extends OrbitControls {
3
+ screenSpacePanning = false;
4
+ truck(deltaX, deltaZ) {
5
+ this.state.target.x += deltaX;
6
+ this.state.target.z += deltaZ;
7
+ }
8
+ }
9
+ //# sourceMappingURL=MapControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/MapControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,OAAO,WAAY,SAAQ,aAAa;IACnC,kBAAkB,GAAG,KAAK,CAAC;IAEpC,KAAK,CAAC,MAAc,EAAE,MAAc;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ export interface Vector3Like {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ }
6
+ export interface ControlPickMetadata {
7
+ readonly id?: string;
8
+ readonly label?: string;
9
+ readonly kind?: string;
10
+ readonly group?: string;
11
+ readonly routeId?: string;
12
+ readonly source?: string;
13
+ readonly targetId?: string;
14
+ readonly selectable?: boolean;
15
+ readonly highlightable?: boolean;
16
+ readonly pickRadius?: number;
17
+ readonly priority?: number;
18
+ readonly payload?: unknown;
19
+ }
20
+ export declare class ControlVector3 implements Vector3Like {
21
+ x: number;
22
+ y: number;
23
+ z: number;
24
+ constructor(x?: number, y?: number, z?: number);
25
+ set(x: number, y: number, z: number): this;
26
+ copy(value: Vector3Like): this;
27
+ clone(): ControlVector3;
28
+ add(value: Vector3Like): this;
29
+ sub(value: Vector3Like): this;
30
+ length(): number;
31
+ normalize(): this;
32
+ }
33
+ export interface ControlObject3DLike {
34
+ readonly name?: string;
35
+ readonly type?: string;
36
+ readonly children?: readonly ControlObject3DLike[];
37
+ readonly position: Vector3Like;
38
+ readonly rotation?: Vector3Like;
39
+ readonly scale?: Vector3Like;
40
+ readonly visible?: boolean;
41
+ readonly pickRadius?: number;
42
+ readonly pickPriority?: number;
43
+ readonly picking?: ControlPickMetadata;
44
+ readonly userData?: Record<string, unknown>;
45
+ traverse?(callback: (object: ControlObject3DLike) => void): void;
46
+ }
47
+ export declare function addVector3(target: Vector3Like | undefined, delta: Vector3Like): void;
48
+ export declare function traverseControlObject(root: ControlObject3DLike, callback: (object: ControlObject3DLike) => void): void;
49
+ //# sourceMappingURL=NativeControlTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeControlTypes.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/NativeControlTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAe,YAAW,WAAW;IAC7B,CAAC;IAAa,CAAC;IAAa,CAAC;gBAA7B,CAAC,SAAI,EAAS,CAAC,SAAI,EAAS,CAAC,SAAI;IAEpD,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAO1C,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI9B,KAAK,IAAI,cAAc;IAIvB,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAO7B,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAO7B,MAAM,IAAI,MAAM;IAIhB,SAAS,IAAI,IAAI;CAIlB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI,CAAC;CAClE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAKpF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI,CAOtH"}
@@ -0,0 +1,58 @@
1
+ export class ControlVector3 {
2
+ x;
3
+ y;
4
+ z;
5
+ constructor(x = 0, y = 0, z = 0) {
6
+ this.x = x;
7
+ this.y = y;
8
+ this.z = z;
9
+ }
10
+ set(x, y, z) {
11
+ this.x = x;
12
+ this.y = y;
13
+ this.z = z;
14
+ return this;
15
+ }
16
+ copy(value) {
17
+ return this.set(value.x, value.y, value.z);
18
+ }
19
+ clone() {
20
+ return new ControlVector3(this.x, this.y, this.z);
21
+ }
22
+ add(value) {
23
+ this.x += value.x;
24
+ this.y += value.y;
25
+ this.z += value.z;
26
+ return this;
27
+ }
28
+ sub(value) {
29
+ this.x -= value.x;
30
+ this.y -= value.y;
31
+ this.z -= value.z;
32
+ return this;
33
+ }
34
+ length() {
35
+ return Math.hypot(this.x, this.y, this.z);
36
+ }
37
+ normalize() {
38
+ const length = this.length();
39
+ return length > 0 ? this.set(this.x / length, this.y / length, this.z / length) : this;
40
+ }
41
+ }
42
+ export function addVector3(target, delta) {
43
+ if (!target)
44
+ return;
45
+ target.x += delta.x;
46
+ target.y += delta.y;
47
+ target.z += delta.z;
48
+ }
49
+ export function traverseControlObject(root, callback) {
50
+ if (typeof root.traverse === "function") {
51
+ root.traverse(callback);
52
+ return;
53
+ }
54
+ callback(root);
55
+ for (const child of root.children ?? [])
56
+ traverseControlObject(child, callback);
57
+ }
58
+ //# sourceMappingURL=NativeControlTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeControlTypes.js","sourceRoot":"","sources":["../../../../packages/controls/src/NativeControlTypes.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,cAAc;IACN;IAAc;IAAc;IAA/C,YAAmB,IAAI,CAAC,EAAS,IAAI,CAAC,EAAS,IAAI,CAAC;QAAjC,MAAC,GAAD,CAAC,CAAI;QAAS,MAAC,GAAD,CAAC,CAAI;QAAS,MAAC,GAAD,CAAC,CAAI;IAAG,CAAC;IAExD,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACjC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,GAAG,CAAC,KAAkB;QACpB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAkB;QACpB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,CAAC;CACF;AAiBD,MAAM,UAAU,UAAU,CAAC,MAA+B,EAAE,KAAkB;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAyB,EAAE,QAA+C;IAC9G,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;QAAE,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ThreeCompatControlState } from "./ControlState";
2
+ export declare class OrbitControls {
3
+ readonly state: ThreeCompatControlState;
4
+ enablePan: boolean;
5
+ enableZoom: boolean;
6
+ enableRotate: boolean;
7
+ rotate(deltaX: number, deltaY: number): void;
8
+ pan(deltaX: number, deltaY: number): void;
9
+ dolly(scale: number): void;
10
+ }
11
+ //# sourceMappingURL=OrbitControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrbitControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/OrbitControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzF,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAA+B;IACtE,SAAS,UAAQ;IACjB,UAAU,UAAQ;IAClB,YAAY,UAAQ;IAEpB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM5C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAI3B"}
@@ -0,0 +1,25 @@
1
+ import { createDefaultControlState } from "./ControlState.js";
2
+ export class OrbitControls {
3
+ state = createDefaultControlState();
4
+ enablePan = true;
5
+ enableZoom = true;
6
+ enableRotate = true;
7
+ rotate(deltaX, deltaY) {
8
+ if (!this.enableRotate)
9
+ return;
10
+ this.state.rotation.x += deltaY;
11
+ this.state.rotation.y += deltaX;
12
+ }
13
+ pan(deltaX, deltaY) {
14
+ if (!this.enablePan)
15
+ return;
16
+ this.state.target.x += deltaX;
17
+ this.state.target.y += deltaY;
18
+ }
19
+ dolly(scale) {
20
+ if (!this.enableZoom)
21
+ return;
22
+ this.state.position.z *= scale;
23
+ }
24
+ }
25
+ //# sourceMappingURL=OrbitControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrbitControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/OrbitControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAgC,MAAM,gBAAgB,CAAC;AAEzF,MAAM,OAAO,aAAa;IACf,KAAK,GAA4B,yBAAyB,EAAE,CAAC;IACtE,SAAS,GAAG,IAAI,CAAC;IACjB,UAAU,GAAG,IAAI,CAAC;IAClB,YAAY,GAAG,IAAI,CAAC;IAEpB,MAAM,CAAC,MAAc,EAAE,MAAc;QACnC,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,MAAc;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import { ControlVector3, type ControlObject3DLike, type ControlPickMetadata, type Vector3Like } from "./NativeControlTypes";
2
+ export interface ThreeCompatPickResult {
3
+ readonly object: ControlObject3DLike;
4
+ readonly distance: number;
5
+ readonly distanceAlongRay: number;
6
+ readonly perpendicularDistance: number;
7
+ readonly point: ControlVector3;
8
+ readonly radius: number;
9
+ readonly metadata?: ControlPickMetadata;
10
+ }
11
+ export interface PickingOptions {
12
+ readonly near?: number;
13
+ readonly far?: number;
14
+ readonly tolerance?: number;
15
+ readonly includeInvisible?: boolean;
16
+ readonly includeNonRenderableMetadata?: boolean;
17
+ readonly metadata?: (object: ControlObject3DLike) => ControlPickMetadata | undefined;
18
+ }
19
+ export interface PickingDiagnostics {
20
+ readonly testedObjects: number;
21
+ readonly candidateObjects: number;
22
+ readonly hitCount: number;
23
+ readonly skippedInvisible: number;
24
+ readonly skippedNonPickable: number;
25
+ readonly skippedDisabled: number;
26
+ readonly skippedOutOfRange: number;
27
+ readonly skippedMissedRadius: number;
28
+ readonly nearestMissPerpendicularDistance: number | null;
29
+ readonly nearestHitLabel: string | null;
30
+ }
31
+ export interface PickingReport {
32
+ readonly hit: ThreeCompatPickResult | null;
33
+ readonly hits: readonly ThreeCompatPickResult[];
34
+ readonly diagnostics: PickingDiagnostics;
35
+ }
36
+ export declare class Picking {
37
+ pick(root: ControlObject3DLike, origin?: Vector3Like, direction?: Vector3Like, options?: PickingOptions): ThreeCompatPickResult | null;
38
+ pickAll(root: ControlObject3DLike, origin?: Vector3Like, direction?: Vector3Like, options?: PickingOptions): readonly ThreeCompatPickResult[];
39
+ report(root: ControlObject3DLike, origin?: Vector3Like, direction?: Vector3Like, options?: PickingOptions): PickingReport;
40
+ }
41
+ //# sourceMappingURL=Picking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Picking.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/Picking.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,mBAAmB,GAAG,SAAS,CAAC;CACtF;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;CAC1C;AAED,qBAAa,OAAO;IAClB,IAAI,CACF,IAAI,EAAE,mBAAmB,EACzB,MAAM,GAAE,WAAkC,EAC1C,SAAS,GAAE,WAA0C,EACrD,OAAO,GAAE,cAAmB,GAC3B,qBAAqB,GAAG,IAAI;IAI/B,OAAO,CACL,IAAI,EAAE,mBAAmB,EACzB,MAAM,GAAE,WAAkC,EAC1C,SAAS,GAAE,WAA0C,EACrD,OAAO,GAAE,cAAmB,GAC3B,SAAS,qBAAqB,EAAE;IAInC,MAAM,CACJ,IAAI,EAAE,mBAAmB,EACzB,MAAM,GAAE,WAAkC,EAC1C,SAAS,GAAE,WAA0C,EACrD,OAAO,GAAE,cAAmB,GAC3B,aAAa;CAgFjB"}