@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_2<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
  }
@@ -3110,6 +3121,8 @@ export declare interface ExternalObjectDockedRootModule {
3110
3121
  dockingVector: string;
3111
3122
  dockingVectorIndex: number;
3112
3123
  id: string;
3124
+ mode: string;
3125
+ offset: number[];
3113
3126
  }
3114
3127
 
3115
3128
  export declare interface ExternalObjectGroup {
@@ -3159,6 +3172,7 @@ export declare interface ExternalObjectGroupLayoutSide {
3159
3172
  export declare interface ExternalObjectLoadConfiguration {
3160
3173
  applyGlobalChildMode: boolean;
3161
3174
  correctArrangement: boolean;
3175
+ applyGroupPosition: boolean;
3162
3176
  findFreeSpaceInPlan: boolean;
3163
3177
  isVisible: boolean;
3164
3178
  respondWithPositionInPlan: boolean;
@@ -3339,6 +3353,8 @@ export declare interface FetchOptions {
3339
3353
  embed?: RAPI_PATHS[];
3340
3354
  }
3341
3355
 
3356
+ export declare type FinalizeMode = 'immediate' | 'on-signal';
3357
+
3342
3358
  export declare abstract class Floor extends PlanElement {
3343
3359
  area: number;
3344
3360
  material: FloorMaterial;
@@ -3359,6 +3375,12 @@ export declare interface FloorAreaData<Vector2Type = Vector3, Vector3Type = Vect
3359
3375
 
3360
3376
  export declare type FloorAreaDataTransferable = FloorAreaData<Position2, Position3>;
3361
3377
 
3378
+ export declare interface FloorCluster {
3379
+ floors: Floor[];
3380
+ area: number;
3381
+ labelPosition: KernelVector3f;
3382
+ }
3383
+
3362
3384
  export declare class FloorMaterial extends BaseMaterial {
3363
3385
  uvScale(): KernelVector3f;
3364
3386
  rotation(): KernelVector3f;
@@ -3628,6 +3650,140 @@ export declare interface GlueLogic {
3628
3650
  getMaterialUrl(materialId: string, groupOrModuleId?: string): string | null;
3629
3651
  }
3630
3652
 
3653
+ /**
3654
+ * Hand-typed overrides of core handler methods, re-typed against our model types
3655
+ * (PlanObject, KernelObject, …) which differ from core's. Everything not listed here
3656
+ * is inherited from the real core type — see PlanInteractionHandler below.
3657
+ */
3658
+ export declare interface HandWrittenPlanInteractionHandler {
3659
+ /** embind cleanup — frees the underlying C++ instance. */
3660
+ delete(): void;
3661
+ init(reference: HandWrittenPlanInteractionHandler, zoomFactor: number, viewSnapDist: number, wallSnapMode: any, objectSnapMode: any, shouldSnap: boolean, drawingType: any): void;
3662
+ getConfiguratorKernel(): ConfiguratorKernelClass;
3663
+ loadPlanXML(xml: string): Plan_2;
3664
+ createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
3665
+ getPlan(): Plan_2;
3666
+ moveElementTo(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean, cameraPosition?: KernelVector3): void;
3667
+ moveElementToIn2d(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean): void;
3668
+ moveElementBy(planObject: KernelObject, distance: KernelVector3, dragging: boolean): void;
3669
+ duplicatePlanObject(object: PlanObject, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
3670
+ duplicatePlanObjects(objects: PlanObjectList, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
3671
+ setElementVisibility(element: PlanElement_2, isVisible: boolean): void;
3672
+ moveObjectsBy(planObjects: KernelObjectPtrList, distance: KernelVector3): void;
3673
+ rotateObjectTo(planObject: KernelObject, angleInRad: number): void;
3674
+ setObjectRotation(planObject: KernelObject, angleInRad: number): void;
3675
+ addPlanObjects(list: KernelObjectPtrList, findFreeSpaceInPlan: boolean): PlanObject[];
3676
+ addPlanObjectFromItem(object: KernelObject, position: KernelVector3, type: number, findFreeSpaceInPlan: boolean): PlanObject;
3677
+ addOrUpdateExternalPlanObjects(serializedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: ExternalObjectLoadConfiguration, mergedGroupIds: string | string[]): PlanObject[];
3678
+ createPreviewGeometryForAddOn(objectId: string, objectConfiguration: string, articleId: string, groupDefinitions: string, validContainerModules: ExternalValidContainerModule[]): void;
3679
+ catalogItemLoaded(catalogItem: KernelCatalogItem): void;
3680
+ removeElement(planObject: KernelObject): void;
3681
+ removeObjectWithId(objectId: string): void;
3682
+ mergeObjects(objects: PlanObjectList): void;
3683
+ groupObjects(planObjectPtrList: PlanObjectList): ObjectGroupPtr;
3684
+ rotateObjectsBy(planObjectPtrList: PlanObjectList, anAngleInRad: number, aroundPoint: KernelVector3): void;
3685
+ rotateGroupBy(group: ObjectGroupPtr, anAngleInRad: number, aroundPoint: KernelVector3): void;
3686
+ deactivateAllSnappingActivity(): void;
3687
+ reactivateAllSnappingActivity(): void;
3688
+ isUndoPossible(): boolean;
3689
+ isRedoPossible(): boolean;
3690
+ clearHistory(): void;
3691
+ startInteraction(): void;
3692
+ resumeInteraction(): void;
3693
+ endInteraction(): void;
3694
+ undo(): void;
3695
+ redo(): void;
3696
+ isVectorPreviewModeEnabled(): boolean;
3697
+ getDrawingMode(): DrawingMode;
3698
+ beginDrawing(point: {
3699
+ x: number;
3700
+ y: number;
3701
+ z: number;
3702
+ }, drawingMode: DrawingMode, createUnclosedSpace: boolean): void;
3703
+ endDrawing(point: {
3704
+ x: number;
3705
+ y: number;
3706
+ z: number;
3707
+ }): void;
3708
+ cancelDrawing(): void;
3709
+ addNode(point: {
3710
+ x: number;
3711
+ y: number;
3712
+ z: number;
3713
+ }): PlanNode;
3714
+ addWall(from: PlanNode, to: PlanNode): KernelWall;
3715
+ setWallHeight(wall: KernelWall, height: number): void;
3716
+ setLengthOfEdge2D(wall: KernelWall, length: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
3717
+ setLengthOfSlopingEdge(wall: KernelWall, slopingLength: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
3718
+ setWallThickness(wall: KernelWall, thickness: number): void;
3719
+ addAttic(wall: KernelWall, kneeHeight: number, width: number, side: WallSide | null | undefined): KernelAttic;
3720
+ setAtticSide(attic: KernelAttic, side: WallSide): void;
3721
+ setAtticKneeHeight(attic: KernelAttic, kneeHeight: number): void;
3722
+ setAtticWidth(attic: KernelAttic, width: number): void;
3723
+ currentDrawingPosition(point: {
3724
+ x: number;
3725
+ y: number;
3726
+ z: number;
3727
+ }): void;
3728
+ forceNode(point: {
3729
+ x: number;
3730
+ y: number;
3731
+ z: number;
3732
+ }): void;
3733
+ setDrawingType(aNewDrawingType: DrawingType): void;
3734
+ setZoomFactor(pxPerMM: number): void;
3735
+ setViewSnapDist(aDist: number): void;
3736
+ setRotationSnapAngle(angleInRadians: number): void;
3737
+ setDefaultWallThickness(wallThickness: number, applyToAll: boolean): void;
3738
+ setDefaultWallHeight(wallHeight: number, applyToAll: boolean): void;
3739
+ setDefaultParapetHeight(parapetHeight: number, applyToAll: boolean): void;
3740
+ setRoomParapetHeight(floor: KernelFloor, parapetHeight: number): void;
3741
+ getDefaultExteriorWallMaterial(): KernelWallMaterial;
3742
+ setDefaultExteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
3743
+ getDefaultInteriorWallMaterial(): KernelWallMaterial;
3744
+ setDefaultInteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
3745
+ getDefaultFloorMaterial(): KernelFloorMaterial;
3746
+ setDefaultFloorMaterial(floorMaterial: KernelFloorMaterial): void;
3747
+ setElementCustomDataJson(element: PlanElement_2, customDataJson: string): void;
3748
+ setWallLeftMaterial(wall: KernelWall, material: KernelWallMaterial): void;
3749
+ setWallRightMaterial(wall: KernelWall, material: KernelWallMaterial): void;
3750
+ setFloorMaterial(floor: KernelFloor, material: KernelFloorMaterial): void;
3751
+ setFloorLabelObject(floor: KernelFloor, serializedLabelObject: string): void;
3752
+ setFloorType(floor: KernelFloor, floorType: FloorType): void;
3753
+ setEdgeType(wall: KernelWall, edgeType: EdgeType): void;
3754
+ getContinuousDrawingManager(): ContinuousDrawingManager;
3755
+ setSnapFeedbackWhileDrawing(enabled: boolean): void;
3756
+ consistsOfMergedComponents(object: KernelObject): boolean;
3757
+ setObjectSize(anObject: KernelObject, aNewSize: KernelVector3, anAnchor: Anchor): void;
3758
+ setObjectFlipX(anObject: KernelObject, shouldFlipX: boolean): void;
3759
+ setObjectFlipY(anObject: KernelObject, shouldFlipY: boolean): void;
3760
+ setObjectCustomColor(object: PlanObject, rgbColor: number, useCustomColor: boolean): void;
3761
+ setObjectCustomLabel(object: PlanObject, label: string): void;
3762
+ setObjectFixedZ(anObject: KernelObject, shouldFlipZ: boolean): void;
3763
+ setMeasurePoint1(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
3764
+ setMeasurePoint2(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
3765
+ addMeasure(startPosition: KernelVector3f, endPosition: KernelVector3f): PlanMeasure_2;
3766
+ setDiscardExternalObjectsOnLoad(discard: boolean): void;
3767
+ isChildObjectModePossible(object: KernelObject): boolean;
3768
+ isEnabledChildObjectMode(object: KernelObject): boolean;
3769
+ enableChildObjects(object: KernelObject, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
3770
+ disableChildObjects(object: KernelObject): KernelObject;
3771
+ enableChildObjectsOfExternalObject(objectId: string, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
3772
+ disableChildObjectsOfExternalObject(objectId: string): KernelObject;
3773
+ disableChildObjectsOfAllPlanObjects(): void;
3774
+ setAutomatedWallHeight(wall: KernelWall, value: boolean): void;
3775
+ unit: string;
3776
+ enableRaster: boolean;
3777
+ customRaster: number;
3778
+ enableSnap: boolean;
3779
+ enableDrawingSnap: boolean;
3780
+ objectToWallSnapMode: SnapMode;
3781
+ objectToObjectSnapMode: SnapMode;
3782
+ dockWhenSnap: boolean;
3783
+ unDockOnMove: boolean;
3784
+ enableTerrain: boolean;
3785
+ }
3786
+
3631
3787
  export declare class HdrEnvironmentLoader implements Context {
3632
3788
  _creator_: string;
3633
3789
  private _environmentMap;
@@ -3889,6 +4045,14 @@ export declare type HiAttributeOptionsResult = CheckDropDownResult | CheckDropDo
3889
4045
 
3890
4046
  export declare type HiContextAction = (typeof HI_CONTEXT_ACTION)[keyof typeof HI_CONTEXT_ACTION];
3891
4047
 
4048
+ /**
4049
+ * Lifecycle methods internal to PlanInteractionManager — it drives them itself,
4050
+ * external code must not. Single source for both the runtime guard (HIDDEN_LIFECYCLE)
4051
+ * and the compile-time Omit in the PlanInteractionManager type. `satisfies` keeps
4052
+ * every entry a real handler method.
4053
+ */
4054
+ export declare const HIDDEN_INTERACTION_LIFECYCLE_METHODS: readonly ["startInteraction", "resumeInteraction", "endInteraction"];
4055
+
3892
4056
  export declare interface HighlightHelper {
3893
4057
  init(object: Object3D, camera: PerspectiveCamera): void;
3894
4058
  setCamera(camera: PerspectiveCamera): void;
@@ -4305,6 +4469,8 @@ export declare class IntArray extends EmsArray<number> {
4305
4469
  export declare class IntArray_2 extends EmsArray<number> {
4306
4470
  }
4307
4471
 
4472
+ export declare type InteractionMethodName = Exclude<keyof PlanInteractionManager, keyof UndoRedoHandler>;
4473
+
4308
4474
  export declare interface InteractionOptions {
4309
4475
  keepInteractionOpen?: boolean;
4310
4476
  }
@@ -4318,6 +4484,8 @@ export declare const isExternalObject: (someThing: unknown) => someThing is Exte
4318
4484
 
4319
4485
  export declare const isExtObjId: (id: unknown) => id is ExtObjId_2;
4320
4486
 
4487
+ export declare const isFirefox: () => boolean;
4488
+
4321
4489
  export declare const isSafari: () => boolean;
4322
4490
 
4323
4491
  export declare const KERNEL_MESSAGE_TYPE: {
@@ -4632,7 +4800,7 @@ export declare interface KernelParameter {
4632
4800
  viewType: KernelViewType;
4633
4801
  source: 'external' | 'internal';
4634
4802
  level?: number;
4635
- objectIds: number[];
4803
+ objectIds?: number[];
4636
4804
  }
4637
4805
 
4638
4806
  export declare interface KernelParameterGroup {
@@ -5276,19 +5444,23 @@ export declare interface NodeDimensionTransferable {
5276
5444
  }
5277
5445
 
5278
5446
  export declare class NodePlanElementViewModel extends PlanElementViewModel {
5279
- private _nodeUiMesh;
5447
+ protected _nodeUiMesh: DraggableNode;
5448
+ protected _defaultRingColor: number;
5280
5449
  constructor(planObject: PlanObject);
5281
5450
  update(): void;
5282
5451
  setTopView(enabled: boolean): void;
5283
5452
  getSize(): Vector3;
5284
5453
  show(): void;
5285
5454
  hide(): void;
5455
+ protected getSelectionRingColor(): number;
5286
5456
  select(): void;
5287
5457
  deselect(): void;
5288
5458
  hoverOn(): void;
5289
5459
  hoverOff(): void;
5290
5460
  protected _generateBoundingBox(): RoomleEventedMesh;
5291
5461
  setZoom(zoom: number): void;
5462
+ setFillColor(color: number): void;
5463
+ setDefaultRingColor(color: number): void;
5292
5464
  }
5293
5465
 
5294
5466
  export declare interface NodePlanObject extends PlanObject {
@@ -5627,133 +5799,33 @@ export declare abstract class PlanImage extends PlanElement {
5627
5799
  center: KernelVector3f;
5628
5800
  }
5629
5801
 
5630
- export declare interface PlanInteractionHandler {
5631
- init(reference: PlanInteractionHandler, zoomFactor: number, viewSnapDist: number, wallSnapMode: any, objectSnapMode: any, shouldSnap: boolean, drawingType: any): PlanInteractionHandler;
5632
- getConfiguratorKernel(): ConfiguratorKernelClass;
5633
- loadPlanXML(xml: string): Plan_2;
5634
- createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
5635
- getPlan(): Plan_2;
5636
- moveElementTo(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean, cameraPosition?: KernelVector3): void;
5637
- moveElementToIn2d(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean): void;
5638
- moveElementBy(planObject: KernelObject, distance: KernelVector3, dragging: boolean): void;
5639
- duplicatePlanObject(object: PlanObject, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
5640
- duplicatePlanObjects(objects: PlanObjectList, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
5641
- setElementVisibility(element: PlanElement_2, isVisible: boolean): void;
5642
- moveObjectsBy(planObjects: KernelObjectPtrList, distance: KernelVector3): void;
5643
- rotateObjectTo(planObject: KernelObject, angleInRad: number): void;
5644
- setObjectRotation(planObject: KernelObject, angleInRad: number): void;
5645
- addPlanObjects(list: KernelObjectPtrList, findFreeSpaceInPlan: boolean): PlanObject[];
5646
- addPlanObjectFromItem(object: KernelObject, position: KernelVector3, type: number, findFreeSpaceInPlan: boolean): PlanObject;
5647
- addOrUpdateExternalPlanObjects(serialzedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: ExternalObjectLoadConfiguration, mergedGroupIds: string | string[]): PlanObject[];
5648
- createPreviewGeometryForAddOn(objectId: string, objectConfiguration: string, articleId: string, groupDefinitions: string, validContainerModules: ExternalValidContainerModule[]): void;
5649
- catalogItemLoaded(catalogItem: KernelCatalogItem): void;
5650
- removeElement(planObject: KernelObject): void;
5651
- removeObjectWithId(objectId: string): void;
5652
- mergeObjects(objects: PlanObjectList): void;
5653
- groupObjects(planObjectPtrList: PlanObjectList): ObjectGroupPtr;
5654
- rotateObjectsBy(planObjectPtrList: PlanObjectList, anAngleInRad: number, aroundPoint: KernelVector3): void;
5655
- rotateGroupBy(group: ObjectGroupPtr, anAngleInRad: number, aroundPoint: KernelVector3): void;
5656
- deactivateAllSnappingActivity(): void;
5657
- reactivateAllSnappingActivity(): void;
5658
- isUndoPossible(): boolean;
5659
- isRedoPossible(): boolean;
5660
- clearHistory(): void;
5661
- startInteraction(): void;
5662
- resumeInteraction(): void;
5663
- endInteraction(): void;
5664
- undo(): void;
5665
- redo(): void;
5666
- isVectorPreviewModeEnabled(): boolean;
5667
- getDrawingMode(): DrawingMode;
5668
- sCreateUnclosedSpaceEnabled(): boolean;
5669
- beginDrawing(point: {
5670
- x: number;
5671
- y: number;
5672
- z: number;
5673
- }, drawingMode: DrawingMode, createUnclosedSpace: boolean): void;
5674
- endDrawing(point: {
5675
- x: number;
5676
- y: number;
5677
- z: number;
5678
- }): void;
5679
- cancelDrawing(): void;
5680
- addNode(point: {
5681
- x: number;
5682
- y: number;
5683
- z: number;
5684
- }): PlanNode;
5685
- addWall(from: PlanNode, to: PlanNode): KernelWall;
5686
- setWallHeight(wall: KernelWall, height: number): void;
5687
- setLengthOfEdge2D(wall: KernelWall, length: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
5688
- setLengthOfSlopingEdge(wall: KernelWall, slopingLength: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
5689
- setWallThickness(wall: KernelWall, thickness: number): void;
5690
- addAttic(wall: KernelWall, kneeHeight: number, width: number, side: WallSide | null | undefined): KernelAttic;
5691
- setAtticSide(attic: KernelAttic, side: WallSide): void;
5692
- setAtticKneeHeight(attic: KernelAttic, kneeHeight: number): void;
5693
- setAtticWidth(attic: KernelAttic, width: number): void;
5694
- currentDrawingPosition(point: {
5695
- x: number;
5696
- y: number;
5697
- z: number;
5698
- }): void;
5699
- forceNode(point: {
5700
- x: number;
5701
- y: number;
5702
- z: number;
5703
- }): void;
5704
- setDrawingType(aNewDrawingType: DrawingType): void;
5705
- setZoomFactor(pxPerMM: number): void;
5706
- setViewSnapDist(aDist: number): void;
5707
- setRotationSnapAngle(angleInRadians: number): void;
5708
- setDefaultWallThickness(wallThickness: number, applyToAll: boolean): void;
5709
- setDefaultWallHeight(wallHeight: number, applyToAll: boolean): void;
5710
- setDefaultParapetHeight(parapetHeight: number, applyToAll: boolean): void;
5711
- setRoomParapetHeight(floor: KernelFloor, parapetHeight: number): void;
5712
- getDefaultExteriorWallMaterial(): KernelWallMaterial;
5713
- setDefaultExteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
5714
- getDefaultInteriorWallMaterial(): KernelWallMaterial;
5715
- setDefaultInteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
5716
- getDefaultFloorMaterial(): KernelFloorMaterial;
5717
- setDefaultFloorMaterial(floorMaterial: KernelFloorMaterial): void;
5718
- setElementCustomDataJson(element: PlanElement_2, customDataJson: string): void;
5719
- setWallLeftMaterial(wall: KernelWall, material: KernelWallMaterial): void;
5720
- setWallRightMaterial(wall: KernelWall, material: KernelWallMaterial): void;
5721
- setFloorMaterial(floor: KernelFloor, material: KernelFloorMaterial): void;
5722
- setFloorLabelObject(floor: KernelFloor, serializedLabelObject: string): void;
5723
- setFloorType(floor: KernelFloor, floorType: FloorType): void;
5724
- setEdgeType(wall: KernelWall, edgeType: EdgeType): void;
5725
- getContinuousDrawingManager(): ContinuousDrawingManager;
5726
- setSnapFeedbackWhileDrawing(enabled: boolean): void;
5727
- consistsOfMergedComponents(object: KernelObject): boolean;
5728
- setObjectSize(anObject: KernelObject, aNewSize: KernelVector3, anAnchor: Anchor): void;
5729
- setObjectFlipX(anObject: KernelObject, shouldFlipX: boolean): void;
5730
- setObjectFlipY(anObject: KernelObject, shouldFlipY: boolean): void;
5731
- setObjectCustomColor(object: PlanObject, rgbColor: number, useCustomColor: boolean): void;
5732
- setObjectCustomLabel(object: PlanObject, label: string): void;
5733
- setObjectFixedZ(anObject: KernelObject, shouldFlipZ: boolean): void;
5734
- setMeasurePoint1(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
5735
- setMeasurePoint2(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
5736
- addMeasure(startPosition: KernelVector3f, endPosition: KernelVector3f): PlanMeasure_2;
5737
- setDiscardExternalObjectsOnLoad(discard: boolean): void;
5738
- isChildObjectModePossible(object: KernelObject): boolean;
5739
- isEnabledChildObjectMode(object: KernelObject): boolean;
5740
- enableChildObjects(object: KernelObject, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
5741
- disableChildObjects(object: KernelObject): KernelObject;
5742
- enableChildObjectsOfExternalObject(objectId: string, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
5743
- disableChildObjectsOfExternalObject(objectId: string): KernelObject;
5744
- disableChildObjectsOfAllPlanObjects(): void;
5745
- unit: string;
5746
- enableRaster: boolean;
5747
- customRaster: number;
5748
- enableSnap: boolean;
5749
- enableDrawingSnap: boolean;
5750
- objectToWallSnapMode: SnapMode;
5751
- objectToObjectSnapMode: SnapMode;
5752
- dockWhenSnap: boolean;
5753
- unDockOnMove: boolean;
5754
- enableTerrain: boolean;
5802
+ export declare type PlanInteractionHandler = Omit<PlanInteractionHandler_2, keyof HandWrittenPlanInteractionHandler> & HandWrittenPlanInteractionHandler;
5803
+
5804
+ export declare class PlanInteractionHandlerExtension extends UndoRedoHandler {
5805
+ addOrUpdateExternalPlanObjects(serializedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: any, mergedGroupIds: string | string[]): PlanObject[];
5806
+ applyKernelParameterChange<T>(callback: () => T, parameterKey: string, elementId?: string | number): T;
5807
+ /**
5808
+ * Track a construction element position adjustment from bubble/dimension editing.
5809
+ * Creates an immediate undo/redo step. Used when users edit dimension bubbles
5810
+ * attached to construction elements (doors, windows, etc.) in walls.
5811
+ */
5812
+ adjustConstructionElementPosition(element: KernelObject, offset: any): void;
5813
+ /**
5814
+ * Track an object position adjustment from bubble/dimension editing on the floor.
5815
+ * Creates an immediate undo/redo step. Used when users edit dimension bubbles
5816
+ * for floor objects.
5817
+ */
5818
+ adjustObjectPosition(element: KernelObject, offset: any): void;
5819
+ /**
5820
+ * Track an object-to-wall distance adjustment from bubble/dimension editing.
5821
+ * Creates an immediate undo/redo step. Used when users edit object-to-wall
5822
+ * dimension bubbles on the floor.
5823
+ */
5824
+ adjustObjectToWallDistance(element: KernelObject, position: any, dragging: boolean): void;
5755
5825
  }
5756
5826
 
5827
+ export declare type PlanInteractionManager = Omit<Omit<PlanInteractionHandler, keyof PlanInteractionHandlerExtension> & PlanInteractionHandlerExtension, (typeof HIDDEN_INTERACTION_LIFECYCLE_METHODS)[number]>;
5828
+
5757
5829
  export declare abstract class PlanMeasure extends PlanElement {
5758
5830
  getPoint1(): KernelVector3f;
5759
5831
  getPoint2(): KernelVector3f;
@@ -5770,6 +5842,7 @@ export declare abstract class PlanModelViewHelper {
5770
5842
  static requestWallMesh2d(aWall: Wall): void;
5771
5843
  static requestFloorMesh2d(aFloor: Floor): void;
5772
5844
  static getCeilingHeight(aFloor: Floor): number;
5845
+ static getFloorClusters(plan: Plan): FloorCluster[];
5773
5846
  static getMaxDistToBorderForPlanObject(aPlanObject: PlanObjectPtr): number;
5774
5847
  static getDistToNextWallOnSide(anObject: PlanObjectPtr, aSide: PlanObjectSide, maxDist: number): number;
5775
5848
  static getDistAlongWallOnSide(anObject: ConstructionObject, aSide: PlanObjectSide, aWallSide: WallSide): number;
@@ -5777,7 +5850,8 @@ export declare abstract class PlanModelViewHelper {
5777
5850
  }
5778
5851
 
5779
5852
  export declare interface PlanModelViewHelper_2 {
5780
- getPlanOverview(planObject: KernelObject): PlanOverview;
5853
+ getPlanOverview(plan: Plan_2): PlanOverview;
5854
+ getConstructionOverview(plan: Plan_2): ConstructionOverview;
5781
5855
  getPlanObject(plan: Plan_2, aRuntimeId: number): KernelPlanObject;
5782
5856
  isChildObjectRootComponent(plan: Plan_2, componentRuntimeId: number): boolean;
5783
5857
  isAnimationRootComponent(plan: Plan_2, componentRuntimeId: number): boolean;
@@ -5905,7 +5979,12 @@ export declare interface PlannerInitData {
5905
5979
 
5906
5980
  export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5907
5981
  private _roomlePlannerUiCallback;
5908
- private _planInteractionHandler;
5982
+ /**
5983
+ * Stores the PlanInteractionManager — NOT typed as PlanInteractionHandler.
5984
+ * This is a manager that composes and enhances the kernel handler with
5985
+ * smart action grouping, NOT a 1:1 implementation of the handler interface.
5986
+ */
5987
+ private _planInteractionManager;
5909
5988
  private _plannerKernelCallbackListener;
5910
5989
  private _plannerReadyListeners;
5911
5990
  private _plannerReady;
@@ -5919,19 +5998,25 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5919
5998
  get homagIntelligence(): HomagIntelligence | null;
5920
5999
  setHomagIntelligence(homagIntelligence: HomagIntelligence | null): void;
5921
6000
  get isDockingInPlannerEnabled(): boolean;
6001
+ /**
6002
+ * Returns the PlanInteractionManager — a composition-based wrapper that adds
6003
+ * smart action grouping to kernel interactions. NOT a strict implementation
6004
+ * of PlanInteractionHandler, but compatible with it for backward compatibility.
6005
+ */
6006
+ get planInteractionManager(): PlanInteractionManager;
5922
6007
  private _createPlanInteractionHandler;
5923
6008
  addPlannerListener(listener: PlannerKernelCallbackI): void;
5924
6009
  removePlannerListener(listener: PlannerKernelCallbackI): void;
5925
6010
  isReady(): void;
5926
6011
  protected _setupKernel(): void;
5927
6012
  get callbacks(): RoomlePlannerUiCallback;
5928
- get planInteractionHandler(): PlanInteractionHandler;
5929
6013
  get planModelViewHelper(): PlanModelViewHelper_2;
5930
6014
  protected _validateParameters(parameters: KernelParameter[], getVerifiedOptions: (keys: string[]) => Promise<Record<string, CheckDropDownResult> | undefined>, errorMessage: string): Promise<KernelParameter[]>;
5931
6015
  protected _validateExternalComponentParameters(componentId: number, parameters: KernelParameter[]): Promise<KernelParameter[]>;
5932
6016
  protected _validateExternalPlanObjectParameters(objectId: number, parameters: KernelParameter[]): Promise<KernelParameter[]>;
5933
6017
  catalogItemLoaded(catalogItem: RapiItem): void;
5934
6018
  insertItems(itemList: Array<RapiItem | RapiConfiguration>, newUndoRedoStep?: boolean): Promise<RuntimeId[]>;
6019
+ private _performInsertItems;
5935
6020
  duplicateItems(planObjects: PlanObject[]): PlanObject[];
5936
6021
  mergeItems(planObjects: PlanObject[]): void;
5937
6022
  private _rapiItemToKernelItem;
@@ -5978,7 +6063,8 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5978
6063
  addPlanMesh(plan: Plan_2, material: any, vertices: Float32Array, indices: Int32Array, uvCoords: Float32Array, normals: Float32Array, type: KernelEnum): void;
5979
6064
  endPlanConstruction(plan: Plan_2): void;
5980
6065
  createPlanFromObject(rapiElement: RapiItem | RapiConfiguration, position?: Position3, rotation?: number): Plan_2;
5981
- addPlanObjectFromItem(rapiElement: RapiItem | RapiConfiguration, newUndoRedoStep: boolean, position?: Position3, rotation?: number): Promise<RuntimeId>;
6066
+ addPlanObjectFromItem(rapiElement: RapiItem | RapiConfiguration, newUndoRedoStep: boolean, position?: Position3, rotation?: number, keepInteractionOpen?: boolean): Promise<RuntimeId>;
6067
+ private _performAddPlanObjectFromItem;
5982
6068
  coupleReferences(jsObject: any, coreReference: KernelObject): void;
5983
6069
  private _decoupleReferences;
5984
6070
  isConstructionPlanElement(planElement: PlanElement_2): boolean;
@@ -6005,6 +6091,9 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
6005
6091
  getObjectComponent(runtimeId: number, typeOfId: Enumify_2<typeof CORE_TYPE_OF_CORE_ID>): KernelPlanObjectComponent | null;
6006
6092
  isChildObjectRootComponent(roomleComponent: RoomleComponent): boolean;
6007
6093
  isAnimationRootComponent(roomleComponent: RoomleComponent): boolean;
6094
+ changePlanObjectParameter(runtimeId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
6095
+ changePlanObjectsParameter(runtimeIds: number[], parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
6096
+ changeComponentParameter(componentId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
6008
6097
  }
6009
6098
 
6010
6099
  export declare interface PlannerKernelCallbackI {
@@ -6127,7 +6216,7 @@ export declare class PlannerSceneEventHandler extends SceneEventHandler<SceneEve
6127
6216
  private _currentPlanMeasure;
6128
6217
  constructor(creator: string, scene: Scene, camera: Camera, inputManager: InputManager);
6129
6218
  disable(): void;
6130
- get planInteractionHandler(): PlanInteractionHandler;
6219
+ get planInteractionManager(): PlanInteractionManager;
6131
6220
  get planModelViewHelper(): PlanModelViewHelper_2;
6132
6221
  get hoveredObjectId(): number | null;
6133
6222
  get isCurrentlyDrawing(): boolean;
@@ -6400,6 +6489,8 @@ export declare class PlannerSceneManager extends ConfiguratorSceneManager implem
6400
6489
  private _hideAllNodeIfThereAreNoSelections;
6401
6490
  protected _onCameraMove(): boolean;
6402
6491
  private _showWallNodes;
6492
+ private _applyFenceNodeStyle;
6493
+ private _shouldKeepFenceNodesVisible;
6403
6494
  private _updateNodeSize;
6404
6495
  private _sendPlanObjectPositions;
6405
6496
  private _sendMultiSelectionPosition;
@@ -6694,6 +6785,7 @@ export declare class PlanViewModel extends ConfiguratorViewModel implements Plan
6694
6785
  private commonHandlerForEditableAndTopView;
6695
6786
  isChildObjectRootComponent(roomleComponent: RoomleComponent): boolean;
6696
6787
  protected dockComponent(componentDocking: KernelComponentDocking): void;
6788
+ private _isConstructionElement;
6697
6789
  protected _addComponent(component: RoomleComponent): void;
6698
6790
  private _getPlanObjectViewModelForRuntimeId;
6699
6791
  getConfigurablePlanObjectForId(id: number): ConfiguratorPlanObjectViewModel | null;
@@ -6871,6 +6963,8 @@ export declare interface PosDockedContextRoot {
6871
6963
  id: string;
6872
6964
  dockingVector: PosDock | string;
6873
6965
  dockingVectorIndex: number;
6966
+ mode?: PosDockMode | string;
6967
+ offset?: number[];
6874
6968
  }
6875
6969
 
6876
6970
  export declare interface PosDockInfo {
@@ -6879,6 +6973,8 @@ export declare interface PosDockInfo {
6879
6973
  end: number[];
6880
6974
  }
6881
6975
 
6976
+ export declare type PosDockMode = 'StartStart' | 'EndEnd' | 'StartEnd' | 'EndStart';
6977
+
6882
6978
  export declare interface PosErrorMsg {
6883
6979
  category: LogMessageCategoryType;
6884
6980
  msg: string;
@@ -6943,6 +7039,19 @@ export declare interface PosGroup {
6943
7039
  * Optional the attributes of this group
6944
7040
  */
6945
7041
  attributes?: PosModuleAttribute[];
7042
+ /**
7043
+ * Optional repositioning data created by the group orchestrator's
7044
+ * groupAdjust; used to recalculate pos/rotationY after arranging
7045
+ */
7046
+ repositioningData?: PosGroupPositioningData;
7047
+ }
7048
+
7049
+ export declare interface PosGroupPositioningData {
7050
+ posGroup: number[];
7051
+ posRotationY?: number;
7052
+ rootId: string;
7053
+ rootRelPos?: number[];
7054
+ rootRelRotationY?: number;
6946
7055
  }
6947
7056
 
6948
7057
  export declare interface PosInsertLevelInfo {
@@ -9003,8 +9112,8 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9003
9112
  private _globalInitData;
9004
9113
  private _globalCallback;
9005
9114
  private _unitFormatter;
9115
+ private _planInteractionManager;
9006
9116
  private _elevationPlan2dGenerator;
9007
- private _planInteractionHandler;
9008
9117
  private _sceneManager;
9009
9118
  private _plan;
9010
9119
  private _preloadPlanId;
@@ -9126,7 +9235,7 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9126
9235
  pauseTest(): void;
9127
9236
  syncCatalog(catalogId: string): Promise<void>;
9128
9237
  loadError(error?: any): void;
9129
- getPlanInteractionHandler(): Promise<PlanInteractionHandler>;
9238
+ getPlanInteractionManager(): Promise<PlanInteractionManager>;
9130
9239
  getPlanModelViewHelper(): Promise<PlanModelViewHelper_2>;
9131
9240
  /**
9132
9241
  * Inserts the object into the scene (at a given position and rotation)
@@ -9171,6 +9280,12 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9171
9280
  * get all info available for the current plan, including objects, rooms and walls
9172
9281
  */
9173
9282
  getPlanOverview(): Promise<PlanOverview>;
9283
+ /**
9284
+ * get the construction overview of the current plan, including the
9285
+ * construction objects (construction, doors and windows) and their combined
9286
+ * bill of materials
9287
+ */
9288
+ getConstructionOverview(): Promise<ConstructionOverview>;
9174
9289
  /**
9175
9290
  * Generates a top image (birds eye view) and returns it as base64
9176
9291
  * @param options
@@ -9411,12 +9526,6 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9411
9526
  */
9412
9527
  selectProduct(planElementId: number, configurationId: number | null, contextAction: HiContextAction): Promise<void>;
9413
9528
  /* Excluded from this release type: globalCallbacks */
9414
- /**
9415
- * Handles interaction with the planner kernel, ensuring start and end interaction are tracked.
9416
- * @param action A function representing the action to perform.
9417
- * @returns The result of the action, if any.
9418
- */
9419
- private _executeWithInteraction;
9420
9529
  /**
9421
9530
  * Creates a sloping roof attic on a given wall.
9422
9531
  * @param wall The wall to add an attic to.
@@ -9455,8 +9564,7 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9455
9564
  */
9456
9565
  updateAtticWidth(attic: KernelAttic, width: number): void;
9457
9566
  /**
9458
- * Runs a given function with a call to start and end interaction in the planInteractionHandler,
9459
- * this should be used when you want to add a history step after interacting with the plan.
9567
+ * Runs a callback as one atomic interaction step.
9460
9568
  * @param callback any function.
9461
9569
  */
9462
9570
  executeWithInteraction<T>(callback: MaybePromise<T>): Promise<T>;
@@ -9557,7 +9665,7 @@ export declare class RoomlePlannerUiCallback extends UiCallback implements Exter
9557
9665
  onCameraChanged: (type: Enumify_4<typeof CAMERA_TYPE>) => void;
9558
9666
  onCameraIdle: () => void;
9559
9667
  onTotalFloorAreaChanged: (totalFloorArea: number) => void;
9560
- onPlanInteractionHandlerCreated: (planInteractionHandler: PlanInteractionHandler) => void;
9668
+ onPlanInteractionManagerCreated: (planInteractionManager: PlanInteractionManager) => void;
9561
9669
  /**
9562
9670
  * is called when the planner kernel is ready. It returns the container and the instance
9563
9671
  * @param kernelContainer
@@ -10218,6 +10326,197 @@ export declare class StaticPlanObjectViewModel extends PlanObjectViewModel {
10218
10326
  update(): void;
10219
10327
  }
10220
10328
 
10329
+ export declare const STEP_GROUPS: {
10330
+ readonly move: {
10331
+ readonly finalize: "on-signal";
10332
+ readonly methods: ["moveElementTo", "moveElementToIn2d", "moveElementBy", "moveObjectsBy"];
10333
+ };
10334
+ readonly rotate: {
10335
+ readonly finalize: "immediate";
10336
+ readonly methods: ["rotateObjectTo", "setObjectRotation", "rotateObjectsBy", "rotateGroupBy"];
10337
+ };
10338
+ readonly wallHeight: {
10339
+ readonly finalize: "on-signal";
10340
+ readonly methods: ["setWallHeight"];
10341
+ };
10342
+ readonly wallLength: {
10343
+ readonly finalize: "on-signal";
10344
+ readonly methods: ["setLengthOfEdge2D"];
10345
+ };
10346
+ readonly wallThickness: {
10347
+ readonly finalize: "on-signal";
10348
+ readonly methods: ["setWallThickness"];
10349
+ };
10350
+ readonly objectSize: {
10351
+ readonly finalize: "immediate";
10352
+ readonly methods: ["setObjectSize"];
10353
+ };
10354
+ readonly floorLabelObject: {
10355
+ readonly finalize: "immediate";
10356
+ readonly methods: ["setFloorLabelObject"];
10357
+ };
10358
+ readonly roomParapetHeight: {
10359
+ readonly finalize: "on-signal";
10360
+ readonly methods: ["setRoomParapetHeight"];
10361
+ };
10362
+ readonly measure: {
10363
+ readonly finalize: "on-signal";
10364
+ readonly methods: ["setMeasurePoint1", "setMeasurePoint2"];
10365
+ };
10366
+ readonly remove: {
10367
+ readonly finalize: "immediate";
10368
+ readonly methods: ["removeElement", "removeObjectWithId"];
10369
+ };
10370
+ readonly duplicate: {
10371
+ readonly finalize: "immediate";
10372
+ readonly methods: ["duplicatePlanObject", "duplicatePlanObjects"];
10373
+ };
10374
+ readonly visibility: {
10375
+ readonly finalize: "immediate";
10376
+ readonly methods: ["setElementVisibility"];
10377
+ };
10378
+ readonly addObjects: {
10379
+ readonly finalize: "immediate";
10380
+ readonly methods: ["addPlanObjects"];
10381
+ };
10382
+ readonly addObjectFromItem: {
10383
+ readonly finalize: "immediate";
10384
+ readonly methods: ["addPlanObjectFromItem"];
10385
+ };
10386
+ readonly merge: {
10387
+ readonly finalize: "immediate";
10388
+ readonly methods: ["mergeObjects"];
10389
+ };
10390
+ readonly group: {
10391
+ readonly finalize: "immediate";
10392
+ readonly methods: ["groupObjects"];
10393
+ };
10394
+ readonly drawing: {
10395
+ readonly finalize: "on-signal";
10396
+ readonly methods: ["beginDrawing", "addNode", "addWall"];
10397
+ };
10398
+ readonly addAttic: {
10399
+ readonly finalize: "immediate";
10400
+ readonly methods: ["addAttic"];
10401
+ };
10402
+ readonly atticSide: {
10403
+ readonly finalize: "immediate";
10404
+ readonly methods: ["setAtticSide"];
10405
+ };
10406
+ readonly atticKneeHeight: {
10407
+ readonly finalize: "immediate";
10408
+ readonly methods: ["setAtticKneeHeight"];
10409
+ };
10410
+ readonly atticWidth: {
10411
+ readonly finalize: "immediate";
10412
+ readonly methods: ["setAtticWidth"];
10413
+ };
10414
+ readonly defaultWallThickness: {
10415
+ readonly finalize: "on-signal";
10416
+ readonly methods: ["setDefaultWallThickness"];
10417
+ };
10418
+ readonly defaultWallHeight: {
10419
+ readonly finalize: "on-signal";
10420
+ readonly methods: ["setDefaultWallHeight"];
10421
+ };
10422
+ readonly defaultParapetHeight: {
10423
+ readonly finalize: "on-signal";
10424
+ readonly methods: ["setDefaultParapetHeight"];
10425
+ };
10426
+ readonly defaultExteriorWallMaterial: {
10427
+ readonly finalize: "on-signal";
10428
+ readonly idleCommitMs: 3000;
10429
+ readonly methods: ["setDefaultExteriorWallMaterial"];
10430
+ };
10431
+ readonly defaultInteriorWallMaterial: {
10432
+ readonly finalize: "on-signal";
10433
+ readonly idleCommitMs: 3000;
10434
+ readonly methods: ["setDefaultInteriorWallMaterial"];
10435
+ };
10436
+ readonly defaultFloorMaterial: {
10437
+ readonly finalize: "on-signal";
10438
+ readonly idleCommitMs: 3000;
10439
+ readonly methods: ["setDefaultFloorMaterial"];
10440
+ };
10441
+ readonly customDataJson: {
10442
+ readonly finalize: "immediate";
10443
+ readonly methods: ["setElementCustomDataJson"];
10444
+ };
10445
+ readonly wallLeftMaterial: {
10446
+ readonly finalize: "on-signal";
10447
+ readonly idleCommitMs: 3000;
10448
+ readonly methods: ["setWallLeftMaterial"];
10449
+ };
10450
+ readonly wallRightMaterial: {
10451
+ readonly finalize: "on-signal";
10452
+ readonly idleCommitMs: 3000;
10453
+ readonly methods: ["setWallRightMaterial"];
10454
+ };
10455
+ readonly floorMaterial: {
10456
+ readonly finalize: "on-signal";
10457
+ readonly idleCommitMs: 3000;
10458
+ readonly methods: ["setFloorMaterial"];
10459
+ };
10460
+ readonly floorType: {
10461
+ readonly finalize: "immediate";
10462
+ readonly methods: ["setFloorType"];
10463
+ };
10464
+ readonly edgeType: {
10465
+ readonly finalize: "immediate";
10466
+ readonly methods: ["setEdgeType"];
10467
+ };
10468
+ readonly objectFlipX: {
10469
+ readonly finalize: "immediate";
10470
+ readonly methods: ["setObjectFlipX"];
10471
+ };
10472
+ readonly objectFlipY: {
10473
+ readonly finalize: "immediate";
10474
+ readonly methods: ["setObjectFlipY"];
10475
+ };
10476
+ readonly objectCustomColor: {
10477
+ readonly finalize: "immediate";
10478
+ readonly methods: ["setObjectCustomColor"];
10479
+ };
10480
+ readonly objectCustomLabel: {
10481
+ readonly finalize: "immediate";
10482
+ readonly methods: ["setObjectCustomLabel"];
10483
+ };
10484
+ readonly objectFixedZ: {
10485
+ readonly finalize: "immediate";
10486
+ readonly methods: ["setObjectFixedZ"];
10487
+ };
10488
+ readonly addMeasure: {
10489
+ readonly finalize: "immediate";
10490
+ readonly methods: ["addMeasure"];
10491
+ };
10492
+ readonly parameterChange: {
10493
+ readonly finalize: "on-signal";
10494
+ readonly idleCommitMs: 3000;
10495
+ readonly methods: ["applyKernelParameterChange"];
10496
+ };
10497
+ readonly addOrUpdateExternal: {
10498
+ readonly finalize: "immediate";
10499
+ readonly methods: ["addOrUpdateExternalPlanObjects"];
10500
+ };
10501
+ readonly constructionBubbleEdit: {
10502
+ readonly finalize: "immediate";
10503
+ readonly methods: ["adjustConstructionElementPosition"];
10504
+ };
10505
+ readonly objectBubbleEdit: {
10506
+ readonly finalize: "immediate";
10507
+ readonly methods: ["adjustObjectPosition"];
10508
+ };
10509
+ readonly objectToWallDistanceBubbleEdit: {
10510
+ readonly finalize: "immediate";
10511
+ readonly methods: ["adjustObjectToWallDistance"];
10512
+ };
10513
+ };
10514
+
10515
+ /** The label recorded for an open/held step — what the policy compares. A step-group
10516
+ * name (from run()/transaction()) or a synthetic label. Method names are dispatch
10517
+ * INPUT, not labels; run() maps them to a group (buildDispatchTable). */
10518
+ export declare type StepLabel = keyof typeof STEP_GROUPS | SyntheticStepLabel;
10519
+
10221
10520
  export declare class StringArray extends EmsArray<string> {
10222
10521
  }
10223
10522
 
@@ -10226,6 +10525,10 @@ export declare interface SubComponentWaiter {
10226
10525
  partId: number;
10227
10526
  }
10228
10527
 
10528
+ /** Step labels not derived from a dispatched method: held-phase / transaction labels
10529
+ * plus 'adhoc' (the run() fallback). Recorded only, never called on the handler. */
10530
+ export declare type SyntheticStepLabel = 'txn' | 'drawingMode' | 'configuratorMode' | 'externalObjectLoadStart' | 'insertItems' | 'replaceObject' | 'wallHeightBatch' | 'wallThicknessBatch' | 'wallMaterialBatch' | 'adhoc';
10531
+
10229
10532
  export declare type ThreeJsColorsIn3dScene = Record<keyof typeof ROOMLE_COLORS, Color>;
10230
10533
 
10231
10534
  /**
@@ -10342,6 +10645,78 @@ export declare interface UiPossibleChildTag extends RapiTag {
10342
10645
  possibleChildren: UiPossibleChild[];
10343
10646
  }
10344
10647
 
10648
+ /**
10649
+ * Two-class split, and the source of truth for `InteractionMethodName`: everything on
10650
+ * UndoRedoHandler is Excluded from it (see types.ts).
10651
+ *
10652
+ * Where does a method go? Does its body wrap a core call in `this.run(...)`?
10653
+ * • Yes → PlanInteractionHandlerExtension (subclass): opens a tracked step, so it
10654
+ * may be classified in STEP_GROUPS and dispatched (adjust*,
10655
+ * applyKernelParameterChange, addOrUpdateExternalPlanObjects).
10656
+ * • No → UndoRedoHandler (here): step machinery (run, commit, transaction, held-
10657
+ * phase controls, dispose) and boundary ops that only reset/commit around a core
10658
+ * call (undo/redo, loadPlanXML, endDrawing, …). Never dispatched.
10659
+ */
10660
+ export declare class UndoRedoHandler {
10661
+ private _disposed;
10662
+ protected _handler: PlanInteractionHandler;
10663
+ private _state;
10664
+ private _pendingContinuations;
10665
+ private _commitWhenSettled;
10666
+ private _idleCommitTimer;
10667
+ constructor(handler: PlanInteractionHandler);
10668
+ dispose(): void;
10669
+ private _scheduleIdleCommit;
10670
+ private _clearIdleCommit;
10671
+ get isDisposed(): boolean;
10672
+ run<T>(methodName: InteractionMethodName, args: unknown[], apply: () => T): T;
10673
+ commit(): void;
10674
+ clearHistory(): void;
10675
+ private reset;
10676
+ undo(): void;
10677
+ redo(): void;
10678
+ loadPlanXML(xml: string): Plan_2;
10679
+ createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
10680
+ endDrawing(point: {
10681
+ x: number;
10682
+ y: number;
10683
+ z: number;
10684
+ }): void;
10685
+ cancelDrawing(): void;
10686
+ private _hold;
10687
+ private _release;
10688
+ manageExternalObjectLoadingStart(reason?: string): void;
10689
+ resumeExternalObjectLoading(reason?: string): void;
10690
+ manageExternalObjectLoadingEnd(shouldEnd?: boolean): void;
10691
+ startConfiguringMode(): void;
10692
+ endConfiguringMode(): void;
10693
+ beginContinuousOperation(): void;
10694
+ endContinuousOperation(): void;
10695
+ endContinuousOperationIfHeld(): void;
10696
+ transaction<T>(fn: () => T | Promise<T>, opts?: {
10697
+ newStep?: boolean;
10698
+ label?: StepLabel;
10699
+ id?: string | number;
10700
+ finalize?: FinalizeMode;
10701
+ idleCommitMs?: number;
10702
+ }): Promise<T>;
10703
+ manageItemInsertion<T>(callback: () => T | Promise<T>, newUndoRedoStep?: boolean, finalize?: FinalizeMode): Promise<T>;
10704
+ /**
10705
+ * Explicit product-swap primitive: pins one interaction across a remove
10706
+ * followed by an add so the pair always lands as a single undo/redo step,
10707
+ * regardless of either half's own finalize policy. `perform` is expected to
10708
+ * end with an operation that owns its own release (e.g. the catalog flow's
10709
+ * `manageItemInsertion`, or the HI flow's reason-driven
10710
+ * `manageExternalObjectLoadingEnd`) — that release performs the actual
10711
+ * commit. The `finally` below is a safety net: it only fires if `perform`
10712
+ * never reached that release (it threw, or simply never triggered one),
10713
+ * so the manager can't get stuck held.
10714
+ */
10715
+ replaceObject<T>(elementId: string | number, perform: () => T | Promise<T>): Promise<T>;
10716
+ expectContinuation(): void;
10717
+ onCoreLoad(reason: HiLoadObjectReason): void;
10718
+ }
10719
+
10345
10720
  export declare const enum Unit {
10346
10721
  InchFeet = 0,
10347
10722
  MM = 1,
@@ -10559,7 +10934,7 @@ export declare class WallPlanElementViewModel extends PlanElementViewModel {
10559
10934
  constructor(planObject: PlanObject);
10560
10935
  get isSelected(): boolean;
10561
10936
  private _checkHasAttachedAttic;
10562
- getWallDimension(zoomFactor: number, clientWidth: number, clientHeight: number): WallDimension;
10937
+ getWallDimension(zoomFactor: number, clientWidth: number, clientHeight: number, preferredSideOverride?: LeftOrRightWallSide): WallDimension;
10563
10938
  private calculateNormalVector;
10564
10939
  private calculateShiftingFactor;
10565
10940
  private calculateAtticInfo;