@vforsh/phaser-dev-ui 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 (54) hide show
  1. package/README.md +198 -0
  2. package/dist/DebugBadge.d.ts +62 -0
  3. package/dist/DebugBadge.d.ts.map +1 -0
  4. package/dist/DebugBadge.js +206 -0
  5. package/dist/DebugBadge.js.map +1 -0
  6. package/dist/DebugButton.d.ts +94 -0
  7. package/dist/DebugButton.d.ts.map +1 -0
  8. package/dist/DebugButton.js +311 -0
  9. package/dist/DebugButton.js.map +1 -0
  10. package/dist/DebugColumnContainer.d.ts +38 -0
  11. package/dist/DebugColumnContainer.d.ts.map +1 -0
  12. package/dist/DebugColumnContainer.js +69 -0
  13. package/dist/DebugColumnContainer.js.map +1 -0
  14. package/dist/DebugGridContainer.d.ts +44 -0
  15. package/dist/DebugGridContainer.d.ts.map +1 -0
  16. package/dist/DebugGridContainer.js +64 -0
  17. package/dist/DebugGridContainer.js.map +1 -0
  18. package/dist/DebugLabel.d.ts +33 -0
  19. package/dist/DebugLabel.d.ts.map +1 -0
  20. package/dist/DebugLabel.js +37 -0
  21. package/dist/DebugLabel.js.map +1 -0
  22. package/dist/DebugPanel.d.ts +67 -0
  23. package/dist/DebugPanel.d.ts.map +1 -0
  24. package/dist/DebugPanel.js +138 -0
  25. package/dist/DebugPanel.js.map +1 -0
  26. package/dist/DebugProgressBar.d.ts +47 -0
  27. package/dist/DebugProgressBar.d.ts.map +1 -0
  28. package/dist/DebugProgressBar.js +129 -0
  29. package/dist/DebugProgressBar.js.map +1 -0
  30. package/dist/DebugRowContainer.d.ts +40 -0
  31. package/dist/DebugRowContainer.d.ts.map +1 -0
  32. package/dist/DebugRowContainer.js +91 -0
  33. package/dist/DebugRowContainer.js.map +1 -0
  34. package/dist/DebugScrollContainer.d.ts +138 -0
  35. package/dist/DebugScrollContainer.d.ts.map +1 -0
  36. package/dist/DebugScrollContainer.js +413 -0
  37. package/dist/DebugScrollContainer.js.map +1 -0
  38. package/dist/DebugSwitchButton.d.ts +111 -0
  39. package/dist/DebugSwitchButton.d.ts.map +1 -0
  40. package/dist/DebugSwitchButton.js +317 -0
  41. package/dist/DebugSwitchButton.js.map +1 -0
  42. package/dist/index.d.ts +23 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +20 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/types.d.ts +37 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils.d.ts +31 -0
  51. package/dist/utils.d.ts.map +1 -0
  52. package/dist/utils.js +62 -0
  53. package/dist/utils.js.map +1 -0
  54. package/package.json +44 -0
