@roomle/web-sdk 3.9.0 → 3.10.0-alpha.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.
Files changed (66) hide show
  1. package/lib/ConfiguratorKernel.wasm +0 -0
  2. package/lib/RoomleCore.js +5 -5
  3. package/lib/RoomleCore.wasm +0 -0
  4. package/lib/RoomleToolsCore.wasm +0 -0
  5. package/lib/{api-52cOotqw.mjs → api-BXU3pZnX.mjs} +10 -10
  6. package/lib/{api-52cOotqw.mjs.map → api-BXU3pZnX.mjs.map} +1 -1
  7. package/lib/asset-loader.worker-C911tbNL.mjs.map +1 -1
  8. package/lib/budgeteer.sw-D3VxiASa.mjs.map +1 -1
  9. package/lib/{component-dimensioning-12aJsCzQ.mjs → component-dimensioning-5iIw1f_3.mjs} +2 -2
  10. package/lib/{component-dimensioning-12aJsCzQ.mjs.map → component-dimensioning-5iIw1f_3.mjs.map} +1 -1
  11. package/lib/{component-raycast-helper-CcrmOq29.mjs → component-raycast-helper-O27_buEg.mjs} +2 -2
  12. package/lib/{component-raycast-helper-CcrmOq29.mjs.map → component-raycast-helper-O27_buEg.mjs.map} +1 -1
  13. package/lib/configurator-BIyxKNI0.mjs +2 -0
  14. package/lib/configurator-BwxEIDv7.mjs +45 -0
  15. package/lib/{configurator-D3ZKy6bf.mjs.map → configurator-BwxEIDv7.mjs.map} +1 -1
  16. package/lib/{glb-viewer-BJJ9OIlH.mjs → glb-viewer-C0Et5SO6.mjs} +17 -17
  17. package/lib/{glb-viewer-BJJ9OIlH.mjs.map → glb-viewer-C0Et5SO6.mjs.map} +1 -1
  18. package/lib/glb-viewer-DfMzLkqg.mjs +2 -0
  19. package/lib/{highlight-coordinator-BuFleG2q.mjs → highlight-coordinator-DdQ8yNjO.mjs} +2 -2
  20. package/lib/{highlight-coordinator-BuFleG2q.mjs.map → highlight-coordinator-DdQ8yNjO.mjs.map} +1 -1
  21. package/lib/{homag-intelligence-BxpMWKLs.mjs → homag-intelligence-DrKayEjK.mjs} +4 -4
  22. package/lib/homag-intelligence-DrKayEjK.mjs.map +1 -0
  23. package/lib/kernel-C7YDLxq8.mjs.map +1 -1
  24. package/lib/{main-QTvbXAvy.mjs → main-D2BulNeN.mjs} +5039 -4351
  25. package/lib/main-D2BulNeN.mjs.map +1 -0
  26. package/lib/{material-viewer-BPcCfvCC.mjs → material-viewer-CZQwo8Nc.mjs} +21 -21
  27. package/lib/material-viewer-CZQwo8Nc.mjs.map +1 -0
  28. package/lib/packages-BtLLQZLz.mjs +4 -0
  29. package/lib/planner-BF94NrwH.mjs +2 -0
  30. package/lib/planner-OgIPgZ1m.mjs +44 -0
  31. package/lib/{planner-C1-sOmHY.mjs.map → planner-OgIPgZ1m.mjs.map} +1 -1
  32. package/lib/roomle-headless.d.ts +521 -146
  33. package/lib/roomle-headless.js +45 -45
  34. package/lib/roomle-headless.js.map +1 -1
  35. package/lib/roomle-sdk.d.ts +521 -146
  36. package/lib/roomle-sdk.js +8 -8
  37. package/lib/{roomle-webgpu-renderer-BrZZeAGw.mjs → roomle-webgpu-renderer-5-aG3CMs.mjs} +2 -2
  38. package/lib/{roomle-webgpu-renderer-BrZZeAGw.mjs.map → roomle-webgpu-renderer-5-aG3CMs.mjs.map} +1 -1
  39. package/lib/{scene-renderer-3nhM4cEu.mjs → scene-renderer-DvXjoKHZ.mjs} +2 -2
  40. package/lib/{scene-renderer-3nhM4cEu.mjs.map → scene-renderer-DvXjoKHZ.mjs.map} +1 -1
  41. package/lib/{script-loader-3LiaLeLT.mjs → script-loader-CScqyQhc.mjs} +2 -2
  42. package/lib/{script-loader-3LiaLeLT.mjs.map → script-loader-CScqyQhc.mjs.map} +1 -1
  43. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -1
  44. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +36 -24
  45. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +1 -1
  46. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
  47. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.js +5 -5
  48. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
  49. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
  50. package/lib/{stats-helper-COC7Moh0.mjs → stats-helper-BYi5TI_H.mjs} +2 -2
  51. package/lib/{stats-helper-COC7Moh0.mjs.map → stats-helper-BYi5TI_H.mjs.map} +1 -1
  52. package/lib/{threejs-utils-CElderZe.mjs → threejs-utils-C4J_TZ0o.mjs} +61 -57
  53. package/lib/threejs-utils-C4J_TZ0o.mjs.map +1 -0
  54. package/lib/{tools-core-mkA4m80O.mjs → tools-core-BCkbEbim.mjs} +5 -5
  55. package/lib/{tools-core-mkA4m80O.mjs.map → tools-core-BCkbEbim.mjs.map} +1 -1
  56. package/package.json +1 -1
  57. package/lib/configurator-CarZpfPv.mjs +0 -2
  58. package/lib/configurator-D3ZKy6bf.mjs +0 -45
  59. package/lib/glb-viewer-CJ7BPqI-.mjs +0 -2
  60. package/lib/homag-intelligence-BxpMWKLs.mjs.map +0 -1
  61. package/lib/main-QTvbXAvy.mjs.map +0 -1
  62. package/lib/material-viewer-BPcCfvCC.mjs.map +0 -1
  63. package/lib/packages-JQ2uWInj.mjs +0 -4
  64. package/lib/planner-C1-sOmHY.mjs +0 -44
  65. package/lib/planner-CnRaQM_h.mjs +0 -2
  66. package/lib/threejs-utils-CElderZe.mjs.map +0 -1
@@ -5,7 +5,7 @@ import { Camera } from 'three';
5
5
  import { Color } from 'three';
6
6
  import { ColorRepresentation } from 'three';
7
7
  import { CommunicationInterfaceCallback } from '../../../workers/src/communication-interface';
8
- import { ConstructionObjectDoorArchArray } from 'roomle-core-hsc/src/embind/plannerCoreInterface';
8
+ import { ConstructionObjectDoorArch } from 'roomle-core-hsc/src/embind/plannerCoreInterface';
9
9
  import { createExtObjId } from '../../../../../common/src/utils/external-objects';
10
10
  import { Enumify } from '../../../common/src/utils/types';
11
11
  import { Enumify as Enumify_2 } from '../../../../../../common/src/utils/types';
@@ -33,7 +33,9 @@ import { Object3D } from 'three';
33
33
  import { Object3DEventMap } from 'three';
34
34
  import { OrthographicCamera } from 'three';
35
35
  import { ParametersGroup } from 'three/examples/jsm/inspector/tabs/Parameters.js';
36
+ import { PartList } from 'roomle-core-hsc/src/embind/configuratorCoreInterface';
36
37
  import { PerspectiveCamera } from 'three';
38
+ import { PlanInteractionHandler as PlanInteractionHandler_2 } from 'roomle-core-hsc/src/embind/plannerCoreInterface';
37
39
  import { PointLight } from 'three';
38
40
  import { Scene } from 'three';
39
41
  import { Texture } from 'three';
