@hatiolab/things-scene 10.0.0-beta.99 → 10.0.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 +65 -0
- package/README.md +56 -53
- package/dist-types/clock/frame-clock.d.ts.map +1 -1
- package/dist-types/command/command-migrate.d.ts.map +1 -1
- package/dist-types/command/snapshot-commander.d.ts.map +1 -1
- package/dist-types/components/audio.d.ts +12 -9
- package/dist-types/components/audio.d.ts.map +1 -1
- package/dist-types/components/component-drawing.d.ts.map +1 -1
- package/dist-types/components/component-geometry.d.ts.map +1 -1
- package/dist-types/components/component-hierarchy.d.ts +1 -1
- package/dist-types/components/component-hierarchy.d.ts.map +1 -1
- package/dist-types/components/component.d.ts +109 -13
- package/dist-types/components/component.d.ts.map +1 -1
- package/dist-types/components/container-abstract.d.ts +26 -22
- package/dist-types/components/container-abstract.d.ts.map +1 -1
- package/dist-types/components/container.d.ts +13 -9
- package/dist-types/components/container.d.ts.map +1 -1
- package/dist-types/components/data/data.d.ts.map +1 -1
- package/dist-types/components/data/evaluator.d.ts +27 -0
- package/dist-types/components/data/evaluator.d.ts.map +1 -1
- package/dist-types/components/donut.d.ts.map +1 -1
- package/dist-types/components/ellipse.d.ts +12 -9
- package/dist-types/components/ellipse.d.ts.map +1 -1
- package/dist-types/components/generic-placeholders.d.ts +12 -9
- package/dist-types/components/generic-placeholders.d.ts.map +1 -1
- package/dist-types/components/group.d.ts +1 -0
- package/dist-types/components/group.d.ts.map +1 -1
- package/dist-types/components/html/reposition.d.ts.map +1 -1
- package/dist-types/components/html-overlay-container.d.ts +13 -9
- package/dist-types/components/html-overlay-container.d.ts.map +1 -1
- package/dist-types/components/html-overlay-element.d.ts +25 -18
- package/dist-types/components/html-overlay-element.d.ts.map +1 -1
- package/dist-types/components/image-view.d.ts +12 -9
- package/dist-types/components/image-view.d.ts.map +1 -1
- package/dist-types/components/index.d.ts +1 -0
- package/dist-types/components/index.d.ts.map +1 -1
- package/dist-types/components/info-window.d.ts +12 -9
- package/dist-types/components/info-window.d.ts.map +1 -1
- package/dist-types/components/line.d.ts.map +1 -1
- package/dist-types/components/local-ref.d.ts +12 -9
- package/dist-types/components/local-ref.d.ts.map +1 -1
- package/dist-types/components/mixins/connectable.d.ts +12 -9
- package/dist-types/components/mixins/connectable.d.ts.map +1 -1
- package/dist-types/components/mixins/data-source.d.ts +12 -9
- package/dist-types/components/mixins/data-source.d.ts.map +1 -1
- package/dist-types/components/mixins/gltf-component.d.ts +13 -11
- package/dist-types/components/mixins/gltf-component.d.ts.map +1 -1
- package/dist-types/components/mixins/holdable.d.ts +12 -0
- package/dist-types/components/mixins/holdable.d.ts.map +1 -0
- package/dist-types/components/mixins/html-element.d.ts +22 -9
- package/dist-types/components/mixins/html-element.d.ts.map +1 -1
- package/dist-types/components/mixins/move-handle.d.ts +21 -13
- package/dist-types/components/mixins/move-handle.d.ts.map +1 -1
- package/dist-types/components/mixins/rect-path.d.ts +12 -9
- package/dist-types/components/mixins/rect-path.d.ts.map +1 -1
- package/dist-types/components/mixins/three-d-only.d.ts +18 -9
- package/dist-types/components/mixins/three-d-only.d.ts.map +1 -1
- package/dist-types/components/mixins/value-holder.d.ts +12 -9
- package/dist-types/components/mixins/value-holder.d.ts.map +1 -1
- package/dist-types/components/modeling-faint.d.ts +14 -0
- package/dist-types/components/modeling-faint.d.ts.map +1 -0
- package/dist-types/components/mutater/path.d.ts.map +1 -1
- package/dist-types/components/node.d.ts +12 -9
- package/dist-types/components/node.d.ts.map +1 -1
- package/dist-types/components/polygon-container.d.ts +61 -0
- package/dist-types/components/polygon-container.d.ts.map +1 -0
- package/dist-types/components/polygon.d.ts.map +1 -1
- package/dist-types/components/polyline.d.ts +6 -0
- package/dist-types/components/polyline.d.ts.map +1 -1
- package/dist-types/components/popup.d.ts +12 -9
- package/dist-types/components/popup.d.ts.map +1 -1
- package/dist-types/components/rect.d.ts +24 -18
- package/dist-types/components/rect.d.ts.map +1 -1
- package/dist-types/components/retention/retention-manager.d.ts +9 -1
- package/dist-types/components/retention/retention-manager.d.ts.map +1 -1
- package/dist-types/components/root-container.d.ts +7 -0
- package/dist-types/components/root-container.d.ts.map +1 -1
- package/dist-types/components/ruler.d.ts +12 -9
- package/dist-types/components/ruler.d.ts.map +1 -1
- package/dist-types/components/service-component.d.ts +12 -9
- package/dist-types/components/service-component.d.ts.map +1 -1
- package/dist-types/components/star.d.ts.map +1 -1
- package/dist-types/components/text.d.ts +12 -9
- package/dist-types/components/text.d.ts.map +1 -1
- package/dist-types/core/dom-to-image.d.ts.map +1 -1
- package/dist-types/core/logger.d.ts.map +1 -1
- package/dist-types/core/memoize.d.ts.map +1 -1
- package/dist-types/decorator/decorator-registry.d.ts +10 -1
- package/dist-types/decorator/decorator-registry.d.ts.map +1 -1
- package/dist-types/decorator/decorators/border-highlighting-decorator.d.ts +0 -4
- package/dist-types/decorator/decorators/border-highlighting-decorator.d.ts.map +1 -1
- package/dist-types/decorator/decorators/bouncing-arrow-decorator.d.ts +0 -3
- package/dist-types/decorator/decorators/bouncing-arrow-decorator.d.ts.map +1 -1
- package/dist-types/diagnostics/contract-inspector.d.ts +9 -2
- package/dist-types/diagnostics/contract-inspector.d.ts.map +1 -1
- package/dist-types/diagnostics/data-lag-tracker.d.ts +31 -25
- package/dist-types/diagnostics/data-lag-tracker.d.ts.map +1 -1
- package/dist-types/diagnostics/inspector.d.ts +136 -3
- package/dist-types/diagnostics/inspector.d.ts.map +1 -1
- package/dist-types/diagnostics/loading-overlay.d.ts +67 -10
- package/dist-types/diagnostics/loading-overlay.d.ts.map +1 -1
- package/dist-types/diagnostics/metrics.d.ts +10 -0
- package/dist-types/diagnostics/metrics.d.ts.map +1 -1
- package/dist-types/flow/auto-route.d.ts +36 -0
- package/dist-types/flow/auto-route.d.ts.map +1 -0
- package/dist-types/flow/capability-inference.d.ts +19 -0
- package/dist-types/flow/capability-inference.d.ts.map +1 -0
- package/dist-types/flow/face-anchors.d.ts +26 -0
- package/dist-types/flow/face-anchors.d.ts.map +1 -0
- package/dist-types/flow/flow-engine.d.ts +122 -0
- package/dist-types/flow/flow-engine.d.ts.map +1 -0
- package/dist-types/flow/flow-graph-coordinator.d.ts +80 -0
- package/dist-types/flow/flow-graph-coordinator.d.ts.map +1 -0
- package/dist-types/flow/flow-graph-validator.d.ts +33 -0
- package/dist-types/flow/flow-graph-validator.d.ts.map +1 -0
- package/dist-types/flow/flow-graph.d.ts +76 -0
- package/dist-types/flow/flow-graph.d.ts.map +1 -0
- package/dist-types/flow/flow-introspection.d.ts +36 -0
- package/dist-types/flow/flow-introspection.d.ts.map +1 -0
- package/dist-types/flow/flow-node.d.ts +69 -0
- package/dist-types/flow/flow-node.d.ts.map +1 -0
- package/dist-types/flow/flow-orientation-coordinator.d.ts +13 -0
- package/dist-types/flow/flow-orientation-coordinator.d.ts.map +1 -0
- package/dist-types/flow/flow-orientation.d.ts +42 -0
- package/dist-types/flow/flow-orientation.d.ts.map +1 -0
- package/dist-types/flow/flow-trace.d.ts +5 -0
- package/dist-types/flow/flow-trace.d.ts.map +1 -0
- package/dist-types/flow/index.d.ts +16 -0
- package/dist-types/flow/index.d.ts.map +1 -0
- package/dist-types/flow/segment-topology.d.ts +225 -0
- package/dist-types/flow/segment-topology.d.ts.map +1 -0
- package/dist-types/interfaces/event-handler.d.ts +40 -0
- package/dist-types/interfaces/event-handler.d.ts.map +1 -0
- package/dist-types/interfaces/index.d.ts +2 -0
- package/dist-types/interfaces/index.d.ts.map +1 -1
- package/dist-types/interfaces/providers.d.ts +7 -0
- package/dist-types/interfaces/providers.d.ts.map +1 -1
- package/dist-types/items/arrangement/centering-queue-strategy.d.ts +10 -0
- package/dist-types/items/arrangement/centering-queue-strategy.d.ts.map +1 -0
- package/dist-types/items/arrangement/index.d.ts +2 -0
- package/dist-types/items/arrangement/index.d.ts.map +1 -0
- package/dist-types/{transfer/container-capacity.d.ts → items/capacity-mixin.d.ts} +39 -78
- package/dist-types/items/capacity-mixin.d.ts.map +1 -0
- package/dist-types/items/capacity.d.ts +53 -0
- package/dist-types/items/capacity.d.ts.map +1 -0
- package/dist-types/items/index.d.ts +7 -0
- package/dist-types/items/index.d.ts.map +1 -0
- package/dist-types/items/items-data-binding.d.ts +103 -0
- package/dist-types/items/items-data-binding.d.ts.map +1 -0
- package/dist-types/items/slot-record.d.ts +23 -0
- package/dist-types/items/slot-record.d.ts.map +1 -0
- package/dist-types/items/stacking/index.d.ts +3 -0
- package/dist-types/items/stacking/index.d.ts.map +1 -0
- package/dist-types/items/stacking/stack-layout.d.ts +33 -0
- package/dist-types/items/stacking/stack-layout.d.ts.map +1 -0
- package/dist-types/items/stacking/stacking-strategy.d.ts +114 -0
- package/dist-types/items/stacking/stacking-strategy.d.ts.map +1 -0
- package/dist-types/layer/layer.d.ts +1 -0
- package/dist-types/layer/layer.d.ts.map +1 -1
- package/dist-types/layer/model-layer.d.ts +25 -2
- package/dist-types/layer/model-layer.d.ts.map +1 -1
- package/dist-types/layer/modeler/index.d.ts +1 -0
- package/dist-types/layer/modeler/index.d.ts.map +1 -1
- package/dist-types/layer/modeler/move-handle-icon.d.ts +2 -0
- package/dist-types/layer/modeler/move-handle-icon.d.ts.map +1 -0
- package/dist-types/layer/modeler/move-handle-modeler.d.ts +18 -0
- package/dist-types/layer/modeler/move-handle-modeler.d.ts.map +1 -0
- package/dist-types/layer/modeler/path-handler.d.ts.map +1 -1
- package/dist-types/layer/modeler/rotator.d.ts.map +1 -1
- package/dist-types/layer/modeling-layer.d.ts +19 -0
- package/dist-types/layer/modeling-layer.d.ts.map +1 -1
- package/dist-types/layer/selection-layer.d.ts +7 -0
- package/dist-types/layer/selection-layer.d.ts.map +1 -1
- package/dist-types/layer/snap-guide-layer.d.ts.map +1 -1
- package/dist-types/license/license.d.ts.map +1 -1
- package/dist-types/search/scene-search-engine.d.ts +0 -1
- package/dist-types/search/scene-search-engine.d.ts.map +1 -1
- package/dist-types/search/search-overlay.d.ts +0 -1
- package/dist-types/search/search-overlay.d.ts.map +1 -1
- package/dist-types/things-scene/api/clipboard.d.ts +1 -1
- package/dist-types/things-scene/api/clipboard.d.ts.map +1 -1
- package/dist-types/things-scene/api/listener.d.ts +1 -1
- package/dist-types/things-scene/api/listener.d.ts.map +1 -1
- package/dist-types/things-scene/api/to-data-url.d.ts +1 -1
- package/dist-types/things-scene/api/to-data-url.d.ts.map +1 -1
- package/dist-types/things-scene/api/zorder.d.ts +1 -1
- package/dist-types/things-scene/api/zorder.d.ts.map +1 -1
- package/dist-types/things-scene/application-context.d.ts +15 -2
- package/dist-types/things-scene/application-context.d.ts.map +1 -1
- package/dist-types/things-scene/create.d.ts +24 -0
- package/dist-types/things-scene/create.d.ts.map +1 -1
- package/dist-types/things-scene/index.d.ts +11 -5
- package/dist-types/things-scene/index.d.ts.map +1 -1
- package/dist-types/things-scene/scene.d.ts +89 -20
- package/dist-types/things-scene/scene.d.ts.map +1 -1
- package/dist-types/threed/common.d.ts +6 -1
- package/dist-types/threed/common.d.ts.map +1 -1
- package/dist-types/threed/factories/backdrop.d.ts +25 -18
- package/dist-types/threed/factories/backdrop.d.ts.map +1 -1
- package/dist-types/threed/factories/banner.d.ts +14 -9
- package/dist-types/threed/factories/banner.d.ts.map +1 -1
- package/dist-types/threed/factories/camera.d.ts +13 -9
- package/dist-types/threed/factories/camera.d.ts.map +1 -1
- package/dist-types/threed/factories/cube.d.ts +12 -9
- package/dist-types/threed/factories/cube.d.ts.map +1 -1
- package/dist-types/threed/factories/decal.d.ts +25 -20
- package/dist-types/threed/factories/decal.d.ts.map +1 -1
- package/dist-types/threed/factories/floor-plate.d.ts +1 -0
- package/dist-types/threed/factories/floor-plate.d.ts.map +1 -1
- package/dist-types/threed/factories/gltf-object.d.ts +24 -18
- package/dist-types/threed/factories/gltf-object.d.ts.map +1 -1
- package/dist-types/threed/factories/polygon.d.ts.map +1 -1
- package/dist-types/threed/factories/sprite.d.ts +12 -9
- package/dist-types/threed/factories/sprite.d.ts.map +1 -1
- package/dist-types/threed/factories/wall.d.ts +12 -9
- package/dist-types/threed/factories/wall.d.ts.map +1 -1
- package/dist-types/threed/handle-3d.d.ts.map +1 -1
- package/dist-types/threed/index.d.ts +6 -0
- package/dist-types/threed/index.d.ts.map +1 -1
- package/dist-types/threed/managers/event-manager3d.d.ts +6 -0
- package/dist-types/threed/managers/event-manager3d.d.ts.map +1 -1
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts +0 -1
- package/dist-types/threed/managers/gizmo-operation-manager.d.ts.map +1 -1
- package/dist-types/threed/managers/vertex-gizmo-manager.d.ts +0 -1
- package/dist-types/threed/managers/vertex-gizmo-manager.d.ts.map +1 -1
- package/dist-types/threed/material-bank.d.ts +42 -0
- package/dist-types/threed/material-bank.d.ts.map +1 -0
- package/dist-types/threed/material-variant.d.ts +43 -0
- package/dist-types/threed/material-variant.d.ts.map +1 -0
- package/dist-types/threed/real-object-dom-element.d.ts +8 -0
- package/dist-types/threed/real-object-dom-element.d.ts.map +1 -1
- package/dist-types/threed/real-object-dom-texture.d.ts +0 -1
- package/dist-types/threed/real-object-dom-texture.d.ts.map +1 -1
- package/dist-types/threed/real-object-mesh.d.ts +0 -1
- package/dist-types/threed/real-object-mesh.d.ts.map +1 -1
- package/dist-types/threed/real-object-plane-2d.d.ts +0 -1
- package/dist-types/threed/real-object-plane-2d.d.ts.map +1 -1
- package/dist-types/threed/real-object-sprite.d.ts +0 -1
- package/dist-types/threed/real-object-sprite.d.ts.map +1 -1
- package/dist-types/threed/real-object-text.d.ts.map +1 -1
- package/dist-types/threed/real-object.d.ts +104 -3
- package/dist-types/threed/real-object.d.ts.map +1 -1
- package/dist-types/threed/texture/fillstyle-texture.d.ts +13 -2
- package/dist-types/threed/texture/fillstyle-texture.d.ts.map +1 -1
- package/dist-types/threed/three-capability.d.ts +2 -0
- package/dist-types/threed/three-capability.d.ts.map +1 -1
- package/dist-types/threed/threed-enabled.d.ts +5 -0
- package/dist-types/threed/threed-enabled.d.ts.map +1 -0
- package/dist-types/threed/utils/dispose.d.ts.map +1 -1
- package/dist-types/threed/utils/polygon-shape.d.ts +21 -0
- package/dist-types/threed/utils/polygon-shape.d.ts.map +1 -0
- package/dist-types/transfer/carrier-line-capability.d.ts +95 -0
- package/dist-types/transfer/carrier-line-capability.d.ts.map +1 -0
- package/dist-types/transfer/index.d.ts +13 -3
- package/dist-types/transfer/index.d.ts.map +1 -1
- package/dist-types/transfer/pickup-helpers.d.ts +11 -1
- package/dist-types/transfer/pickup-helpers.d.ts.map +1 -1
- package/dist-types/transfer/tracer.d.ts +35 -0
- package/dist-types/transfer/tracer.d.ts.map +1 -0
- package/dist-types/transfer/transfer-helpers.d.ts +18 -0
- package/dist-types/transfer/transfer-helpers.d.ts.map +1 -0
- package/dist-types/transfer/transfer.d.ts +132 -43
- package/dist-types/transfer/transfer.d.ts.map +1 -1
- package/dist-types/transfer/transferable-mixin.d.ts +275 -0
- package/dist-types/transfer/transferable-mixin.d.ts.map +1 -0
- package/dist-types/transfer/types.d.ts +75 -2
- package/dist-types/transfer/types.d.ts.map +1 -1
- package/dist-types/transition/transition-effect.d.ts +21 -1
- package/dist-types/transition/transition-effect.d.ts.map +1 -1
- package/dist-types/types/capability.d.ts +65 -0
- package/dist-types/types/capability.d.ts.map +1 -0
- package/package.json +2 -2
- package/things-scene-min.js +11 -11
- package/things-scene-min.js.map +1 -1
- package/things-scene-transfer.mjs +3 -2
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
- package/dist-types/transfer/container-capacity.d.ts.map +0 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { rectFaceAnchors } from './face-anchors.js';
|
|
2
|
+
export { rectFaceAnchors };
|
|
3
|
+
/** XZ 평면 vector (= scene world 좌표의 X/Z, Y 는 floor-level 무시). */
|
|
4
|
+
export interface Anchor2D {
|
|
5
|
+
/** scene world position (x = state.left + offset, z = state.top + offset). */
|
|
6
|
+
worldPos: {
|
|
7
|
+
x: number;
|
|
8
|
+
z: number;
|
|
9
|
+
};
|
|
10
|
+
/** 진행 방향 단위 vector (carrier 의 속도 vector 와 일치). */
|
|
11
|
+
direction: {
|
|
12
|
+
x: number;
|
|
13
|
+
z: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 면(face) 의 절반 길이 — anchor 가 *면* 에서 유래한 경우. anchorsConnect 가
|
|
17
|
+
* 접선 방향 판정을 중심 거리 근사가 아닌 *면 segment 겹침* 으로 수행하는 데
|
|
18
|
+
* 사용. 미지정 (점 anchor) 시 기존 중심 거리 판정 fallback.
|
|
19
|
+
*/
|
|
20
|
+
halfSpan?: number;
|
|
21
|
+
}
|
|
22
|
+
/** Segment 의 입출구 anchor 들. inbound/outbound 각 1개 이상. */
|
|
23
|
+
export interface SegmentTopology {
|
|
24
|
+
/** 입구 anchor 들. carrier 가 들어올 수 있는 면. 미구현 segment = 빈 배열. */
|
|
25
|
+
inbounds: Anchor2D[];
|
|
26
|
+
/** 출구 anchor 들. carrier 가 나갈 수 있는 면. 미구현 segment = 빈 배열. */
|
|
27
|
+
outbounds: Anchor2D[];
|
|
28
|
+
}
|
|
29
|
+
/** Anchor 매칭 tolerance (= 자동 연결 판정 기준). */
|
|
30
|
+
export interface MatchTolerance {
|
|
31
|
+
/** 좌표 distance 임계 (scene unit). default 5. */
|
|
32
|
+
distance?: number;
|
|
33
|
+
/** 방향 dot product 임계 (= cosine). 1 = 완전 일치, 0.95 ≈ 18° 이내. default 0.9. */
|
|
34
|
+
cosine?: number;
|
|
35
|
+
/** sink(outbound 없는 종착: StockPile/Dock 등) footprint-배달 margin. default 30 —
|
|
36
|
+
* 딱 안 붙어도 인접하면 자동링크. 흐름연속 후보는 영향 없음(6 고정). */
|
|
37
|
+
sinkMargin?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* State 기반 *_straight segment_* 의 topology. 가장 흔한 케이스 — Conveyor /
|
|
41
|
+
* cross-belt-line / induct-station 등. orientation 자동 추정 (horizontal /
|
|
42
|
+
* vertical / auto by aspect).
|
|
43
|
+
*
|
|
44
|
+
* 가정:
|
|
45
|
+
* - state.left/top = 좌상단, width/height = 크기
|
|
46
|
+
* - rotation = 중심 기준 회전 (radian, CW positive — things-scene 표준)
|
|
47
|
+
* - 흐름 방향 = *_긴 축_* (orientation auto 시 width vs height 비교)
|
|
48
|
+
* - status='reverse' 시 흐름 반대 (= inbound/outbound swap)
|
|
49
|
+
*
|
|
50
|
+
* 결과:
|
|
51
|
+
* - inbound = 시작 짧은 면의 중앙
|
|
52
|
+
* - outbound = 끝 짧은 면의 중앙
|
|
53
|
+
* - direction = 시작 → 끝 단위 vector
|
|
54
|
+
*/
|
|
55
|
+
export declare function straightSegmentTopology(state: {
|
|
56
|
+
left?: number;
|
|
57
|
+
top?: number;
|
|
58
|
+
width?: number;
|
|
59
|
+
height?: number;
|
|
60
|
+
rotation?: number;
|
|
61
|
+
orientation?: 'horizontal' | 'vertical' | '';
|
|
62
|
+
status?: string;
|
|
63
|
+
}, reverseOverride?: boolean): SegmentTopology;
|
|
64
|
+
/**
|
|
65
|
+
* Straight segment 의 *기하 끝점* (start/end) — status/reverse 무관. flow-orientation
|
|
66
|
+
* 이 흐름 방향을 추론할 때 순환(현재 reverse 가 다음 추론에 영향) 을 피하려 *고정된*
|
|
67
|
+
* 기하 끝점이 필요. straightSegmentTopology 의 startPos/endPos 와 동일 좌표.
|
|
68
|
+
* 반환: { start, end } — start→end 가 intrinsic forward (reverse=false 일 때 흐름).
|
|
69
|
+
*/
|
|
70
|
+
export declare function straightSegmentEndpoints(state: {
|
|
71
|
+
left?: number;
|
|
72
|
+
top?: number;
|
|
73
|
+
width?: number;
|
|
74
|
+
height?: number;
|
|
75
|
+
rotation?: number;
|
|
76
|
+
orientation?: 'horizontal' | 'vertical' | '';
|
|
77
|
+
}): {
|
|
78
|
+
start: {
|
|
79
|
+
x: number;
|
|
80
|
+
z: number;
|
|
81
|
+
};
|
|
82
|
+
end: {
|
|
83
|
+
x: number;
|
|
84
|
+
z: number;
|
|
85
|
+
};
|
|
86
|
+
} | null;
|
|
87
|
+
/**
|
|
88
|
+
* Arc (curve) segment topology — cross-belt-curve / conveyor-join 같은 *_도넛
|
|
89
|
+
* 섹터_* segment. carrier 가 호 위를 따라 시작→끝 각도로 흐름.
|
|
90
|
+
*
|
|
91
|
+
* State shape (도넛 섹터):
|
|
92
|
+
* - cx, cy: 호 중심 (scene absolute 좌표)
|
|
93
|
+
* - rx, ry: 외측 반지름 (x/y 다름 = ellipse 호 가능)
|
|
94
|
+
* - ratio (0..100): 내측 반지름 비율 (innerRx = rx * ratio/100)
|
|
95
|
+
* - startAngle, endAngle: 시작/끝 각도 (radian, things-scene 컨벤션)
|
|
96
|
+
*
|
|
97
|
+
* 호 위 점 공식 (line 348 의 ConveyorJoin.controls 와 일치):
|
|
98
|
+
* P(θ) = (cx + r*sin(θ), cy - r*cos(θ))
|
|
99
|
+
* tangent (carrier 진행 방향) = (cos(θ), sin(θ))
|
|
100
|
+
*
|
|
101
|
+
* Anchor:
|
|
102
|
+
* - inbound at startAngle: midR 거리 + 진행 방향 (= θ 증가 방향)
|
|
103
|
+
* - outbound at endAngle: midR 거리 + 진행 방향
|
|
104
|
+
* - reverse 시 swap + direction 반전
|
|
105
|
+
*/
|
|
106
|
+
export declare function arcSegmentTopology(state: {
|
|
107
|
+
cx?: number;
|
|
108
|
+
cy?: number;
|
|
109
|
+
rx?: number;
|
|
110
|
+
ry?: number;
|
|
111
|
+
ratio?: number;
|
|
112
|
+
startAngle?: number;
|
|
113
|
+
endAngle?: number;
|
|
114
|
+
status?: string;
|
|
115
|
+
}): SegmentTopology;
|
|
116
|
+
/**
|
|
117
|
+
* Multi-inbound straight segment — 합류 (merger) 의 토대. 흐름축은 그대로 (1
|
|
118
|
+
* outbound 한 면) 인데, *_나머지 모든 면이 inbound_* (= 어느 옆 conveyor 가
|
|
119
|
+
* 와도 합류 가능).
|
|
120
|
+
*
|
|
121
|
+
* - outbounds = straightSegmentTopology(state).outbounds (= 1 face)
|
|
122
|
+
* - inbounds = 직교 (흐름축 시작 + 양 perpendicular) + 측면 사선 (45° 전진 편향)
|
|
123
|
+
*
|
|
124
|
+
* 사선 anchor — 실물 merger 는 양쪽에서 *사선* 으로 모이는 Y자 합류가 통상.
|
|
125
|
+
* 측면 (흐름과 perpendicular) inbound 마다 본선 진행방향으로 45° 기운 anchor 를
|
|
126
|
+
* 추가 선언 — 회전시킨 일반 conveyor 가 비스듬히 닿으면 자동 연결 (새 컴포넌트
|
|
127
|
+
* 불요). 가로 본선 기준 top 면은 ↘, bottom 면은 ↗ 로 자연 분리돼 양쪽 사선
|
|
128
|
+
* 합류가 성립. 직교 anchor 보존 (직교 합류도 유효).
|
|
129
|
+
*
|
|
130
|
+
* Direction 검사 가 *_같은 방향만 매칭_* 보장 — 옆 conveyor 가 방향 일치
|
|
131
|
+
* (직교 또는 사선) 시에만 자동 매칭. 의도 안 한 합류 차단.
|
|
132
|
+
*/
|
|
133
|
+
export declare function straightSegmentMultiInbound(state: {
|
|
134
|
+
left?: number;
|
|
135
|
+
top?: number;
|
|
136
|
+
width?: number;
|
|
137
|
+
height?: number;
|
|
138
|
+
rotation?: number;
|
|
139
|
+
orientation?: 'horizontal' | 'vertical' | '';
|
|
140
|
+
status?: string;
|
|
141
|
+
}): SegmentTopology;
|
|
142
|
+
/**
|
|
143
|
+
* 두 anchor 가 연결 가능한지 (= 자동 routing 후보). A 의 outbound 가 B 의
|
|
144
|
+
* inbound 와 *_위치 + 방향_* 일치하면 true.
|
|
145
|
+
*
|
|
146
|
+
* - 위치: distance <= tolerance.distance
|
|
147
|
+
* - 방향: outbound.direction · inbound.direction >= tolerance.cosine
|
|
148
|
+
* (둘 다 *_carrier 의 진행 방향_*이므로 같은 방향이어야 함)
|
|
149
|
+
*/
|
|
150
|
+
export declare function anchorsConnect(out: Anchor2D, inn: Anchor2D, tolerance?: MatchTolerance): boolean;
|
|
151
|
+
/** 컴포넌트의 board footprint (rotation 포함). matchOutbounds 의 배달 판정용. */
|
|
152
|
+
export interface SegmentBounds {
|
|
153
|
+
left?: number;
|
|
154
|
+
top?: number;
|
|
155
|
+
width?: number;
|
|
156
|
+
height?: number;
|
|
157
|
+
rotation?: number;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 점 (px, pz) 가 회전된 사각 footprint 안인지 — margin 만큼 확장.
|
|
161
|
+
* board (x = left, z = top) 좌표계.
|
|
162
|
+
*/
|
|
163
|
+
export declare function pointInRotatedRect(px: number, pz: number, b: SegmentBounds, margin?: number): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Ray-rectangle 절대값 거리 — chute 출구점을 통과하는 face normal 의 *_양방향 직선_*
|
|
166
|
+
* 과 사각형의 가장 가까운 교점까지 거리. 광선이 사각형 안에서 출발하면 (겹침) 가까운
|
|
167
|
+
* face 쪽 거리. 교차 없으면 Infinity.
|
|
168
|
+
*
|
|
169
|
+
* # 왜 이 metric 인가 (2026-06-17 사용자 통찰)
|
|
170
|
+
*
|
|
171
|
+
* 이전 matchOutbounds 의 ② 단계 tie-break = *_chute 출구점 ↔ stockpile center 의 유클리드
|
|
172
|
+
* 거리_*. 단점:
|
|
173
|
+
* - 큰 stockpile 의 center 가 *_chute face 와 평행하지만 멀게_* 측정됨
|
|
174
|
+
* - chute 가 *_정면으로_* 향한 stockpile 이 *_center 가 우연히 가까운_* 다른 sink 에 밀림
|
|
175
|
+
*
|
|
176
|
+
* 직교거리 (face normal 방향 ray cast) 가 *_물리적으로 자연_*:
|
|
177
|
+
* - "chute 가 정면으로 가까운 face" 가 정확히 측정됨
|
|
178
|
+
* - 큰 stockpile 의 긴 face 가 *_chute face 와 평행_* 일 때 hit 거리 짧음
|
|
179
|
+
* - 컴포넌트 center 위치와 무관 — center 왜곡 제거
|
|
180
|
+
*
|
|
181
|
+
* # 절대값 (양방향) 이유
|
|
182
|
+
* chute 출구점이 stockpile 영역 안 (겹침) 인 경우도 자연스럽게 처리. 정방향 hit 가 더 멀어도
|
|
183
|
+
* 역방향에 더 가까운 face 가 있으면 그 거리. 진행 방향 의존성 제거.
|
|
184
|
+
*/
|
|
185
|
+
export declare function rayAbsDistanceToRect(origin: {
|
|
186
|
+
x: number;
|
|
187
|
+
z: number;
|
|
188
|
+
}, direction: {
|
|
189
|
+
x: number;
|
|
190
|
+
z: number;
|
|
191
|
+
}, rect: SegmentBounds): number;
|
|
192
|
+
/**
|
|
193
|
+
* source 배출 anchor 가 target footprint 로 *배달* 되는지 — anchor 끝-끝
|
|
194
|
+
* 매칭의 보완. 사용자가 컴포넌트를 (회전·겹침 포함) 손으로 놓아 배출 끝점이
|
|
195
|
+
* 상대 입구를 파고들어도 (= 겹침) 자동 연결되도록.
|
|
196
|
+
*
|
|
197
|
+
* - 끝점이 footprint 안 (+ margin) — 물리적으로 들이밀고 있음
|
|
198
|
+
* - 방향이 전진 호환 — candidateFlow (target 흐름) 와 dot ≥ 0 (역류 차단).
|
|
199
|
+
* flow 없으면 (sink) footprint 중심을 향하는지로 대체.
|
|
200
|
+
*
|
|
201
|
+
* 끝-끝 정밀 매칭 (anchorsConnect) 의 거리 tolerance(5) 가 hand-place 겹침
|
|
202
|
+
* (10~25 unit) 을 갭으로 거부하던 결함 보완 (2026-06-08 보고).
|
|
203
|
+
*/
|
|
204
|
+
export declare function deliversInto(out: Anchor2D, bounds: SegmentBounds, candidateFlow?: {
|
|
205
|
+
x: number;
|
|
206
|
+
z: number;
|
|
207
|
+
}, margin?: number): boolean;
|
|
208
|
+
/**
|
|
209
|
+
* 자기 outbound 각각에 대해 *_연결 가능한 인근 segment_* 의 id 를 매칭.
|
|
210
|
+
*
|
|
211
|
+
* - candidates: scene 안 모든 segment (자기 자신 제외). 각 항목은
|
|
212
|
+
* { id, topology } — pure helper 라 component 객체가 아닌 추출 정보만.
|
|
213
|
+
* - 결과: outbound index → matched candidate id (또는 null). 자기 outbound
|
|
214
|
+
* 수 만큼.
|
|
215
|
+
*
|
|
216
|
+
* 매칭 우선순위:
|
|
217
|
+
* - 정확 일치 후보가 여럿이면 *_가장 가까운 worldPos_*.
|
|
218
|
+
* - 그래도 동률이면 id 사전순 (결정성).
|
|
219
|
+
*/
|
|
220
|
+
export declare function matchOutbounds(selfTopology: SegmentTopology, candidates: ReadonlyArray<{
|
|
221
|
+
id: string;
|
|
222
|
+
topology: SegmentTopology;
|
|
223
|
+
bounds?: SegmentBounds;
|
|
224
|
+
}>, tolerance?: MatchTolerance): Array<string | null>;
|
|
225
|
+
//# sourceMappingURL=segment-topology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-topology.d.ts","sourceRoot":"","sources":["../../src/flow/segment-topology.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** 지원 trigger — DOM 이벤트 + 의미적 alias. */
|
|
2
|
+
export type EventTrigger = 'click' | 'tap' | 'dblclick' | 'mouseenter' | 'hover' | 'mouseleave' | 'longpress' | 'mousedown' | 'mouseup' | 'pressed';
|
|
3
|
+
/** 단일 이벤트 핸들러 spec. */
|
|
4
|
+
export interface EventHandler {
|
|
5
|
+
/** trigger — 어느 DOM 이벤트에 반응할지. */
|
|
6
|
+
trigger: EventTrigger;
|
|
7
|
+
/**
|
|
8
|
+
* action — 'script' 자유 코드 또는 declarative action name.
|
|
9
|
+
* 'script' / 'data-toggle' / 'data-set' / 'emphasize' / 'info-window' / ...
|
|
10
|
+
* 빈 문자열 또는 미설정 시 no-op.
|
|
11
|
+
*/
|
|
12
|
+
action?: string;
|
|
13
|
+
/** action='script' 시 JS 코드 (await 지원). */
|
|
14
|
+
code?: string;
|
|
15
|
+
/** Target selector — script 의 `targets` 또는 declarative action 의 대상. */
|
|
16
|
+
target?: string;
|
|
17
|
+
/** Value — script 의 `value` 또는 action 의 value (`component.access(value)` 적용). */
|
|
18
|
+
value?: any;
|
|
19
|
+
/** action 의 부가 옵션 (emphasize / restore / pressed / options 등). */
|
|
20
|
+
options?: Record<string, any>;
|
|
21
|
+
/** 비활성화. UI 토글용. */
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* legacy `{ tap, hover, dblclick, longpress }` 객체를 `EventHandler[]` 로 변환.
|
|
26
|
+
* Component constructor 의 *자동 마이그레이션* + UI 의 fallback 변환 모두 사용.
|
|
27
|
+
*/
|
|
28
|
+
export declare function migrateLegacyEvent(legacy: any): EventHandler[];
|
|
29
|
+
/**
|
|
30
|
+
* 두 속성 통합 — 신규 `state.eventHandlers` 우선, 없으면 legacy `state.event`
|
|
31
|
+
* (객체) 를 *read-only* 변환해 반환. 컴포넌트 constructor 의 자동 마이그레이션이
|
|
32
|
+
* 처리 못 한 케이스 (런타임 state mutation 등) 의 fallback.
|
|
33
|
+
*
|
|
34
|
+
* 정책:
|
|
35
|
+
* - `state.event` (legacy) — *손대지 않음* (rollback 안전망 + 옛 코드 호환)
|
|
36
|
+
* - `state.eventHandlers` (신규) — UI / 자동 마이그레이션이 write
|
|
37
|
+
* - dispatcher: 신규 우선 / 없으면 legacy fallback
|
|
38
|
+
*/
|
|
39
|
+
export declare function normalizeEventHandlers(state: any): EventHandler[];
|
|
40
|
+
//# sourceMappingURL=event-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../src/interfaces/event-handler.ts"],"names":[],"mappings":"AAiBA,wCAAwC;AACxC,MAAM,MAAM,YAAY,GACpB,OAAO,GAAG,KAAK,GACf,UAAU,GACV,YAAY,GAAG,OAAO,GACtB,YAAY,GACZ,WAAW,GACX,WAAW,GAAG,SAAS,GACvB,SAAS,CAAA;AAEb,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,OAAO,EAAE,YAAY,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iFAAiF;IACjF,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,EAAE,CAoC9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,GAAG,YAAY,EAAE,CAKjE"}
|
|
@@ -2,4 +2,6 @@ export * from './types';
|
|
|
2
2
|
export * from './providers';
|
|
3
3
|
export * from './layout';
|
|
4
4
|
export type { IRealObject } from './real-object.js';
|
|
5
|
+
export type { EventHandler, EventTrigger } from './event-handler.js';
|
|
6
|
+
export { normalizeEventHandlers } from './event-handler.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -67,6 +67,13 @@ export interface ApplicationContext {
|
|
|
67
67
|
adoptLoadTracker?(tracker: import('../diagnostics/load-tracker.js').LoadTracker): void;
|
|
68
68
|
/** Data lag monitor (optional, created when dataLagMonitor configured) */
|
|
69
69
|
lagTracker?: import('../diagnostics/data-lag-tracker.js').DataLagTracker;
|
|
70
|
+
/**
|
|
71
|
+
* 모델링 포커스 dim 필터(transient/비영속) — 반환 false 컴포넌트는 편집 모드에서
|
|
72
|
+
* dim + 선택/이동(gizmo) 제외. undefined = 미적용.
|
|
73
|
+
*/
|
|
74
|
+
focusFilter?: (component: any) => boolean;
|
|
75
|
+
/** 마퀴(selbox) 영역 선택 드래그 진행 중 여부 — 드래그 중 UI 갱신 억제용(transient). */
|
|
76
|
+
isSelecting?: boolean;
|
|
70
77
|
url(x: string): string;
|
|
71
78
|
dispose(): void;
|
|
72
79
|
subscribe?(tag: string, component: any): Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/interfaces/providers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/interfaces/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,IAAI,GAAG,IAAI,MAAM,EAAE,CAAA;IACnB,mCAAmC;IACnC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAA;IACvE,gEAAgE;IAChE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAA;IAC7E,qCAAqC;IACrC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAA;CAC7D;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAA;IAC5E,uCAAuC;IACvC,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IAC/B,gCAAgC;IAChC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,2CAA2C;IAC3C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAA;IAC3C,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CAAA;IAC3D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAE5B,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,SAAS,CAAC,EAAE,GAAG,CAAA;IAEf,sBAAsB;IACtB,WAAW,CAAC,EAAE,OAAO,gCAAgC,EAAE,WAAW,CAAA;IAClE,gBAAgB,CAAC,CAAC,OAAO,EAAE,OAAO,gCAAgC,EAAE,WAAW,GAAG,IAAI,CAAA;IACtF,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,oCAAoC,EAAE,cAAc,CAAA;IAExE;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,OAAO,CAAA;IAEzC,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,OAAO,IAAI,IAAI,CAAA;IACf,SAAS,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;CACtD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ArrangementStrategy, SlotDef, Vec3 } from '../../transfer/types.js';
|
|
2
|
+
export declare class CenteringQueueStrategy implements ArrangementStrategy {
|
|
3
|
+
private readonly owner;
|
|
4
|
+
private readonly itemSpacing;
|
|
5
|
+
private readonly axis;
|
|
6
|
+
constructor(owner: any, itemSpacing?: number, axis?: 'horizontal' | 'vertical');
|
|
7
|
+
positionAt(index: number, slotDef: SlotDef, _occupantCount: number, component?: any): Vec3 | null;
|
|
8
|
+
capacity(slotDef: SlotDef): number;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=centering-queue-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"centering-queue-strategy.d.ts","sourceRoot":"","sources":["../../../src/items/arrangement/centering-queue-strategy.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAEjF,qBAAa,sBAAuB,YAAW,mBAAmB;IAE9D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,KAAK,EAAE,GAAG,EACV,WAAW,SAAI,EACf,IAAI,GAAE,YAAY,GAAG,UAAyB;IAGjE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IA0BjG,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CAGnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/items/arrangement/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import type { SlotDef,
|
|
1
|
+
import type { SlotDef, CarrierAttachPoint, ArrangementStrategy, CarrierDims, PlacementContext, SeatingPose } from '../transfer/types.js';
|
|
2
2
|
import type Component from '../components/component.js';
|
|
3
|
-
/** Key used to store the current slot assignment on a child component. */
|
|
4
|
-
export declare const TRANSFER_SLOT_KEY = "_transferSlotId";
|
|
5
3
|
type Constructor<T = object> = new (...args: any[]) => T;
|
|
6
4
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* The mixed-in class provides concrete implementations of all Transferable methods.
|
|
10
|
-
* Subclasses must implement `get slots(): SlotDef[]`; everything else has sensible defaults.
|
|
5
|
+
* Capacity (keep) 믹스인. subclass 는 `get slots()` 만 override; 나머지 default.
|
|
11
6
|
*/
|
|
12
|
-
export declare function
|
|
7
|
+
export declare function Capacity<TBase extends Constructor<Component>>(Base: TBase): {
|
|
13
8
|
new (...args: any[]): {
|
|
14
9
|
/** Declare the slot topology of this container. */
|
|
15
10
|
get slots(): SlotDef[];
|
|
@@ -18,28 +13,14 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
18
13
|
* Override in subclass to supply richer strategies (Stack, Queue, Grid, etc.).
|
|
19
14
|
*/
|
|
20
15
|
get arrangementStrategy(): ArrangementStrategy;
|
|
21
|
-
canReceive(component: any
|
|
16
|
+
canReceive(component: any, _ctx?: {
|
|
17
|
+
slotId?: string;
|
|
18
|
+
}): boolean;
|
|
22
19
|
findSlot(component: any): SlotDef | null;
|
|
23
|
-
receive(component: any, options?: TransferOptions): Promise<void>;
|
|
24
|
-
dispatch(component: any, target: Transferable, options?: TransferOptions): Promise<void>;
|
|
25
|
-
route(_component: any): Transferable | null | Promise<Transferable | null>;
|
|
26
|
-
/**
|
|
27
|
-
* WCS resolves a pending route by providing the confirmed target.
|
|
28
|
-
* Subclasses that implement PendingPolicy must override this to
|
|
29
|
-
* unblock the waiting promise in route().
|
|
30
|
-
*/
|
|
31
|
-
resolveRoute(_component: any, _target: Transferable): void;
|
|
32
|
-
/**
|
|
33
|
-
* WCS rejects or times out a pending route.
|
|
34
|
-
* Fires 'transfer-rejected'; subclasses may trigger fallback routing.
|
|
35
|
-
*/
|
|
36
|
-
rejectRoute(component: any, reason?: string): void;
|
|
37
20
|
/**
|
|
38
21
|
* carrier 의 받아들일 회전 (parent-local quaternion). 기본 identity.
|
|
39
22
|
* 회전이 필요한 holder (induct = belt 진행 방향, rack cell = grid 정렬 등)
|
|
40
23
|
* 는 이 메소드만 override 하면 receive() 가 atomic 하게 적용한다.
|
|
41
|
-
*
|
|
42
|
-
* 반환값은 plain object {x,y,z,w} — THREE.Quaternion 도 그 인터페이스 만족.
|
|
43
24
|
*/
|
|
44
25
|
acceptanceRotation(_carrier: any, _slot?: SlotDef): {
|
|
45
26
|
x: number;
|
|
@@ -48,33 +29,8 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
48
29
|
w: number;
|
|
49
30
|
} | undefined;
|
|
50
31
|
/**
|
|
51
|
-
*
|
|
52
|
-
* drag-over UI 가 사유 표시하기 위함. canReceive 와 동일 결정 사용.
|
|
53
|
-
*/
|
|
54
|
-
canAccept(component: any): {
|
|
55
|
-
ok: true;
|
|
56
|
-
slot: SlotDef;
|
|
57
|
-
} | {
|
|
58
|
-
ok: false;
|
|
59
|
-
reason: string;
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* receive 의 alias — Phase G2 contract 의 명시적 이름. 기존 receive 호출자도
|
|
63
|
-
* 그대로 작동.
|
|
64
|
-
*/
|
|
65
|
-
accept(component: any, options?: TransferOptions): Promise<void>;
|
|
66
|
-
/**
|
|
67
|
-
* Phase G5 — physical mover (robot-arm, AGV docking 등) 가 query 하는
|
|
68
|
-
* delivery world rotation. carrier 가 holder 에 도달했을 때 가져야 할
|
|
69
|
-
* world quaternion.
|
|
70
|
-
*
|
|
32
|
+
* Phase G5 — physical mover 가 query 하는 delivery world rotation.
|
|
71
33
|
* delivery.world = holder.world.quat × acceptanceRotation_local
|
|
72
|
-
*
|
|
73
|
-
* source 가 이걸 미리 알면 TCP yaw 를 점진적으로 맞춰 carrier 가
|
|
74
|
-
* acceptance pose 에 도달한 채로 release → handoff 시 zero-delta → 시각적
|
|
75
|
-
* 점프 없음.
|
|
76
|
-
*
|
|
77
|
-
* acceptanceRotation 미정의 OR _realObject 미빌드 시 undefined.
|
|
78
34
|
*/
|
|
79
35
|
deliveryWorldRotation(carrier: any): {
|
|
80
36
|
x: number;
|
|
@@ -84,22 +40,7 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
84
40
|
} | undefined;
|
|
85
41
|
/**
|
|
86
42
|
* Phase G9 — physical mover 가 query 하는 delivery world position.
|
|
87
|
-
*
|
|
88
|
-
* carrier 가 holder 에 도달했을 때 가져야 할 world XYZ. position 만 — rotation
|
|
89
|
-
* 은 deliveryWorldRotation 이 별도로 제공. 두 결과를 합치면 source 의 trajectory
|
|
90
|
-
* endpoint 가 됨.
|
|
91
|
-
*
|
|
92
|
-
* 기본 구현 — receivingSurfaceY 가 있으면 belt 표면 위, 없으면 slot.localPosition,
|
|
93
|
-
* 둘 다 없으면 holder object3d 원점.
|
|
94
|
-
*
|
|
95
|
-
* surface_world_y = holder.localToWorld((0, receivingSurfaceY - geometricOffsetY, 0)).y
|
|
96
|
-
* surface_world_xz = holder.world.xz
|
|
97
|
-
*
|
|
98
|
-
* receivingSurfaceY 의 정의가 cz-formula-tuned (= beltTopY + parent.geometricOffsetY)
|
|
99
|
-
* 라 그 차분 (- parent.geometricOffsetY) 으로 raw local 표면 Y 를 뽑아낸다.
|
|
100
|
-
*
|
|
101
|
-
* 호출 전제: holder 의 _realObject 가 빌드돼 있고 obj3d.matrixWorld 가 최신.
|
|
102
|
-
* 빌드 안 된 상태면 undefined → 호출자가 fallback (예: 2D bounds 기반).
|
|
43
|
+
* receivingSurfaceY 가 있으면 belt 표면 위, 없으면 holder origin.
|
|
103
44
|
*/
|
|
104
45
|
deliveryWorldPosition(_carrier: any): {
|
|
105
46
|
x: number;
|
|
@@ -107,7 +48,23 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
107
48
|
z: number;
|
|
108
49
|
} | undefined;
|
|
109
50
|
attachPointFor(component: any): CarrierAttachPoint | null;
|
|
110
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Phase PS — PlacementSurface contract 의 default 구현.
|
|
53
|
+
* 기존 합성 경로와 *수치 동일* 한 안착 pose 를 holder object3d local frame 으로 반환 (I5).
|
|
54
|
+
*/
|
|
55
|
+
placementFor(carrier: CarrierDims | any, ctx?: PlacementContext): SeatingPose | null;
|
|
56
|
+
/**
|
|
57
|
+
* Phase PS P3a — SeatingPose.position.y (holder object3d local) → state.zPos 역산.
|
|
58
|
+
* 받침면도 slot.localPosition.z 도 없는 holder 는 null (zPos 보존 semantics).
|
|
59
|
+
*/
|
|
60
|
+
_zPosFromSeatY(seatY: number, carrierDepth: any, slot: SlotDef): number | null;
|
|
61
|
+
/**
|
|
62
|
+
* 받침면의 직관적 local Y — raw `receivingSurfaceY` 에서 상쇄분 제거. null = 받침면 명세 없음.
|
|
63
|
+
*/
|
|
64
|
+
_receivingSurfaceLocalY(): number | null;
|
|
65
|
+
/**
|
|
66
|
+
* Count children currently assigned to `slotId`. 자식이 `parent === this` 일 때만 count.
|
|
67
|
+
*/
|
|
111
68
|
_countOccupied(slotId: string): number;
|
|
112
69
|
_app: any;
|
|
113
70
|
_model: any;
|
|
@@ -127,12 +84,14 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
127
84
|
fontSize: any;
|
|
128
85
|
__cache__: any;
|
|
129
86
|
created(): void;
|
|
130
|
-
added(parent:
|
|
131
|
-
removed(parent:
|
|
87
|
+
added(parent: import("../types/component.js").Container): void;
|
|
88
|
+
removed(parent: import("../types/component.js").Container): void;
|
|
132
89
|
ready(): Promise<void>;
|
|
90
|
+
_readyInvoked: boolean;
|
|
91
|
+
invokeReady(): void | Promise<void>;
|
|
133
92
|
touch(): void;
|
|
134
|
-
clearCache(...attrs:
|
|
135
|
-
removeSelf(completely
|
|
93
|
+
clearCache(...attrs: string[]): void;
|
|
94
|
+
removeSelf(completely?: boolean): void;
|
|
136
95
|
resetAnimation(): void;
|
|
137
96
|
dispose(): void;
|
|
138
97
|
get nature(): import("../index.js").ComponentNature;
|
|
@@ -151,16 +110,17 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
151
110
|
isConnectable(): boolean;
|
|
152
111
|
isIdentifiable(): boolean;
|
|
153
112
|
isPositionable(): boolean;
|
|
154
|
-
replaceRefids(replaceMap:
|
|
155
|
-
get(property:
|
|
113
|
+
replaceRefids(replaceMap: Record<string, string>): void;
|
|
114
|
+
get(property: string): any;
|
|
156
115
|
set(props: any, propval?: any): any;
|
|
157
|
-
getState(property:
|
|
116
|
+
getState(property: string): any;
|
|
158
117
|
setState(props: Partial<import("../index.js").State> | string, propval?: any): any;
|
|
159
118
|
get model(): any;
|
|
160
119
|
get state(): import("../index.js").State;
|
|
120
|
+
get refid(): any;
|
|
161
121
|
get hierarchy(): any;
|
|
162
|
-
get volatile():
|
|
163
|
-
_applyProps(target:
|
|
122
|
+
get volatile(): string[];
|
|
123
|
+
_applyProps(target: Record<string, any>, props: Record<string, any>, options: import("../components/component.js").ApplyPropsOptions): /*elided*/ any;
|
|
164
124
|
contains(x: number, y: number): boolean;
|
|
165
125
|
move(offset: {
|
|
166
126
|
x: number;
|
|
@@ -337,6 +297,7 @@ export declare function ContainerCapacity<TBase extends Constructor<Component>>(
|
|
|
337
297
|
get element(): HTMLElement | null;
|
|
338
298
|
set element(_v: HTMLElement | null);
|
|
339
299
|
};
|
|
300
|
+
__hasCapacity: boolean;
|
|
340
301
|
} & TBase;
|
|
341
302
|
export {};
|
|
342
|
-
//# sourceMappingURL=
|
|
303
|
+
//# sourceMappingURL=capacity-mixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity-mixin.d.ts","sourceRoot":"","sources":["../../src/items/capacity-mixin.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACZ,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AAMvD,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAYxD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,SAAS,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK;kBAf7B,GAAG,EAAE;QAsB9C,mDAAmD;qBACtC,OAAO,EAAE;QAItB;;;WAGG;mCACwB,mBAAmB;8BAMxB,GAAG,SAAS;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO;4BAa3C,GAAG,GAAG,OAAO,GAAG,IAAI;QAoCxC;;;;WAIG;qCAC0B,GAAG,UAAU,OAAO,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS;QAI9G;;;WAGG;uCAC4B,GAAG,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS;QAe/F;;;WAGG;wCAC6B,GAAG,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS;kCAoB3D,GAAG,GAAG,kBAAkB,GAAG,IAAI;QAczD;;;WAGG;8BACmB,WAAW,GAAG,GAAG,QAAO,gBAAgB,GAAQ,WAAW,GAAG,IAAI;QAyDxF;;;WAGG;8BACmB,MAAM,gBAAgB,GAAG,QAAQ,OAAO,GAAG,MAAM,GAAG,IAAI;QAa9E;;WAEG;mCACwB,MAAM,GAAG,IAAI;QASxC;;WAEG;+BACoB,MAAM,GAAG,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAazC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type Component from '../components/component.js';
|
|
2
|
+
/**
|
|
3
|
+
* Capacity contract — Holder 가 자기 보유 한도를 노출.
|
|
4
|
+
*
|
|
5
|
+
* 모든 method optional — 기본 fallback: SlottedHolder 의 slotIds().length / emptySlotIds().length.
|
|
6
|
+
*/
|
|
7
|
+
export interface Capacity {
|
|
8
|
+
/** 최대 capacity. -1 또는 Infinity 이면 무한. */
|
|
9
|
+
capacity(): number;
|
|
10
|
+
/** 남은 자리. capacity() - 점유된 수. */
|
|
11
|
+
available(): number;
|
|
12
|
+
/** capacity 도달 여부. available() === 0. */
|
|
13
|
+
isFull(): boolean;
|
|
14
|
+
/** 자리 생김 event listener — Producer 의 resume trigger. */
|
|
15
|
+
onAvailable?(listener: () => void): () => void;
|
|
16
|
+
/** capacity 도달 event listener — Producer 의 pause trigger. */
|
|
17
|
+
onFull?(listener: () => void): () => void;
|
|
18
|
+
}
|
|
19
|
+
/** duck-type. */
|
|
20
|
+
export declare function hasCapacity(x: any): x is Capacity;
|
|
21
|
+
/**
|
|
22
|
+
* 일반 helper — Capacity capability 미구현 컴포넌트도 SlottedHolder 라면 default 추론.
|
|
23
|
+
*/
|
|
24
|
+
export declare function inferCapacity(component: Component | any): {
|
|
25
|
+
capacity: number;
|
|
26
|
+
available: number;
|
|
27
|
+
isFull: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Capacity event emitter — Holder 가 자기 status 변경 시 호출하는 helper.
|
|
31
|
+
* setState({ data }) / reparent 후 호출. 변화 없으면 비용 0.
|
|
32
|
+
*/
|
|
33
|
+
export declare class CapacityEventTracker {
|
|
34
|
+
private wasFull;
|
|
35
|
+
private availableListeners;
|
|
36
|
+
private fullListeners;
|
|
37
|
+
/**
|
|
38
|
+
* Holder 의 현 capacity 상태 확인 + 변화 시 listener 호출.
|
|
39
|
+
* `current` = 현재 available count. 0 이면 full.
|
|
40
|
+
*/
|
|
41
|
+
notify(currentAvailable: number): void;
|
|
42
|
+
onAvailable(listener: () => void): () => void;
|
|
43
|
+
onFull(listener: () => void): () => void;
|
|
44
|
+
dispose(): void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Auto-wire — Producer ↔ Holder 의 자동 back-pressure.
|
|
48
|
+
*
|
|
49
|
+
* Holder 가 full 되면 producer.pauseEmit / 자리 생기면 resumeEmit.
|
|
50
|
+
* 반환: cleanup function — 양 listener 모두 해제.
|
|
51
|
+
*/
|
|
52
|
+
export declare function autoWireBackPressure(producer: any, holder: Capacity | any): () => void;
|
|
53
|
+
//# sourceMappingURL=capacity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../../src/items/capacity.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AAEvD;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,yCAAyC;IACzC,QAAQ,IAAI,MAAM,CAAA;IAElB,iCAAiC;IACjC,SAAS,IAAI,MAAM,CAAA;IAEnB,yCAAyC;IACzC,MAAM,IAAI,OAAO,CAAA;IAEjB,wDAAwD;IACxD,WAAW,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAE9C,6DAA6D;IAC7D,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC1C;AAED,iBAAiB;AACjB,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,QAAQ,CAMjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;IACzD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;CAChB,CAuBA;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,kBAAkB,CAAwB;IAClD,OAAO,CAAC,aAAa,CAAwB;IAE7C;;;OAGG;IACH,MAAM,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAetC,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAQ7C,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAQxC,OAAO,IAAI,IAAI;CAIhB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,QAAQ,GAAG,GAAG,GACrB,MAAM,IAAI,CAiBZ"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './capacity.js';
|
|
2
|
+
export * from './arrangement/index.js';
|
|
3
|
+
export * from './stacking/index.js';
|
|
4
|
+
export type { SlotRecord } from './slot-record.js';
|
|
5
|
+
export { ItemsDataBinding } from './items-data-binding.js';
|
|
6
|
+
export { Capacity } from './capacity-mixin.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/items/index.ts"],"names":[],"mappings":"AAOA,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AAEtC,cAAc,qBAAqB,CAAA;AACnC,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
|