@ifc-lite/renderer 1.20.0 → 1.21.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/README.md +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -14
- package/dist/index.js.map +1 -1
- package/dist/overlay-routing.d.ts +63 -0
- package/dist/overlay-routing.d.ts.map +1 -0
- package/dist/overlay-routing.js +98 -0
- package/dist/overlay-routing.js.map +1 -0
- package/dist/scene.d.ts +70 -0
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +219 -99
- package/dist/scene.js.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Routing predicates for the opaque/transparent pipeline split.
|
|
3
|
+
*
|
|
4
|
+
* Lens / Pset colour overrides are drawn by a second "overlay paint" pass
|
|
5
|
+
* whose pipeline uses `depthCompare: 'equal'` so it only paints where the
|
|
6
|
+
* base draw already wrote depth. The transparent pipeline runs with
|
|
7
|
+
* `depthWriteEnabled: false`, so a colour override on an entity whose base
|
|
8
|
+
* draw is transparent (IfcSpace, IfcOpeningElement, glass, …) silently
|
|
9
|
+
* fails — the equality test never matches.
|
|
10
|
+
*
|
|
11
|
+
* To fix that, the renderer promotes the base draw of overridden entities
|
|
12
|
+
* to the opaque pipeline so depth gets written and the overlay paint
|
|
13
|
+
* succeeds. To avoid turning non-overridden batchmates opaque, batches
|
|
14
|
+
* with mixed override membership are split into a "promoted" sub-batch
|
|
15
|
+
* (all overridden) and a "remaining" sub-batch (all not), each routed
|
|
16
|
+
* through its appropriate pipeline.
|
|
17
|
+
*
|
|
18
|
+
* These helpers express the routing decision as pure functions so they
|
|
19
|
+
* can be unit-tested without a GPU device. See issue #677.
|
|
20
|
+
*/
|
|
21
|
+
export type RGBAOverrideMap = ReadonlyMap<number, readonly [number, number, number, number]>;
|
|
22
|
+
/**
|
|
23
|
+
* Decide whether a mesh should render through the transparent pipeline.
|
|
24
|
+
*
|
|
25
|
+
* @param alpha Resolved alpha for the mesh (post `transparencyOverrides`).
|
|
26
|
+
* @param transparency Optional PBR transparency (IfcSurfaceStyleRendering).
|
|
27
|
+
* @param expressId The mesh's expressId, used to consult `colorOverrides`.
|
|
28
|
+
* @param colorOverrides Active lens / Pset override map, or null when none.
|
|
29
|
+
*
|
|
30
|
+
* @returns `true` if the mesh should route to the transparent pipeline.
|
|
31
|
+
* `false` means route to the opaque pipeline (writes depth).
|
|
32
|
+
*/
|
|
33
|
+
export declare function shouldRouteMeshTransparent(alpha: number, transparency: number, expressId: number, colorOverrides: RGBAOverrideMap | null): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Decide whether a batch (or sub-batch) should render through the transparent
|
|
36
|
+
* pipeline. A batch is promoted to opaque **only when every id in it** carries
|
|
37
|
+
* a deliberate override — i.e. when promotion can't make any unrelated
|
|
38
|
+
* batchmate opaque. Mixed batches must be split upstream via
|
|
39
|
+
* {@link splitVisibleIdsByPromotion}; the splitter calls this helper on each
|
|
40
|
+
* homogeneous sub-batch.
|
|
41
|
+
*
|
|
42
|
+
* @param alpha Resolved batch alpha (post `transparencyOverrides`).
|
|
43
|
+
* @param expressIds The (sub-)batch's expressIds.
|
|
44
|
+
* @param colorOverrides Active lens / Pset override map, or null when none.
|
|
45
|
+
*/
|
|
46
|
+
export declare function shouldRouteBatchTransparent(alpha: number, expressIds: ReadonlyArray<number>, colorOverrides: RGBAOverrideMap | null): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Partition a visible-id set into the subset that needs opaque-pipeline
|
|
49
|
+
* promotion (deliberate colour overrides, alpha ≥ 0.2) and the rest.
|
|
50
|
+
*
|
|
51
|
+
* Used by the renderer's batch loop when a transparent parent batch has
|
|
52
|
+
* mixed override membership: each subset becomes its own partial sub-batch
|
|
53
|
+
* so non-overridden batchmates keep their native transparent routing.
|
|
54
|
+
*
|
|
55
|
+
* Returns `null` when no split is needed — either the override map is empty
|
|
56
|
+
* or no id in `visibleIds` carries a deliberate override. The caller should
|
|
57
|
+
* then route the whole input through its native pipeline.
|
|
58
|
+
*/
|
|
59
|
+
export declare function splitVisibleIdsByPromotion(visibleIds: Iterable<number>, colorOverrides: RGBAOverrideMap | null): {
|
|
60
|
+
promoted: Set<number>;
|
|
61
|
+
remaining: Set<number>;
|
|
62
|
+
} | null;
|
|
63
|
+
//# sourceMappingURL=overlay-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-routing.d.ts","sourceRoot":"","sources":["../src/overlay-routing.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAkB7F;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,eAAe,GAAG,IAAI,GACrC,OAAO,CAUT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,cAAc,EAAE,eAAe,GAAG,IAAI,GACrC,OAAO,CAaT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC5B,cAAc,EAAE,eAAe,GAAG,IAAI,GACrC;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAW1D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
const OPAQUE_ALPHA_CUTOFF = 0.99;
|
|
5
|
+
/**
|
|
6
|
+
* Minimum override alpha that triggers opaque-pipeline promotion.
|
|
7
|
+
*
|
|
8
|
+
* Lens "ghost" colours used to fade unmatched entities sit at alpha 0.15
|
|
9
|
+
* (see `packages/lens/src/colors.ts`). Promoting a ghost overlay would
|
|
10
|
+
* cause a previously-near-invisible IfcSpace to render as an opaque
|
|
11
|
+
* cyan box with a faint gray tint — a regression for users running lens
|
|
12
|
+
* rules that don't target IfcSpace. Anything at this threshold or above
|
|
13
|
+
* was clearly a deliberate colour choice (colorize, transparent action,
|
|
14
|
+
* IDS pass/fail) and gets promoted; ghost-tier overlays are left in the
|
|
15
|
+
* native transparent path (where they remain invisible, same as today).
|
|
16
|
+
*/
|
|
17
|
+
const OVERRIDE_PROMOTION_MIN_ALPHA = 0.2;
|
|
18
|
+
/**
|
|
19
|
+
* Decide whether a mesh should render through the transparent pipeline.
|
|
20
|
+
*
|
|
21
|
+
* @param alpha Resolved alpha for the mesh (post `transparencyOverrides`).
|
|
22
|
+
* @param transparency Optional PBR transparency (IfcSurfaceStyleRendering).
|
|
23
|
+
* @param expressId The mesh's expressId, used to consult `colorOverrides`.
|
|
24
|
+
* @param colorOverrides Active lens / Pset override map, or null when none.
|
|
25
|
+
*
|
|
26
|
+
* @returns `true` if the mesh should route to the transparent pipeline.
|
|
27
|
+
* `false` means route to the opaque pipeline (writes depth).
|
|
28
|
+
*/
|
|
29
|
+
export function shouldRouteMeshTransparent(alpha, transparency, expressId, colorOverrides) {
|
|
30
|
+
const nativelyTransparent = alpha < OPAQUE_ALPHA_CUTOFF || transparency > 0.01;
|
|
31
|
+
if (!nativelyTransparent)
|
|
32
|
+
return false;
|
|
33
|
+
// Lens / Pset override above the ghost threshold → promote to opaque
|
|
34
|
+
// so the overlay paint (depthCompare 'equal') has matching depth.
|
|
35
|
+
if (colorOverrides != null) {
|
|
36
|
+
const override = colorOverrides.get(expressId);
|
|
37
|
+
if (override != null && override[3] >= OVERRIDE_PROMOTION_MIN_ALPHA)
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Decide whether a batch (or sub-batch) should render through the transparent
|
|
44
|
+
* pipeline. A batch is promoted to opaque **only when every id in it** carries
|
|
45
|
+
* a deliberate override — i.e. when promotion can't make any unrelated
|
|
46
|
+
* batchmate opaque. Mixed batches must be split upstream via
|
|
47
|
+
* {@link splitVisibleIdsByPromotion}; the splitter calls this helper on each
|
|
48
|
+
* homogeneous sub-batch.
|
|
49
|
+
*
|
|
50
|
+
* @param alpha Resolved batch alpha (post `transparencyOverrides`).
|
|
51
|
+
* @param expressIds The (sub-)batch's expressIds.
|
|
52
|
+
* @param colorOverrides Active lens / Pset override map, or null when none.
|
|
53
|
+
*/
|
|
54
|
+
export function shouldRouteBatchTransparent(alpha, expressIds, colorOverrides) {
|
|
55
|
+
if (alpha >= OPAQUE_ALPHA_CUTOFF)
|
|
56
|
+
return false;
|
|
57
|
+
if (colorOverrides == null || colorOverrides.size === 0 || expressIds.length === 0) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
// Promote ONLY when every id carries a deliberate override. Mixed batches
|
|
61
|
+
// must be split upstream — promoting them whole would turn non-overridden
|
|
62
|
+
// batchmates opaque (regression flagged on PR #682).
|
|
63
|
+
for (const eid of expressIds) {
|
|
64
|
+
const override = colorOverrides.get(eid);
|
|
65
|
+
if (override == null || override[3] < OVERRIDE_PROMOTION_MIN_ALPHA)
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Partition a visible-id set into the subset that needs opaque-pipeline
|
|
72
|
+
* promotion (deliberate colour overrides, alpha ≥ 0.2) and the rest.
|
|
73
|
+
*
|
|
74
|
+
* Used by the renderer's batch loop when a transparent parent batch has
|
|
75
|
+
* mixed override membership: each subset becomes its own partial sub-batch
|
|
76
|
+
* so non-overridden batchmates keep their native transparent routing.
|
|
77
|
+
*
|
|
78
|
+
* Returns `null` when no split is needed — either the override map is empty
|
|
79
|
+
* or no id in `visibleIds` carries a deliberate override. The caller should
|
|
80
|
+
* then route the whole input through its native pipeline.
|
|
81
|
+
*/
|
|
82
|
+
export function splitVisibleIdsByPromotion(visibleIds, colorOverrides) {
|
|
83
|
+
if (colorOverrides == null || colorOverrides.size === 0)
|
|
84
|
+
return null;
|
|
85
|
+
const promoted = new Set();
|
|
86
|
+
const remaining = new Set();
|
|
87
|
+
for (const id of visibleIds) {
|
|
88
|
+
const o = colorOverrides.get(id);
|
|
89
|
+
if (o != null && o[3] >= OVERRIDE_PROMOTION_MIN_ALPHA)
|
|
90
|
+
promoted.add(id);
|
|
91
|
+
else
|
|
92
|
+
remaining.add(id);
|
|
93
|
+
}
|
|
94
|
+
if (promoted.size === 0)
|
|
95
|
+
return null;
|
|
96
|
+
return { promoted, remaining };
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=overlay-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-routing.js","sourceRoot":"","sources":["../src/overlay-routing.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAyB/D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAa,EACb,YAAoB,EACpB,SAAiB,EACjB,cAAsC;IAEtC,MAAM,mBAAmB,GAAG,KAAK,GAAG,mBAAmB,IAAI,YAAY,GAAG,IAAI,CAAC;IAC/E,IAAI,CAAC,mBAAmB;QAAE,OAAO,KAAK,CAAC;IACvC,qEAAqE;IACrE,kEAAkE;IAClE,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,4BAA4B;YAAE,OAAO,KAAK,CAAC;IACpF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAa,EACb,UAAiC,EACjC,cAAsC;IAEtC,IAAI,KAAK,IAAI,mBAAmB;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0EAA0E;IAC1E,0EAA0E;IAC1E,qDAAqD;IACrD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,4BAA4B;YAAE,OAAO,IAAI,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CACxC,UAA4B,EAC5B,cAAsC;IAEtC,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,4BAA4B;YAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;YACnE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/scene.d.ts
CHANGED
|
@@ -119,6 +119,61 @@ export declare class Scene {
|
|
|
119
119
|
* Check if there are pending batch rebuilds
|
|
120
120
|
*/
|
|
121
121
|
hasPendingBatches(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Remove every mesh registered for `expressId` from the scene.
|
|
124
|
+
* Affected buckets are marked for rebuild on the next call to
|
|
125
|
+
* `rebuildPendingBatches`, so the GPU drops them on the next
|
|
126
|
+
* frame. Returns `true` when at least one mesh was removed.
|
|
127
|
+
*
|
|
128
|
+
* Used by the viewer's authoring actions (split, delete) to
|
|
129
|
+
* make tombstoned IFC entities disappear from the rendered
|
|
130
|
+
* scene — the previous v1 workaround was to hide them via
|
|
131
|
+
* `hiddenIds`, but that left the mesh in GPU memory and inside
|
|
132
|
+
* raycast bounds. This is the proper removal path.
|
|
133
|
+
*
|
|
134
|
+
* Notes:
|
|
135
|
+
* - For color-merged meshes (the `entityIds` per-vertex case)
|
|
136
|
+
* a single MeshData often hosts many entities. We do NOT
|
|
137
|
+
* drop the whole mesh in that case — that would also remove
|
|
138
|
+
* the other entities — but we DO clear the bbox + meshDataMap
|
|
139
|
+
* for the requested expressId, so picking and selection stop
|
|
140
|
+
* finding the removed entity. Re-rendering the merged mesh
|
|
141
|
+
* unchanged is the right behaviour because color-merged
|
|
142
|
+
* batches are an optimisation: the geometry is still real;
|
|
143
|
+
* the IFC tombstone just means we ignore it for queries.
|
|
144
|
+
*/
|
|
145
|
+
removeMeshesForEntity(expressId: number): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Bulk variant of `removeMeshesForEntity`. Avoids re-marking the
|
|
148
|
+
* same bucket key once per entity in the common "split N walls"
|
|
149
|
+
* batch. Returns the number of entities that had at least one
|
|
150
|
+
* dedicated mesh removed.
|
|
151
|
+
*/
|
|
152
|
+
removeMeshesForEntities(expressIds: Iterable<number>): number;
|
|
153
|
+
/**
|
|
154
|
+
* Translate every mesh for `expressId` by `delta` in renderer
|
|
155
|
+
* world frame (Y-up). Modifies `positions` in place and marks
|
|
156
|
+
* the affected bucket(s) for re-batch on the next call to
|
|
157
|
+
* `rebuildPendingBatches`.
|
|
158
|
+
*
|
|
159
|
+
* Bounding boxes are cleared for the entity so the next bounds
|
|
160
|
+
* query recomputes from the new positions; raycast bounds will
|
|
161
|
+
* therefore lag by exactly one query, which is acceptable for
|
|
162
|
+
* the drag-end → fresh-pick interaction the gizmo drives.
|
|
163
|
+
*
|
|
164
|
+
* Returns `true` when at least one mesh was modified. Used by
|
|
165
|
+
* the viewer's `translateEntity` action to keep the rendered
|
|
166
|
+
* mesh in sync with the IFC coords mutation.
|
|
167
|
+
*
|
|
168
|
+
* Color-merged meshes (shared by many entities via per-vertex
|
|
169
|
+
* `entityIds`) cannot be translated for a single entity without
|
|
170
|
+
* walking the entityIds array vertex by vertex; this helper
|
|
171
|
+
* skips them and returns `false` so the caller can fall back
|
|
172
|
+
* to a full reload if needed.
|
|
173
|
+
*/
|
|
174
|
+
translateMeshesForEntity(expressId: number, delta: [number, number, number]): boolean;
|
|
175
|
+
/** Bulk variant of `translateMeshesForEntity`. */
|
|
176
|
+
translateMeshesForEntities(updates: Map<number, [number, number, number]>): number;
|
|
122
177
|
/**
|
|
123
178
|
* Queue meshes for deferred GPU upload.
|
|
124
179
|
* Instant (no GPU work) — safe to call from React effects.
|
|
@@ -259,6 +314,21 @@ export declare class Scene {
|
|
|
259
314
|
getOverrideBatches(): BatchedMesh[];
|
|
260
315
|
/** Check if color overrides are active */
|
|
261
316
|
hasColorOverrides(): boolean;
|
|
317
|
+
/**
|
|
318
|
+
* Get the active expressId → RGBA override map, or null if none.
|
|
319
|
+
*
|
|
320
|
+
* Used by the renderer to promote overridden meshes/batches to the opaque
|
|
321
|
+
* pipeline so the overlay paint pass (depthCompare 'equal') finds matching
|
|
322
|
+
* depth. Without this, an override on an entity that defaults to the
|
|
323
|
+
* transparent pipeline (IfcSpace, IfcOpeningElement, glass, …) silently
|
|
324
|
+
* fails to paint — the transparent pipeline doesn't write depth, so the
|
|
325
|
+
* equality test rejects every fragment.
|
|
326
|
+
*
|
|
327
|
+
* Returns a `ReadonlyMap` view: the renderer holds the only writeable
|
|
328
|
+
* reference (via `setColorOverrides`) so routing decisions stay in sync
|
|
329
|
+
* with the overlay batches we built from the same data.
|
|
330
|
+
*/
|
|
331
|
+
getColorOverrides(): ReadonlyMap<number, readonly [number, number, number, number]> | null;
|
|
262
332
|
/** Destroy GPU resources for overlay batches */
|
|
263
333
|
private destroyOverrideBatches;
|
|
264
334
|
/**
|
package/dist/scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EAIhB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EAIhB,MAAM,sBAAsB,CAAC;AA8B9B,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,aAAa,CAAuC;IAM5D,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAW;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mCAAmC,CAAmB;IAK9E,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,qBAAqB,CAAkC;IAK/D,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,cAAc,CAA+E;IAGrG,OAAO,CAAC,gBAAgB,CAA0B;IAGlD,OAAO,CAAC,kBAAkB,CAAqB;IAM/C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,kBAAkB,CAAa;IAMvC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,sBAAsB,CAAkB;IAEhD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI3C;;OAEG;IACH,SAAS,IAAI,IAAI,EAAE;IAInB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAIrC;;OAEG;IACH,gBAAgB,IAAI,WAAW,EAAE;IAIjC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA0BrC;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAuGzE;;;;OAIG;IACH;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAyDnC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;IAQ5D;;;OAGG;IACH;;;;;;;;;OASG;IACH,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAWpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,SAAS;IAwBjF;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAUhB;;;;;;;;OAQG;IACH,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,GAAE,OAAe,GAAG,IAAI;IAiD3H;;;;;;OAMG;IACH,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAmCxE;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAwDjD;;;;;OAKG;IACH,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM;IAQ7D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IA+BrF,kDAAkD;IAClD,0BAA0B,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM;IAUlF;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI;IASrC,+CAA+C;IAC/C,eAAe,IAAI,OAAO;IAI1B,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO;IAsClE;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA6BhC,OAAO,CAAC,qBAAqB;IAsD7B;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAwDpE;;;;;;;;;;OAUG;IACH,sBAAsB,CACpB,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,cAAc,EACxB,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC,IAAI,CAAC;IA2FhB,wBAAwB,IAAI,IAAI;IAgDhC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,IAAI,IAAI;IAgE3B;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;;;;;OAMG;IACH,gBAAgB,CACd,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EACtD,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,cAAc,GACvB,IAAI;IA6FP;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA8DzB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAInC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;;;;;;;;;;;OAYG;IACH,uBAAuB,CACrB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,cAAc,GACvB,WAAW,GAAG,SAAS;IAyE1B;;;;;;;OAOG;IACH,iBAAiB,CACf,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EACxD,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,cAAc,GACvB,IAAI;IAmDP;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAK3B,wCAAwC;IACxC,kBAAkB,IAAI,WAAW,EAAE;IAInC,0CAA0C;IAC1C,iBAAiB,IAAI,OAAO;IAI5B;;;;;;;;;;;;;OAaG;IACH,iBAAiB,IAAI,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;IAI1F,gDAAgD;IAChD,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAK1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAgCb;;OAEG;IACH,SAAS,IAAI;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI;IA0D1G;;;OAGG;IACH,wBAAwB,IAAI,MAAM,EAAE;IAOpC;;;;;OAKG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAmC3D;;;;OAIG;IACH,OAAO,CACL,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,IAAI,EACZ,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAC/B,UAAU,GAAG,IAAI;CAoBrB"}
|