@hatiolab/things-scene 10.1.0 → 10.1.2
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/dist-types/figure/figure-blueprint.d.ts +19 -14
- package/dist-types/figure/figure-blueprint.d.ts.map +1 -1
- package/dist-types/figure/figure-instance.d.ts +30 -1
- package/dist-types/figure/figure-instance.d.ts.map +1 -1
- package/dist-types/figure/figure-part-component.d.ts +324 -0
- package/dist-types/figure/figure-part-component.d.ts.map +1 -0
- package/dist-types/figure/figure-real-object.d.ts +58 -9
- package/dist-types/figure/figure-real-object.d.ts.map +1 -1
- package/dist-types/figure/figure-sizing.d.ts +105 -0
- package/dist-types/figure/figure-sizing.d.ts.map +1 -0
- package/dist-types/figure/index.d.ts +1 -0
- package/dist-types/figure/index.d.ts.map +1 -1
- package/dist-types/threed/coordinate-ground.d.ts +51 -0
- package/dist-types/threed/coordinate-ground.d.ts.map +1 -0
- package/dist-types/threed/floor/floor.d.ts +22 -0
- package/dist-types/threed/floor/floor.d.ts.map +1 -1
- package/dist-types/threed/index.d.ts +4 -0
- package/dist-types/threed/index.d.ts.map +1 -1
- package/dist-types/threed/managers/event-manager3d.d.ts +7 -0
- package/dist-types/threed/managers/event-manager3d.d.ts.map +1 -1
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts +8 -0
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/renderer-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/types.d.ts +10 -0
- package/dist-types/threed/managers/types.d.ts.map +1 -1
- package/dist-types/threed/parted-real-object.d.ts +79 -0
- package/dist-types/threed/parted-real-object.d.ts.map +1 -0
- package/dist-types/threed/real-object-gltf.d.ts +11 -0
- package/dist-types/threed/real-object-gltf.d.ts.map +1 -1
- package/dist-types/threed/three-capability.d.ts +11 -0
- package/dist-types/threed/three-capability.d.ts.map +1 -1
- package/package.json +1 -1
- package/things-scene-min.js +11 -11
- package/things-scene-min.js.map +1 -1
- package/things-scene-transfer.mjs +3 -3
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
|
@@ -3,16 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 정본은 `@hatiolab/figure-model` 의 `FigureBlueprint` 다. 여기 있는 것은 그 형식 중
|
|
5
5
|
* things-scene 이 실제로 읽는 부분만 적은 것이며, **의존성을 만들지 않으려고** 형식을
|
|
6
|
-
* 다시 적었다.
|
|
7
|
-
*
|
|
6
|
+
* 다시 적었다.
|
|
7
|
+
*
|
|
8
|
+
* figure-model 은 이미 npm 에 있으므로(`@hatiolab/figure-model`) `import type` 으로
|
|
9
|
+
* 받아 이 중복을 지울 수 있다 — 타입만 받으면 런타임 의존이 생기지 않는다. 배포되는
|
|
10
|
+
* 라이브러리의 의존성 목록을 바꾸는 일이라 아직 하지 않았다.
|
|
8
11
|
*
|
|
9
12
|
* **두 벌이 되면 어긋날 수 있다.** 그래서 `test/fixtures/figure-blueprint-sample.json`
|
|
10
13
|
* 에 figure-model 이 실제로 낸 청사진을 넣어 두고, 시험이 그것을 이 형식으로 읽는다.
|
|
11
14
|
* figure-model 의 형식이 바뀌면 표본을 다시 뽑을 때 시험이 깨진다.
|
|
12
15
|
*
|
|
13
|
-
* 좌표 규약은 figure-model 의 `PartTransform` 과 같다 —
|
|
14
|
-
*
|
|
15
|
-
* `
|
|
16
|
+
* 좌표 규약은 figure-model 의 `PartTransform` 과 같다 — **3D 도구들이 쓰는 그대로**
|
|
17
|
+
* `x` 오른쪽, `y` 위, `z` 앞이고, `position` 은 부품 **중심**의 자리이며 기준은
|
|
18
|
+
* `base` 상자의 중심 (0,0,0) 이다. 크기는 `size.x`·`size.y`·`size.z` 로 부른다.
|
|
19
|
+
*
|
|
20
|
+
* **컴포넌트 state 의 낱말과 다르다.** state 는 `width`·`height`·`depth` 이고 그쪽은
|
|
21
|
+
* `depth` 가 높이다. 환산은 `figure-real-object.ts` 의 `updateDimension` 한 곳에서만
|
|
22
|
+
* 한다 — 그 밖에서는 청사진의 축을 그대로 three 에 넘긴다(three 도 y 가 위다).
|
|
16
23
|
*/
|
|
17
24
|
export type FigurePrimitiveKind = 'cube' | 'wall' | 'cylinder' | 'sphere' | 'rect' | 'polygon';
|
|
18
25
|
export type FigureMaterialSlot = 'cap' | 'side';
|
|
@@ -23,10 +30,11 @@ export interface FigureVec3 {
|
|
|
23
30
|
y: number;
|
|
24
31
|
z: number;
|
|
25
32
|
}
|
|
26
|
-
export interface FigurePartTransform
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
export interface FigurePartTransform {
|
|
34
|
+
/** 부품 중심의 자리. */
|
|
35
|
+
position: FigureVec3;
|
|
36
|
+
/** 축별 크기. */
|
|
37
|
+
size: FigureVec3;
|
|
30
38
|
rotation?: Partial<FigureVec3>;
|
|
31
39
|
}
|
|
32
40
|
export interface FigurePartMaterial {
|
|
@@ -84,11 +92,8 @@ export interface FigureBlueprintLabel {
|
|
|
84
92
|
export interface FigureBlueprint {
|
|
85
93
|
version: number;
|
|
86
94
|
type: string;
|
|
87
|
-
base
|
|
88
|
-
|
|
89
|
-
height: number;
|
|
90
|
-
depth: number;
|
|
91
|
-
};
|
|
95
|
+
/** 기준 크기(축별). `base.y` 가 높이다. */
|
|
96
|
+
base: FigureVec3;
|
|
92
97
|
anchor?: FigureVec3;
|
|
93
98
|
budget: {
|
|
94
99
|
triangles: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figure-blueprint.d.ts","sourceRoot":"","sources":["../../src/figure/figure-blueprint.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"figure-blueprint.d.ts","sourceRoot":"","sources":["../../src/figure/figure-blueprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -264,8 +264,37 @@ export declare class FigureInstance extends FigureInstance_base {
|
|
|
264
264
|
/** 이 인스턴스가 그리는 청사진. 등록이 지워졌으면 null 이다. */
|
|
265
265
|
get figure(): import("./figure-registry.js").PreparedFigure | null;
|
|
266
266
|
render(ctx: SceneRenderContext): void;
|
|
267
|
-
/**
|
|
267
|
+
/**
|
|
268
|
+
* 높이 배율. `state.depth` 를 적었으면 그것이 이기고, 없으면 평면 두 축의 기하평균을
|
|
269
|
+
* 쓴다 — 3D 쪽 `effectiveDepth` 와 같은 규칙이다. 여기만 다르면 `stretch` 가 두
|
|
270
|
+
* 화면에서 다른 축으로 늘어난다.
|
|
271
|
+
*/
|
|
272
|
+
private depthScale;
|
|
273
|
+
/**
|
|
274
|
+
* 부품 하나의 톱뷰 윤곽을 현재 path 에 그린다. `ox`·`oy` 는 캔버스에 놓인 원점이다.
|
|
275
|
+
*
|
|
276
|
+
* ## 회전을 반영한다
|
|
277
|
+
*
|
|
278
|
+
* 3D 는 도는데 2D 가 안 돌면 **같은 물건이 두 화면에서 다르게** 보인다. 위에서
|
|
279
|
+
* 내려다보므로 축마다 뜻이 다르다.
|
|
280
|
+
*
|
|
281
|
+
* y 회전 평면 안에서 도는 것이다. 그대로 돌려 그린다 — 정확하다
|
|
282
|
+
* x·z 회전 부품이 **기울어진다.** 발자국의 모양 자체가 달라져서 원기둥이 타원
|
|
283
|
+
* 비슷한 것이 되고 상자는 육각형 그림자가 된다
|
|
284
|
+
*
|
|
285
|
+
* 기울어진 것은 **회전한 상자의 평면 경계**로 근사한다. 실제 그림자보다 조금 크게
|
|
286
|
+
* 잡히지만, 안 돌린 채로 두면 「어디에 걸리는지」를 아예 못 보여 준다.
|
|
287
|
+
*/
|
|
268
288
|
private tracePart;
|
|
289
|
+
/**
|
|
290
|
+
* 복제본 하나를 그린다. 자리는 이미 정해져 왔고, 여기서는 회전만 다룬다.
|
|
291
|
+
*
|
|
292
|
+
* `gx`·`gy` 는 **크기**에 쓰는 배율이다. 인스턴스 배율과 같을 수도 있고(`scale`),
|
|
293
|
+
* 축마다 되돌려진 값일 수도 있다(`fixed`·`stretch`).
|
|
294
|
+
*/
|
|
295
|
+
private traceOne;
|
|
296
|
+
/** 부품의 평면 윤곽을 `cx`·`cy` 를 중심으로 그린다. 회전은 부르는 쪽이 이미 걸었다. */
|
|
297
|
+
private traceShape;
|
|
269
298
|
/**
|
|
270
299
|
* 청사진을 못 찾았을 때. **빈 자리로 두지 않는다** — 아무것도 안 그리면 보는 사람은
|
|
271
300
|
* 컴포넌트가 없는 것인지 청사진이 없는 것인지 알 수 없다. 자리와 타입 이름을 보인다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figure-instance.d.ts","sourceRoot":"","sources":["../../src/figure/figure-instance.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"figure-instance.d.ts","sourceRoot":"","sources":["../../src/figure/figure-instance.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiF7D,qBAAa,cAAe,SAAQ,mBAAe;IACjD;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIvC,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,0CAA0C;IAC1C,IAAI,MAAM,yDAET;IAED,MAAM,CAAC,GAAG,EAAE,kBAAkB;IAoC9B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,SAAS;IAgDjB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IA2ChB,0DAA0D;IAC1D,OAAO,CAAC,UAAU;IAmDlB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;OAKG;IACM,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAGvD;AAMD,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import Component from '../components/component.js';
|
|
2
|
+
import Shape from '../components/shape.js';
|
|
3
|
+
import type { SceneRenderContext } from '../interfaces/rendering.js';
|
|
4
|
+
import type { IRealObject } from '../interfaces/real-object.js';
|
|
5
|
+
import type { ComponentNature } from '../interfaces/types.js';
|
|
6
|
+
import { RealObject } from '../threed/real-object.js';
|
|
7
|
+
import { MATERIAL_PRESETS } from '../threed/material-3d.js';
|
|
8
|
+
/** 이 컴포넌트가 3D 로 세울 수 있는 도형. `PRIMITIVE_KINDS` 와 같은 집합이다. */
|
|
9
|
+
export type FigurePartPrimitive = 'cube' | 'wall' | 'cylinder' | 'sphere' | 'rect' | 'polygon';
|
|
10
|
+
/** 부품 컴포넌트가 갖는, 씬 공통 상태 밖의 값들. */
|
|
11
|
+
export interface FigurePartState {
|
|
12
|
+
primitive?: FigurePartPrimitive;
|
|
13
|
+
segments?: number;
|
|
14
|
+
/** `rect` 의 모서리 굴림, `polygon` 의 단면 경로. */
|
|
15
|
+
round?: number;
|
|
16
|
+
path?: {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
}[];
|
|
20
|
+
/** 팔레트 토큰. 값이 아니라 이름을 둔다 — 테마를 바꾸면 따라온다. */
|
|
21
|
+
token?: string;
|
|
22
|
+
preset?: keyof typeof MATERIAL_PRESETS;
|
|
23
|
+
flatShading?: boolean;
|
|
24
|
+
transparent?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 부품의 3D 표현.
|
|
28
|
+
*
|
|
29
|
+
* 치수를 형상에 굽지 않는다 — 단위 형상을 창고에서 꺼내 `dimensionScale` 로 키운다.
|
|
30
|
+
* 그래야 크기가 다른 부품끼리도 형상 하나를 나눠 쓴다. 단면을 미는 것(`rect` ·
|
|
31
|
+
* `polygon`)만 예외인데, 단위로 정규화하면 모서리 굴림 비율이 망가지기 때문이다.
|
|
32
|
+
*/
|
|
33
|
+
export declare class FigurePartRealObject extends RealObject {
|
|
34
|
+
build(): void;
|
|
35
|
+
/** 단위 형상. 치수는 배율로 준다. */
|
|
36
|
+
private unitGeometry;
|
|
37
|
+
/**
|
|
38
|
+
* 단면을 밀어 만든 형상. **치수가 구워지므로 열쇠에 치수가 든다.**
|
|
39
|
+
*
|
|
40
|
+
* 단면은 평면도다 — 가로가 `width`, 세로가 `height` 이고 밀리는 두께가 `depth` 다.
|
|
41
|
+
* 여기서는 두께 1 로 만들고 배율로 키운다. 굴림은 평면 안의 값이라 배율에 안 눌린다.
|
|
42
|
+
*/
|
|
43
|
+
private extrudedGeometry;
|
|
44
|
+
private crossSection;
|
|
45
|
+
/**
|
|
46
|
+
* 재질. **팔레트 토큰과 프리셋으로만 정한다** — 배포된 Figure 와 같은 규칙이다.
|
|
47
|
+
*
|
|
48
|
+
* 창고가 값으로 공유하므로 같은 토큰·프리셋을 쓰는 부품끼리 재질 하나를 나눠 쓴다.
|
|
49
|
+
* 접었을 때 세어지는 「재질 묶음」이 저작 중에도 그대로 눈에 보인다.
|
|
50
|
+
*/
|
|
51
|
+
private material;
|
|
52
|
+
/**
|
|
53
|
+
* 치수를 배율로 준다.
|
|
54
|
+
*
|
|
55
|
+
* 단면을 민 것은 평면 치수가 이미 형상에 구워져 있으므로 두께만 키운다 — 평면까지
|
|
56
|
+
* 배율을 걸면 두 번 곱해진다.
|
|
57
|
+
*/
|
|
58
|
+
updateDimension(): void;
|
|
59
|
+
}
|
|
60
|
+
declare const FigurePart_base: {
|
|
61
|
+
new (...args: any[]): {
|
|
62
|
+
contains(x: number, y: number): boolean;
|
|
63
|
+
get path(): {
|
|
64
|
+
x: any;
|
|
65
|
+
y: any;
|
|
66
|
+
}[];
|
|
67
|
+
set path(path: {
|
|
68
|
+
x: any;
|
|
69
|
+
y: any;
|
|
70
|
+
}[]);
|
|
71
|
+
get anchors(): {
|
|
72
|
+
name: string;
|
|
73
|
+
position: {
|
|
74
|
+
x: any;
|
|
75
|
+
y: any;
|
|
76
|
+
};
|
|
77
|
+
}[];
|
|
78
|
+
get bounds(): any;
|
|
79
|
+
set bounds(bounds: any);
|
|
80
|
+
render(ctx: CanvasRenderingContext2D): void;
|
|
81
|
+
_app: any;
|
|
82
|
+
_model: any;
|
|
83
|
+
_state: any;
|
|
84
|
+
_delta: any;
|
|
85
|
+
_animation: any;
|
|
86
|
+
_animate: any;
|
|
87
|
+
_parent: any;
|
|
88
|
+
_disposed: any;
|
|
89
|
+
_textHidden: any;
|
|
90
|
+
_text_substitutor: any;
|
|
91
|
+
_value_substitutor: any;
|
|
92
|
+
_mappings: any;
|
|
93
|
+
_realObject: IRealObject | undefined;
|
|
94
|
+
_cachedState: any;
|
|
95
|
+
updatedAt: any;
|
|
96
|
+
fontSize: any;
|
|
97
|
+
__cache__: any;
|
|
98
|
+
created(): void;
|
|
99
|
+
added(parent: import("../types/component.js").Container): void;
|
|
100
|
+
removed(parent: import("../types/component.js").Container): void;
|
|
101
|
+
ready(): Promise<void>;
|
|
102
|
+
_readyInvoked: boolean;
|
|
103
|
+
invokeReady(): void | Promise<void>;
|
|
104
|
+
touch(): void;
|
|
105
|
+
clearCache(...attrs: string[]): void;
|
|
106
|
+
removeSelf(completely?: boolean): void;
|
|
107
|
+
resetAnimation(): void;
|
|
108
|
+
dispose(): void;
|
|
109
|
+
get nature(): ComponentNature;
|
|
110
|
+
get disposed(): boolean;
|
|
111
|
+
isLayer(): boolean;
|
|
112
|
+
isGroup(): boolean;
|
|
113
|
+
isContainer(): this is import("../types/component.js").Container;
|
|
114
|
+
isLine(): boolean;
|
|
115
|
+
isRoot(): boolean;
|
|
116
|
+
isRootModel(): boolean;
|
|
117
|
+
is3dish(): boolean;
|
|
118
|
+
get is3dMode(): boolean;
|
|
119
|
+
isIn3DSpace(): boolean;
|
|
120
|
+
isTemplate(): boolean;
|
|
121
|
+
isHTMLElement(): boolean;
|
|
122
|
+
isConnectable(): boolean;
|
|
123
|
+
isIdentifiable(): boolean;
|
|
124
|
+
isPositionable(): boolean;
|
|
125
|
+
replaceRefids(replaceMap: Record<string, string>): void;
|
|
126
|
+
get(property: string): any;
|
|
127
|
+
set(props: any, propval?: any): any;
|
|
128
|
+
getState(property: string): any;
|
|
129
|
+
setState(props: Partial<import("../index.js").State> | string, propval?: any): any;
|
|
130
|
+
get model(): any;
|
|
131
|
+
get state(): import("../index.js").State;
|
|
132
|
+
get refid(): any;
|
|
133
|
+
get hierarchy(): any;
|
|
134
|
+
get volatile(): string[];
|
|
135
|
+
_applyProps(target: Record<string, any>, props: Record<string, any>, options: import("../components/component.js").ApplyPropsOptions): /*elided*/ any;
|
|
136
|
+
move(offset: {
|
|
137
|
+
x: number;
|
|
138
|
+
y: number;
|
|
139
|
+
}, ...args: boolean[]): void;
|
|
140
|
+
symmetryX(x?: number): void;
|
|
141
|
+
symmetryY(y: number): void;
|
|
142
|
+
adjustResize(bounds: import("../index.js").BOUNDS, origin_bounds: import("../index.js").BOUNDS, diagonal: boolean): {
|
|
143
|
+
left: any;
|
|
144
|
+
top: any;
|
|
145
|
+
width: any;
|
|
146
|
+
height: any;
|
|
147
|
+
};
|
|
148
|
+
adjustRotation(rotation: number, step: boolean): number;
|
|
149
|
+
outline(progress: number): any;
|
|
150
|
+
get center(): import("../index.js").POINT;
|
|
151
|
+
set center(p: import("../index.js").POINT);
|
|
152
|
+
get location(): import("../index.js").POINT;
|
|
153
|
+
set location(l: import("../index.js").POINT);
|
|
154
|
+
get rotate(): import("../index.js").POINT;
|
|
155
|
+
set rotate(r: import("../index.js").POINT);
|
|
156
|
+
get dimension(): import("../index.js").DIMENSION;
|
|
157
|
+
set dimension(d: import("../index.js").DIMENSION);
|
|
158
|
+
get drawPath(): import("../index.js").POINT[];
|
|
159
|
+
get rotatePoint(): import("../index.js").POINT;
|
|
160
|
+
get mutable(): boolean;
|
|
161
|
+
get resizable(): boolean;
|
|
162
|
+
get rotatable(): boolean;
|
|
163
|
+
buildRealObject(): IRealObject | undefined;
|
|
164
|
+
get realObject(): IRealObject | undefined;
|
|
165
|
+
draw(context?: SceneRenderContext): void;
|
|
166
|
+
prerender(context: SceneRenderContext): void;
|
|
167
|
+
postrender(context: SceneRenderContext): void;
|
|
168
|
+
prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
|
|
169
|
+
prepareIf(condition: boolean): void;
|
|
170
|
+
drawText(context: SceneRenderContext): void;
|
|
171
|
+
drawStroke(context: SceneRenderContext, override?: Record<string, unknown>): void;
|
|
172
|
+
drawFill(context: SceneRenderContext, override?: Record<string, unknown>): void;
|
|
173
|
+
get strokeStyle(): any;
|
|
174
|
+
set strokeStyle(v: any);
|
|
175
|
+
get fillStyle(): any;
|
|
176
|
+
set fillStyle(v: any);
|
|
177
|
+
get fontColor(): string;
|
|
178
|
+
set fontColor(v: string);
|
|
179
|
+
get rotation(): number;
|
|
180
|
+
set rotation(v: number);
|
|
181
|
+
get decorators(): string[];
|
|
182
|
+
get decotag(): string;
|
|
183
|
+
get hidden(): boolean;
|
|
184
|
+
set hidden(v: boolean);
|
|
185
|
+
get tag(): string;
|
|
186
|
+
set tag(v: string);
|
|
187
|
+
get appendum(): any;
|
|
188
|
+
set appendum(v: any);
|
|
189
|
+
defaultTextSubstitutor(): string;
|
|
190
|
+
textLines(context?: SceneRenderContext): any[][];
|
|
191
|
+
get font(): string;
|
|
192
|
+
get lineHeight(): number;
|
|
193
|
+
get textSubstitutor(): () => string;
|
|
194
|
+
get text(): string;
|
|
195
|
+
set text(v: string);
|
|
196
|
+
get textBounds(): import("../index.js").BOUNDS;
|
|
197
|
+
get textRotation(): number;
|
|
198
|
+
get textHidden(): boolean;
|
|
199
|
+
set textHidden(v: boolean);
|
|
200
|
+
get hasTextProperty(): boolean;
|
|
201
|
+
animate(opts: import("../index.js").AnimationConfig): any;
|
|
202
|
+
effect(context: SceneRenderContext, model: any): void;
|
|
203
|
+
serialize(...others: any[]): string;
|
|
204
|
+
trim(): void;
|
|
205
|
+
closeScene(data: any): void;
|
|
206
|
+
delta(attr?: string | object, value?: any): any;
|
|
207
|
+
invalidate(): void;
|
|
208
|
+
get value(): any;
|
|
209
|
+
set value(v: any);
|
|
210
|
+
get data(): any;
|
|
211
|
+
set data(v: any);
|
|
212
|
+
set tap(v: any);
|
|
213
|
+
get mappings(): any[];
|
|
214
|
+
get retention(): number;
|
|
215
|
+
get animation(): import("../index.js").AnimationController | undefined;
|
|
216
|
+
get started(): boolean;
|
|
217
|
+
set started(v: boolean);
|
|
218
|
+
get controls(): import("../index.js").Control[] | undefined;
|
|
219
|
+
findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
|
|
220
|
+
findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
|
|
221
|
+
capture(x: number, y: number, except?: (c: Component) => boolean): any;
|
|
222
|
+
findAnchor(name: string): any;
|
|
223
|
+
isDescendible(container: Component | any): boolean;
|
|
224
|
+
getContext(component?: unknown): any;
|
|
225
|
+
get root(): Component;
|
|
226
|
+
get rootModel(): Component;
|
|
227
|
+
get parent(): Component;
|
|
228
|
+
set parent(v: Component);
|
|
229
|
+
get scalable(): boolean;
|
|
230
|
+
get stuck(): boolean;
|
|
231
|
+
get capturable(): boolean;
|
|
232
|
+
get position(): string;
|
|
233
|
+
get origin(): string;
|
|
234
|
+
get offset(): import("../index.js").POINT;
|
|
235
|
+
get app(): import("../index.js").ApplicationContext;
|
|
236
|
+
drawEffect(context: SceneRenderContext): void;
|
|
237
|
+
prepareFill(resolve: Function, reject: Function): void;
|
|
238
|
+
prepareFillIf(condition: boolean): void;
|
|
239
|
+
onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
|
|
240
|
+
drawImage(context: SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
|
|
241
|
+
mutateBounds(logic: ((bounds: import("../index.js").BOUNDS) => import("../index.js").BOUNDS | void) | null, context?: any): void;
|
|
242
|
+
mutatePath(beforeLogic: ((path: import("../index.js").POINT[]) => import("../index.js").POINT[] | void) | null, afterLogic: ((path: import("../index.js").POINT[]) => import("../index.js").POINT[] | void) | null, context?: any): void;
|
|
243
|
+
access(accessor: string): any;
|
|
244
|
+
substitute(template: string, data: any): string | undefined;
|
|
245
|
+
onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
|
|
246
|
+
onchangeData(after: Record<string, any>, before: Record<string, any>): void;
|
|
247
|
+
buildMappings(): void;
|
|
248
|
+
executeMappings(force?: boolean): void;
|
|
249
|
+
disposeMappings(): void;
|
|
250
|
+
ondropfile(transfered: FileList, files: string[]): void;
|
|
251
|
+
transcoordS2P(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
252
|
+
transcoordP2S(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
253
|
+
transcoordS2T(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
254
|
+
transcoordT2P(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
255
|
+
transcoordT2S(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
256
|
+
transcoordS2TR(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
257
|
+
transcoordS2O(x: number, y: number, target: Component): import("../index.js").POINT;
|
|
258
|
+
transcoordC2S(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
259
|
+
transcoordS2C(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
260
|
+
toParent(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
261
|
+
fromParent(x: number, y: number, rp?: import("../index.js").POINT): import("../index.js").POINT;
|
|
262
|
+
toScene(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
263
|
+
fromScene(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
264
|
+
toLocal(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
265
|
+
toGlobal(x: number, y: number, top?: Component): import("../index.js").POINT;
|
|
266
|
+
toOther(x: number, y: number, target: Component): import("../index.js").POINT;
|
|
267
|
+
on<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback: (...args: import("../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
|
|
268
|
+
on(name: string | object, callback: Function, context?: any): /*elided*/ any;
|
|
269
|
+
off<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback?: ((...args: import("../index.js").ComponentEventMap[K]) => void) | undefined, context?: any): /*elided*/ any;
|
|
270
|
+
off(name?: string | object, callback?: Function, context?: any): /*elided*/ any;
|
|
271
|
+
once<K extends keyof import("../index.js").ComponentEventMap>(name: K, callback: (...args: import("../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
|
|
272
|
+
once(name: string | object, callback: Function, context?: any): /*elided*/ any;
|
|
273
|
+
trigger<K extends keyof import("../index.js").ComponentEventMap>(name: K, ...args: import("../index.js").ComponentEventMap[K]): /*elided*/ any;
|
|
274
|
+
trigger(name: string, ...args: any[]): /*elided*/ any;
|
|
275
|
+
delegate_on(delegator: any): /*elided*/ any;
|
|
276
|
+
delegate_off(delegator: any): /*elided*/ any;
|
|
277
|
+
onchange(after: Record<string, any>, before: Record<string, any>): void;
|
|
278
|
+
calculateBounds?(): void;
|
|
279
|
+
oncreate_element?(element: HTMLElement): void;
|
|
280
|
+
removeComponent(component: Component, ghost?: boolean): void;
|
|
281
|
+
addComponent(component: Component, ghost?: boolean): void;
|
|
282
|
+
insertComponentAt(component: Component, index: number, ghost?: boolean): void;
|
|
283
|
+
getOverlay(component: Component): HTMLElement | undefined;
|
|
284
|
+
findById(id: string): Component | undefined;
|
|
285
|
+
findByRefid(ref: string | number): Component | undefined;
|
|
286
|
+
findAllById(id: string): Component[];
|
|
287
|
+
resize(): void;
|
|
288
|
+
fit(type?: string): void;
|
|
289
|
+
get components(): Component[] | undefined;
|
|
290
|
+
get layout(): any;
|
|
291
|
+
get auxOverlay(): HTMLElement | undefined;
|
|
292
|
+
get isReady(): boolean;
|
|
293
|
+
get unitScale(): number;
|
|
294
|
+
get selected(): Component[];
|
|
295
|
+
set selected(_v: Component[]);
|
|
296
|
+
get focused(): Component | null;
|
|
297
|
+
set focused(_v: Component | null);
|
|
298
|
+
get hasSameParentForAllSelected(): boolean;
|
|
299
|
+
set hasSameParentForAllSelected(_v: boolean);
|
|
300
|
+
get fitMode(): string | undefined;
|
|
301
|
+
set fitMode(_v: string | undefined);
|
|
302
|
+
get element(): HTMLElement | null;
|
|
303
|
+
set element(_v: HTMLElement | null);
|
|
304
|
+
};
|
|
305
|
+
} & typeof Shape;
|
|
306
|
+
/**
|
|
307
|
+
* 저작 중인 부품. 판 위에 놓이는 여느 컴포넌트다.
|
|
308
|
+
*
|
|
309
|
+
* 2D 는 위에서 내려다본 발자국을 그린다. 저작면의 2D 뷰와 배포된 Figure 의 2D 표현이
|
|
310
|
+
* 같은 규칙으로 그려져야, 접기 전후로 그림이 달라지지 않는다.
|
|
311
|
+
*/
|
|
312
|
+
export declare class FigurePart extends FigurePart_base {
|
|
313
|
+
/** 이름이 `register` 면 밑바탕 클래스의 것과 부딪힌다 — `FigureInstance` 와 같은 이름을 쓴다. */
|
|
314
|
+
static registerType(): void;
|
|
315
|
+
get hasTextProperty(): boolean;
|
|
316
|
+
is3dish(): boolean;
|
|
317
|
+
get nature(): ComponentNature;
|
|
318
|
+
buildRealObject(): IRealObject | undefined;
|
|
319
|
+
render(ctx: SceneRenderContext): void;
|
|
320
|
+
/** 위에서 내려다본 발자국. 3D 와 **같은 분할 수**로 근사한다. */
|
|
321
|
+
private traceFootprint;
|
|
322
|
+
}
|
|
323
|
+
export {};
|
|
324
|
+
//# sourceMappingURL=figure-part-component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figure-part-component.d.ts","sourceRoot":"","sources":["../../src/figure/figure-part-component.ts"],"names":[],"mappings":"AAMA,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAClD,OAAO,KAAK,MAAM,wBAAwB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAyC3D,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAQ9F,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACjC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,OAAO,gBAAgB,CAAA;IACtC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAMD;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,KAAK;IAgBL,yBAAyB;IACzB,OAAO,CAAC,YAAY;IAapB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,YAAY;IA4CpB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;;;;OAKG;IACH,eAAe,IAAI,IAAI;CAWxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,wEAAwE;IACxE,MAAM,CAAC,YAAY,IAAI,IAAI;IAI3B,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,MAAM,CAAC,GAAG,EAAE,kBAAkB;IAU9B,4CAA4C;IAC5C,OAAO,CAAC,cAAc;CA2CvB"}
|
|
@@ -28,29 +28,70 @@ import type { FigureBlueprintMember } from './figure-blueprint.js';
|
|
|
28
28
|
* `InstancedMesh` 이고, 그것은 인스턴스별 선택·컬링·재질을 다르게 다뤄야 해서 별개
|
|
29
29
|
* 결정이다.
|
|
30
30
|
*/
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* 청사진 좌표가 곧 three 좌표다 — 둘 다 x 오른쪽, y 위, z 앞이고, 둘 다 원점이
|
|
33
|
+
* 중심이다. **갈아끼울 것이 없다.**
|
|
34
|
+
*
|
|
35
|
+
* 컴포넌트 state 와의 환산은 `updateDimension` 한 곳에만 있다.
|
|
36
|
+
*/
|
|
32
37
|
export declare function memberGeometry(member: FigureBlueprintMember): THREE.BufferGeometry | null;
|
|
33
38
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
39
|
+
* 회전까지 구운 형상 — **자리는 옮기지 않는다.**
|
|
40
|
+
*
|
|
41
|
+
* 크기 반응이 `scale` 이 아닌 부품이 쓴다. 그런 부품은 mesh 를 따로 갖고 `mesh.position`
|
|
42
|
+
* 으로 자리를 잡으므로, 형상은 원점에 있어야 한다.
|
|
43
|
+
*
|
|
44
|
+
* 회전을 mesh 에 걸지 않고 형상에 굽는 것이 중요하다. 되돌리는 배율이 비균등이라
|
|
45
|
+
* (`fixed` 는 축마다 다른 값이다) 회전 뒤에 곱하면 형상이 기울어진다.
|
|
46
|
+
*/
|
|
47
|
+
export declare function memberGeometryTurned(member: FigureBlueprintMember): THREE.BufferGeometry | null;
|
|
48
|
+
/**
|
|
49
|
+
* 부품 하나의 형상을 **제 중심을 원점에 두고** 만든다.
|
|
50
|
+
*
|
|
51
|
+
* 자리를 굽지 않는다. 그러면 크기·종류가 같은 부품끼리는 자리가 달라도 같은 형상을
|
|
52
|
+
* 나눠 쓸 수 있고, 모델러 화면에서는 `mesh.position` 이 곧 부품의 자리가 되어 기즈모로
|
|
53
|
+
* 끈 결과를 그대로 되읽을 수 있다.
|
|
54
|
+
*/
|
|
55
|
+
export declare function memberGeometryAtOrigin(member: FigureBlueprintMember): THREE.BufferGeometry | null;
|
|
56
|
+
/**
|
|
57
|
+
* 한 묶음의 부품들을 하나로 합친다. **모양당 한 번만** 만들고 창고에 둔다 — 모양이
|
|
58
|
+
* 같으면 몇 번을 불러도 **같은 객체**가 나온다. 공유가 실제로 일어나는지 시험이
|
|
59
|
+
* 확인할 수 있게 내보낸다.
|
|
37
60
|
*
|
|
38
|
-
* 합친 결과는
|
|
39
|
-
* 컴포넌트들이 `geometry.center()` 로 맞추는 기준과
|
|
61
|
+
* 합친 결과는 청사진 좌표 그대로다. 청사진의 원점이 이미 base 상자의 중심이라, 다른
|
|
62
|
+
* 컴포넌트들이 `geometry.center()` 로 맞추는 기준과 같은 자리에 있다.
|
|
40
63
|
*/
|
|
41
64
|
export declare function mergedGeometryOf(figure: PreparedFigure, index: number): THREE.BufferGeometry | null;
|
|
42
65
|
export declare class FigureRealObject extends RealObject {
|
|
43
66
|
/** 부품 이름 → mesh. 애니메이션·바인딩이 부품을 찾는 자리다. */
|
|
44
67
|
private _meshByName;
|
|
68
|
+
/** 크기 반응이 걸린 부품들. 인스턴스 크기가 바뀔 때마다 다시 맞춘다. */
|
|
69
|
+
private _sized;
|
|
45
70
|
get figure(): PreparedFigure | null;
|
|
46
|
-
/** 부품 이름으로 mesh 를 찾는다. 이름이 곧 바인딩·애니메이션이 붙는 자리다. */
|
|
47
|
-
meshOf(name: string): THREE.Mesh | undefined;
|
|
48
71
|
build(): void;
|
|
72
|
+
/**
|
|
73
|
+
* 크기 반응이 걸린 부품을 세운다.
|
|
74
|
+
*
|
|
75
|
+
* 그릇을 저작한 자리에 놓고 그 안에 형상을 담는다. 그릇은 부모 배율을 그대로 받아
|
|
76
|
+
* 자리가 인스턴스를 따라가고, 되돌리는 배율은 그릇에 걸려 안쪽 크기를 지킨다.
|
|
77
|
+
*
|
|
78
|
+
* 복제본은 `updateDimension` 이 필요한 만큼 만든다 — 여기서는 하나만 두고 시작한다.
|
|
79
|
+
* 인스턴스 크기를 아직 모르기 때문이다.
|
|
80
|
+
*/
|
|
81
|
+
private buildSized;
|
|
82
|
+
/**
|
|
83
|
+
* 크기 반응을 지금 인스턴스 크기에 맞춘다.
|
|
84
|
+
*
|
|
85
|
+
* 되돌리는 배율은 그릇에 걸고, `repeat` 는 그릇 안의 복제본 수와 자리를 다시 잡는다.
|
|
86
|
+
* 복제본은 **버리지 않고 감춘다** — 크기를 끌 때마다 mesh 를 만들고 버리면 끄는 동안
|
|
87
|
+
* 계속 새 객체가 생긴다.
|
|
88
|
+
*/
|
|
89
|
+
private applySizing;
|
|
49
90
|
/**
|
|
50
91
|
* 인스턴스의 높이.
|
|
51
92
|
*
|
|
52
93
|
* 보드는 `left`·`top`·`width`·`height` 만 적는 것이 보통이고 `depth` 는 잘 적지
|
|
53
|
-
* 않는다. 그때 기본 높이(≈1)를 쓰면 `base.
|
|
94
|
+
* 않는다. 그때 기본 높이(≈1)를 쓰면 `base.y` 로 나뉘어 형상이 납작하게 눌린다.
|
|
54
95
|
*
|
|
55
96
|
* **저작한 비례를 지킨다** — 평면 두 축이 커진 만큼 높이도 커진다. 배치 크기가
|
|
56
97
|
* 템플릿의 비율로 처리된다는 것이 이 뜻이다. 두 축의 기하평균을 쓰므로 한 축만 늘여도
|
|
@@ -60,6 +101,14 @@ export declare class FigureRealObject extends RealObject {
|
|
|
60
101
|
/**
|
|
61
102
|
* 인스턴스 치수를 **배율로만** 준다 — geometry 는 건드리지 않으므로 인스턴스가
|
|
62
103
|
* 늘어도 정점 버퍼가 늘지 않는다.
|
|
104
|
+
*
|
|
105
|
+
* **낱말이 갈리는 유일한 자리다.** 청사진은 3D 도구들의 축(`x` 오른쪽, `y` 위,
|
|
106
|
+
* `z` 앞)을 쓰고, 컴포넌트 state 는 2D 캔버스에서 온 낱말(`width`·`height` 가
|
|
107
|
+
* 평면, `depth` 가 높이)을 쓴다. 환산은 여기서 한 번만 한다.
|
|
108
|
+
*
|
|
109
|
+
* state.width ↔ base.x 평면 가로
|
|
110
|
+
* state.height ↔ base.z 평면 세로
|
|
111
|
+
* state.depth ↔ base.y 높이
|
|
63
112
|
*/
|
|
64
113
|
updateDimension(): void;
|
|
65
114
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figure-real-object.d.ts","sourceRoot":"","sources":["../../src/figure/figure-real-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAKrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAA;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"figure-real-object.d.ts","sourceRoot":"","sources":["../../src/figure/figure-real-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAKrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAA;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AASlE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAuBzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAY/F;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAiCjG;AAmFD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CA0CnG;AA8DD,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAAgC;IACnD,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAkB;IAEhC,IAAI,MAAM,IAAI,cAAc,GAAG,IAAI,CAElC;IAED,KAAK;IA8BL;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAsBlB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAkCnB;;;;;;;;;OASG;IACH,IAAa,cAAc,IAAI,MAAM,CAepC;IAED;;;;;;;;;;;OAWG;IACH,eAAe,IAAI,IAAI;IAoBvB;;;;OAIG;IACM,UAAU,IAAI,UAAU,GAAG,IAAI;IAIxC,KAAK;CAMN"}
|