@codexo/exojs 0.12.0 → 0.13.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.
- package/CHANGELOG.md +125 -0
- package/dist/esm/core/BuildInfo.js +2 -2
- package/dist/esm/extensions/Extension.d.ts +39 -7
- package/dist/esm/extensions/Extension.d.ts.map +1 -1
- package/dist/esm/extensions/ExtensionRegistry.d.ts.map +1 -1
- package/dist/esm/extensions/ExtensionRegistry.js.map +1 -1
- package/dist/esm/extensions/snapshot.d.ts +12 -2
- package/dist/esm/extensions/snapshot.d.ts.map +1 -1
- package/dist/esm/extensions/snapshot.js +43 -14
- package/dist/esm/extensions/snapshot.js.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/rendering/Drawable.d.ts +23 -0
- package/dist/esm/rendering/Drawable.d.ts.map +1 -1
- package/dist/esm/rendering/Drawable.js +34 -0
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/coreRendererBindings.d.ts.map +1 -1
- package/dist/esm/rendering/coreRendererBindings.js +22 -0
- package/dist/esm/rendering/coreRendererBindings.js.map +1 -1
- package/dist/esm/rendering/index.d.ts +13 -0
- package/dist/esm/rendering/index.d.ts.map +1 -1
- package/dist/esm/rendering/pixelSnap.d.ts +219 -0
- package/dist/esm/rendering/pixelSnap.d.ts.map +1 -0
- package/dist/esm/rendering/pixelSnap.js +186 -0
- package/dist/esm/rendering/pixelSnap.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanPlayer.js +21 -1
- package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -1
- package/dist/esm/rendering/sprite/NineSliceSprite.d.ts +69 -0
- package/dist/esm/rendering/sprite/NineSliceSprite.d.ts.map +1 -0
- package/dist/esm/rendering/sprite/NineSliceSprite.js +207 -0
- package/dist/esm/rendering/sprite/NineSliceSprite.js.map +1 -0
- package/dist/esm/rendering/sprite/RepeatingSprite.d.ts +120 -0
- package/dist/esm/rendering/sprite/RepeatingSprite.d.ts.map +1 -0
- package/dist/esm/rendering/sprite/RepeatingSprite.js +279 -0
- package/dist/esm/rendering/sprite/RepeatingSprite.js.map +1 -0
- package/dist/esm/rendering/sprite/Sprite.d.ts +13 -0
- package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.js +23 -0
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/nineSlice.d.ts +53 -0
- package/dist/esm/rendering/sprite/nineSlice.d.ts.map +1 -0
- package/dist/esm/rendering/sprite/nineSlice.js +340 -0
- package/dist/esm/rendering/sprite/nineSlice.js.map +1 -0
- package/dist/esm/rendering/sprite/repeatingSpritePlan.d.ts +57 -0
- package/dist/esm/rendering/sprite/repeatingSpritePlan.d.ts.map +1 -0
- package/dist/esm/rendering/sprite/repeatingSpritePlan.js +156 -0
- package/dist/esm/rendering/sprite/repeatingSpritePlan.js.map +1 -0
- package/dist/esm/rendering/texture/TextureRegion.d.ts +100 -0
- package/dist/esm/rendering/texture/TextureRegion.d.ts.map +1 -0
- package/dist/esm/rendering/texture/TextureRegion.js +144 -0
- package/dist/esm/rendering/texture/TextureRegion.js.map +1 -0
- package/dist/esm/rendering/texture/repeat.d.ts +96 -0
- package/dist/esm/rendering/texture/repeat.d.ts.map +1 -0
- package/dist/esm/rendering/texture/repeat.js +158 -0
- package/dist/esm/rendering/texture/repeat.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +20 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +31 -2
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.d.ts +32 -0
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.d.ts.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js +308 -0
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.d.ts +49 -0
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.d.ts.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js +535 -0
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +9 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +22 -2
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +21 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +29 -2
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +36 -0
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +358 -0
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +52 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +556 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +9 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +22 -2
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +3 -2
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +4 -4
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
- package/dist/esm/rendering.d.ts +1 -0
- package/dist/esm/rendering.d.ts.map +1 -1
- package/dist/esm/resources/Loader.d.ts +36 -8
- package/dist/esm/resources/Loader.d.ts.map +1 -1
- package/dist/esm/resources/Loader.js +30 -11
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/exo.esm.js +3449 -59
- package/dist/exo.esm.js.map +1 -1
- package/package.json +10 -3
|
@@ -2,6 +2,7 @@ import { Interval } from '../../math/Interval.js';
|
|
|
2
2
|
import { Rectangle } from '../../math/Rectangle.js';
|
|
3
3
|
import { Vector } from '../../math/Vector.js';
|
|
4
4
|
import { Drawable } from '../Drawable.js';
|
|
5
|
+
import { buildPixelSnapContext, snapBoundsInto } from '../pixelSnap.js';
|
|
5
6
|
import { RenderNode } from '../RenderNode.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -118,6 +119,28 @@ class Sprite extends Drawable {
|
|
|
118
119
|
}
|
|
119
120
|
return this._vertices;
|
|
120
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Local-space quad bounds for the active pass, written into `out`. In
|
|
124
|
+
* `'geometry'` pixel-snap mode (and only when the combined node+view transform
|
|
125
|
+
* is axis-aligned) the quad edges are snapped to the render target's
|
|
126
|
+
* device-pixel grid via the shared {@link snapLocalBoundary} helper — combined
|
|
127
|
+
* with the device-snapped origin from the transform seam, all four corners
|
|
128
|
+
* land on whole device pixels. The logical local bounds (used by collision /
|
|
129
|
+
* `getBounds`) are never changed. Returns the unsnapped local bounds for
|
|
130
|
+
* `'none'`/`'position'` or under a rotation/skew downgrade.
|
|
131
|
+
* @internal
|
|
132
|
+
*/
|
|
133
|
+
getRenderBounds(view, targetPxWidth, targetPxHeight, out) {
|
|
134
|
+
const base = this.getLocalBounds();
|
|
135
|
+
if (this.pixelSnapMode !== 'geometry') {
|
|
136
|
+
return base;
|
|
137
|
+
}
|
|
138
|
+
const ctx = buildPixelSnapContext(this.getGlobalTransform(), view, targetPxWidth, targetPxHeight);
|
|
139
|
+
if (!ctx.axisAligned) {
|
|
140
|
+
return base;
|
|
141
|
+
}
|
|
142
|
+
return snapBoundsInto(base, ctx, out);
|
|
143
|
+
}
|
|
121
144
|
/**
|
|
122
145
|
* Packed UV coordinates for the four quad corners, encoded as two
|
|
123
146
|
* 16-bit fixed-point values per element (low 16 bits = U, high 16 bits = V,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sprite.js","sources":["../../../../../src/rendering/sprite/Sprite.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Sprite.js","sources":["../../../../../src/rendering/sprite/Sprite.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { RepeatFit, RepeatMode } from '#rendering/texture/repeat';
|
|
2
|
+
import type { TextureRegion } from '#rendering/texture/TextureRegion';
|
|
3
|
+
/** Source-space or destination-space per-edge insets. @stable */
|
|
4
|
+
export interface NineSliceInsets {
|
|
5
|
+
readonly left: number;
|
|
6
|
+
readonly top: number;
|
|
7
|
+
readonly right: number;
|
|
8
|
+
readonly bottom: number;
|
|
9
|
+
}
|
|
10
|
+
/** Per-section fill mode overrides for a nine-slice sprite. @stable */
|
|
11
|
+
export interface NineSliceModes {
|
|
12
|
+
readonly edges?: RepeatMode;
|
|
13
|
+
readonly center?: RepeatMode;
|
|
14
|
+
readonly top?: RepeatMode;
|
|
15
|
+
readonly right?: RepeatMode;
|
|
16
|
+
readonly bottom?: RepeatMode;
|
|
17
|
+
readonly left?: RepeatMode;
|
|
18
|
+
readonly edgeFit?: RepeatFit;
|
|
19
|
+
readonly centerFit?: RepeatFit;
|
|
20
|
+
}
|
|
21
|
+
/** Constructor options for {@link NineSliceSprite}. @stable */
|
|
22
|
+
export interface NineSliceOptions {
|
|
23
|
+
readonly slices: number | Partial<NineSliceInsets>;
|
|
24
|
+
readonly border?: number | Partial<NineSliceInsets>;
|
|
25
|
+
readonly width?: number;
|
|
26
|
+
readonly height?: number;
|
|
27
|
+
readonly modes?: NineSliceModes;
|
|
28
|
+
}
|
|
29
|
+
/** A single rendered sub-quad produced by the nine-slice geometry builder. @internal */
|
|
30
|
+
export interface NineSliceQuad {
|
|
31
|
+
readonly x0: number;
|
|
32
|
+
readonly y0: number;
|
|
33
|
+
readonly x1: number;
|
|
34
|
+
readonly y1: number;
|
|
35
|
+
readonly u0: number;
|
|
36
|
+
readonly v0: number;
|
|
37
|
+
readonly u1: number;
|
|
38
|
+
readonly v1: number;
|
|
39
|
+
}
|
|
40
|
+
export declare function validateSlices(slices: NineSliceInsets, regionWidth: number, regionHeight: number): void;
|
|
41
|
+
export declare function validateBorder(border: NineSliceInsets): void;
|
|
42
|
+
/** Normalise a uniform number or partial insets object into a full {@link NineSliceInsets}. */
|
|
43
|
+
export declare function normalizeInsets(value: number | Partial<NineSliceInsets>, fallback?: NineSliceInsets): NineSliceInsets;
|
|
44
|
+
export declare function normalizeModes(modes: NineSliceModes | undefined): Readonly<NineSliceModes>;
|
|
45
|
+
export declare function equalInsets(a: Readonly<NineSliceInsets>, b: Readonly<NineSliceInsets>): boolean;
|
|
46
|
+
export declare function equalModes(a: Readonly<NineSliceModes>, b: Readonly<NineSliceModes>): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Build the list of quads that collectively render a nine-slice sprite at the
|
|
49
|
+
* requested destination size. Called lazily by {@link NineSliceSprite}.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildNineSliceQuads(region: TextureRegion, slices: NineSliceInsets, border: NineSliceInsets, width: number, height: number, modes: Readonly<NineSliceModes> | undefined): NineSliceQuad[];
|
|
53
|
+
//# sourceMappingURL=nineSlice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nineSlice.d.ts","sourceRoot":"","sources":["../../../../src/rendering/sprite/nineSlice.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAItE,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAUD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,IAAI,CA2BN;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAe5D;AAMD,+FAA+F;AAC/F,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,EACxC,QAAQ,CAAC,EAAE,eAAe,GACzB,eAAe,CAWjB;AAqBD,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,CAiB1F;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAE/F;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,OAAO,CAS5F;AAkKD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,SAAS,GAC1C,aAAa,EAAE,CA0IjB"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { planRepeat } from '../texture/repeat.js';
|
|
2
|
+
|
|
3
|
+
const halfTexelInset = 0.5;
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Validation helpers (module-private)
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
function isFiniteNumber(value) {
|
|
8
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
9
|
+
}
|
|
10
|
+
function validateSlices(slices, regionWidth, regionHeight) {
|
|
11
|
+
const { left, top, right, bottom } = slices;
|
|
12
|
+
if (!isFiniteNumber(left) || !isFiniteNumber(top) ||
|
|
13
|
+
!isFiniteNumber(right) || !isFiniteNumber(bottom)) {
|
|
14
|
+
throw new Error(`NineSliceSprite: slice values must be finite numbers (got left=${left}, top=${top}, right=${right}, bottom=${bottom}).`);
|
|
15
|
+
}
|
|
16
|
+
if (left < 0 || top < 0 || right < 0 || bottom < 0) {
|
|
17
|
+
throw new Error(`NineSliceSprite: slice values must be non-negative (got left=${left}, top=${top}, right=${right}, bottom=${bottom}).`);
|
|
18
|
+
}
|
|
19
|
+
if (left + right > regionWidth) {
|
|
20
|
+
throw new Error(`NineSliceSprite: slices.left (${left}) + slices.right (${right}) exceeds region width (${regionWidth}).`);
|
|
21
|
+
}
|
|
22
|
+
if (top + bottom > regionHeight) {
|
|
23
|
+
throw new Error(`NineSliceSprite: slices.top (${top}) + slices.bottom (${bottom}) exceeds region height (${regionHeight}).`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function validateBorder(border) {
|
|
27
|
+
const { left, top, right, bottom } = border;
|
|
28
|
+
if (!isFiniteNumber(left) || !isFiniteNumber(top) ||
|
|
29
|
+
!isFiniteNumber(right) || !isFiniteNumber(bottom)) {
|
|
30
|
+
throw new Error(`NineSliceSprite: border values must be finite numbers (got left=${left}, top=${top}, right=${right}, bottom=${bottom}).`);
|
|
31
|
+
}
|
|
32
|
+
if (left < 0 || top < 0 || right < 0 || bottom < 0) {
|
|
33
|
+
throw new Error(`NineSliceSprite: border values must be non-negative (got left=${left}, top=${top}, right=${right}, bottom=${bottom}).`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Normalization helpers (module-private)
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
/** Normalise a uniform number or partial insets object into a full {@link NineSliceInsets}. */
|
|
40
|
+
function normalizeInsets(value, fallback) {
|
|
41
|
+
if (typeof value === 'number') {
|
|
42
|
+
return Object.freeze({ left: value, top: value, right: value, bottom: value });
|
|
43
|
+
}
|
|
44
|
+
return Object.freeze({
|
|
45
|
+
left: value.left ?? fallback?.left ?? 0,
|
|
46
|
+
top: value.top ?? fallback?.top ?? 0,
|
|
47
|
+
right: value.right ?? fallback?.right ?? 0,
|
|
48
|
+
bottom: value.bottom ?? fallback?.bottom ?? 0,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const validRepeatModes = new Set(['stretch', 'repeat', 'mirror-repeat']);
|
|
52
|
+
const validRepeatFits = new Set(['clip', 'round']);
|
|
53
|
+
function validateModeField(value, label) {
|
|
54
|
+
if (typeof value !== 'string' || !validRepeatModes.has(value)) {
|
|
55
|
+
throw new Error(`NineSliceSprite: ${label} must be "stretch", "repeat", or "mirror-repeat".`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function validateFitField(value, label) {
|
|
59
|
+
if (typeof value !== 'string' || !validRepeatFits.has(value)) {
|
|
60
|
+
throw new Error(`NineSliceSprite: ${label} must be "clip" or "round".`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function normalizeModes(modes) {
|
|
64
|
+
if (!modes) {
|
|
65
|
+
return _defaultModes;
|
|
66
|
+
}
|
|
67
|
+
const normalized = {};
|
|
68
|
+
if (modes.edges !== undefined) {
|
|
69
|
+
validateModeField(modes.edges, 'modes.edges');
|
|
70
|
+
normalized.edges = modes.edges;
|
|
71
|
+
}
|
|
72
|
+
if (modes.center !== undefined) {
|
|
73
|
+
validateModeField(modes.center, 'modes.center');
|
|
74
|
+
normalized.center = modes.center;
|
|
75
|
+
}
|
|
76
|
+
if (modes.top !== undefined) {
|
|
77
|
+
validateModeField(modes.top, 'modes.top');
|
|
78
|
+
normalized.top = modes.top;
|
|
79
|
+
}
|
|
80
|
+
if (modes.right !== undefined) {
|
|
81
|
+
validateModeField(modes.right, 'modes.right');
|
|
82
|
+
normalized.right = modes.right;
|
|
83
|
+
}
|
|
84
|
+
if (modes.bottom !== undefined) {
|
|
85
|
+
validateModeField(modes.bottom, 'modes.bottom');
|
|
86
|
+
normalized.bottom = modes.bottom;
|
|
87
|
+
}
|
|
88
|
+
if (modes.left !== undefined) {
|
|
89
|
+
validateModeField(modes.left, 'modes.left');
|
|
90
|
+
normalized.left = modes.left;
|
|
91
|
+
}
|
|
92
|
+
if (modes.edgeFit !== undefined) {
|
|
93
|
+
validateFitField(modes.edgeFit, 'modes.edgeFit');
|
|
94
|
+
normalized.edgeFit = modes.edgeFit;
|
|
95
|
+
}
|
|
96
|
+
if (modes.centerFit !== undefined) {
|
|
97
|
+
validateFitField(modes.centerFit, 'modes.centerFit');
|
|
98
|
+
normalized.centerFit = modes.centerFit;
|
|
99
|
+
}
|
|
100
|
+
return Object.freeze(normalized);
|
|
101
|
+
}
|
|
102
|
+
const _defaultModes = Object.freeze({});
|
|
103
|
+
function equalInsets(a, b) {
|
|
104
|
+
return a.left === b.left && a.top === b.top && a.right === b.right && a.bottom === b.bottom;
|
|
105
|
+
}
|
|
106
|
+
function equalModes(a, b) {
|
|
107
|
+
return a.edges === b.edges
|
|
108
|
+
&& a.center === b.center
|
|
109
|
+
&& a.top === b.top
|
|
110
|
+
&& a.right === b.right
|
|
111
|
+
&& a.bottom === b.bottom
|
|
112
|
+
&& a.left === b.left
|
|
113
|
+
&& a.edgeFit === b.edgeFit
|
|
114
|
+
&& a.centerFit === b.centerFit;
|
|
115
|
+
}
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// Mode resolution helpers (module-private)
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
function resolveEdgeMode(modes, side) {
|
|
120
|
+
return modes?.[side] ?? modes?.edges ?? 'stretch';
|
|
121
|
+
}
|
|
122
|
+
function resolveCenterMode(modes) {
|
|
123
|
+
return modes?.center ?? 'stretch';
|
|
124
|
+
}
|
|
125
|
+
function resolveEdgeFit(modes) {
|
|
126
|
+
return modes?.edgeFit ?? 'round';
|
|
127
|
+
}
|
|
128
|
+
function resolveCenterFit(modes) {
|
|
129
|
+
return modes?.centerFit ?? 'round';
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Compute exact per-slice UV boundaries from source pixel positions.
|
|
133
|
+
*
|
|
134
|
+
* Source-slice boundaries correspond to actual pixel coordinates:
|
|
135
|
+
* left bound = region.x + slices.left
|
|
136
|
+
* right bound = region.x + region.width - slices.right
|
|
137
|
+
* top bound = region.y + slices.top
|
|
138
|
+
* bottom bound = region.y + region.height - slices.bottom
|
|
139
|
+
*
|
|
140
|
+
* A half-texel inset is applied at internal boundaries to prevent bilinear
|
|
141
|
+
* filtering from sampling across slice seams. Outer boundaries use the full
|
|
142
|
+
* region UV range when extrusion is present, or a half-texel inset otherwise.
|
|
143
|
+
*/
|
|
144
|
+
function computeSliceUvGrid(region, slices) {
|
|
145
|
+
const tw = region.texture.width;
|
|
146
|
+
const th = region.texture.height;
|
|
147
|
+
const rx = region.x;
|
|
148
|
+
const ry = region.y;
|
|
149
|
+
const rw = region.width;
|
|
150
|
+
const rh = region.height;
|
|
151
|
+
const ext = region.extrusion;
|
|
152
|
+
// Outer boundary insets: use extrusion if available, otherwise half-texel.
|
|
153
|
+
const outerInsetU = ext.left > 0 || ext.right > 0
|
|
154
|
+
? 0
|
|
155
|
+
: halfTexelInset / tw;
|
|
156
|
+
const outerInsetV = ext.top > 0 || ext.bottom > 0
|
|
157
|
+
? 0
|
|
158
|
+
: halfTexelInset / th;
|
|
159
|
+
// Inner slice boundary insets: always apply half-texel to prevent
|
|
160
|
+
// bilinear bleed across internal slice seams.
|
|
161
|
+
const innerInsetU = halfTexelInset / tw;
|
|
162
|
+
const innerInsetV = halfTexelInset / th;
|
|
163
|
+
// Exact source pixel boundaries in UV space
|
|
164
|
+
const uLeftBound = (rx + slices.left) / tw;
|
|
165
|
+
const uRightBound = (rx + rw - slices.right) / tw;
|
|
166
|
+
const vTopBound = (ry + slices.top) / th;
|
|
167
|
+
const vBottomBound = (ry + rh - slices.bottom) / th;
|
|
168
|
+
// Outer UV bounds (possibly inset)
|
|
169
|
+
const uOuter0 = region.u0 + outerInsetU;
|
|
170
|
+
const uOuter1 = region.u1 - outerInsetU;
|
|
171
|
+
const vOuter0 = region.v0 + outerInsetV;
|
|
172
|
+
const vOuter1 = region.v1 - outerInsetV;
|
|
173
|
+
// Clamp internal boundaries to prevent UV inversion on narrow cells
|
|
174
|
+
const u1 = clampUv(uLeftBound - innerInsetU, uOuter0, uOuter1);
|
|
175
|
+
const u2 = clampUv(uRightBound + innerInsetU, uOuter0, uOuter1);
|
|
176
|
+
const v1 = clampUv(vTopBound - innerInsetV, vOuter0, vOuter1);
|
|
177
|
+
const v2 = clampUv(vBottomBound + innerInsetV, vOuter0, vOuter1);
|
|
178
|
+
return {
|
|
179
|
+
col0: { u0: uOuter0, u1 },
|
|
180
|
+
col1: { u0: u1, u1: u2 },
|
|
181
|
+
col2: { u0: u2, u1: uOuter1 },
|
|
182
|
+
row0: { u0: vOuter0, u1: v1 },
|
|
183
|
+
row1: { u0: v1, u1: v2 },
|
|
184
|
+
row2: { u0: v2, u1: vOuter1 },
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function clampUv(value, min, max) {
|
|
188
|
+
if (!isFiniteNumber(value) || value < min)
|
|
189
|
+
return min;
|
|
190
|
+
if (value > max)
|
|
191
|
+
return max;
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
function compressBorders(border, width, height) {
|
|
195
|
+
let bl = border.left;
|
|
196
|
+
let br = border.right;
|
|
197
|
+
let bt = border.top;
|
|
198
|
+
let bb = border.bottom;
|
|
199
|
+
if (bl + br > width && bl + br > 0) {
|
|
200
|
+
const k = width / (bl + br);
|
|
201
|
+
bl *= k;
|
|
202
|
+
br *= k;
|
|
203
|
+
}
|
|
204
|
+
if (bt + bb > height && bt + bb > 0) {
|
|
205
|
+
const k = height / (bt + bb);
|
|
206
|
+
bt *= k;
|
|
207
|
+
bb *= k;
|
|
208
|
+
}
|
|
209
|
+
return { bl, br, bt, bb };
|
|
210
|
+
}
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
// Geometry builder
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
/**
|
|
215
|
+
* Build the list of quads that collectively render a nine-slice sprite at the
|
|
216
|
+
* requested destination size. Called lazily by {@link NineSliceSprite}.
|
|
217
|
+
* @internal
|
|
218
|
+
*/
|
|
219
|
+
function buildNineSliceQuads(region, slices, border, width, height, modes) {
|
|
220
|
+
const uvGrid = computeSliceUvGrid(region, slices);
|
|
221
|
+
const compressed = compressBorders(border, width, height);
|
|
222
|
+
const bl = compressed.bl;
|
|
223
|
+
const br = compressed.br;
|
|
224
|
+
const bt = compressed.bt;
|
|
225
|
+
const bb = compressed.bb;
|
|
226
|
+
const centerW = Math.max(0, width - bl - br);
|
|
227
|
+
const centerH = Math.max(0, height - bt - bb);
|
|
228
|
+
const dx0 = 0;
|
|
229
|
+
const dx1 = bl;
|
|
230
|
+
const dx2 = bl + centerW;
|
|
231
|
+
const dx3 = width;
|
|
232
|
+
const dy0 = 0;
|
|
233
|
+
const dy1 = bt;
|
|
234
|
+
const dy2 = bt + centerH;
|
|
235
|
+
const dy3 = height;
|
|
236
|
+
const srcEdgeW = Math.max(0, region.width - slices.left - slices.right);
|
|
237
|
+
const srcEdgeH = Math.max(0, region.height - slices.top - slices.bottom);
|
|
238
|
+
const topScale = slices.top > 0 ? bt / slices.top : 1;
|
|
239
|
+
const bottomScale = slices.bottom > 0 ? bb / slices.bottom : 1;
|
|
240
|
+
const leftScale = slices.left > 0 ? bl / slices.left : 1;
|
|
241
|
+
const rightScale = slices.right > 0 ? br / slices.right : 1;
|
|
242
|
+
const topNativeW = srcEdgeW * topScale;
|
|
243
|
+
const bottomNativeW = srcEdgeW * bottomScale;
|
|
244
|
+
const leftNativeH = srcEdgeH * leftScale;
|
|
245
|
+
const rightNativeH = srcEdgeH * rightScale;
|
|
246
|
+
const centerNativeW = topNativeW;
|
|
247
|
+
const centerNativeH = leftNativeH;
|
|
248
|
+
const topMode = resolveEdgeMode(modes, 'top');
|
|
249
|
+
const bottomMode = resolveEdgeMode(modes, 'bottom');
|
|
250
|
+
const leftMode = resolveEdgeMode(modes, 'left');
|
|
251
|
+
const rightMode = resolveEdgeMode(modes, 'right');
|
|
252
|
+
const centerMode = resolveCenterMode(modes);
|
|
253
|
+
const edgeFit = resolveEdgeFit(modes);
|
|
254
|
+
const centerFit = resolveCenterFit(modes);
|
|
255
|
+
const quads = [];
|
|
256
|
+
const { col0, col1, col2, row0, row1, row2 } = uvGrid;
|
|
257
|
+
// Corners
|
|
258
|
+
if (bl > 0 && bt > 0) {
|
|
259
|
+
quads.push({ x0: dx0, y0: dy0, x1: dx1, y1: dy1, u0: col0.u0, v0: row0.u0, u1: col0.u1, v1: row0.u1 });
|
|
260
|
+
}
|
|
261
|
+
if (br > 0 && bt > 0) {
|
|
262
|
+
quads.push({ x0: dx2, y0: dy0, x1: dx3, y1: dy1, u0: col2.u0, v0: row0.u0, u1: col2.u1, v1: row0.u1 });
|
|
263
|
+
}
|
|
264
|
+
if (bl > 0 && bb > 0) {
|
|
265
|
+
quads.push({ x0: dx0, y0: dy2, x1: dx1, y1: dy3, u0: col0.u0, v0: row2.u0, u1: col0.u1, v1: row2.u1 });
|
|
266
|
+
}
|
|
267
|
+
if (br > 0 && bb > 0) {
|
|
268
|
+
quads.push({ x0: dx2, y0: dy2, x1: dx3, y1: dy3, u0: col2.u0, v0: row2.u0, u1: col2.u1, v1: row2.u1 });
|
|
269
|
+
}
|
|
270
|
+
const col1U0 = col1.u0;
|
|
271
|
+
const col1U1 = col1.u1;
|
|
272
|
+
const row1U0 = row1.u0;
|
|
273
|
+
const row1U1 = row1.u1;
|
|
274
|
+
// Top edge
|
|
275
|
+
if (centerW > 0 && bt > 0 && srcEdgeW > 0 && topNativeW > 0) {
|
|
276
|
+
const plan = planRepeat(topNativeW, centerW, topMode, edgeFit);
|
|
277
|
+
for (const seg of plan.segments) {
|
|
278
|
+
const qx0 = dx1 + seg.destinationStart;
|
|
279
|
+
const qx1 = dx1 + seg.destinationStart + seg.destinationLength;
|
|
280
|
+
const qu0 = col1U0 + seg.sourceStart * (col1U1 - col1U0);
|
|
281
|
+
const qu1 = col1U0 + seg.sourceEnd * (col1U1 - col1U0);
|
|
282
|
+
quads.push({ x0: qx0, y0: dy0, x1: qx1, y1: dy1, u0: qu0, v0: row0.u0, u1: qu1, v1: row0.u1 });
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Bottom edge
|
|
286
|
+
if (centerW > 0 && bb > 0 && srcEdgeW > 0 && bottomNativeW > 0) {
|
|
287
|
+
const plan = planRepeat(bottomNativeW, centerW, bottomMode, edgeFit);
|
|
288
|
+
for (const seg of plan.segments) {
|
|
289
|
+
const qx0 = dx1 + seg.destinationStart;
|
|
290
|
+
const qx1 = dx1 + seg.destinationStart + seg.destinationLength;
|
|
291
|
+
const qu0 = col1U0 + seg.sourceStart * (col1U1 - col1U0);
|
|
292
|
+
const qu1 = col1U0 + seg.sourceEnd * (col1U1 - col1U0);
|
|
293
|
+
quads.push({ x0: qx0, y0: dy2, x1: qx1, y1: dy3, u0: qu0, v0: row2.u0, u1: qu1, v1: row2.u1 });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Left edge
|
|
297
|
+
if (bl > 0 && centerH > 0 && srcEdgeH > 0 && leftNativeH > 0) {
|
|
298
|
+
const plan = planRepeat(leftNativeH, centerH, leftMode, edgeFit);
|
|
299
|
+
for (const seg of plan.segments) {
|
|
300
|
+
const qy0 = dy1 + seg.destinationStart;
|
|
301
|
+
const qy1 = dy1 + seg.destinationStart + seg.destinationLength;
|
|
302
|
+
const qv0 = row1U0 + seg.sourceStart * (row1U1 - row1U0);
|
|
303
|
+
const qv1 = row1U0 + seg.sourceEnd * (row1U1 - row1U0);
|
|
304
|
+
quads.push({ x0: dx0, y0: qy0, x1: dx1, y1: qy1, u0: col0.u0, v0: qv0, u1: col0.u1, v1: qv1 });
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Right edge
|
|
308
|
+
if (br > 0 && centerH > 0 && srcEdgeH > 0 && rightNativeH > 0) {
|
|
309
|
+
const plan = planRepeat(rightNativeH, centerH, rightMode, edgeFit);
|
|
310
|
+
for (const seg of plan.segments) {
|
|
311
|
+
const qy0 = dy1 + seg.destinationStart;
|
|
312
|
+
const qy1 = dy1 + seg.destinationStart + seg.destinationLength;
|
|
313
|
+
const qv0 = row1U0 + seg.sourceStart * (row1U1 - row1U0);
|
|
314
|
+
const qv1 = row1U0 + seg.sourceEnd * (row1U1 - row1U0);
|
|
315
|
+
quads.push({ x0: dx2, y0: qy0, x1: dx3, y1: qy1, u0: col2.u0, v0: qv0, u1: col2.u1, v1: qv1 });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Center
|
|
319
|
+
if (centerW > 0 && centerH > 0 && srcEdgeW > 0 && srcEdgeH > 0 && centerNativeW > 0 && centerNativeH > 0) {
|
|
320
|
+
const planX = planRepeat(centerNativeW, centerW, centerMode, centerFit);
|
|
321
|
+
const planY = planRepeat(centerNativeH, centerH, centerMode, centerFit);
|
|
322
|
+
for (const segY of planY.segments) {
|
|
323
|
+
const qy0 = dy1 + segY.destinationStart;
|
|
324
|
+
const qy1 = dy1 + segY.destinationStart + segY.destinationLength;
|
|
325
|
+
const qv0 = row1U0 + segY.sourceStart * (row1U1 - row1U0);
|
|
326
|
+
const qv1 = row1U0 + segY.sourceEnd * (row1U1 - row1U0);
|
|
327
|
+
for (const segX of planX.segments) {
|
|
328
|
+
const qx0 = dx1 + segX.destinationStart;
|
|
329
|
+
const qx1 = dx1 + segX.destinationStart + segX.destinationLength;
|
|
330
|
+
const qu0 = col1U0 + segX.sourceStart * (col1U1 - col1U0);
|
|
331
|
+
const qu1 = col1U0 + segX.sourceEnd * (col1U1 - col1U0);
|
|
332
|
+
quads.push({ x0: qx0, y0: qy0, x1: qx1, y1: qy1, u0: qu0, v0: qv0, u1: qu1, v1: qv1 });
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return quads;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
export { buildNineSliceQuads, equalInsets, equalModes, normalizeInsets, normalizeModes, validateBorder, validateSlices };
|
|
340
|
+
//# sourceMappingURL=nineSlice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nineSlice.js","sources":["../../../../../src/rendering/sprite/nineSlice.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { RepeatFit, RepeatMode } from '#rendering/texture/repeat';
|
|
2
|
+
import type { TextureRegion } from '#rendering/texture/TextureRegion';
|
|
3
|
+
/** Constructor options for {@link RepeatingSprite}. @stable */
|
|
4
|
+
export interface RepeatingSpriteOptions {
|
|
5
|
+
/** Destination width in local units. Defaults to source width. */
|
|
6
|
+
readonly width?: number;
|
|
7
|
+
/** Destination height in local units. Defaults to source height. */
|
|
8
|
+
readonly height?: number;
|
|
9
|
+
/** Horizontal repeat mode. Default: `'repeat'`. */
|
|
10
|
+
readonly modeX?: RepeatMode;
|
|
11
|
+
/** Vertical repeat mode. Default: `'repeat'`. */
|
|
12
|
+
readonly modeY?: RepeatMode;
|
|
13
|
+
/** How the horizontal repeat fits the destination span. Default: `'round'`. */
|
|
14
|
+
readonly fitX?: RepeatFit;
|
|
15
|
+
/** How the vertical repeat fits the destination span. Default: `'round'`. */
|
|
16
|
+
readonly fitY?: RepeatFit;
|
|
17
|
+
/** Horizontal scroll offset in source-pixel units. Default: `0`. */
|
|
18
|
+
readonly offsetX?: number;
|
|
19
|
+
/** Vertical scroll offset in source-pixel units. Default: `0`. */
|
|
20
|
+
readonly offsetY?: number;
|
|
21
|
+
}
|
|
22
|
+
/** A single rendered sub-quad produced by the repeating-sprite geometry builder. @internal */
|
|
23
|
+
export interface RepeatingSpriteQuad {
|
|
24
|
+
readonly x0: number;
|
|
25
|
+
readonly y0: number;
|
|
26
|
+
readonly x1: number;
|
|
27
|
+
readonly y1: number;
|
|
28
|
+
readonly u0: number;
|
|
29
|
+
readonly v0: number;
|
|
30
|
+
readonly u1: number;
|
|
31
|
+
readonly v1: number;
|
|
32
|
+
}
|
|
33
|
+
export declare function validateSizeInput(width: number, height: number): void;
|
|
34
|
+
export declare function validateMode(mode: unknown, label: string): void;
|
|
35
|
+
export declare function validateFit(fit: unknown, label: string): void;
|
|
36
|
+
export declare function validateOffset(value: number, label: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Compute the UV tiling scale for the standalone shader path.
|
|
39
|
+
*
|
|
40
|
+
* Returns how many times the source repeats across the destination span.
|
|
41
|
+
* - `stretch`: always 1.0
|
|
42
|
+
* - `repeat`/`mirror-repeat` + `round`: nearest integer count (≥ 1)
|
|
43
|
+
* - `repeat`/`mirror-repeat` + `clip`: exact fraction `destLen / srcLen`
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
export declare function computeShaderTiling(srcLen: number, destLen: number, mode: RepeatMode, fit: RepeatFit): number;
|
|
47
|
+
/**
|
|
48
|
+
* Build the geometry quads for the atlas-region repeat path.
|
|
49
|
+
*
|
|
50
|
+
* Runs {@link planRepeat} independently on both X and Y axes with optional
|
|
51
|
+
* phase offsets, then generates the Cartesian-product quad list. Each quad
|
|
52
|
+
* carries UV coordinates clamped inside the region's UV bounds, with
|
|
53
|
+
* extrusion-aware outer insets.
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildRepeatingSpriteQuads(region: TextureRegion, width: number, height: number, modeX: RepeatMode, modeY: RepeatMode, fitX: RepeatFit, fitY: RepeatFit, offsetX: number, offsetY: number): RepeatingSpriteQuad[];
|
|
57
|
+
//# sourceMappingURL=repeatingSpritePlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repeatingSpritePlan.d.ts","sourceRoot":"","sources":["../../../../src/rendering/sprite/repeatingSpritePlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAiB,MAAM,2BAA2B,CAAC;AAEtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEtE,+DAA+D;AAC/D,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,8FAA8F;AAC9F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AASD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAYrE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAM/D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMjE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,SAAS,GACb,MAAM,CAQR;AAQD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,mBAAmB,EAAE,CA4CvB"}
|