@@ -1292,6 +1294,7 @@ export declare class ConfiguratorKernelAccess extends CommonKernelAccess {
1292
1294
  changeCommonComponentParameter(componentIds: number[], parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
1293
1295
  changeComponentParameter(componentId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
1294
1296
  changePlanObjectParameter(runtimeId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
1297
+ changePlanObjectsParameter(runtimeIds: number[], parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
1295
1298
  protected _getAnimationLevelForObject(_runtimeId: number, animation: KernelAnimation | undefined): AnimationLevelType;
1296
1299
  updateAnimationParameters(elementId: number | number[], parameters: KernelParameter[]): void;
1297
1300
  changeAnimationValue(elementId: number, parameterKey: string, value: string, level: number, animationLevel: AnimationLevelType, animate: boolean): void;
@@ -1601,6 +1604,7 @@ export declare class ConfiguratorSceneManager extends SceneManager implements Co
1601
1604
  private _sceneEventHandler;
1602
1605
  private _isComponentDimensionsVisible;
1603
1606
  private _dimensionUpdateDebounced;
1607
+ private _sceneSetupReady;
1604
1608
  constructor(creator: string, offset: CanvasOffset, mode: Enumify_3<typeof CAMERA_TYPE>);
1605
1609
  /**
1606
1610
  * Single point for deciding whether to push HTML label positions to the UI.
@@ -2174,6 +2178,11 @@ export declare abstract class ConstructionObject extends PlanObjectPtr {
2174
2178
  export declare class ConstructionObjectSet extends EmsSet<ConstructionObject> {
2175
2179
  }
2176
2180
 
2181
+ export declare interface ConstructionOverview {
2182
+ objects: KernelPlanObjectList;
2183
+ parts: PartList;
2184
+ }
2185
+
2177
2186
  export declare interface ConstructionPlanObject extends PlanObject {
2178
2187
  getAttachedWall(): WallPlanObject;
2179
2188
  getPreferredSide(): LeftOrRightWallSide;
@@ -2181,7 +2190,7 @@ export declare interface ConstructionPlanObject extends PlanObject {
2181
2190
  getCornerFromRight(): KernelVector3;
2182
2191
  getCornerToLeft(): KernelVector3;
2183
2192
  getCornerToRight(): KernelVector3;
2184
- getDoorArches(): ConstructionObjectDoorArchArray;
2193
+ getDoorArches(): EmsArray<ConstructionObjectDoorArch>;
2185
2194
  }
2186
2195
 
2187
2196
  export declare class ConstructionPlanObjectViewModel extends StaticPlanObjectViewModel {
@@ -2574,6 +2583,8 @@ export declare class DraggableNode extends Object3D {
2574
2583
  getSize(): Vector3;
2575
2584
  hoverOn(): void;
2576
2585
  hoverOff(): void;
2586
+ setSphereColor(color: number): void;
2587
+ setInnerRingColor(color: number): void;
2577
2588
  select(color: number): void;
2578
2589
  deselect(color: number): void;
2579
2590
  }
@@ -3106,6 +3117,8 @@ export declare interface ExternalObjectDockedRootModule {
3106
3117
  dockingVector: string;
3107
3118
  dockingVectorIndex: number;
3108
3119
  id: string;
3120
+ mode: string;
3121
+ offset: number[];
3109
3122
  }
3110
3123
 
3111
3124
  export declare interface ExternalObjectGroup {
@@ -3155,6 +3168,7 @@ export declare interface ExternalObjectGroupLayoutSide {
3155
3168
  export declare interface ExternalObjectLoadConfiguration {
3156
3169
  applyGlobalChildMode: boolean;
3157
3170
  correctArrangement: boolean;
3171
+ applyGroupPosition: boolean;
3158
3172
  findFreeSpaceInPlan: boolean;
3159
3173
  isVisible: boolean;
3160
3174
  respondWithPositionInPlan: boolean;
@@ -3335,6 +3349,8 @@ export declare interface FetchOptions {
3335
3349
  embed?: RAPI_PATHS[];
3336
3350
  }
3337
3351
 
3352
+ export declare type FinalizeMode = 'immediate' | 'on-signal';
3353
+
3338
3354
  export declare abstract class Floor extends PlanElement {
3339
3355
  area: number;
3340
3356
  material: FloorMaterial;
@@ -3355,6 +3371,12 @@ export declare interface FloorAreaData<Vector2Type = Vector3, Vector3Type = Vect
3355
3371
 
3356
3372
  export declare type FloorAreaDataTransferable = FloorAreaData<Position2, Position3>;
3357
3373
 
3374
+ export declare interface FloorCluster {
3375
+ floors: Floor[];
3376
+ area: number;
3377
+ labelPosition: KernelVector3f;
3378
+ }
3379
+
3358
3380
  export declare class FloorMaterial extends BaseMaterial {
3359
3381
  uvScale(): KernelVector3f;
3360
3382
  rotation(): KernelVector3f;
@@ -3624,6 +3646,140 @@ export declare interface GlueLogic {
3624
3646
  getMaterialUrl(materialId: string, groupOrModuleId?: string): string | null;
3625
3647
  }
3626
3648
 
3649
+ /**
3650
+ * Hand-typed overrides of core handler methods, re-typed against our model types
3651
+ * (PlanObject, KernelObject, …) which differ from core's. Everything not listed here
3652
+ * is inherited from the real core type — see PlanInteractionHandler below.
3653
+ */
3654
+ export declare interface HandWrittenPlanInteractionHandler {
3655
+ /** embind cleanup — frees the underlying C++ instance. */
3656
+ delete(): void;
3657
+ init(reference: HandWrittenPlanInteractionHandler, zoomFactor: number, viewSnapDist: number, wallSnapMode: any, objectSnapMode: any, shouldSnap: boolean, drawingType: any): void;
3658
+ getConfiguratorKernel(): ConfiguratorKernelClass;
3659
+ loadPlanXML(xml: string): Plan_2;
3660
+ createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
3661
+ getPlan(): Plan_2;
3662
+ moveElementTo(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean, cameraPosition?: KernelVector3): void;
3663
+ moveElementToIn2d(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean): void;
3664
+ moveElementBy(planObject: KernelObject, distance: KernelVector3, dragging: boolean): void;
3665
+ duplicatePlanObject(object: PlanObject, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
3666
+ duplicatePlanObjects(objects: PlanObjectList, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
3667
+ setElementVisibility(element: PlanElement_2, isVisible: boolean): void;
3668
+ moveObjectsBy(planObjects: KernelObjectPtrList, distance: KernelVector3): void;
3669
+ rotateObjectTo(planObject: KernelObject, angleInRad: number): void;
3670
+ setObjectRotation(planObject: KernelObject, angleInRad: number): void;
3671
+ addPlanObjects(list: KernelObjectPtrList, findFreeSpaceInPlan: boolean): PlanObject[];
3672
+ addPlanObjectFromItem(object: KernelObject, position: KernelVector3, type: number, findFreeSpaceInPlan: boolean): PlanObject;
3673
+ addOrUpdateExternalPlanObjects(serializedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: ExternalObjectLoadConfiguration, mergedGroupIds: string | string[]): PlanObject[];
3674
+ createPreviewGeometryForAddOn(objectId: string, objectConfiguration: string, articleId: string, groupDefinitions: string, validContainerModules: ExternalValidContainerModule[]): void;
3675
+ catalogItemLoaded(catalogItem: KernelCatalogItem): void;
3676
+ removeElement(planObject: KernelObject): void;
3677
+ removeObjectWithId(objectId: string): void;
3678
+ mergeObjects(objects: PlanObjectList): void;
3679
+ groupObjects(planObjectPtrList: PlanObjectList): ObjectGroupPtr;
3680
+ rotateObjectsBy(planObjectPtrList: PlanObjectList, anAngleInRad: number, aroundPoint: KernelVector3): void;
3681
+ rotateGroupBy(group: ObjectGroupPtr, anAngleInRad: number, aroundPoint: KernelVector3): void;
3682
+ deactivateAllSnappingActivity(): void;
3683
+ reactivateAllSnappingActivity(): void;
3684
+ isUndoPossible(): boolean;
3685
+ isRedoPossible(): boolean;
3686
+ clearHistory(): void;
3687
+ startInteraction(): void;
3688
+ resumeInteraction(): void;
3689
+ endInteraction(): void;
3690
+ undo(): void;
3691
+ redo(): void;
3692
+ isVectorPreviewModeEnabled(): boolean;
3693
+ getDrawingMode(): DrawingMode;
3694
+ beginDrawing(point: {
3695
+ x: number;
3696
+ y: number;
3697
+ z: number;
3698
+ }, drawingMode: DrawingMode, createUnclosedSpace: boolean): void;
3699
+ endDrawing(point: {
3700
+ x: number;
3701
+ y: number;
3702
+ z: number;
3703
+ }): void;
3704
+ cancelDrawing(): void;
3705
+ addNode(point: {
3706
+ x: number;
3707
+ y: number;
3708
+ z: number;
3709
+ }): PlanNode;
3710
+ addWall(from: PlanNode, to: PlanNode): KernelWall;
3711
+ setWallHeight(wall: KernelWall, height: number): void;
3712
+ setLengthOfEdge2D(wall: KernelWall, length: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
3713
+ setLengthOfSlopingEdge(wall: KernelWall, slopingLength: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
3714
+ setWallThickness(wall: KernelWall, thickness: number): void;
3715
+ addAttic(wall: KernelWall, kneeHeight: number, width: number, side: WallSide | null | undefined): KernelAttic;
3716
+ setAtticSide(attic: KernelAttic, side: WallSide): void;
3717
+ setAtticKneeHeight(attic: KernelAttic, kneeHeight: number): void;
3718
+ setAtticWidth(attic: KernelAttic, width: number): void;
3719
+ currentDrawingPosition(point: {
3720
+ x: number;
3721
+ y: number;
3722
+ z: number;
3723
+ }): void;
3724
+ forceNode(point: {
3725
+ x: number;
3726
+ y: number;
3727
+ z: number;
3728
+ }): void;
3729
+ setDrawingType(aNewDrawingType: DrawingType): void;
3730
+ setZoomFactor(pxPerMM: number): void;
3731
+ setViewSnapDist(aDist: number): void;
3732
+ setRotationSnapAngle(angleInRadians: number): void;
3733
+ setDefaultWallThickness(wallThickness: number, applyToAll: boolean): void;
3734
+ setDefaultWallHeight(wallHeight: number, applyToAll: boolean): void;
3735
+ setDefaultParapetHeight(parapetHeight: number, applyToAll: boolean): void;
3736
+ setRoomParapetHeight(floor: KernelFloor, parapetHeight: number): void;
3737
+ getDefaultExteriorWallMaterial(): KernelWallMaterial;
3738
+ setDefaultExteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
3739
+ getDefaultInteriorWallMaterial(): KernelWallMaterial;
3740
+ setDefaultInteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
3741
+ getDefaultFloorMaterial(): KernelFloorMaterial;
3742
+ setDefaultFloorMaterial(floorMaterial: KernelFloorMaterial): void;
3743
+ setElementCustomDataJson(element: PlanElement_2, customDataJson: string): void;
3744
+ setWallLeftMaterial(wall: KernelWall, material: KernelWallMaterial): void;
3745
+ setWallRightMaterial(wall: KernelWall, material: KernelWallMaterial): void;
3746
+ setFloorMaterial(floor: KernelFloor, material: KernelFloorMaterial): void;
3747
+ setFloorLabelObject(floor: KernelFloor, serializedLabelObject: string): void;
3748
+ setFloorType(floor: KernelFloor, floorType: FloorType): void;
3749
+ setEdgeType(wall: KernelWall, edgeType: EdgeType): void;
3750
+ getContinuousDrawingManager(): ContinuousDrawingManager;
3751
+ setSnapFeedbackWhileDrawing(enabled: boolean): void;
3752
+ consistsOfMergedComponents(object: KernelObject): boolean;
3753
+ setObjectSize(anObject: KernelObject, aNewSize: KernelVector3, anAnchor: Anchor): void;
3754
+ setObjectFlipX(anObject: KernelObject, shouldFlipX: boolean): void;
3755
+ setObjectFlipY(anObject: KernelObject, shouldFlipY: boolean): void;
3756
+ setObjectCustomColor(object: PlanObject, rgbColor: number, useCustomColor: boolean): void;
3757
+ setObjectCustomLabel(object: PlanObject, label: string): void;
3758
+ setObjectFixedZ(anObject: KernelObject, shouldFlipZ: boolean): void;
3759
+ setMeasurePoint1(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
3760
+ setMeasurePoint2(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
3761
+ addMeasure(startPosition: KernelVector3f, endPosition: KernelVector3f): PlanMeasure_2;
3762
+ setDiscardExternalObjectsOnLoad(discard: boolean): void;
3763
+ isChildObjectModePossible(object: KernelObject): boolean;
3764
+ isEnabledChildObjectMode(object: KernelObject): boolean;
3765
+ enableChildObjects(object: KernelObject, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
3766
+ disableChildObjects(object: KernelObject): KernelObject;
3767
+ enableChildObjectsOfExternalObject(objectId: string, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
3768
+ disableChildObjectsOfExternalObject(objectId: string): KernelObject;
3769
+ disableChildObjectsOfAllPlanObjects(): void;
3770
+ setAutomatedWallHeight(wall: KernelWall, value: boolean): void;
3771
+ unit: string;
3772
+ enableRaster: boolean;
3773
+ customRaster: number;
3774
+ enableSnap: boolean;
3775
+ enableDrawingSnap: boolean;
3776
+ objectToWallSnapMode: SnapMode;
3777
+ objectToObjectSnapMode: SnapMode;
3778
+ dockWhenSnap: boolean;
3779
+ unDockOnMove: boolean;
3780
+ enableTerrain: boolean;
3781
+ }
3782
+
3627
3783
  export declare class HdrEnvironmentLoader implements Context {
3628
3784
  _creator_: string;
3629
3785
  private _environmentMap;
@@ -3685,6 +3841,14 @@ export declare type HiAttributeOptionsResult = CheckDropDownResult | CheckDropDo
3685
3841
 
3686
3842
  export declare type HiContextAction = (typeof HI_CONTEXT_ACTION)[keyof typeof HI_CONTEXT_ACTION];
3687
3843
 
3844
+ /**
3845
+ * Lifecycle methods internal to PlanInteractionManager — it drives them itself,
3846
+ * external code must not. Single source for both the runtime guard (HIDDEN_LIFECYCLE)
3847
+ * and the compile-time Omit in the PlanInteractionManager type. `satisfies` keeps
3848
+ * every entry a real handler method.
3849
+ */
3850
+ export declare const HIDDEN_INTERACTION_LIFECYCLE_METHODS: readonly ["startInteraction", "resumeInteraction", "endInteraction"];
3851
+
3688
3852
  export declare interface HighlightHelper {
3689
3853
  init(object: Object3D, camera: PerspectiveCamera): void;
3690
3854
  setCamera(camera: PerspectiveCamera): void;
@@ -4094,6 +4258,8 @@ export declare class IntArray extends EmsArray<number> {
4094
4258
  export declare class IntArray_2 extends EmsArray<number> {
4095
4259
  }
4096
4260
 
4261
+ export declare type InteractionMethodName = Exclude<keyof PlanInteractionManager, keyof UndoRedoHandler>;
4262
+
4097
4263
  export declare interface InteractionOptions {
4098
4264
  keepInteractionOpen?: boolean;
4099
4265
  }
@@ -4107,6 +4273,8 @@ export declare const isExternalObject: (someThing: unknown) => someThing is Exte
4107
4273
 
4108
4274
  export declare const isExtObjId: (id: unknown) => id is ExtObjId_2;
4109
4275
 
4276
+ export declare const isFirefox: () => boolean;
4277
+
4110
4278
  export declare const isSafari: () => boolean;
4111
4279
 
4112
4280
  export declare const KERNEL_MESSAGE_TYPE: {
@@ -4421,7 +4589,7 @@ export declare interface KernelParameter {
4421
4589
  viewType: KernelViewType;
4422
4590
  source: 'external' | 'internal';
4423
4591
  level?: number;
4424
- objectIds: number[];
4592
+ objectIds?: number[];
4425
4593
  }
4426
4594
 
4427
4595
  export declare interface KernelParameterGroup {
@@ -5065,19 +5233,23 @@ export declare interface NodeDimensionTransferable {
5065
5233
  }
5066
5234
 
5067
5235
  export declare class NodePlanElementViewModel extends PlanElementViewModel {
5068
- private _nodeUiMesh;
5236
+ protected _nodeUiMesh: DraggableNode;
5237
+ protected _defaultRingColor: number;
5069
5238
  constructor(planObject: PlanObject);
5070
5239
  update(): void;
5071
5240
  setTopView(enabled: boolean): void;
5072
5241
  getSize(): Vector3;
5073
5242
  show(): void;
5074
5243
  hide(): void;
5244
+ protected getSelectionRingColor(): number;
5075
5245
  select(): void;
5076
5246
  deselect(): void;
5077
5247
  hoverOn(): void;
5078
5248
  hoverOff(): void;
5079
5249
  protected _generateBoundingBox(): RoomleEventedMesh;
5080
5250
  setZoom(zoom: number): void;
5251
+ setFillColor(color: number): void;
5252
+ setDefaultRingColor(color: number): void;
5081
5253
  }
5082
5254
 
5083
5255
  export declare interface NodePlanObject extends PlanObject {
@@ -5412,133 +5584,33 @@ export declare abstract class PlanImage extends PlanElement {
5412
5584
  center: KernelVector3f;
5413
5585
  }
5414
5586
 
5415
- export declare interface PlanInteractionHandler {
5416
- init(reference: PlanInteractionHandler, zoomFactor: number, viewSnapDist: number, wallSnapMode: any, objectSnapMode: any, shouldSnap: boolean, drawingType: any): PlanInteractionHandler;
5417
- getConfiguratorKernel(): ConfiguratorKernelClass;
5418
- loadPlanXML(xml: string): Plan_2;
5419
- createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
5420
- getPlan(): Plan_2;
5421
- moveElementTo(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean, cameraPosition?: KernelVector3): void;
5422
- moveElementToIn2d(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean): void;
5423
- moveElementBy(planObject: KernelObject, distance: KernelVector3, dragging: boolean): void;
5424
- duplicatePlanObject(object: PlanObject, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
5425
- duplicatePlanObjects(objects: PlanObjectList, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
5426
- setElementVisibility(element: PlanElement_2, isVisible: boolean): void;
5427
- moveObjectsBy(planObjects: KernelObjectPtrList, distance: KernelVector3): void;
5428
- rotateObjectTo(planObject: KernelObject, angleInRad: number): void;
5429
- setObjectRotation(planObject: KernelObject, angleInRad: number): void;
5430
- addPlanObjects(list: KernelObjectPtrList, findFreeSpaceInPlan: boolean): PlanObject[];
5431
- addPlanObjectFromItem(object: KernelObject, position: KernelVector3, type: number, findFreeSpaceInPlan: boolean): PlanObject;
5432
- addOrUpdateExternalPlanObjects(serialzedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: ExternalObjectLoadConfiguration, mergedGroupIds: string | string[]): PlanObject[];
5433
- createPreviewGeometryForAddOn(objectId: string, objectConfiguration: string, articleId: string, groupDefinitions: string, validContainerModules: ExternalValidContainerModule[]): void;
5434
- catalogItemLoaded(catalogItem: KernelCatalogItem): void;
5435
- removeElement(planObject: KernelObject): void;
5436
- removeObjectWithId(objectId: string): void;
5437
- mergeObjects(objects: PlanObjectList): void;
5438
- groupObjects(planObjectPtrList: PlanObjectList): ObjectGroupPtr;
5439
- rotateObjectsBy(planObjectPtrList: PlanObjectList, anAngleInRad: number, aroundPoint: KernelVector3): void;
5440
- rotateGroupBy(group: ObjectGroupPtr, anAngleInRad: number, aroundPoint: KernelVector3): void;
5441
- deactivateAllSnappingActivity(): void;
5442
- reactivateAllSnappingActivity(): void;
5443
- isUndoPossible(): boolean;
5444
- isRedoPossible(): boolean;
5445
- clearHistory(): void;
5446
- startInteraction(): void;
5447
- resumeInteraction(): void;
5448
- endInteraction(): void;
5449
- undo(): void;
5450
- redo(): void;
5451
- isVectorPreviewModeEnabled(): boolean;
5452
- getDrawingMode(): DrawingMode;
5453
- sCreateUnclosedSpaceEnabled(): boolean;
5454
- beginDrawing(point: {
5455
- x: number;
5456
- y: number;
5457
- z: number;
5458
- }, drawingMode: DrawingMode, createUnclosedSpace: boolean): void;
5459
- endDrawing(point: {
5460
- x: number;
5461
- y: number;
5462
- z: number;
5463
- }): void;
5464
- cancelDrawing(): void;
5465
- addNode(point: {
5466
- x: number;
5467
- y: number;
5468
- z: number;
5469
- }): PlanNode;
5470
- addWall(from: PlanNode, to: PlanNode): KernelWall;
5471
- setWallHeight(wall: KernelWall, height: number): void;
5472
- setLengthOfEdge2D(wall: KernelWall, length: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
5473
- setLengthOfSlopingEdge(wall: KernelWall, slopingLength: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
5474
- setWallThickness(wall: KernelWall, thickness: number): void;
5475
- addAttic(wall: KernelWall, kneeHeight: number, width: number, side: WallSide | null | undefined): KernelAttic;
5476
- setAtticSide(attic: KernelAttic, side: WallSide): void;
5477
- setAtticKneeHeight(attic: KernelAttic, kneeHeight: number): void;
5478
- setAtticWidth(attic: KernelAttic, width: number): void;
5479
- currentDrawingPosition(point: {
5480
- x: number;
5481
- y: number;
5482
- z: number;
5483
- }): void;
5484
- forceNode(point: {
5485
- x: number;
5486
- y: number;
5487
- z: number;
5488
- }): void;
5489
- setDrawingType(aNewDrawingType: DrawingType): void;
5490
- setZoomFactor(pxPerMM: number): void;
5491
- setViewSnapDist(aDist: number): void;
5492
- setRotationSnapAngle(angleInRadians: number): void;
5493
- setDefaultWallThickness(wallThickness: number, applyToAll: boolean): void;
5494
- setDefaultWallHeight(wallHeight: number, applyToAll: boolean): void;
5495
- setDefaultParapetHeight(parapetHeight: number, applyToAll: boolean): void;
5496
- setRoomParapetHeight(floor: KernelFloor, parapetHeight: number): void;
5497
- getDefaultExteriorWallMaterial(): KernelWallMaterial;
5498
- setDefaultExteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
5499
- getDefaultInteriorWallMaterial(): KernelWallMaterial;
5500
- setDefaultInteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
5501
- getDefaultFloorMaterial(): KernelFloorMaterial;
5502
- setDefaultFloorMaterial(floorMaterial: KernelFloorMaterial): void;
5503
- setElementCustomDataJson(element: PlanElement_2, customDataJson: string): void;
5504
- setWallLeftMaterial(wall: KernelWall, material: KernelWallMaterial): void;
5505
- setWallRightMaterial(wall: KernelWall, material: KernelWallMaterial): void;
5506
- setFloorMaterial(floor: KernelFloor, material: KernelFloorMaterial): void;
5507
- setFloorLabelObject(floor: KernelFloor, serializedLabelObject: string): void;
5508
- setFloorType(floor: KernelFloor, floorType: FloorType): void;
5509
- setEdgeType(wall: KernelWall, edgeType: EdgeType): void;
5510
- getContinuousDrawingManager(): ContinuousDrawingManager;
5511
- setSnapFeedbackWhileDrawing(enabled: boolean): void;
5512
- consistsOfMergedComponents(object: KernelObject): boolean;
5513
- setObjectSize(anObject: KernelObject, aNewSize: KernelVector3, anAnchor: Anchor): void;
5514
- setObjectFlipX(anObject: KernelObject, shouldFlipX: boolean): void;
5515
- setObjectFlipY(anObject: KernelObject, shouldFlipY: boolean): void;
5516
- setObjectCustomColor(object: PlanObject, rgbColor: number, useCustomColor: boolean): void;
5517
- setObjectCustomLabel(object: PlanObject, label: string): void;
5518
- setObjectFixedZ(anObject: KernelObject, shouldFlipZ: boolean): void;
5519
- setMeasurePoint1(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
5520
- setMeasurePoint2(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
5521
- addMeasure(startPosition: KernelVector3f, endPosition: KernelVector3f): PlanMeasure_2;
5522
- setDiscardExternalObjectsOnLoad(discard: boolean): void;
5523
- isChildObjectModePossible(object: KernelObject): boolean;
5524
- isEnabledChildObjectMode(object: KernelObject): boolean;
5525
- enableChildObjects(object: KernelObject, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
5526
- disableChildObjects(object: KernelObject): KernelObject;
5527
- enableChildObjectsOfExternalObject(objectId: string, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
5528
- disableChildObjectsOfExternalObject(objectId: string): KernelObject;
5529
- disableChildObjectsOfAllPlanObjects(): void;
5530
- unit: string;
5531
- enableRaster: boolean;
5532
- customRaster: number;
5533
- enableSnap: boolean;
5534
- enableDrawingSnap: boolean;
5535
- objectToWallSnapMode: SnapMode;
5536
- objectToObjectSnapMode: SnapMode;
5537
- dockWhenSnap: boolean;
5538
- unDockOnMove: boolean;
5539
- enableTerrain: boolean;
5587
+ export declare type PlanInteractionHandler = Omit<PlanInteractionHandler_2, keyof HandWrittenPlanInteractionHandler> & HandWrittenPlanInteractionHandler;
5588
+
5589
+ export declare class PlanInteractionHandlerExtension extends UndoRedoHandler {
5590
+ addOrUpdateExternalPlanObjects(serializedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: any, mergedGroupIds: string | string[]): PlanObject[];
5591
+ applyKernelParameterChange<T>(callback: () => T, parameterKey: string, elementId?: string | number): T;
5592
+ /**
5593
+ * Track a construction element position adjustment from bubble/dimension editing.
5594
+ * Creates an immediate undo/redo step. Used when users edit dimension bubbles
5595
+ * attached to construction elements (doors, windows, etc.) in walls.
5596
+ */
5597
+ adjustConstructionElementPosition(element: KernelObject, offset: any): void;
5598
+ /**
5599
+ * Track an object position adjustment from bubble/dimension editing on the floor.
5600
+ * Creates an immediate undo/redo step. Used when users edit dimension bubbles
5601
+ * for floor objects.
5602
+ */
5603
+ adjustObjectPosition(element: KernelObject, offset: any): void;
5604
+ /**
5605
+ * Track an object-to-wall distance adjustment from bubble/dimension editing.
5606
+ * Creates an immediate undo/redo step. Used when users edit object-to-wall
5607
+ * dimension bubbles on the floor.
5608
+ */
5609
+ adjustObjectToWallDistance(element: KernelObject, position: any, dragging: boolean): void;
5540
5610
  }
5541
5611
 
5612
+ export declare type PlanInteractionManager = Omit<Omit<PlanInteractionHandler, keyof PlanInteractionHandlerExtension> & PlanInteractionHandlerExtension, (typeof HIDDEN_INTERACTION_LIFECYCLE_METHODS)[number]>;
5613
+
5542
5614
  export declare abstract class PlanMeasure extends PlanElement {
5543
5615
  getPoint1(): KernelVector3f;
5544
5616
  getPoint2(): KernelVector3f;
@@ -5555,6 +5627,7 @@ export declare abstract class PlanModelViewHelper {
5555
5627
  static requestWallMesh2d(aWall: Wall): void;
5556
5628
  static requestFloorMesh2d(aFloor: Floor): void;
5557
5629
  static getCeilingHeight(aFloor: Floor): number;
5630
+ static getFloorClusters(plan: Plan): FloorCluster[];
5558
5631
  static getMaxDistToBorderForPlanObject(aPlanObject: PlanObjectPtr): number;
5559
5632
  static getDistToNextWallOnSide(anObject: PlanObjectPtr, aSide: PlanObjectSide, maxDist: number): number;
5560
5633
  static getDistAlongWallOnSide(anObject: ConstructionObject, aSide: PlanObjectSide, aWallSide: WallSide): number;
@@ -5562,7 +5635,8 @@ export declare abstract class PlanModelViewHelper {
5562
5635
  }
5563
5636
 
5564
5637
  export declare interface PlanModelViewHelper_2 {
5565
- getPlanOverview(planObject: KernelObject): PlanOverview;
5638
+ getPlanOverview(plan: Plan_2): PlanOverview;
5639
+ getConstructionOverview(plan: Plan_2): ConstructionOverview;
5566
5640
  getPlanObject(plan: Plan_2, aRuntimeId: number): KernelPlanObject;
5567
5641
  isChildObjectRootComponent(plan: Plan_2, componentRuntimeId: number): boolean;
5568
5642
  isAnimationRootComponent(plan: Plan_2, componentRuntimeId: number): boolean;
@@ -5690,7 +5764,12 @@ export declare interface PlannerInitData {
5690
5764
 
5691
5765
  export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5692
5766
  private _roomlePlannerUiCallback;
5693
- private _planInteractionHandler;
5767
+ /**
5768
+ * Stores the PlanInteractionManager — NOT typed as PlanInteractionHandler.
5769
+ * This is a manager that composes and enhances the kernel handler with
5770
+ * smart action grouping, NOT a 1:1 implementation of the handler interface.
5771
+ */
5772
+ private _planInteractionManager;
5694
5773
  private _plannerKernelCallbackListener;
5695
5774
  private _plannerReadyListeners;
5696
5775
  private _plannerReady;
@@ -5704,19 +5783,25 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5704
5783
  get homagIntelligence(): HomagIntelligence | null;
5705
5784
  setHomagIntelligence(homagIntelligence: HomagIntelligence | null): void;
5706
5785
  get isDockingInPlannerEnabled(): boolean;
5786
+ /**
5787
+ * Returns the PlanInteractionManager — a composition-based wrapper that adds
5788
+ * smart action grouping to kernel interactions. NOT a strict implementation
5789
+ * of PlanInteractionHandler, but compatible with it for backward compatibility.
5790
+ */
5791
+ get planInteractionManager(): PlanInteractionManager;
5707
5792
  private _createPlanInteractionHandler;
5708
5793
  addPlannerListener(listener: PlannerKernelCallbackI): void;
5709
5794
  removePlannerListener(listener: PlannerKernelCallbackI): void;
5710
5795
  isReady(): void;
5711
5796
  protected _setupKernel(): void;
5712
5797
  get callbacks(): RoomlePlannerUiCallback;
5713
- get planInteractionHandler(): PlanInteractionHandler;
5714
5798
  get planModelViewHelper(): PlanModelViewHelper_2;
5715
5799
  protected _validateParameters(parameters: KernelParameter[], getVerifiedOptions: (keys: string[]) => Promise<Record<string, CheckDropDownResult> | undefined>, errorMessage: string): Promise<KernelParameter[]>;
5716
5800
  protected _validateExternalComponentParameters(componentId: number, parameters: KernelParameter[]): Promise<KernelParameter[]>;
5717
5801
  protected _validateExternalPlanObjectParameters(objectId: number, parameters: KernelParameter[]): Promise<KernelParameter[]>;
5718
5802
  catalogItemLoaded(catalogItem: RapiItem): void;
5719
5803
  insertItems(itemList: Array<RapiItem | RapiConfiguration>, newUndoRedoStep?: boolean): Promise<RuntimeId[]>;
5804
+ private _performInsertItems;
5720
5805
  duplicateItems(planObjects: PlanObject[]): PlanObject[];
5721
5806
  mergeItems(planObjects: PlanObject[]): void;
5722
5807
  private _rapiItemToKernelItem;
@@ -5763,7 +5848,8 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5763
5848
  addPlanMesh(plan: Plan_2, material: any, vertices: Float32Array, indices: Int32Array, uvCoords: Float32Array, normals: Float32Array, type: KernelEnum): void;
5764
5849
  endPlanConstruction(plan: Plan_2): void;
5765
5850
  createPlanFromObject(rapiElement: RapiItem | RapiConfiguration, position?: Position3, rotation?: number): Plan_2;
5766
- addPlanObjectFromItem(rapiElement: RapiItem | RapiConfiguration, newUndoRedoStep: boolean, position?: Position3, rotation?: number): Promise<RuntimeId>;
5851
+ addPlanObjectFromItem(rapiElement: RapiItem | RapiConfiguration, newUndoRedoStep: boolean, position?: Position3, rotation?: number, keepInteractionOpen?: boolean): Promise<RuntimeId>;
5852
+ private _performAddPlanObjectFromItem;
5767
5853
  coupleReferences(jsObject: any, coreReference: KernelObject): void;
5768
5854
  private _decoupleReferences;
5769
5855
  isConstructionPlanElement(planElement: PlanElement_2): boolean;
@@ -5790,6 +5876,9 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5790
5876
  getObjectComponent(runtimeId: number, typeOfId: Enumify_3<typeof CORE_TYPE_OF_CORE_ID>): KernelPlanObjectComponent | null;
5791
5877
  isChildObjectRootComponent(roomleComponent: RoomleComponent): boolean;
5792
5878
  isAnimationRootComponent(roomleComponent: RoomleComponent): boolean;
5879
+ changePlanObjectParameter(runtimeId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
5880
+ changePlanObjectsParameter(runtimeIds: number[], parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
5881
+ changeComponentParameter(componentId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
5793
5882
  }
5794
5883
 
5795
5884
  export declare interface PlannerKernelCallbackI {
@@ -5912,7 +6001,7 @@ export declare class PlannerSceneEventHandler extends SceneEventHandler<SceneEve
5912
6001
  private _currentPlanMeasure;
5913
6002
  constructor(creator: string, scene: Scene, camera: Camera, inputManager: InputManager);
5914
6003
  disable(): void;
5915
- get planInteractionHandler(): PlanInteractionHandler;
6004
+ get planInteractionManager(): PlanInteractionManager;
5916
6005
  get planModelViewHelper(): PlanModelViewHelper_2;
5917
6006
  get hoveredObjectId(): number | null;
5918
6007
  get isCurrentlyDrawing(): boolean;
@@ -6185,6 +6274,8 @@ export declare class PlannerSceneManager extends ConfiguratorSceneManager implem
6185
6274
  private _hideAllNodeIfThereAreNoSelections;
6186
6275
  protected _onCameraMove(): boolean;
6187
6276
  private _showWallNodes;
6277
+ private _applyFenceNodeStyle;
6278
+ private _shouldKeepFenceNodesVisible;
6188
6279
  private _updateNodeSize;
6189
6280
  private _sendPlanObjectPositions;
6190
6281
  private _sendMultiSelectionPosition;
@@ -6479,6 +6570,7 @@ export declare class PlanViewModel extends ConfiguratorViewModel implements Plan
6479
6570
  private commonHandlerForEditableAndTopView;
6480
6571
  isChildObjectRootComponent(roomleComponent: RoomleComponent): boolean;
6481
6572
  protected dockComponent(componentDocking: KernelComponentDocking): void;
6573
+ private _isConstructionElement;
6482
6574
  protected _addComponent(component: RoomleComponent): void;
6483
6575
  private _getPlanObjectViewModelForRuntimeId;
6484
6576
  getConfigurablePlanObjectForId(id: number): ConfiguratorPlanObjectViewModel | null;
@@ -6656,6 +6748,8 @@ export declare interface PosDockedContextRoot {
6656
6748
  id: string;
6657
6749
  dockingVector: PosDock | string;
6658
6750
  dockingVectorIndex: number;
6751
+ mode?: PosDockMode | string;
6752
+ offset?: number[];
6659
6753
  }
6660
6754
 
6661
6755
  export declare interface PosDockInfo {
@@ -6664,6 +6758,8 @@ export declare interface PosDockInfo {
6664
6758
  end: number[];
6665
6759
  }
6666
6760
 
6761
+ export declare type PosDockMode = 'StartStart' | 'EndEnd' | 'StartEnd' | 'EndStart';
6762
+
6667
6763
  export declare interface PosErrorMsg {
6668
6764
  category: LogMessageCategoryType;
6669
6765
  msg: string;
@@ -6728,6 +6824,19 @@ export declare interface PosGroup {
6728
6824
  * Optional the attributes of this group
6729
6825
  */
6730
6826
  attributes?: PosModuleAttribute[];
6827
+ /**
6828
+ * Optional repositioning data created by the group orchestrator's
6829
+ * groupAdjust; used to recalculate pos/rotationY after arranging
6830
+ */
6831
+ repositioningData?: PosGroupPositioningData;
6832
+ }
6833
+
6834
+ export declare interface PosGroupPositioningData {
6835
+ posGroup: number[];
6836
+ posRotationY?: number;
6837
+ rootId: string;
6838
+ rootRelPos?: number[];
6839
+ rootRelRotationY?: number;
6731
6840
  }
6732
6841
 
6733
6842
  export declare interface PosInsertLevelInfo {
@@ -8788,8 +8897,8 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
8788
8897
  private _globalInitData;
8789
8898
  private _globalCallback;
8790
8899
  private _unitFormatter;
8900
+ private _planInteractionManager;
8791
8901
  private _elevationPlan2dGenerator;
8792
- private _planInteractionHandler;
8793
8902
  private _sceneManager;
8794
8903
  private _plan;
8795
8904
  private _preloadPlanId;
@@ -8911,7 +9020,7 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
8911
9020
  pauseTest(): void;
8912
9021
  syncCatalog(catalogId: string): Promise<void>;
8913
9022
  loadError(error?: any): void;
8914
- getPlanInteractionHandler(): Promise<PlanInteractionHandler>;
9023
+ getPlanInteractionManager(): Promise<PlanInteractionManager>;
8915
9024
  getPlanModelViewHelper(): Promise<PlanModelViewHelper_2>;
8916
9025
  /**
8917
9026
  * Inserts the object into the scene (at a given position and rotation)
@@ -8956,6 +9065,12 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
8956
9065
  * get all info available for the current plan, including objects, rooms and walls
8957
9066
  */
8958
9067
  getPlanOverview(): Promise<PlanOverview>;
9068
+ /**
9069
+ * get the construction overview of the current plan, including the
9070
+ * construction objects (construction, doors and windows) and their combined
9071
+ * bill of materials
9072
+ */
9073
+ getConstructionOverview(): Promise<ConstructionOverview>;
8959
9074
  /**
8960
9075
  * Generates a top image (birds eye view) and returns it as base64
8961
9076
  * @param options
@@ -9196,12 +9311,6 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9196
9311
  */
9197
9312
  selectProduct(planElementId: number, configurationId: number | null, contextAction: HiContextAction): Promise<void>;
9198
9313
  /* Excluded from this release type: globalCallbacks */
9199
- /**
9200
- * Handles interaction with the planner kernel, ensuring start and end interaction are tracked.
9201
- * @param action A function representing the action to perform.
9202
- * @returns The result of the action, if any.
9203
- */
9204
- private _executeWithInteraction;
9205
9314
  /**
9206
9315
  * Creates a sloping roof attic on a given wall.
9207
9316
  * @param wall The wall to add an attic to.
@@ -9240,8 +9349,7 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9240
9349
  */
9241
9350
  updateAtticWidth(attic: KernelAttic, width: number): void;
9242
9351
  /**
9243
- * Runs a given function with a call to start and end interaction in the planInteractionHandler,
9244
- * this should be used when you want to add a history step after interacting with the plan.
9352
+ * Runs a callback as one atomic interaction step.
9245
9353
  * @param callback any function.
9246
9354
  */
9247
9355
  executeWithInteraction<T>(callback: MaybePromise<T>): Promise<T>;
@@ -9342,7 +9450,7 @@ export declare class RoomlePlannerUiCallback extends UiCallback implements Exter
9342
9450
  onCameraChanged: (type: Enumify_4<typeof CAMERA_TYPE>) => void;
9343
9451
  onCameraIdle: () => void;
9344
9452
  onTotalFloorAreaChanged: (totalFloorArea: number) => void;
9345
- onPlanInteractionHandlerCreated: (planInteractionHandler: PlanInteractionHandler) => void;
9453
+ onPlanInteractionManagerCreated: (planInteractionManager: PlanInteractionManager) => void;
9346
9454
  /**
9347
9455
  * is called when the planner kernel is ready. It returns the container and the instance
9348
9456
  * @param kernelContainer
@@ -9992,6 +10100,197 @@ export declare class StaticPlanObjectViewModel extends PlanObjectViewModel {
9992
10100
  update(): void;
9993
10101
  }
9994
10102
 
10103
+ export declare const STEP_GROUPS: {
10104
+ readonly move: {
10105
+ readonly finalize: "on-signal";
10106
+ readonly methods: ["moveElementTo", "moveElementToIn2d", "moveElementBy", "moveObjectsBy"];
10107
+ };
10108
+ readonly rotate: {
10109
+ readonly finalize: "immediate";
10110
+ readonly methods: ["rotateObjectTo", "setObjectRotation", "rotateObjectsBy", "rotateGroupBy"];
10111
+ };
10112
+ readonly wallHeight: {
10113
+ readonly finalize: "on-signal";
10114
+ readonly methods: ["setWallHeight"];
10115
+ };
10116
+ readonly wallLength: {
10117
+ readonly finalize: "on-signal";
10118
+ readonly methods: ["setLengthOfEdge2D"];
10119
+ };
10120
+ readonly wallThickness: {
10121
+ readonly finalize: "on-signal";
10122
+ readonly methods: ["setWallThickness"];
10123
+ };
10124
+ readonly objectSize: {
10125
+ readonly finalize: "immediate";
10126
+ readonly methods: ["setObjectSize"];
10127
+ };
10128
+ readonly floorLabelObject: {
10129
+ readonly finalize: "immediate";
10130
+ readonly methods: ["setFloorLabelObject"];
10131
+ };
10132
+ readonly roomParapetHeight: {
10133
+ readonly finalize: "on-signal";
10134
+ readonly methods: ["setRoomParapetHeight"];
10135
+ };
10136
+ readonly measure: {
10137
+ readonly finalize: "on-signal";
10138
+ readonly methods: ["setMeasurePoint1", "setMeasurePoint2"];
10139
+ };
10140
+ readonly remove: {
10141
+ readonly finalize: "immediate";
10142
+ readonly methods: ["removeElement", "removeObjectWithId"];
10143
+ };
10144
+ readonly duplicate: {
10145
+ readonly finalize: "immediate";
10146
+ readonly methods: ["duplicatePlanObject", "duplicatePlanObjects"];
10147
+ };
10148
+ readonly visibility: {
10149
+ readonly finalize: "immediate";
10150
+ readonly methods: ["setElementVisibility"];
10151
+ };
10152
+ readonly addObjects: {
10153
+ readonly finalize: "immediate";
10154
+ readonly methods: ["addPlanObjects"];
10155
+ };
10156
+ readonly addObjectFromItem: {
10157
+ readonly finalize: "immediate";
10158
+ readonly methods: ["addPlanObjectFromItem"];
10159
+ };
10160
+ readonly merge: {
10161
+ readonly finalize: "immediate";
10162
+ readonly methods: ["mergeObjects"];
10163
+ };
10164
+ readonly group: {
10165
+ readonly finalize: "immediate";
10166
+ readonly methods: ["groupObjects"];
10167
+ };
10168
+ readonly drawing: {
10169
+ readonly finalize: "on-signal";
10170
+ readonly methods: ["beginDrawing", "addNode", "addWall"];
10171
+ };
10172
+ readonly addAttic: {
10173
+ readonly finalize: "immediate";
10174
+ readonly methods: ["addAttic"];
10175
+ };
10176
+ readonly atticSide: {
10177
+ readonly finalize: "immediate";
10178
+ readonly methods: ["setAtticSide"];
10179
+ };
10180
+ readonly atticKneeHeight: {
10181
+ readonly finalize: "immediate";
10182
+ readonly methods: ["setAtticKneeHeight"];
10183
+ };
10184
+ readonly atticWidth: {
10185
+ readonly finalize: "immediate";
10186
+ readonly methods: ["setAtticWidth"];
10187
+ };
10188
+ readonly defaultWallThickness: {
10189
+ readonly finalize: "on-signal";
10190
+ readonly methods: ["setDefaultWallThickness"];
10191
+ };
10192
+ readonly defaultWallHeight: {
10193
+ readonly finalize: "on-signal";
10194
+ readonly methods: ["setDefaultWallHeight"];
10195
+ };
10196
+ readonly defaultParapetHeight: {
10197
+ readonly finalize: "on-signal";
10198
+ readonly methods: ["setDefaultParapetHeight"];
10199
+ };
10200
+ readonly defaultExteriorWallMaterial: {
10201
+ readonly finalize: "on-signal";
10202
+ readonly idleCommitMs: 3000;
10203
+ readonly methods: ["setDefaultExteriorWallMaterial"];
10204
+ };
10205
+ readonly defaultInteriorWallMaterial: {
10206
+ readonly finalize: "on-signal";
10207
+ readonly idleCommitMs: 3000;
10208
+ readonly methods: ["setDefaultInteriorWallMaterial"];
10209
+ };
10210
+ readonly defaultFloorMaterial: {
10211
+ readonly finalize: "on-signal";
10212
+ readonly idleCommitMs: 3000;
10213
+ readonly methods: ["setDefaultFloorMaterial"];
10214
+ };
10215
+ readonly customDataJson: {
10216
+ readonly finalize: "immediate";
10217
+ readonly methods: ["setElementCustomDataJson"];
10218
+ };
10219
+ readonly wallLeftMaterial: {
10220
+ readonly finalize: "on-signal";
10221
+ readonly idleCommitMs: 3000;
10222
+ readonly methods: ["setWallLeftMaterial"];
10223
+ };
10224
+ readonly wallRightMaterial: {
10225
+ readonly finalize: "on-signal";
10226
+ readonly idleCommitMs: 3000;
10227
+ readonly methods: ["setWallRightMaterial"];
10228
+ };
10229
+ readonly floorMaterial: {
10230
+ readonly finalize: "on-signal";
10231
+ readonly idleCommitMs: 3000;
10232
+ readonly methods: ["setFloorMaterial"];
10233
+ };
10234
+ readonly floorType: {
10235
+ readonly finalize: "immediate";
10236
+ readonly methods: ["setFloorType"];
10237
+ };
10238
+ readonly edgeType: {
10239
+ readonly finalize: "immediate";
10240
+ readonly methods: ["setEdgeType"];
10241
+ };
10242
+ readonly objectFlipX: {
10243
+ readonly finalize: "immediate";
10244
+ readonly methods: ["setObjectFlipX"];
10245
+ };
10246
+ readonly objectFlipY: {
10247
+ readonly finalize: "immediate";
10248
+ readonly methods: ["setObjectFlipY"];
10249
+ };
10250
+ readonly objectCustomColor: {
10251
+ readonly finalize: "immediate";
10252
+ readonly methods: ["setObjectCustomColor"];
10253
+ };
10254
+ readonly objectCustomLabel: {
10255
+ readonly finalize: "immediate";
10256
+ readonly methods: ["setObjectCustomLabel"];
10257
+ };
10258
+ readonly objectFixedZ: {
10259
+ readonly finalize: "immediate";
10260
+ readonly methods: ["setObjectFixedZ"];
10261
+ };
10262
+ readonly addMeasure: {
10263
+ readonly finalize: "immediate";
10264
+ readonly methods: ["addMeasure"];
10265
+ };
10266
+ readonly parameterChange: {
10267
+ readonly finalize: "on-signal";
10268
+ readonly idleCommitMs: 3000;
10269
+ readonly methods: ["applyKernelParameterChange"];
10270
+ };
10271
+ readonly addOrUpdateExternal: {
10272
+ readonly finalize: "immediate";
10273
+ readonly methods: ["addOrUpdateExternalPlanObjects"];
10274
+ };
10275
+ readonly constructionBubbleEdit: {
10276
+ readonly finalize: "immediate";
10277
+ readonly methods: ["adjustConstructionElementPosition"];
10278
+ };
10279
+ readonly objectBubbleEdit: {
10280
+ readonly finalize: "immediate";
10281
+ readonly methods: ["adjustObjectPosition"];
10282
+ };
10283
+ readonly objectToWallDistanceBubbleEdit: {
10284
+ readonly finalize: "immediate";
10285
+ readonly methods: ["adjustObjectToWallDistance"];
10286
+ };
10287
+ };
10288
+
10289
+ /** The label recorded for an open/held step — what the policy compares. A step-group
10290
+ * name (from run()/transaction()) or a synthetic label. Method names are dispatch
10291
+ * INPUT, not labels; run() maps them to a group (buildDispatchTable). */
10292
+ export declare type StepLabel = keyof typeof STEP_GROUPS | SyntheticStepLabel;
10293
+
9995
10294
  export declare class StringArray extends EmsArray<string> {
9996
10295
  }
9997
10296
 
@@ -10000,6 +10299,10 @@ export declare interface SubComponentWaiter {
10000
10299
  partId: number;
10001
10300
  }
10002
10301
 
10302
+ /** Step labels not derived from a dispatched method: held-phase / transaction labels
10303
+ * plus 'adhoc' (the run() fallback). Recorded only, never called on the handler. */
10304
+ export declare type SyntheticStepLabel = 'txn' | 'drawingMode' | 'configuratorMode' | 'externalObjectLoadStart' | 'insertItems' | 'replaceObject' | 'wallHeightBatch' | 'wallThicknessBatch' | 'wallMaterialBatch' | 'adhoc';
10305
+
10003
10306
  export declare type ThreeJsColorsIn3dScene = Record<keyof typeof ROOMLE_COLORS, Color>;
10004
10307
 
10005
10308
  /**
@@ -10112,6 +10415,78 @@ export declare interface UiPossibleChildTag extends RapiTag {
10112
10415
  possibleChildren: UiPossibleChild[];
10113
10416
  }
10114
10417
 
10418
+ /**
10419
+ * Two-class split, and the source of truth for `InteractionMethodName`: everything on
10420
+ * UndoRedoHandler is Excluded from it (see types.ts).
10421
+ *
10422
+ * Where does a method go? Does its body wrap a core call in `this.run(...)`?
10423
+ * • Yes → PlanInteractionHandlerExtension (subclass): opens a tracked step, so it
10424
+ * may be classified in STEP_GROUPS and dispatched (adjust*,
10425
+ * applyKernelParameterChange, addOrUpdateExternalPlanObjects).
10426
+ * • No → UndoRedoHandler (here): step machinery (run, commit, transaction, held-
10427
+ * phase controls, dispose) and boundary ops that only reset/commit around a core
10428
+ * call (undo/redo, loadPlanXML, endDrawing, …). Never dispatched.
10429
+ */
10430
+ export declare class UndoRedoHandler {
10431
+ private _disposed;
10432
+ protected _handler: PlanInteractionHandler;
10433
+ private _state;
10434
+ private _pendingContinuations;
10435
+ private _commitWhenSettled;
10436
+ private _idleCommitTimer;
10437
+ constructor(handler: PlanInteractionHandler);
10438
+ dispose(): void;
10439
+ private _scheduleIdleCommit;
10440
+ private _clearIdleCommit;
10441
+ get isDisposed(): boolean;
10442
+ run<T>(methodName: InteractionMethodName, args: unknown[], apply: () => T): T;
10443
+ commit(): void;
10444
+ clearHistory(): void;
10445
+ private reset;
10446
+ undo(): void;
10447
+ redo(): void;
10448
+ loadPlanXML(xml: string): Plan_2;
10449
+ createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
10450
+ endDrawing(point: {
10451
+ x: number;
10452
+ y: number;
10453
+ z: number;
10454
+ }): void;
10455
+ cancelDrawing(): void;
10456
+ private _hold;
10457
+ private _release;
10458
+ manageExternalObjectLoadingStart(reason?: string): void;
10459
+ resumeExternalObjectLoading(reason?: string): void;
10460
+ manageExternalObjectLoadingEnd(shouldEnd?: boolean): void;
10461
+ startConfiguringMode(): void;
10462
+ endConfiguringMode(): void;
10463
+ beginContinuousOperation(): void;
10464
+ endContinuousOperation(): void;
10465
+ endContinuousOperationIfHeld(): void;
10466
+ transaction<T>(fn: () => T | Promise<T>, opts?: {
10467
+ newStep?: boolean;
10468
+ label?: StepLabel;
10469
+ id?: string | number;
10470
+ finalize?: FinalizeMode;
10471
+ idleCommitMs?: number;
10472
+ }): Promise<T>;
10473
+ manageItemInsertion<T>(callback: () => T | Promise<T>, newUndoRedoStep?: boolean, finalize?: FinalizeMode): Promise<T>;
10474
+ /**
10475
+ * Explicit product-swap primitive: pins one interaction across a remove
10476
+ * followed by an add so the pair always lands as a single undo/redo step,
10477
+ * regardless of either half's own finalize policy. `perform` is expected to
10478
+ * end with an operation that owns its own release (e.g. the catalog flow's
10479
+ * `manageItemInsertion`, or the HI flow's reason-driven
10480
+ * `manageExternalObjectLoadingEnd`) — that release performs the actual
10481
+ * commit. The `finally` below is a safety net: it only fires if `perform`
10482
+ * never reached that release (it threw, or simply never triggered one),
10483
+ * so the manager can't get stuck held.
10484
+ */
10485
+ replaceObject<T>(elementId: string | number, perform: () => T | Promise<T>): Promise<T>;
10486
+ expectContinuation(): void;
10487
+ onCoreLoad(reason: HiLoadObjectReason): void;
10488
+ }
10489
+
10115
10490
  export declare const enum Unit {
10116
10491
  InchFeet = 0,
10117
10492
  MM = 1,
@@ -10329,7 +10704,7 @@ export declare class WallPlanElementViewModel extends PlanElementViewModel {
10329
10704
  constructor(planObject: PlanObject);
10330
10705
  get isSelected(): boolean;
10331
10706
  private _checkHasAttachedAttic;
10332
- getWallDimension(zoomFactor: number, clientWidth: number, clientHeight: number): WallDimension;
10707
+ getWallDimension(zoomFactor: number, clientWidth: number, clientHeight: number, preferredSideOverride?: LeftOrRightWallSide): WallDimension;
10333
10708
  private calculateNormalVector;
10334
10709
  private calculateShiftingFactor;
10335
10710
  private calculateAtticInfo;