@@ -0,0 +1,138 @@
1
+ import type { HexColor, Position } from "./types.js";
2
+ export interface DebugScrollContainerStyleOptions {
3
+ /** Viewport width. */
4
+ width?: number;
5
+ /** Viewport height. */
6
+ height?: number;
7
+ /** Content padding left. */
8
+ paddingLeft?: number;
9
+ /** Content padding right. */
10
+ paddingRight?: number;
11
+ /** Content padding top. */
12
+ paddingTop?: number;
13
+ /** Content padding bottom. */
14
+ paddingBottom?: number;
15
+ /** Background color. */
16
+ bgColor?: HexColor;
17
+ /** Border color. */
18
+ strokeColor?: HexColor;
19
+ /** Border thickness. */
20
+ strokeThickness?: number;
21
+ /** Corner radius for panel and clip mask. */
22
+ cornerRadius?: number;
23
+ /** Show scrollbar. */
24
+ scrollbarEnabled?: boolean;
25
+ /** Scrollbar width in px. */
26
+ scrollbarWidth?: number;
27
+ /** Scrollbar thumb color. */
28
+ scrollbarColor?: HexColor;
29
+ /** Scrollbar track color. */
30
+ scrollbarTrackColor?: HexColor;
31
+ /** Minimum thumb height. */
32
+ scrollbarMinThumbHeight?: number;
33
+ }
34
+ export interface CreateDebugScrollContainerOptions extends DebugScrollContainerStyleOptions {
35
+ /** Initial scroll offset in px (default: 0). */
36
+ initialScrollY?: number;
37
+ /** Enable mouse-wheel scrolling (default: true). */
38
+ wheelEnabled?: boolean;
39
+ /** Wheel scroll step in px per tick (default: 24). */
40
+ wheelStep?: number;
41
+ /** Enable touch/mouse drag scrolling (default: true). */
42
+ dragEnabled?: boolean;
43
+ /** Position (optional). */
44
+ position?: Position;
45
+ }
46
+ /**
47
+ * A masked vertical scroll container for debug UIs.
48
+ *
49
+ * Add children to the internal content container via `addItem()`/`addItems()`,
50
+ * then call `layout()` if child bounds change. Supports wheel scrolling,
51
+ * clamped scroll range, and optional visual scrollbar.
52
+ */
53
+ export declare class DebugScrollContainer extends Phaser.GameObjects.Container {
54
+ private _panel;
55
+ private _content;
56
+ private _maskGraphics;
57
+ private _scrollbar;
58
+ private _wheelZone;
59
+ private _contentMask;
60
+ private _width;
61
+ private _height;
62
+ private _paddingLeft;
63
+ private _paddingRight;
64
+ private _paddingTop;
65
+ private _paddingBottom;
66
+ private _bgColor;
67
+ private _strokeColor;
68
+ private _strokeThickness;
69
+ private _cornerRadius;
70
+ private _scrollbarEnabled;
71
+ private _scrollbarWidth;
72
+ private _scrollbarColor;
73
+ private _scrollbarTrackColor;
74
+ private _scrollbarMinThumbHeight;
75
+ private _wheelEnabled;
76
+ private _wheelStep;
77
+ private _dragEnabled;
78
+ private _contentMinY;
79
+ private _contentHeight;
80
+ private _scrollY;
81
+ private _isDragging;
82
+ private _dragStartY;
83
+ private _dragScrollStart;
84
+ private readonly _wheelHandler;
85
+ private readonly _dragMoveHandler;
86
+ private readonly _dragUpHandler;
87
+ private readonly _preUpdateHandler;
88
+ constructor(scene: Phaser.Scene, options?: CreateDebugScrollContainerOptions);
89
+ addItem(child: Phaser.GameObjects.GameObject): this;
90
+ addItems(children: Phaser.GameObjects.GameObject[]): this;
91
+ removeItem(child: Phaser.GameObjects.GameObject, destroyChild?: boolean): this;
92
+ removeAllItems(destroyChildren?: boolean): this;
93
+ getContentContainer(): Phaser.GameObjects.Container;
94
+ layout(): this;
95
+ setScrollY(value: number): this;
96
+ scrollBy(deltaY: number): this;
97
+ scrollToTop(): this;
98
+ scrollToBottom(): this;
99
+ getScrollY(): number;
100
+ getMaxScrollY(): number;
101
+ getContentHeight(): number;
102
+ setWheelEnabled(enabled: boolean): this;
103
+ setWheelStep(step: number): this;
104
+ setDragEnabled(enabled: boolean): this;
105
+ setScrollbarEnabled(enabled: boolean): this;
106
+ setViewportSize(width: number, height: number): this;
107
+ setPadding(options: {
108
+ left?: number;
109
+ right?: number;
110
+ top?: number;
111
+ bottom?: number;
112
+ }): this;
113
+ setStyle(options: DebugScrollContainerStyleOptions): this;
114
+ destroy(fromScene?: boolean): void;
115
+ private redrawPanel;
116
+ private redrawMaskAndWheelZone;
117
+ /**
118
+ * Syncs the mask graphics position to this container's world transform.
119
+ *
120
+ * Phaser's GeometryMask renders the mask graphics without the parent
121
+ * container's transform matrix, so we position the standalone graphics
122
+ * at the container's world origin each frame.
123
+ */
124
+ private syncMaskPosition;
125
+ private updateContentMetrics;
126
+ private applyScroll;
127
+ private redrawScrollbar;
128
+ private handleWheel;
129
+ private isWheelOverThisContainer;
130
+ private ownsObject;
131
+ private getItemHalfHeight;
132
+ private getViewportLeft;
133
+ private getViewportTop;
134
+ private getViewportWidth;
135
+ private getViewportHeight;
136
+ }
137
+ export declare function createDebugScrollContainer(scene: Phaser.Scene, options?: CreateDebugScrollContainerOptions): DebugScrollContainer;
138
+ //# sourceMappingURL=DebugScrollContainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebugScrollContainer.d.ts","sourceRoot":"","sources":["../src/DebugScrollContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,413 @@
1
+ import { hexToColorAlpha } from "./utils.js";
2
+ /**
3
+ * A masked vertical scroll container for debug UIs.
4
+ *
5
+ * Add children to the internal content container via `addItem()`/`addItems()`,
6
+ * then call `layout()` if child bounds change. Supports wheel scrolling,
7
+ * clamped scroll range, and optional visual scrollbar.
8
+ */
9
+ export class DebugScrollContainer extends Phaser.GameObjects.Container {
10
+ _panel;
11
+ _content;
12
+ _maskGraphics;
13
+ _scrollbar;
14
+ _wheelZone;
15
+ _contentMask;
16
+ _width;
17
+ _height;
18
+ _paddingLeft;
19
+ _paddingRight;
20
+ _paddingTop;
21
+ _paddingBottom;
22
+ _bgColor;
23
+ _strokeColor;
24
+ _strokeThickness;
25
+ _cornerRadius;
26
+ _scrollbarEnabled;
27
+ _scrollbarWidth;
28
+ _scrollbarColor;
29
+ _scrollbarTrackColor;
30
+ _scrollbarMinThumbHeight;
31
+ _wheelEnabled;
32
+ _wheelStep;
33
+ _dragEnabled;
34
+ _contentMinY = 0;
35
+ _contentHeight = 0;
36
+ _scrollY = 0;
37
+ _isDragging = false;
38
+ _dragStartY = 0;
39
+ _dragScrollStart = 0;
40
+ _wheelHandler;
41
+ _dragMoveHandler;
42
+ _dragUpHandler;
43
+ _preUpdateHandler;
44
+ constructor(scene, options = {}) {
45
+ const { width = 320, height = 220, paddingLeft = 10, paddingRight = 10, paddingTop = 10, paddingBottom = 10, bgColor = "#000000", strokeColor = "#a3a3a3", strokeThickness = 2, cornerRadius = 10, scrollbarEnabled = true, scrollbarWidth = 6, scrollbarColor = "#a3a3a3", scrollbarTrackColor = "#262626", scrollbarMinThumbHeight = 24, wheelEnabled = true, wheelStep = 24, dragEnabled = true, initialScrollY = 0, position, } = options;
46
+ super(scene, position?.x ?? 0, position?.y ?? 0);
47
+ this._width = width;
48
+ this._height = height;
49
+ this._paddingLeft = paddingLeft;
50
+ this._paddingRight = paddingRight;
51
+ this._paddingTop = paddingTop;
52
+ this._paddingBottom = paddingBottom;
53
+ this._bgColor = bgColor;
54
+ this._strokeColor = strokeColor;
55
+ this._strokeThickness = strokeThickness;
56
+ this._cornerRadius = cornerRadius;
57
+ this._scrollbarEnabled = scrollbarEnabled;
58
+ this._scrollbarWidth = scrollbarWidth;
59
+ this._scrollbarColor = scrollbarColor;
60
+ this._scrollbarTrackColor = scrollbarTrackColor;
61
+ this._scrollbarMinThumbHeight = scrollbarMinThumbHeight;
62
+ this._wheelEnabled = wheelEnabled;
63
+ this._wheelStep = wheelStep;
64
+ this._dragEnabled = dragEnabled;
65
+ this.setSize(width, height);
66
+ this._panel = scene.add.graphics();
67
+ this._content = scene.add.container(0, 0);
68
+ this._maskGraphics = new Phaser.GameObjects.Graphics(scene);
69
+ this._scrollbar = scene.add.graphics();
70
+ this._wheelZone = scene.add.zone(0, 0, 1, 1).setInteractive();
71
+ this._wheelZone.input.cursor = "default";
72
+ this._contentMask = this._maskGraphics.createGeometryMask();
73
+ this._content.setMask(this._contentMask);
74
+ this.add([this._panel, this._wheelZone, this._content, this._scrollbar]);
75
+ this._preUpdateHandler = () => this.syncMaskPosition();
76
+ scene.events.on("preupdate", this._preUpdateHandler);
77
+ this._wheelHandler = (_pointer, currentlyOver, _deltaX, deltaY, _deltaZ, event) => {
78
+ this.handleWheel(currentlyOver, deltaY, event);
79
+ };
80
+ scene.input.on("wheel", this._wheelHandler);
81
+ this._wheelZone.on("pointerdown", (pointer) => {
82
+ if (!this._dragEnabled)
83
+ return;
84
+ this._isDragging = true;
85
+ this._dragStartY = pointer.y;
86
+ this._dragScrollStart = this._scrollY;
87
+ });
88
+ this._dragMoveHandler = (pointer) => {
89
+ if (!this._isDragging)
90
+ return;
91
+ const deltaY = this._dragStartY - pointer.y;
92
+ this.setScrollY(this._dragScrollStart + deltaY);
93
+ };
94
+ scene.input.on("pointermove", this._dragMoveHandler);
95
+ this._dragUpHandler = () => {
96
+ this._isDragging = false;
97
+ };
98
+ scene.input.on("pointerup", this._dragUpHandler);
99
+ this.layout();
100
+ this.setScrollY(initialScrollY);
101
+ scene.add.existing(this);
102
+ }
103
+ addItem(child) {
104
+ this._content.add(child);
105
+ return this.layout();
106
+ }
107
+ addItems(children) {
108
+ if (children.length === 0)
109
+ return this;
110
+ this._content.add(children);
111
+ return this.layout();
112
+ }
113
+ removeItem(child, destroyChild = false) {
114
+ if (!this._content.exists(child))
115
+ return this;
116
+ this._content.remove(child, destroyChild);
117
+ return this.layout();
118
+ }
119
+ removeAllItems(destroyChildren = false) {
120
+ if (this._content.list.length === 0)
121
+ return this;
122
+ this._content.removeAll(destroyChildren);
123
+ return this.layout();
124
+ }
125
+ getContentContainer() {
126
+ return this._content;
127
+ }
128
+ layout() {
129
+ this.setSize(this._width, this._height);
130
+ this.redrawPanel();
131
+ this.redrawMaskAndWheelZone();
132
+ this.updateContentMetrics();
133
+ this._scrollY = Phaser.Math.Clamp(this._scrollY, 0, this.getMaxScrollY());
134
+ this.applyScroll();
135
+ this.redrawScrollbar();
136
+ return this;
137
+ }
138
+ setScrollY(value) {
139
+ const clamped = Phaser.Math.Clamp(value, 0, this.getMaxScrollY());
140
+ if (clamped === this._scrollY)
141
+ return this;
142
+ this._scrollY = clamped;
143
+ this.applyScroll();
144
+ this.redrawScrollbar();
145
+ this.emit("scroll-changed", this._scrollY, this.getMaxScrollY());
146
+ return this;
147
+ }
148
+ scrollBy(deltaY) {
149
+ if (deltaY === 0)
150
+ return this;
151
+ return this.setScrollY(this._scrollY + deltaY);
152
+ }
153
+ scrollToTop() {
154
+ return this.setScrollY(0);
155
+ }
156
+ scrollToBottom() {
157
+ return this.setScrollY(this.getMaxScrollY());
158
+ }
159
+ getScrollY() {
160
+ return this._scrollY;
161
+ }
162
+ getMaxScrollY() {
163
+ return Math.max(0, this._contentHeight - this.getViewportHeight());
164
+ }
165
+ getContentHeight() {
166
+ return this._contentHeight;
167
+ }
168
+ setWheelEnabled(enabled) {
169
+ this._wheelEnabled = enabled;
170
+ return this;
171
+ }
172
+ setWheelStep(step) {
173
+ this._wheelStep = Math.max(1, step);
174
+ return this;
175
+ }
176
+ setDragEnabled(enabled) {
177
+ this._dragEnabled = enabled;
178
+ if (!enabled)
179
+ this._isDragging = false;
180
+ return this;
181
+ }
182
+ setScrollbarEnabled(enabled) {
183
+ if (this._scrollbarEnabled === enabled)
184
+ return this;
185
+ this._scrollbarEnabled = enabled;
186
+ this.redrawScrollbar();
187
+ return this;
188
+ }
189
+ setViewportSize(width, height) {
190
+ this._width = Math.max(1, width);
191
+ this._height = Math.max(1, height);
192
+ this.setSize(this._width, this._height);
193
+ return this.layout();
194
+ }
195
+ setPadding(options) {
196
+ if (options.left !== undefined)
197
+ this._paddingLeft = options.left;
198
+ if (options.right !== undefined)
199
+ this._paddingRight = options.right;
200
+ if (options.top !== undefined)
201
+ this._paddingTop = options.top;
202
+ if (options.bottom !== undefined)
203
+ this._paddingBottom = options.bottom;
204
+ return this.layout();
205
+ }
206
+ setStyle(options) {
207
+ if (options.width !== undefined)
208
+ this._width = Math.max(1, options.width);
209
+ if (options.height !== undefined)
210
+ this._height = Math.max(1, options.height);
211
+ if (options.paddingLeft !== undefined)
212
+ this._paddingLeft = options.paddingLeft;
213
+ if (options.paddingRight !== undefined)
214
+ this._paddingRight = options.paddingRight;
215
+ if (options.paddingTop !== undefined)
216
+ this._paddingTop = options.paddingTop;
217
+ if (options.paddingBottom !== undefined)
218
+ this._paddingBottom = options.paddingBottom;
219
+ if (options.bgColor)
220
+ this._bgColor = options.bgColor;
221
+ if (options.strokeColor)
222
+ this._strokeColor = options.strokeColor;
223
+ if (options.strokeThickness !== undefined)
224
+ this._strokeThickness = options.strokeThickness;
225
+ if (options.cornerRadius !== undefined)
226
+ this._cornerRadius = options.cornerRadius;
227
+ if (options.scrollbarEnabled !== undefined)
228
+ this._scrollbarEnabled = options.scrollbarEnabled;
229
+ if (options.scrollbarWidth !== undefined)
230
+ this._scrollbarWidth = options.scrollbarWidth;
231
+ if (options.scrollbarColor)
232
+ this._scrollbarColor = options.scrollbarColor;
233
+ if (options.scrollbarTrackColor)
234
+ this._scrollbarTrackColor = options.scrollbarTrackColor;
235
+ if (options.scrollbarMinThumbHeight !== undefined)
236
+ this._scrollbarMinThumbHeight = options.scrollbarMinThumbHeight;
237
+ return this.layout();
238
+ }
239
+ destroy(fromScene) {
240
+ if (this.scene) {
241
+ this.scene.input.off("wheel", this._wheelHandler);
242
+ this.scene.input.off("pointermove", this._dragMoveHandler);
243
+ this.scene.input.off("pointerup", this._dragUpHandler);
244
+ this.scene.events.off("preupdate", this._preUpdateHandler);
245
+ }
246
+ this._content.clearMask(true);
247
+ this._maskGraphics.destroy();
248
+ super.destroy(fromScene);
249
+ }
250
+ redrawPanel() {
251
+ const halfW = this._width / 2;
252
+ const halfH = this._height / 2;
253
+ const bg = hexToColorAlpha(this._bgColor);
254
+ this._panel.clear();
255
+ this._panel.fillStyle(bg.color, bg.alpha);
256
+ this._panel.fillRoundedRect(-halfW, -halfH, this._width, this._height, this._cornerRadius);
257
+ if (this._strokeThickness <= 0)
258
+ return;
259
+ const stroke = hexToColorAlpha(this._strokeColor);
260
+ this._panel.lineStyle(this._strokeThickness, stroke.color, stroke.alpha);
261
+ this._panel.strokeRoundedRect(-halfW, -halfH, this._width, this._height, this._cornerRadius);
262
+ }
263
+ redrawMaskAndWheelZone() {
264
+ const viewportLeft = this.getViewportLeft();
265
+ const viewportTop = this.getViewportTop();
266
+ const viewportWidth = this.getViewportWidth();
267
+ const viewportHeight = this.getViewportHeight();
268
+ const clipRadius = Math.max(0, this._cornerRadius - this._strokeThickness);
269
+ this._maskGraphics.clear();
270
+ this._maskGraphics.fillStyle(0xffffff, 1);
271
+ this._maskGraphics.fillRoundedRect(viewportLeft, viewportTop, viewportWidth, viewportHeight, clipRadius);
272
+ this._wheelZone.setPosition(viewportLeft + viewportWidth / 2, viewportTop + viewportHeight / 2);
273
+ this._wheelZone.setSize(viewportWidth, viewportHeight);
274
+ }
275
+ /**
276
+ * Syncs the mask graphics position to this container's world transform.
277
+ *
278
+ * Phaser's GeometryMask renders the mask graphics without the parent
279
+ * container's transform matrix, so we position the standalone graphics
280
+ * at the container's world origin each frame.
281
+ */
282
+ syncMaskPosition() {
283
+ const matrix = this.getWorldTransformMatrix();
284
+ this._maskGraphics.setPosition(matrix.tx, matrix.ty);
285
+ }
286
+ updateContentMetrics() {
287
+ const items = this._content.list;
288
+ if (items.length === 0) {
289
+ this._contentMinY = 0;
290
+ this._contentHeight = 0;
291
+ return;
292
+ }
293
+ let minY = Number.POSITIVE_INFINITY;
294
+ let maxY = Number.NEGATIVE_INFINITY;
295
+ for (const item of items) {
296
+ const transform = item;
297
+ const y = transform.y ?? 0;
298
+ const halfHeight = this.getItemHalfHeight(item);
299
+ minY = Math.min(minY, y - halfHeight);
300
+ maxY = Math.max(maxY, y + halfHeight);
301
+ }
302
+ if (!Number.isFinite(minY) || !Number.isFinite(maxY)) {
303
+ this._contentMinY = 0;
304
+ this._contentHeight = 0;
305
+ return;
306
+ }
307
+ this._contentMinY = minY;
308
+ this._contentHeight = Math.max(0, maxY - minY);
309
+ }
310
+ applyScroll() {
311
+ this._content.x = this.getViewportLeft();
312
+ this._content.y = this.getViewportTop() - this._contentMinY - this._scrollY;
313
+ }
314
+ redrawScrollbar() {
315
+ this._scrollbar.clear();
316
+ if (!this._scrollbarEnabled)
317
+ return;
318
+ const maxScroll = this.getMaxScrollY();
319
+ if (maxScroll <= 0)
320
+ return;
321
+ const viewportLeft = this.getViewportLeft();
322
+ const viewportTop = this.getViewportTop();
323
+ const viewportWidth = this.getViewportWidth();
324
+ const viewportHeight = this.getViewportHeight();
325
+ const barWidth = Math.max(2, this._scrollbarWidth);
326
+ if (viewportWidth <= barWidth)
327
+ return;
328
+ const x = viewportLeft + viewportWidth - barWidth;
329
+ const trackRadius = barWidth / 2;
330
+ const trackColor = hexToColorAlpha(this._scrollbarTrackColor);
331
+ const thumbColor = hexToColorAlpha(this._scrollbarColor);
332
+ this._scrollbar.fillStyle(trackColor.color, trackColor.alpha);
333
+ this._scrollbar.fillRoundedRect(x, viewportTop, barWidth, viewportHeight, trackRadius);
334
+ const rawThumbHeight = (viewportHeight / this._contentHeight) * viewportHeight;
335
+ const thumbHeight = Phaser.Math.Clamp(rawThumbHeight, this._scrollbarMinThumbHeight, viewportHeight);
336
+ const travel = Math.max(0, viewportHeight - thumbHeight);
337
+ const thumbY = viewportTop + (this._scrollY / maxScroll) * travel;
338
+ this._scrollbar.fillStyle(thumbColor.color, thumbColor.alpha);
339
+ this._scrollbar.fillRoundedRect(x, thumbY, barWidth, thumbHeight, trackRadius);
340
+ }
341
+ handleWheel(currentlyOver, deltaY, event) {
342
+ if (!this._wheelEnabled)
343
+ return;
344
+ if (deltaY === 0)
345
+ return;
346
+ if (!this.isWheelOverThisContainer(currentlyOver))
347
+ return;
348
+ const before = this._scrollY;
349
+ const direction = deltaY > 0 ? 1 : -1;
350
+ this.scrollBy(direction * this._wheelStep);
351
+ if (before === this._scrollY)
352
+ return;
353
+ if (!event)
354
+ return;
355
+ if ("preventDefault" in event && typeof event.preventDefault === "function")
356
+ event.preventDefault();
357
+ if ("stopPropagation" in event && typeof event.stopPropagation === "function")
358
+ event.stopPropagation();
359
+ }
360
+ isWheelOverThisContainer(currentlyOver) {
361
+ if (currentlyOver.length === 0)
362
+ return false;
363
+ for (const obj of currentlyOver) {
364
+ if (this.ownsObject(obj))
365
+ return true;
366
+ }
367
+ return false;
368
+ }
369
+ ownsObject(obj) {
370
+ if (obj === this._wheelZone)
371
+ return true;
372
+ if (obj.parentContainer === this)
373
+ return true;
374
+ let parent = obj.parentContainer;
375
+ while (parent) {
376
+ if (parent === this)
377
+ return true;
378
+ parent = parent.parentContainer;
379
+ }
380
+ return false;
381
+ }
382
+ getItemHalfHeight(item) {
383
+ const maybeDisplay = item;
384
+ if (typeof maybeDisplay.displayHeight === "number" && maybeDisplay.displayHeight > 0) {
385
+ return maybeDisplay.displayHeight / 2;
386
+ }
387
+ const maybeHeight = item;
388
+ if (typeof maybeHeight.height === "number" && maybeHeight.height > 0) {
389
+ return maybeHeight.height / 2;
390
+ }
391
+ if ("getBounds" in item && typeof item.getBounds === "function") {
392
+ const bounds = item.getBounds();
393
+ return bounds.height / 2;
394
+ }
395
+ return 0;
396
+ }
397
+ getViewportLeft() {
398
+ return -this._width / 2 + this._paddingLeft;
399
+ }
400
+ getViewportTop() {
401
+ return -this._height / 2 + this._paddingTop;
402
+ }
403
+ getViewportWidth() {
404
+ return Math.max(1, this._width - this._paddingLeft - this._paddingRight);
405
+ }
406
+ getViewportHeight() {
407
+ return Math.max(1, this._height - this._paddingTop - this._paddingBottom);
408
+ }
409
+ }
410
+ export function createDebugScrollContainer(scene, options = {}) {
411
+ return new DebugScrollContainer(scene, options);
412
+ }
413
+ //# sourceMappingURL=DebugScrollContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebugScrollContainer.js","sourceRoot":"","sources":["../src/DebugScrollContainer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAgD5C;;;;;;GAMG;AACH,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,CAAC,SAAS;IAC7D,MAAM,CAA6B;IACnC,QAAQ,CAA8B;IACtC,aAAa,CAA6B;IAC1C,UAAU,CAA6B;IACvC,UAAU,CAAyB;IACnC,YAAY,CAAmC;IAE/C,MAAM,CAAQ;IACd,OAAO,CAAQ;IACf,YAAY,CAAQ;IACpB,aAAa,CAAQ;IACrB,WAAW,CAAQ;IACnB,cAAc,CAAQ;IACtB,QAAQ,CAAU;IAClB,YAAY,CAAU;IACtB,gBAAgB,CAAQ;IACxB,aAAa,CAAQ;IACrB,iBAAiB,CAAS;IAC1B,eAAe,CAAQ;IACvB,eAAe,CAAU;IACzB,oBAAoB,CAAU;IAC9B,wBAAwB,CAAQ;IAChC,aAAa,CAAS;IACtB,UAAU,CAAQ;IAClB,YAAY,CAAS;IAErB,YAAY,GAAG,CAAC,CAAA;IAChB,cAAc,GAAG,CAAC,CAAA;IAClB,QAAQ,GAAG,CAAC,CAAA;IACZ,WAAW,GAAG,KAAK,CAAA;IACnB,WAAW,GAAG,CAAC,CAAA;IACf,gBAAgB,GAAG,CAAC,CAAA;IAEX,aAAa,CAOrB;IACQ,gBAAgB,CAAyC;IACzD,cAAc,CAAY;IAC1B,iBAAiB,CAAY;IAE9C,YAAY,KAAmB,EAAE,UAA6C,EAAE;QAC/E,MAAM,EACL,KAAK,GAAG,GAAG,EACX,MAAM,GAAG,GAAG,EACZ,WAAW,GAAG,EAAE,EAChB,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,EAAE,EACf,aAAa,GAAG,EAAE,EAClB,OAAO,GAAG,SAAS,EACnB,WAAW,GAAG,SAAS,EACvB,eAAe,GAAG,CAAC,EACnB,YAAY,GAAG,EAAE,EACjB,gBAAgB,GAAG,IAAI,EACvB,cAAc,GAAG,CAAC,EAClB,cAAc,GAAG,SAAS,EAC1B,mBAAmB,GAAG,SAAS,EAC/B,uBAAuB,GAAG,EAAE,EAC5B,YAAY,GAAG,IAAI,EACnB,SAAS,GAAG,EAAE,EACd,WAAW,GAAG,IAAI,EAClB,cAAc,GAAG,CAAC,EAClB,QAAQ,GACR,GAAG,OAAO,CAAA;QAEX,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QAEhD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;QAC/B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAC7B,IAAI,CAAC,cAAc,GAAG,aAAa,CAAA;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;QAC/B,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAA;QACvC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAA;QACjC,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;QACzC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAA;QACrC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAA;QACrC,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAA;QAC/C,IAAI,CAAC,wBAAwB,GAAG,uBAAuB,CAAA;QACvD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAA;QACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC3B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAE3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC3D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QACtC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAA;QAC7D,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC,MAAM,GAAG,SAAS,CAAA;QAEzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAA;QAC3D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAExC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QAExE,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACtD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAEpD,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACjF,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAC/C,CAAC,CAAA;QACD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAE3C,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAA6B,EAAE,EAAE;YACnE,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAM;YAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;YACvB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAA;YAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAA;QACtC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,gBAAgB,GAAG,CAAC,OAA6B,EAAE,EAAE;YACzD,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,OAAM;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAA;YAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAA;QAChD,CAAC,CAAA;QACD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAEpD,IAAI,CAAC,cAAc,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACzB,CAAC,CAAA;QACD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;QAC/B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,CAAC,KAAoC;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAED,QAAQ,CAAC,QAAyC;QACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAED,UAAU,CAAC,KAAoC,EAAE,YAAY,GAAG,KAAK;QACpE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;QACzC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAED,cAAc,CAAC,eAAe,GAAG,KAAK;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAChD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QACxC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAED,mBAAmB;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAA;IACrB,CAAC;IAED,MAAM;QACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,UAAU,CAAC,KAAa;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QACjE,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QAChE,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,QAAQ,CAAC,MAAc;QACtB,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAA;IAC/C,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,UAAU;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACrB,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC3B,CAAC;IAED,eAAe,CAAC,OAAgB;QAC/B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;QAC5B,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,YAAY,CAAC,IAAY;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,cAAc,CAAC,OAAgB;QAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAA;QAC3B,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACtC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,mBAAmB,CAAC,OAAgB;QACnC,IAAI,IAAI,CAAC,iBAAiB,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QACnD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAA;QAChC,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,eAAe,CAAC,KAAa,EAAE,MAAc;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACvC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAED,UAAU,CAAC,OAKV;QACA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAA;QAChE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAA;QACnE,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAA;QAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAA;QACtE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAED,QAAQ,CAAC,OAAyC;QACjD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACzE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC5E,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAA;QAC9E,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAA;QACjF,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAA;QAC3E,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;YAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAA;QACpF,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAA;QACpD,IAAI,OAAO,CAAC,WAAW;YAAE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAA;QAChE,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;YAAE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAA;QAC1F,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAA;QACjF,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;YAAE,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAC7F,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAA;QACvF,IAAI,OAAO,CAAC,cAAc;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAA;QACzE,IAAI,OAAO,CAAC,mBAAmB;YAAE,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAA;QACxF,IAAI,OAAO,CAAC,uBAAuB,KAAK,SAAS;YAAE,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAA;QAClH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAEQ,OAAO,CAAC,SAAmB;QACnC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC1D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;QAC5B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;IAEO,WAAW;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;QAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAE1F,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC;YAAE,OAAM;QAEtC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACxE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IAC7F,CAAC;IAEO,sBAAsB;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QACzC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAE1E,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;QAC1B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,CAAC,CAAA;QAExG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,GAAG,aAAa,GAAG,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,CAAC,CAAC,CAAA;QAC/F,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;IACvD,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC7C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IACrD,CAAC;IAEO,oBAAoB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAuC,CAAA;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;YACrB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAA;YACvB,OAAM;QACP,CAAC;QAED,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAA;QACnC,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAA;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAA0D,CAAA;YAC5E,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAA;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAE/C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAA;YACrC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;YACrB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAA;YACvB,OAAM;QACP,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAA;IAC/C,CAAC;IAEO,WAAW;QAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC5E,CAAC;IAEO,eAAe;QACtB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QACvB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAM;QAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACtC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAM;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QACzC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAElD,IAAI,aAAa,IAAI,QAAQ;YAAE,OAAM;QAErC,MAAM,CAAC,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAA;QACjD,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAA;QAChC,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QAC7D,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAExD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;QAC7D,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,CAAA;QAEtF,MAAM,cAAc,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,cAAc,CAAA;QAC9E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAA;QACpG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,MAAM,CAAA;QAEjE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;QAC7D,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;IAC/E,CAAC;IAEO,WAAW,CAAC,aAA8C,EAAE,MAAc,EAAE,KAAa;QAChG,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAM;QAC/B,IAAI,MAAM,KAAK,CAAC;YAAE,OAAM;QACxB,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;YAAE,OAAM;QAEzD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;QAE1C,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAM;QAEpC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,IAAI,gBAAgB,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,UAAU;YAAE,KAAK,CAAC,cAAc,EAAE,CAAA;QACnG,IAAI,iBAAiB,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,UAAU;YAAE,KAAK,CAAC,eAAe,EAAE,CAAA;IACvG,CAAC;IAEO,wBAAwB,CAAC,aAA8C;QAC9E,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QAE5C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAA;QACtC,CAAC;QAED,OAAO,KAAK,CAAA;IACb,CAAC;IAEO,UAAU,CAAC,GAAkC;QACpD,IAAI,GAAG,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QACxC,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAE7C,IAAI,MAAM,GAAG,GAAG,CAAC,eAAe,CAAA;QAChC,OAAO,MAAM,EAAE,CAAC;YACf,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAChC,MAAM,GAAG,MAAM,CAAC,eAAe,CAAA;QAChC,CAAC;QAED,OAAO,KAAK,CAAA;IACb,CAAC;IAEO,iBAAiB,CAAC,IAAmC;QAC5D,MAAM,YAAY,GAAG,IAA6C,CAAA;QAClE,IAAI,OAAO,YAAY,CAAC,aAAa,KAAK,QAAQ,IAAI,YAAY,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YACtF,OAAO,YAAY,CAAC,aAAa,GAAG,CAAC,CAAA;QACtC,CAAC;QAED,MAAM,WAAW,GAAG,IAAsC,CAAA;QAC1D,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;QAC9B,CAAC;QAED,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC/B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACzB,CAAC;QAED,OAAO,CAAC,CAAA;IACT,CAAC;IAEO,eAAe;QACtB,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAA;IAC5C,CAAC;IAEO,cAAc;QACrB,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAA;IAC5C,CAAC;IAEO,gBAAgB;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA;IACzE,CAAC;IAEO,iBAAiB;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1E,CAAC;CACD;AAED,MAAM,UAAU,0BAA0B,CACzC,KAAmB,EACnB,UAA6C,EAAE;IAE/C,OAAO,IAAI,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC"}