@hatiolab/things-scene 10.1.27 → 10.1.29

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.
@@ -27,7 +27,7 @@ import type { SlotDef } from '../transfer/types.js';
27
27
  import type { Port } from '../flow/flow-node.js';
28
28
  import type { FigureBlueprintAnchor } from './figure-blueprint.js';
29
29
  import { type InstanceScale } from './figure-sizing.js';
30
- import type { FigureCapability } from '@hatiolab/figure-model';
30
+ import type { FigureCapability, V3BindingDeclaration } from '@hatiolab/figure-model';
31
31
  type Ctor<T = object> = new (...args: any[]) => T;
32
32
  /**
33
33
  * 저작이 고를 수 있는 능력 — **목록은 형식이 갖는다.**
@@ -65,6 +65,11 @@ export declare function slotsFromAnchors(anchors: readonly FigureBlueprintAnchor
65
65
  y: number;
66
66
  z: number;
67
67
  }): SlotDef[];
68
+ /**
69
+ * A V3 figure's places (`capabilities.bindings`, a seat or a grip) as the scene's `SlotDef`. What a place takes is
70
+ * always named in V3, so `allowedTypes` is always written; how many it holds is its capacity.
71
+ */
72
+ export declare function slotsFromBindings(bindings: readonly V3BindingDeclaration[]): SlotDef[];
68
73
  /**
69
74
  * 청사진의 문을 씬의 `Port` 로. 자리와 달리 위치가 곧 뜻이므로 그대로 옮긴다.
70
75
  *
@@ -1 +1 @@
1
- {"version":3,"file":"figure-capability.d.ts","sourceRoot":"","sources":["../../src/figure/figure-capability.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAKlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,KAAK,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAEjD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,+DAAqB,CAAA;AAErD,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAA;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAM7G,CAAA;AAEJ,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAKjF,CAAA;AA4BF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,EAAE,CAaX;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,IAAI,EAAE,SAAS,GAAG,UAAU,EAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACzF,IAAI,EAAE,CAIR;AAoED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAqC/G;AA4DD,2BAA2B;AAC3B,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
1
+ {"version":3,"file":"figure-capability.d.ts","sourceRoot":"","sources":["../../src/figure/figure-capability.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,SAAS,MAAM,4BAA4B,CAAA;AAKlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAGpF,KAAK,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAEjD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,+DAAqB,CAAA;AAErD,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAA;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAM7G,CAAA;AAEJ,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAKjF,CAAA;AA4BF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,EAAE,CAaX;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,GAAG,OAAO,EAAE,CAEtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,IAAI,EAAE,SAAS,GAAG,UAAU,EAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACzF,IAAI,EAAE,CAIR;AAkFD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,GAAE,SAAS,MAAM,EAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAqC/G;AA4DD,2BAA2B;AAC3B,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -12,6 +12,7 @@ export * from './figure-palette.js';
12
12
  export * from './figure-registry.js';
13
13
  export * from './v3/figure-v3-registry.js';
14
14
  export { acquireV3Geometry, releaseV3Geometry, buildV3Geometry } from './v3/figure-v3-geometry.js';
15
+ export * from './v3/figure-v3-part-component.js';
15
16
  export * from './figure-real-object.js';
16
17
  export * from './figure-shape.js';
17
18
  export * from './figure-sizing.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figure/index.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAA;AAKpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AAMrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AAMpC,cAAc,4BAA4B,CAAA;AAK1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAClG,cAAc,yBAAyB,CAAA;AASvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figure/index.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAA;AAKpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AAMrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AAMpC,cAAc,4BAA4B,CAAA;AAK1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAClG,cAAc,kCAAkC,CAAA;AAChD,cAAc,yBAAyB,CAAA;AASvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,305 @@
1
+ import * as THREE from 'three';
2
+ import Component from '../../components/component.js';
3
+ import Shape from '../../components/shape.js';
4
+ import type { SceneRenderContext } from '../../interfaces/rendering.js';
5
+ import type { IRealObject } from '../../interfaces/real-object.js';
6
+ import type { ComponentNature, Properties } from '../../interfaces/types.js';
7
+ import { RealObject } from '../../threed/real-object.js';
8
+ /** The shape figure-model evaluated for this body. */
9
+ export interface FigureV3PartShape {
10
+ provider: string;
11
+ dimensions: Record<string, number>;
12
+ profile?: Array<{
13
+ id?: string;
14
+ x: number;
15
+ y: number;
16
+ }>;
17
+ }
18
+ export interface FigureV3PartState {
19
+ shape?: FigureV3PartShape;
20
+ segments?: number;
21
+ /** The body's colour, resolved by the modeller. */
22
+ color?: string;
23
+ preset?: string;
24
+ transparent?: boolean;
25
+ /** Glow: its colour and intensity (0 to 5). */
26
+ glow?: {
27
+ color: string;
28
+ intensity: number;
29
+ };
30
+ }
31
+ /**
32
+ * The body's geometry, centred on its bounding box and brought to a unit box, with the box's extents. Geometry with
33
+ * no extent on an axis (a flat face) keeps 1 there so nothing divides by zero.
34
+ */
35
+ export declare function unitV3PartGeometry(shape: FigureV3PartShape, segments?: number): {
36
+ geometry: THREE.BufferGeometry;
37
+ extent: THREE.Vector3;
38
+ centre: THREE.Vector3;
39
+ } | null;
40
+ export declare class FigureV3PartRealObject extends RealObject {
41
+ private mesh?;
42
+ build(): void;
43
+ clear(): THREE.Object3D<THREE.Object3DEventMap>;
44
+ onchange(after: Properties, before: Properties): void;
45
+ /** The unit geometry is scaled to the component's size: width along X, depth along Y (up), height along Z. */
46
+ updateDimension(): void;
47
+ private material;
48
+ }
49
+ declare const FigureV3Part_base: {
50
+ new (...args: any[]): {
51
+ contains(x: number, y: number): boolean;
52
+ get path(): {
53
+ x: any;
54
+ y: any;
55
+ }[];
56
+ set path(path: {
57
+ x: any;
58
+ y: any;
59
+ }[]);
60
+ get anchors(): {
61
+ name: string;
62
+ position: {
63
+ x: any;
64
+ y: any;
65
+ };
66
+ }[];
67
+ get bounds(): any;
68
+ set bounds(bounds: any);
69
+ render(ctx: CanvasRenderingContext2D): void;
70
+ _app: any;
71
+ _model: any;
72
+ _state: any;
73
+ _delta: any;
74
+ _animation: any;
75
+ _animate: any;
76
+ _parent: any;
77
+ _disposed: any;
78
+ _textHidden: any;
79
+ _text_substitutor: any;
80
+ _value_substitutor: any;
81
+ _mappings: any;
82
+ _realObject: IRealObject | undefined;
83
+ _cachedState: any;
84
+ updatedAt: any;
85
+ fontSize: any;
86
+ __cache__: any;
87
+ created(): void;
88
+ added(parent: import("../../types/component.js").Container): void;
89
+ removed(parent: import("../../types/component.js").Container): void;
90
+ ready(): Promise<void>;
91
+ _readyInvoked: boolean;
92
+ invokeReady(): void | Promise<void>;
93
+ touch(): void;
94
+ clearCache(...attrs: string[]): void;
95
+ removeSelf(completely?: boolean): void;
96
+ resetAnimation(): void;
97
+ dispose(): void;
98
+ get nature(): ComponentNature;
99
+ get disposed(): boolean;
100
+ isLayer(): boolean;
101
+ isGroup(): boolean;
102
+ isContainer(): this is import("../../types/component.js").Container;
103
+ isLine(): boolean;
104
+ isRoot(): boolean;
105
+ isRootModel(): boolean;
106
+ is3dish(): boolean;
107
+ get is3dMode(): boolean;
108
+ isIn3DSpace(): boolean;
109
+ isTemplate(): boolean;
110
+ isHTMLElement(): boolean;
111
+ isConnectable(): boolean;
112
+ isIdentifiable(): boolean;
113
+ isPositionable(): boolean;
114
+ replaceRefids(replaceMap: Record<string, string>): void;
115
+ get(property: string): any;
116
+ set(props: any, propval?: any): any;
117
+ getState(property: string): any;
118
+ setState(props: Partial<import("../../index.js").State> | string, propval?: any): any;
119
+ get model(): any;
120
+ get state(): import("../../index.js").State;
121
+ get refid(): any;
122
+ get hierarchy(): any;
123
+ get volatile(): string[];
124
+ _applyProps(target: Record<string, any>, props: Record<string, any>, options: import("../../components/component.js").ApplyPropsOptions): /*elided*/ any;
125
+ move(offset: {
126
+ x: number;
127
+ y: number;
128
+ }, ...args: boolean[]): void;
129
+ symmetryX(x?: number): void;
130
+ symmetryY(y: number): void;
131
+ adjustResize(bounds: import("../../index.js").BOUNDS, origin_bounds: import("../../index.js").BOUNDS, diagonal: boolean): {
132
+ left: any;
133
+ top: any;
134
+ width: any;
135
+ height: any;
136
+ };
137
+ adjustRotation(rotation: number, step: boolean): number;
138
+ outline(progress: number): any;
139
+ get center(): import("../../index.js").POINT;
140
+ set center(p: import("../../index.js").POINT);
141
+ get location(): import("../../index.js").POINT;
142
+ set location(l: import("../../index.js").POINT);
143
+ get rotate(): import("../../index.js").POINT;
144
+ set rotate(r: import("../../index.js").POINT);
145
+ get dimension(): import("../../index.js").DIMENSION;
146
+ set dimension(d: import("../../index.js").DIMENSION);
147
+ get drawPath(): import("../../index.js").POINT[];
148
+ get rotatePoint(): import("../../index.js").POINT;
149
+ get mutable(): boolean;
150
+ get resizable(): boolean;
151
+ get rotatable(): boolean;
152
+ buildRealObject(): IRealObject | undefined;
153
+ get realObject(): IRealObject | undefined;
154
+ draw(context?: SceneRenderContext): void;
155
+ prerender(context: SceneRenderContext): void;
156
+ postrender(context: SceneRenderContext): void;
157
+ prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
158
+ prepareIf(condition: boolean): void;
159
+ drawText(context: SceneRenderContext): void;
160
+ drawStroke(context: SceneRenderContext, override?: Record<string, unknown>): void;
161
+ drawFill(context: SceneRenderContext, override?: Record<string, unknown>): void;
162
+ get strokeStyle(): any;
163
+ set strokeStyle(v: any);
164
+ get fillStyle(): any;
165
+ set fillStyle(v: any);
166
+ get fontColor(): string;
167
+ set fontColor(v: string);
168
+ get rotation(): number;
169
+ set rotation(v: number);
170
+ get decorators(): string[];
171
+ get decotag(): string;
172
+ get hidden(): boolean;
173
+ set hidden(v: boolean);
174
+ get tag(): string;
175
+ set tag(v: string);
176
+ get appendum(): any;
177
+ set appendum(v: any);
178
+ defaultTextSubstitutor(): string;
179
+ textLines(context?: SceneRenderContext): any[][];
180
+ get font(): string;
181
+ get lineHeight(): number;
182
+ get textSubstitutor(): () => string;
183
+ get text(): string;
184
+ set text(v: string);
185
+ get textBounds(): import("../../index.js").BOUNDS;
186
+ get textRotation(): number;
187
+ get textHidden(): boolean;
188
+ set textHidden(v: boolean);
189
+ get hasTextProperty(): boolean;
190
+ animate(opts: import("../../index.js").AnimationConfig): any;
191
+ effect(context: SceneRenderContext, model: any): void;
192
+ serialize(...others: any[]): string;
193
+ trim(): void;
194
+ closeScene(data: any): void;
195
+ delta(attr?: string | object, value?: any): any;
196
+ invalidate(): void;
197
+ get value(): any;
198
+ set value(v: any);
199
+ get data(): any;
200
+ set data(v: any);
201
+ set tap(v: any);
202
+ get mappings(): any[];
203
+ get retention(): number;
204
+ get animation(): import("../../index.js").AnimationController | undefined;
205
+ get started(): boolean;
206
+ set started(v: boolean);
207
+ get controls(): import("../../index.js").Control[] | undefined;
208
+ findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
209
+ findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
210
+ capture(x: number, y: number, except?: (c: Component) => boolean): any;
211
+ findAnchor(name: string): any;
212
+ isDescendible(container: Component | any): boolean;
213
+ getContext(component?: unknown): any;
214
+ get root(): Component;
215
+ get rootModel(): Component;
216
+ get parent(): Component;
217
+ set parent(v: Component);
218
+ get scalable(): boolean;
219
+ get stuck(): boolean;
220
+ get capturable(): boolean;
221
+ get position(): string;
222
+ get origin(): string;
223
+ get offset(): import("../../index.js").POINT;
224
+ get app(): import("../../index.js").ApplicationContext;
225
+ drawEffect(context: SceneRenderContext): void;
226
+ prepareFill(resolve: Function, reject: Function): void;
227
+ prepareFillIf(condition: boolean): void;
228
+ onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
229
+ drawImage(context: SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
230
+ mutateBounds(logic: ((bounds: import("../../index.js").BOUNDS) => import("../../index.js").BOUNDS | void) | null, context?: any): void;
231
+ 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;
232
+ access(accessor: string): any;
233
+ substitute(template: string, data: any): string | undefined;
234
+ onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
235
+ onchangeData(after: Record<string, any>, before: Record<string, any>): void;
236
+ buildMappings(): void;
237
+ executeMappings(force?: boolean): void;
238
+ disposeMappings(): void;
239
+ ondropfile(transfered: FileList, files: string[]): void;
240
+ transcoordS2P(x: number, y: number, rp?: import("../../index.js").POINT): import("../../index.js").POINT;
241
+ transcoordP2S(x: number, y: number, rp?: import("../../index.js").POINT): import("../../index.js").POINT;
242
+ transcoordS2T(x: number, y: number, top?: Component): import("../../index.js").POINT;
243
+ transcoordT2P(x: number, y: number, top?: Component): import("../../index.js").POINT;
244
+ transcoordT2S(x: number, y: number, top?: Component): import("../../index.js").POINT;
245
+ transcoordS2TR(x: number, y: number, top?: Component): import("../../index.js").POINT;
246
+ transcoordS2O(x: number, y: number, target: Component): import("../../index.js").POINT;
247
+ transcoordC2S(x: number, y: number, top?: Component): import("../../index.js").POINT;
248
+ transcoordS2C(x: number, y: number, top?: Component): import("../../index.js").POINT;
249
+ toParent(x: number, y: number, rp?: import("../../index.js").POINT): import("../../index.js").POINT;
250
+ fromParent(x: number, y: number, rp?: import("../../index.js").POINT): import("../../index.js").POINT;
251
+ toScene(x: number, y: number, top?: Component): import("../../index.js").POINT;
252
+ fromScene(x: number, y: number, top?: Component): import("../../index.js").POINT;
253
+ toLocal(x: number, y: number, top?: Component): import("../../index.js").POINT;
254
+ toGlobal(x: number, y: number, top?: Component): import("../../index.js").POINT;
255
+ toOther(x: number, y: number, target: Component): import("../../index.js").POINT;
256
+ on<K extends keyof import("../../index.js").ComponentEventMap>(name: K, callback: (...args: import("../../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
257
+ on(name: string | object, callback: Function, context?: any): /*elided*/ any;
258
+ off<K extends keyof import("../../index.js").ComponentEventMap>(name: K, callback?: ((...args: import("../../index.js").ComponentEventMap[K]) => void) | undefined, context?: any): /*elided*/ any;
259
+ off(name?: string | object, callback?: Function, context?: any): /*elided*/ any;
260
+ once<K extends keyof import("../../index.js").ComponentEventMap>(name: K, callback: (...args: import("../../index.js").ComponentEventMap[K]) => void, context?: any): /*elided*/ any;
261
+ once(name: string | object, callback: Function, context?: any): /*elided*/ any;
262
+ trigger<K extends keyof import("../../index.js").ComponentEventMap>(name: K, ...args: import("../../index.js").ComponentEventMap[K]): /*elided*/ any;
263
+ trigger(name: string, ...args: any[]): /*elided*/ any;
264
+ delegate_on(delegator: any): /*elided*/ any;
265
+ delegate_off(delegator: any): /*elided*/ any;
266
+ onchange(after: Record<string, any>, before: Record<string, any>): void;
267
+ calculateBounds?(): void;
268
+ oncreate_element?(element: HTMLElement): void;
269
+ removeComponent(component: Component, ghost?: boolean): void;
270
+ addComponent(component: Component, ghost?: boolean): void;
271
+ insertComponentAt(component: Component, index: number, ghost?: boolean): void;
272
+ getOverlay(component: Component): HTMLElement | undefined;
273
+ findById(id: string): Component | undefined;
274
+ findByRefid(ref: string | number): Component | undefined;
275
+ findAllById(id: string): Component[];
276
+ resize(): void;
277
+ fit(type?: string): void;
278
+ get components(): Component[] | undefined;
279
+ get layout(): any;
280
+ get auxOverlay(): HTMLElement | undefined;
281
+ get isReady(): boolean;
282
+ get unitScale(): number;
283
+ get selected(): Component[];
284
+ set selected(_v: Component[]);
285
+ get focused(): Component | null;
286
+ set focused(_v: Component | null);
287
+ get hasSameParentForAllSelected(): boolean;
288
+ set hasSameParentForAllSelected(_v: boolean);
289
+ get fitMode(): string | undefined;
290
+ set fitMode(_v: string | undefined);
291
+ get element(): HTMLElement | null;
292
+ set element(_v: HTMLElement | null);
293
+ };
294
+ } & typeof Shape;
295
+ export declare class FigureV3Part extends FigureV3Part_base {
296
+ static registerType(): void;
297
+ get hasTextProperty(): boolean;
298
+ is3dish(): boolean;
299
+ get nature(): ComponentNature;
300
+ buildRealObject(): IRealObject | undefined;
301
+ /** From above: the body's footprint as its box, in its colour. */
302
+ render(ctx: SceneRenderContext): void;
303
+ }
304
+ export {};
305
+ //# sourceMappingURL=figure-v3-part-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figure-v3-part-component.d.ts","sourceRoot":"","sources":["../../../src/figure/v3/figure-v3-part-component.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,SAAS,MAAM,+BAA+B,CAAA;AACrD,OAAO,KAAK,MAAM,2BAA2B,CAAA;AAE7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAmCxD,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+CAA+C;IAC/C,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C;AAOD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAA;CAAE,GAAG,IAAI,CAoBzF;AAED,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,OAAO,CAAC,IAAI,CAAC,CAAY;IAEzB,KAAK;IAaL,KAAK;IAOI,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAU9D,8GAA8G;IAC9G,eAAe,IAAI,IAAI;IAKvB,OAAO,CAAC,QAAQ;CAqBjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,YAAa,SAAQ,iBAAe;IAC/C,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,kEAAkE;IAClE,MAAM,CAAC,GAAG,EAAE,kBAAkB;CAO/B"}
@@ -36,6 +36,22 @@ export declare class FigureV3RealObject extends RealObject<THREE.Group> {
36
36
  */
37
37
  tick(dt: number): void;
38
38
  private advance;
39
+ /**
40
+ * Where a thing held at one place hangs (ADR-0087; the V2 counterpart is `anchorAttachment`): the place's node, and
41
+ * the offset that sets the thing against the place's face from outside, centred on it -- a box on a seat rests on
42
+ * the face, a workpiece in a grip sits just past the gripper, not half inside it. The thing's size is its state:
43
+ * width along x, depth along y (up), height along z.
44
+ */
45
+ placeAttachment(id: string, carrier?: {
46
+ state?: Record<string, unknown>;
47
+ }): {
48
+ attach: THREE.Object3D;
49
+ localPosition: {
50
+ x: number;
51
+ y: number;
52
+ z: number;
53
+ };
54
+ } | undefined;
39
55
  clear(): THREE.Group;
40
56
  }
41
57
  //# sourceMappingURL=figure-v3-real-object.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"figure-v3-real-object.d.ts","sourceRoot":"","sources":["../../../src/figure/v3/figure-v3-real-object.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAG9E,qBAAa,kBAAmB,SAAQ,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7D,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,IAAI,MAAM,IAAI,kBAAkB,GAAG,IAAI,CAEtC;cAEkB,mBAAmB,IAAI,KAAK,CAAC,KAAK;IAI5C,KAAK,IAAI,IAAI;IAYtB,kGAAkG;IAClG,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvC;IAED,oGAAoG;IACpG,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvC;IAED,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAM9D,oHAAoH;IACpH,YAAY,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO1D,IAAa,cAAc,IAAI,MAAM,CASpC;IAEQ,eAAe,IAAI,IAAI;IAMhC,0HAA0H;IAC1H,gBAAgB,IAAI,IAAI;IAMxB,oHAAoH;IACpH,WAAW,IAAI,IAAI;IAMnB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,YAAY;IAUpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAgBtB,OAAO,CAAC,OAAO;IAIN,KAAK,IAAI,KAAK,CAAC,KAAK;CAO9B"}
1
+ {"version":3,"file":"figure-v3-real-object.d.ts","sourceRoot":"","sources":["../../../src/figure/v3/figure-v3-real-object.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAG3D,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAG9E,qBAAa,kBAAmB,SAAQ,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7D,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,IAAI,MAAM,IAAI,kBAAkB,GAAG,IAAI,CAEtC;cAEkB,mBAAmB,IAAI,KAAK,CAAC,KAAK;IAI5C,KAAK,IAAI,IAAI;IAYtB,kGAAkG;IAClG,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvC;IAED,oGAAoG;IACpG,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvC;IAED,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAM9D,oHAAoH;IACpH,YAAY,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO1D,IAAa,cAAc,IAAI,MAAM,CASpC;IAEQ,eAAe,IAAI,IAAI;IAMhC,0HAA0H;IAC1H,gBAAgB,IAAI,IAAI;IAMxB,oHAAoH;IACpH,WAAW,IAAI,IAAI;IAMnB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,YAAY;IAUpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAgBtB,OAAO,CAAC,OAAO;IAIf;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;QAAC,aAAa,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS;IAa7J,KAAK,IAAI,KAAK,CAAC,KAAK;CAO9B"}
@@ -17,6 +17,8 @@ export declare class FigureV3Rig {
17
17
  readonly group: THREE.Group<THREE.Object3DEventMap>;
18
18
  readonly compiled: CompiledV3;
19
19
  private readonly meshes;
20
+ /** One node per place a thing is held (a seat or a grip), made when something first hangs from it. */
21
+ private readonly places;
20
22
  private size;
21
23
  /** External control sources, kept apart from what drivers compute: a connector's values, never a driver's. */
22
24
  private external;
@@ -53,6 +55,13 @@ export declare class FigureV3Rig {
53
55
  get externalState(): Record<string, number>;
54
56
  /** Evaluate at the current size, state and time, and bring the meshes up to date. */
55
57
  update(): V3AssetEvaluation;
58
+ /**
59
+ * The node a held thing hangs from at one place (`capabilities.bindings`). It is a child of the group that every
60
+ * update moves to the place's pose, so what hangs from it follows the part it sits on -- through the joints too --
61
+ * with no second account of the motion. Null when the asset declares no place by that id.
62
+ */
63
+ placeNode(id: string): THREE.Object3D | null;
64
+ private static pose;
56
65
  /**
57
66
  * The evaluation only, without touching meshes. The document is compiled once per content and kernel; the
58
67
  * instance's size and state are inputs to the evaluation, never a reason to compile again.
@@ -1 +1 @@
1
- {"version":3,"file":"figure-v3-rig.d.ts","sourceRoot":"","sources":["../../../src/figure/v3/figure-v3-rig.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,iBAAiB,EAEtB,KAAK,QAAQ,EACd,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAG5E,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,KAAK,sCAAoB;IAClC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,IAAI,CAAwB;IACpC,8GAA8G;IAC9G,OAAO,CAAC,QAAQ,CAA6B;IAC7C,2GAA2G;IAC3G,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAAwB;IACrC,gFAAgF;IAChF,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAO;gBAEzB,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB;IAM5D,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,+GAA+G;IAC/G,IAAI,IAAI,IAAI,QAAQ,GAAG,IAAI,CAM1B;IAED,kEAAkE;IAClE,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAIpC,qGAAqG;IACrG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI9C,qHAAqH;IACrH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAIvC,+CAA+C;IAC/C,IAAI,KAAK,IAAI,MAAM,EAAE,CAEpB;IAED,6FAA6F;IAC7F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIhD,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI9B,qEAAqE;IACrE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;OAIG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYxC,6FAA6F;IAC7F,IAAI,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1C;IAED,qFAAqF;IACrF,MAAM,IAAI,iBAAiB;IAyC3B;;;OAGG;IACH,QAAQ,IAAI,iBAAiB;IAmB7B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAqBnB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS;IAI1C,wGAAwG;IACxG,QAAQ,IAAI,MAAM,EAAE;IAIpB,OAAO,IAAI,IAAI;CAOhB"}
1
+ {"version":3,"file":"figure-v3-rig.d.ts","sourceRoot":"","sources":["../../../src/figure/v3/figure-v3-rig.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,iBAAiB,EAEtB,KAAK,QAAQ,EACd,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAG5E,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,KAAK,sCAAoB;IAClC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,IAAI,CAAwB;IACpC,8GAA8G;IAC9G,OAAO,CAAC,QAAQ,CAA6B;IAC7C,2GAA2G;IAC3G,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAAwB;IACrC,gFAAgF;IAChF,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAO;gBAEzB,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB;IAM5D,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,+GAA+G;IAC/G,IAAI,IAAI,IAAI,QAAQ,GAAG,IAAI,CAM1B;IAED,kEAAkE;IAClE,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAIpC,qGAAqG;IACrG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI9C,qHAAqH;IACrH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAIvC,+CAA+C;IAC/C,IAAI,KAAK,IAAI,MAAM,EAAE,CAEpB;IAED,6FAA6F;IAC7F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIhD,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI9B,qEAAqE;IACrE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;OAIG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYxC,6FAA6F;IAC7F,IAAI,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1C;IAED,qFAAqF;IACrF,MAAM,IAAI,iBAAiB;IA6C3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI;IAc5C,OAAO,CAAC,MAAM,CAAC,IAAI;IAOnB;;;OAGG;IACH,QAAQ,IAAI,iBAAiB;IAmB7B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAqBnB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS;IAI1C,wGAAwG;IACxG,QAAQ,IAAI,MAAM,EAAE;IAIpB,OAAO,IAAI,IAAI;CAShB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatiolab/things-scene",
3
- "version": "10.1.27",
3
+ "version": "10.1.29",
4
4
  "description": "A high-performance 2D/3D scene graph library for building interactive visual editors, combining HTML5 Canvas and Three.js to enable facility visualization, data-driven animations, and real-time monitoring dashboards",
5
5
  "main": "things-scene-min.js",
6
6
  "module": "things-scene.mjs",
@@ -91,7 +91,7 @@
91
91
  },
92
92
  "homepage": "https://github.com/hatiolab/things-scene#readme",
93
93
  "dependencies": {
94
- "@hatiolab/figure-model": "^0.1.43",
94
+ "@hatiolab/figure-model": "^0.1.48",
95
95
  "@wizpanda/super-gif": "^0.0.6",
96
96
  "dompurify": "^3.3.1",
97
97
  "jsonata": "^1.8.6",