@roomle/web-sdk 3.9.0 → 3.10.0-alpha.1

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 (65) 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-DVBX8_mw.mjs} +10 -10
  6. package/lib/{api-52cOotqw.mjs.map → api-DVBX8_mw.mjs.map} +1 -1
  7. package/lib/asset-loader.worker-C911tbNL.mjs.map +1 -1
  8. package/lib/banana-for-scale-B_LIHI9q.mjs.map +1 -1
  9. package/lib/budgeteer.sw-D3VxiASa.mjs.map +1 -1
  10. package/lib/{component-dimensioning-12aJsCzQ.mjs → component-dimensioning-DC1Lxdp-.mjs} +2 -2
  11. package/lib/{component-dimensioning-12aJsCzQ.mjs.map → component-dimensioning-DC1Lxdp-.mjs.map} +1 -1
  12. package/lib/{component-raycast-helper-CcrmOq29.mjs → component-raycast-helper-Wpay-VAg.mjs} +2 -2
  13. package/lib/{component-raycast-helper-CcrmOq29.mjs.map → component-raycast-helper-Wpay-VAg.mjs.map} +1 -1
  14. package/lib/configurator-BRZ1-AQZ.mjs +2 -0
  15. package/lib/configurator-DU1NHt_a.mjs +45 -0
  16. package/lib/{configurator-D3ZKy6bf.mjs.map → configurator-DU1NHt_a.mjs.map} +1 -1
  17. package/lib/{glb-viewer-BJJ9OIlH.mjs → glb-viewer-BPfa4Fz5.mjs} +17 -17
  18. package/lib/{glb-viewer-BJJ9OIlH.mjs.map → glb-viewer-BPfa4Fz5.mjs.map} +1 -1
  19. package/lib/glb-viewer-Bllsu2_m.mjs +2 -0
  20. package/lib/{highlight-coordinator-BuFleG2q.mjs → highlight-coordinator-BcJdy2_o.mjs} +2 -2
  21. package/lib/{highlight-coordinator-BuFleG2q.mjs.map → highlight-coordinator-BcJdy2_o.mjs.map} +1 -1
  22. package/lib/{homag-intelligence-BxpMWKLs.mjs → homag-intelligence-D8Lm2GMZ.mjs} +4 -4
  23. package/lib/homag-intelligence-D8Lm2GMZ.mjs.map +1 -0
  24. package/lib/{main-QTvbXAvy.mjs → main-DXPoPkIG.mjs} +3632 -3159
  25. package/lib/main-DXPoPkIG.mjs.map +1 -0
  26. package/lib/{material-viewer-BPcCfvCC.mjs → material-viewer-CNTiw7G9.mjs} +17 -17
  27. package/lib/{material-viewer-BPcCfvCC.mjs.map → material-viewer-CNTiw7G9.mjs.map} +1 -1
  28. package/lib/packages-D61uTgIK.mjs +4 -0
  29. package/lib/planner-BO7I35KU.mjs +2 -0
  30. package/lib/planner-CWQ8F70q.mjs +44 -0
  31. package/lib/{planner-C1-sOmHY.mjs.map → planner-CWQ8F70q.mjs.map} +1 -1
  32. package/lib/roomle-headless.d.ts +509 -143
  33. package/lib/roomle-headless.js +45 -45
  34. package/lib/roomle-headless.js.map +1 -1
  35. package/lib/roomle-sdk.d.ts +509 -143
  36. package/lib/roomle-sdk.js +8 -8
  37. package/lib/{roomle-webgpu-renderer-BrZZeAGw.mjs → roomle-webgpu-renderer-CmqMWt2K.mjs} +2 -2
  38. package/lib/{roomle-webgpu-renderer-BrZZeAGw.mjs.map → roomle-webgpu-renderer-CmqMWt2K.mjs.map} +1 -1
  39. package/lib/{scene-renderer-3nhM4cEu.mjs → scene-renderer-6t0p4vb4.mjs} +2 -2
  40. package/lib/{scene-renderer-3nhM4cEu.mjs.map → scene-renderer-6t0p4vb4.mjs.map} +1 -1
  41. package/lib/{script-loader-3LiaLeLT.mjs → script-loader-DovMlDVR.mjs} +2 -2
  42. package/lib/{script-loader-3LiaLeLT.mjs.map → script-loader-DovMlDVR.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-B9MDLRpR.mjs} +2 -2
  51. package/lib/{stats-helper-COC7Moh0.mjs.map → stats-helper-B9MDLRpR.mjs.map} +1 -1
  52. package/lib/{threejs-utils-CElderZe.mjs → threejs-utils-ZKvz9Qno.mjs} +61 -57
  53. package/lib/threejs-utils-ZKvz9Qno.mjs.map +1 -0
  54. package/lib/{tools-core-mkA4m80O.mjs → tools-core-Ks33p1cu.mjs} +5 -5
  55. package/lib/{tools-core-mkA4m80O.mjs.map → tools-core-Ks33p1cu.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/packages-JQ2uWInj.mjs +0 -4
  63. package/lib/planner-C1-sOmHY.mjs +0 -44
  64. package/lib/planner-CnRaQM_h.mjs +0 -2
  65. 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;
@@ -2174,6 +2177,11 @@ export declare abstract class ConstructionObject extends PlanObjectPtr {
2174
2177
  export declare class ConstructionObjectSet extends EmsSet<ConstructionObject> {
2175
2178
  }
2176
2179
 
2180
+ export declare interface ConstructionOverview {
2181
+ objects: KernelPlanObjectList;
2182
+ parts: PartList;
2183
+ }
2184
+
2177
2185
  export declare interface ConstructionPlanObject extends PlanObject {
2178
2186
  getAttachedWall(): WallPlanObject;
2179
2187
  getPreferredSide(): LeftOrRightWallSide;
@@ -2181,7 +2189,7 @@ export declare interface ConstructionPlanObject extends PlanObject {
2181
2189
  getCornerFromRight(): KernelVector3;
2182
2190
  getCornerToLeft(): KernelVector3;
2183
2191
  getCornerToRight(): KernelVector3;
2184
- getDoorArches(): ConstructionObjectDoorArchArray;
2192
+ getDoorArches(): EmsArray<ConstructionObjectDoorArch>;
2185
2193
  }
2186
2194
 
2187
2195
  export declare class ConstructionPlanObjectViewModel extends StaticPlanObjectViewModel {
@@ -3110,6 +3118,8 @@ export declare interface ExternalObjectDockedRootModule {
3110
3118
  dockingVector: string;
3111
3119
  dockingVectorIndex: number;
3112
3120
  id: string;
3121
+ mode: string;
3122
+ offset: number[];
3113
3123
  }
3114
3124
 
3115
3125
  export declare interface ExternalObjectGroup {
@@ -3159,6 +3169,7 @@ export declare interface ExternalObjectGroupLayoutSide {
3159
3169
  export declare interface ExternalObjectLoadConfiguration {
3160
3170
  applyGlobalChildMode: boolean;
3161
3171
  correctArrangement: boolean;
3172
+ applyGroupPosition: boolean;
3162
3173
  findFreeSpaceInPlan: boolean;
3163
3174
  isVisible: boolean;
3164
3175
  respondWithPositionInPlan: boolean;
@@ -3339,6 +3350,8 @@ export declare interface FetchOptions {
3339
3350
  embed?: RAPI_PATHS[];
3340
3351
  }
3341
3352
 
3353
+ export declare type FinalizeMode = 'immediate' | 'on-signal';
3354
+
3342
3355
  export declare abstract class Floor extends PlanElement {
3343
3356
  area: number;
3344
3357
  material: FloorMaterial;
@@ -3359,6 +3372,12 @@ export declare interface FloorAreaData<Vector2Type = Vector3, Vector3Type = Vect
3359
3372
 
3360
3373
  export declare type FloorAreaDataTransferable = FloorAreaData<Position2, Position3>;
3361
3374
 
3375
+ export declare interface FloorCluster {
3376
+ floors: Floor[];
3377
+ area: number;
3378
+ labelPosition: KernelVector3f;
3379
+ }
3380
+
3362
3381
  export declare class FloorMaterial extends BaseMaterial {
3363
3382
  uvScale(): KernelVector3f;
3364
3383
  rotation(): KernelVector3f;
@@ -3628,6 +3647,140 @@ export declare interface GlueLogic {
3628
3647
  getMaterialUrl(materialId: string, groupOrModuleId?: string): string | null;
3629
3648
  }
3630
3649
 
3650
+ /**
3651
+ * Hand-typed overrides of core handler methods, re-typed against our model types
3652
+ * (PlanObject, KernelObject, …) which differ from core's. Everything not listed here
3653
+ * is inherited from the real core type — see PlanInteractionHandler below.
3654
+ */
3655
+ export declare interface HandWrittenPlanInteractionHandler {
3656
+ /** embind cleanup — frees the underlying C++ instance. */
3657
+ delete(): void;
3658
+ init(reference: HandWrittenPlanInteractionHandler, zoomFactor: number, viewSnapDist: number, wallSnapMode: any, objectSnapMode: any, shouldSnap: boolean, drawingType: any): void;
3659
+ getConfiguratorKernel(): ConfiguratorKernelClass;
3660
+ loadPlanXML(xml: string): Plan_2;
3661
+ createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
3662
+ getPlan(): Plan_2;
3663
+ moveElementTo(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean, cameraPosition?: KernelVector3): void;
3664
+ moveElementToIn2d(planObject: KernelObject, targetPosition: KernelVector3, dragging: boolean): void;
3665
+ moveElementBy(planObject: KernelObject, distance: KernelVector3, dragging: boolean): void;
3666
+ duplicatePlanObject(object: PlanObject, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
3667
+ duplicatePlanObjects(objects: PlanObjectList, count: number, findFreeSpaceInPlan: boolean): PlanObject[];
3668
+ setElementVisibility(element: PlanElement_2, isVisible: boolean): void;
3669
+ moveObjectsBy(planObjects: KernelObjectPtrList, distance: KernelVector3): void;
3670
+ rotateObjectTo(planObject: KernelObject, angleInRad: number): void;
3671
+ setObjectRotation(planObject: KernelObject, angleInRad: number): void;
3672
+ addPlanObjects(list: KernelObjectPtrList, findFreeSpaceInPlan: boolean): PlanObject[];
3673
+ addPlanObjectFromItem(object: KernelObject, position: KernelVector3, type: number, findFreeSpaceInPlan: boolean): PlanObject;
3674
+ addOrUpdateExternalPlanObjects(serializedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: ExternalObjectLoadConfiguration, mergedGroupIds: string | string[]): PlanObject[];
3675
+ createPreviewGeometryForAddOn(objectId: string, objectConfiguration: string, articleId: string, groupDefinitions: string, validContainerModules: ExternalValidContainerModule[]): void;
3676
+ catalogItemLoaded(catalogItem: KernelCatalogItem): void;
3677
+ removeElement(planObject: KernelObject): void;
3678
+ removeObjectWithId(objectId: string): void;
3679
+ mergeObjects(objects: PlanObjectList): void;
3680
+ groupObjects(planObjectPtrList: PlanObjectList): ObjectGroupPtr;
3681
+ rotateObjectsBy(planObjectPtrList: PlanObjectList, anAngleInRad: number, aroundPoint: KernelVector3): void;
3682
+ rotateGroupBy(group: ObjectGroupPtr, anAngleInRad: number, aroundPoint: KernelVector3): void;
3683
+ deactivateAllSnappingActivity(): void;
3684
+ reactivateAllSnappingActivity(): void;
3685
+ isUndoPossible(): boolean;
3686
+ isRedoPossible(): boolean;
3687
+ clearHistory(): void;
3688
+ startInteraction(): void;
3689
+ resumeInteraction(): void;
3690
+ endInteraction(): void;
3691
+ undo(): void;
3692
+ redo(): void;
3693
+ isVectorPreviewModeEnabled(): boolean;
3694
+ getDrawingMode(): DrawingMode;
3695
+ beginDrawing(point: {
3696
+ x: number;
3697
+ y: number;
3698
+ z: number;
3699
+ }, drawingMode: DrawingMode, createUnclosedSpace: boolean): void;
3700
+ endDrawing(point: {
3701
+ x: number;
3702
+ y: number;
3703
+ z: number;
3704
+ }): void;
3705
+ cancelDrawing(): void;
3706
+ addNode(point: {
3707
+ x: number;
3708
+ y: number;
3709
+ z: number;
3710
+ }): PlanNode;
3711
+ addWall(from: PlanNode, to: PlanNode): KernelWall;
3712
+ setWallHeight(wall: KernelWall, height: number): void;
3713
+ setLengthOfEdge2D(wall: KernelWall, length: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
3714
+ setLengthOfSlopingEdge(wall: KernelWall, slopingLength: number, preferredSide: WallSide, direction: EMSConstant, moveOrthogonalWalls: boolean): void;
3715
+ setWallThickness(wall: KernelWall, thickness: number): void;
3716
+ addAttic(wall: KernelWall, kneeHeight: number, width: number, side: WallSide | null | undefined): KernelAttic;
3717
+ setAtticSide(attic: KernelAttic, side: WallSide): void;
3718
+ setAtticKneeHeight(attic: KernelAttic, kneeHeight: number): void;
3719
+ setAtticWidth(attic: KernelAttic, width: number): void;
3720
+ currentDrawingPosition(point: {
3721
+ x: number;
3722
+ y: number;
3723
+ z: number;
3724
+ }): void;
3725
+ forceNode(point: {
3726
+ x: number;
3727
+ y: number;
3728
+ z: number;
3729
+ }): void;
3730
+ setDrawingType(aNewDrawingType: DrawingType): void;
3731
+ setZoomFactor(pxPerMM: number): void;
3732
+ setViewSnapDist(aDist: number): void;
3733
+ setRotationSnapAngle(angleInRadians: number): void;
3734
+ setDefaultWallThickness(wallThickness: number, applyToAll: boolean): void;
3735
+ setDefaultWallHeight(wallHeight: number, applyToAll: boolean): void;
3736
+ setDefaultParapetHeight(parapetHeight: number, applyToAll: boolean): void;
3737
+ setRoomParapetHeight(floor: KernelFloor, parapetHeight: number): void;
3738
+ getDefaultExteriorWallMaterial(): KernelWallMaterial;
3739
+ setDefaultExteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
3740
+ getDefaultInteriorWallMaterial(): KernelWallMaterial;
3741
+ setDefaultInteriorWallMaterial(wallMaterial: KernelWallMaterial): void;
3742
+ getDefaultFloorMaterial(): KernelFloorMaterial;
3743
+ setDefaultFloorMaterial(floorMaterial: KernelFloorMaterial): void;
3744
+ setElementCustomDataJson(element: PlanElement_2, customDataJson: string): void;
3745
+ setWallLeftMaterial(wall: KernelWall, material: KernelWallMaterial): void;
3746
+ setWallRightMaterial(wall: KernelWall, material: KernelWallMaterial): void;
3747
+ setFloorMaterial(floor: KernelFloor, material: KernelFloorMaterial): void;
3748
+ setFloorLabelObject(floor: KernelFloor, serializedLabelObject: string): void;
3749
+ setFloorType(floor: KernelFloor, floorType: FloorType): void;
3750
+ setEdgeType(wall: KernelWall, edgeType: EdgeType): void;
3751
+ getContinuousDrawingManager(): ContinuousDrawingManager;
3752
+ setSnapFeedbackWhileDrawing(enabled: boolean): void;
3753
+ consistsOfMergedComponents(object: KernelObject): boolean;
3754
+ setObjectSize(anObject: KernelObject, aNewSize: KernelVector3, anAnchor: Anchor): void;
3755
+ setObjectFlipX(anObject: KernelObject, shouldFlipX: boolean): void;
3756
+ setObjectFlipY(anObject: KernelObject, shouldFlipY: boolean): void;
3757
+ setObjectCustomColor(object: PlanObject, rgbColor: number, useCustomColor: boolean): void;
3758
+ setObjectCustomLabel(object: PlanObject, label: string): void;
3759
+ setObjectFixedZ(anObject: KernelObject, shouldFlipZ: boolean): void;
3760
+ setMeasurePoint1(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
3761
+ setMeasurePoint2(measure: PlanMeasure_2, point: KernelVector3f, snapToWalls: boolean, snapToObjects: boolean): void;
3762
+ addMeasure(startPosition: KernelVector3f, endPosition: KernelVector3f): PlanMeasure_2;
3763
+ setDiscardExternalObjectsOnLoad(discard: boolean): void;
3764
+ isChildObjectModePossible(object: KernelObject): boolean;
3765
+ isEnabledChildObjectMode(object: KernelObject): boolean;
3766
+ enableChildObjects(object: KernelObject, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
3767
+ disableChildObjects(object: KernelObject): KernelObject;
3768
+ enableChildObjectsOfExternalObject(objectId: string, switchChildModeOffForAllOtherObjects: boolean): KernelObject;
3769
+ disableChildObjectsOfExternalObject(objectId: string): KernelObject;
3770
+ disableChildObjectsOfAllPlanObjects(): void;
3771
+ setAutomatedWallHeight(wall: KernelWall, value: boolean): void;
3772
+ unit: string;
3773
+ enableRaster: boolean;
3774
+ customRaster: number;
3775
+ enableSnap: boolean;
3776
+ enableDrawingSnap: boolean;
3777
+ objectToWallSnapMode: SnapMode;
3778
+ objectToObjectSnapMode: SnapMode;
3779
+ dockWhenSnap: boolean;
3780
+ unDockOnMove: boolean;
3781
+ enableTerrain: boolean;
3782
+ }
3783
+
3631
3784
  export declare class HdrEnvironmentLoader implements Context {
3632
3785
  _creator_: string;
3633
3786
  private _environmentMap;
@@ -3889,6 +4042,14 @@ export declare type HiAttributeOptionsResult = CheckDropDownResult | CheckDropDo
3889
4042
 
3890
4043
  export declare type HiContextAction = (typeof HI_CONTEXT_ACTION)[keyof typeof HI_CONTEXT_ACTION];
3891
4044
 
4045
+ /**
4046
+ * Lifecycle methods internal to PlanInteractionManager — it drives them itself,
4047
+ * external code must not. Single source for both the runtime guard (HIDDEN_LIFECYCLE)
4048
+ * and the compile-time Omit in the PlanInteractionManager type. `satisfies` keeps
4049
+ * every entry a real handler method.
4050
+ */
4051
+ export declare const HIDDEN_INTERACTION_LIFECYCLE_METHODS: readonly ["startInteraction", "resumeInteraction", "endInteraction"];
4052
+
3892
4053
  export declare interface HighlightHelper {
3893
4054
  init(object: Object3D, camera: PerspectiveCamera): void;
3894
4055
  setCamera(camera: PerspectiveCamera): void;
@@ -4305,6 +4466,8 @@ export declare class IntArray extends EmsArray<number> {
4305
4466
  export declare class IntArray_2 extends EmsArray<number> {
4306
4467
  }
4307
4468
 
4469
+ export declare type InteractionMethodName = Exclude<keyof PlanInteractionManager, keyof UndoRedoHandler>;
4470
+
4308
4471
  export declare interface InteractionOptions {
4309
4472
  keepInteractionOpen?: boolean;
4310
4473
  }
@@ -4318,6 +4481,8 @@ export declare const isExternalObject: (someThing: unknown) => someThing is Exte
4318
4481
 
4319
4482
  export declare const isExtObjId: (id: unknown) => id is ExtObjId_2;
4320
4483
 
4484
+ export declare const isFirefox: () => boolean;
4485
+
4321
4486
  export declare const isSafari: () => boolean;
4322
4487
 
4323
4488
  export declare const KERNEL_MESSAGE_TYPE: {
@@ -5627,133 +5792,33 @@ export declare abstract class PlanImage extends PlanElement {
5627
5792
  center: KernelVector3f;
5628
5793
  }
5629
5794
 
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;
5795
+ export declare type PlanInteractionHandler = Omit<PlanInteractionHandler_2, keyof HandWrittenPlanInteractionHandler> & HandWrittenPlanInteractionHandler;
5796
+
5797
+ export declare class PlanInteractionHandlerExtension extends UndoRedoHandler {
5798
+ addOrUpdateExternalPlanObjects(serializedConfiguration: string | string[], position: KernelVector3, rotationInRad: number, updateConfiguration: any, mergedGroupIds: string | string[]): PlanObject[];
5799
+ applyKernelParameterChange<T>(callback: () => T, parameterKey: string, elementId?: string | number): T;
5800
+ /**
5801
+ * Track a construction element position adjustment from bubble/dimension editing.
5802
+ * Creates an immediate undo/redo step. Used when users edit dimension bubbles
5803
+ * attached to construction elements (doors, windows, etc.) in walls.
5804
+ */
5805
+ adjustConstructionElementPosition(element: KernelObject, offset: any): void;
5806
+ /**
5807
+ * Track an object position adjustment from bubble/dimension editing on the floor.
5808
+ * Creates an immediate undo/redo step. Used when users edit dimension bubbles
5809
+ * for floor objects.
5810
+ */
5811
+ adjustObjectPosition(element: KernelObject, offset: any): void;
5812
+ /**
5813
+ * Track an object-to-wall distance adjustment from bubble/dimension editing.
5814
+ * Creates an immediate undo/redo step. Used when users edit object-to-wall
5815
+ * dimension bubbles on the floor.
5816
+ */
5817
+ adjustObjectToWallDistance(element: KernelObject, position: any, dragging: boolean): void;
5755
5818
  }
5756
5819
 
5820
+ export declare type PlanInteractionManager = Omit<Omit<PlanInteractionHandler, keyof PlanInteractionHandlerExtension> & PlanInteractionHandlerExtension, (typeof HIDDEN_INTERACTION_LIFECYCLE_METHODS)[number]>;
5821
+
5757
5822
  export declare abstract class PlanMeasure extends PlanElement {
5758
5823
  getPoint1(): KernelVector3f;
5759
5824
  getPoint2(): KernelVector3f;
@@ -5770,6 +5835,7 @@ export declare abstract class PlanModelViewHelper {
5770
5835
  static requestWallMesh2d(aWall: Wall): void;
5771
5836
  static requestFloorMesh2d(aFloor: Floor): void;
5772
5837
  static getCeilingHeight(aFloor: Floor): number;
5838
+ static getFloorClusters(plan: Plan): FloorCluster[];
5773
5839
  static getMaxDistToBorderForPlanObject(aPlanObject: PlanObjectPtr): number;
5774
5840
  static getDistToNextWallOnSide(anObject: PlanObjectPtr, aSide: PlanObjectSide, maxDist: number): number;
5775
5841
  static getDistAlongWallOnSide(anObject: ConstructionObject, aSide: PlanObjectSide, aWallSide: WallSide): number;
@@ -5777,7 +5843,8 @@ export declare abstract class PlanModelViewHelper {
5777
5843
  }
5778
5844
 
5779
5845
  export declare interface PlanModelViewHelper_2 {
5780
- getPlanOverview(planObject: KernelObject): PlanOverview;
5846
+ getPlanOverview(plan: Plan_2): PlanOverview;
5847
+ getConstructionOverview(plan: Plan_2): ConstructionOverview;
5781
5848
  getPlanObject(plan: Plan_2, aRuntimeId: number): KernelPlanObject;
5782
5849
  isChildObjectRootComponent(plan: Plan_2, componentRuntimeId: number): boolean;
5783
5850
  isAnimationRootComponent(plan: Plan_2, componentRuntimeId: number): boolean;
@@ -5905,7 +5972,12 @@ export declare interface PlannerInitData {
5905
5972
 
5906
5973
  export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5907
5974
  private _roomlePlannerUiCallback;
5908
- private _planInteractionHandler;
5975
+ /**
5976
+ * Stores the PlanInteractionManager — NOT typed as PlanInteractionHandler.
5977
+ * This is a manager that composes and enhances the kernel handler with
5978
+ * smart action grouping, NOT a 1:1 implementation of the handler interface.
5979
+ */
5980
+ private _planInteractionManager;
5909
5981
  private _plannerKernelCallbackListener;
5910
5982
  private _plannerReadyListeners;
5911
5983
  private _plannerReady;
@@ -5919,19 +5991,25 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5919
5991
  get homagIntelligence(): HomagIntelligence | null;
5920
5992
  setHomagIntelligence(homagIntelligence: HomagIntelligence | null): void;
5921
5993
  get isDockingInPlannerEnabled(): boolean;
5994
+ /**
5995
+ * Returns the PlanInteractionManager — a composition-based wrapper that adds
5996
+ * smart action grouping to kernel interactions. NOT a strict implementation
5997
+ * of PlanInteractionHandler, but compatible with it for backward compatibility.
5998
+ */
5999
+ get planInteractionManager(): PlanInteractionManager;
5922
6000
  private _createPlanInteractionHandler;
5923
6001
  addPlannerListener(listener: PlannerKernelCallbackI): void;
5924
6002
  removePlannerListener(listener: PlannerKernelCallbackI): void;
5925
6003
  isReady(): void;
5926
6004
  protected _setupKernel(): void;
5927
6005
  get callbacks(): RoomlePlannerUiCallback;
5928
- get planInteractionHandler(): PlanInteractionHandler;
5929
6006
  get planModelViewHelper(): PlanModelViewHelper_2;
5930
6007
  protected _validateParameters(parameters: KernelParameter[], getVerifiedOptions: (keys: string[]) => Promise<Record<string, CheckDropDownResult> | undefined>, errorMessage: string): Promise<KernelParameter[]>;
5931
6008
  protected _validateExternalComponentParameters(componentId: number, parameters: KernelParameter[]): Promise<KernelParameter[]>;
5932
6009
  protected _validateExternalPlanObjectParameters(objectId: number, parameters: KernelParameter[]): Promise<KernelParameter[]>;
5933
6010
  catalogItemLoaded(catalogItem: RapiItem): void;
5934
6011
  insertItems(itemList: Array<RapiItem | RapiConfiguration>, newUndoRedoStep?: boolean): Promise<RuntimeId[]>;
6012
+ private _performInsertItems;
5935
6013
  duplicateItems(planObjects: PlanObject[]): PlanObject[];
5936
6014
  mergeItems(planObjects: PlanObject[]): void;
5937
6015
  private _rapiItemToKernelItem;
@@ -5978,7 +6056,8 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
5978
6056
  addPlanMesh(plan: Plan_2, material: any, vertices: Float32Array, indices: Int32Array, uvCoords: Float32Array, normals: Float32Array, type: KernelEnum): void;
5979
6057
  endPlanConstruction(plan: Plan_2): void;
5980
6058
  createPlanFromObject(rapiElement: RapiItem | RapiConfiguration, position?: Position3, rotation?: number): Plan_2;
5981
- addPlanObjectFromItem(rapiElement: RapiItem | RapiConfiguration, newUndoRedoStep: boolean, position?: Position3, rotation?: number): Promise<RuntimeId>;
6059
+ addPlanObjectFromItem(rapiElement: RapiItem | RapiConfiguration, newUndoRedoStep: boolean, position?: Position3, rotation?: number, keepInteractionOpen?: boolean): Promise<RuntimeId>;
6060
+ private _performAddPlanObjectFromItem;
5982
6061
  coupleReferences(jsObject: any, coreReference: KernelObject): void;
5983
6062
  private _decoupleReferences;
5984
6063
  isConstructionPlanElement(planElement: PlanElement_2): boolean;
@@ -6005,6 +6084,9 @@ export declare class PlannerKernelAccess extends ConfiguratorKernelAccess {
6005
6084
  getObjectComponent(runtimeId: number, typeOfId: Enumify_2<typeof CORE_TYPE_OF_CORE_ID>): KernelPlanObjectComponent | null;
6006
6085
  isChildObjectRootComponent(roomleComponent: RoomleComponent): boolean;
6007
6086
  isAnimationRootComponent(roomleComponent: RoomleComponent): boolean;
6087
+ changePlanObjectParameter(runtimeId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
6088
+ changePlanObjectsParameter(runtimeIds: number[], parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
6089
+ changeComponentParameter(componentId: number, parameterKey: string, type: string, value: string, resolve: () => void, reject: () => void): void;
6008
6090
  }
6009
6091
 
6010
6092
  export declare interface PlannerKernelCallbackI {
@@ -6127,7 +6209,7 @@ export declare class PlannerSceneEventHandler extends SceneEventHandler<SceneEve
6127
6209
  private _currentPlanMeasure;
6128
6210
  constructor(creator: string, scene: Scene, camera: Camera, inputManager: InputManager);
6129
6211
  disable(): void;
6130
- get planInteractionHandler(): PlanInteractionHandler;
6212
+ get planInteractionManager(): PlanInteractionManager;
6131
6213
  get planModelViewHelper(): PlanModelViewHelper_2;
6132
6214
  get hoveredObjectId(): number | null;
6133
6215
  get isCurrentlyDrawing(): boolean;
@@ -6694,6 +6776,7 @@ export declare class PlanViewModel extends ConfiguratorViewModel implements Plan
6694
6776
  private commonHandlerForEditableAndTopView;
6695
6777
  isChildObjectRootComponent(roomleComponent: RoomleComponent): boolean;
6696
6778
  protected dockComponent(componentDocking: KernelComponentDocking): void;
6779
+ private _isConstructionElement;
6697
6780
  protected _addComponent(component: RoomleComponent): void;
6698
6781
  private _getPlanObjectViewModelForRuntimeId;
6699
6782
  getConfigurablePlanObjectForId(id: number): ConfiguratorPlanObjectViewModel | null;
@@ -6871,6 +6954,8 @@ export declare interface PosDockedContextRoot {
6871
6954
  id: string;
6872
6955
  dockingVector: PosDock | string;
6873
6956
  dockingVectorIndex: number;
6957
+ mode?: PosDockMode | string;
6958
+ offset?: number[];
6874
6959
  }
6875
6960
 
6876
6961
  export declare interface PosDockInfo {
@@ -6879,6 +6964,8 @@ export declare interface PosDockInfo {
6879
6964
  end: number[];
6880
6965
  }
6881
6966
 
6967
+ export declare type PosDockMode = 'StartStart' | 'EndEnd' | 'StartEnd' | 'EndStart';
6968
+
6882
6969
  export declare interface PosErrorMsg {
6883
6970
  category: LogMessageCategoryType;
6884
6971
  msg: string;
@@ -6943,6 +7030,19 @@ export declare interface PosGroup {
6943
7030
  * Optional the attributes of this group
6944
7031
  */
6945
7032
  attributes?: PosModuleAttribute[];
7033
+ /**
7034
+ * Optional repositioning data created by the group orchestrator's
7035
+ * groupAdjust; used to recalculate pos/rotationY after arranging
7036
+ */
7037
+ repositioningData?: PosGroupPositioningData;
7038
+ }
7039
+
7040
+ export declare interface PosGroupPositioningData {
7041
+ posGroup: number[];
7042
+ posRotationY?: number;
7043
+ rootId: string;
7044
+ rootRelPos?: number[];
7045
+ rootRelRotationY?: number;
6946
7046
  }
6947
7047
 
6948
7048
  export declare interface PosInsertLevelInfo {
@@ -9003,8 +9103,8 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9003
9103
  private _globalInitData;
9004
9104
  private _globalCallback;
9005
9105
  private _unitFormatter;
9106
+ private _planInteractionManager;
9006
9107
  private _elevationPlan2dGenerator;
9007
- private _planInteractionHandler;
9008
9108
  private _sceneManager;
9009
9109
  private _plan;
9010
9110
  private _preloadPlanId;
@@ -9126,7 +9226,7 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9126
9226
  pauseTest(): void;
9127
9227
  syncCatalog(catalogId: string): Promise<void>;
9128
9228
  loadError(error?: any): void;
9129
- getPlanInteractionHandler(): Promise<PlanInteractionHandler>;
9229
+ getPlanInteractionManager(): Promise<PlanInteractionManager>;
9130
9230
  getPlanModelViewHelper(): Promise<PlanModelViewHelper_2>;
9131
9231
  /**
9132
9232
  * Inserts the object into the scene (at a given position and rotation)
@@ -9171,6 +9271,12 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9171
9271
  * get all info available for the current plan, including objects, rooms and walls
9172
9272
  */
9173
9273
  getPlanOverview(): Promise<PlanOverview>;
9274
+ /**
9275
+ * get the construction overview of the current plan, including the
9276
+ * construction objects (construction, doors and windows) and their combined
9277
+ * bill of materials
9278
+ */
9279
+ getConstructionOverview(): Promise<ConstructionOverview>;
9174
9280
  /**
9175
9281
  * Generates a top image (birds eye view) and returns it as base64
9176
9282
  * @param options
@@ -9411,12 +9517,6 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9411
9517
  */
9412
9518
  selectProduct(planElementId: number, configurationId: number | null, contextAction: HiContextAction): Promise<void>;
9413
9519
  /* 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
9520
  /**
9421
9521
  * Creates a sloping roof attic on a given wall.
9422
9522
  * @param wall The wall to add an attic to.
@@ -9455,8 +9555,7 @@ export declare class RoomlePlanner<P extends readonly PluginName[] = readonly []
9455
9555
  */
9456
9556
  updateAtticWidth(attic: KernelAttic, width: number): void;
9457
9557
  /**
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.
9558
+ * Runs a callback as one atomic interaction step.
9460
9559
  * @param callback any function.
9461
9560
  */
9462
9561
  executeWithInteraction<T>(callback: MaybePromise<T>): Promise<T>;
@@ -9557,7 +9656,7 @@ export declare class RoomlePlannerUiCallback extends UiCallback implements Exter
9557
9656
  onCameraChanged: (type: Enumify_4<typeof CAMERA_TYPE>) => void;
9558
9657
  onCameraIdle: () => void;
9559
9658
  onTotalFloorAreaChanged: (totalFloorArea: number) => void;
9560
- onPlanInteractionHandlerCreated: (planInteractionHandler: PlanInteractionHandler) => void;
9659
+ onPlanInteractionManagerCreated: (planInteractionManager: PlanInteractionManager) => void;
9561
9660
  /**
9562
9661
  * is called when the planner kernel is ready. It returns the container and the instance
9563
9662
  * @param kernelContainer
@@ -10218,6 +10317,197 @@ export declare class StaticPlanObjectViewModel extends PlanObjectViewModel {
10218
10317
  update(): void;
10219
10318
  }
10220
10319
 
10320
+ export declare const STEP_GROUPS: {
10321
+ readonly move: {
10322
+ readonly finalize: "on-signal";
10323
+ readonly methods: ["moveElementTo", "moveElementToIn2d", "moveElementBy", "moveObjectsBy"];
10324
+ };
10325
+ readonly rotate: {
10326
+ readonly finalize: "immediate";
10327
+ readonly methods: ["rotateObjectTo", "setObjectRotation", "rotateObjectsBy", "rotateGroupBy"];
10328
+ };
10329
+ readonly wallHeight: {
10330
+ readonly finalize: "on-signal";
10331
+ readonly methods: ["setWallHeight"];
10332
+ };
10333
+ readonly wallLength: {
10334
+ readonly finalize: "on-signal";
10335
+ readonly methods: ["setLengthOfEdge2D"];
10336
+ };
10337
+ readonly wallThickness: {
10338
+ readonly finalize: "on-signal";
10339
+ readonly methods: ["setWallThickness"];
10340
+ };
10341
+ readonly objectSize: {
10342
+ readonly finalize: "immediate";
10343
+ readonly methods: ["setObjectSize"];
10344
+ };
10345
+ readonly floorLabelObject: {
10346
+ readonly finalize: "immediate";
10347
+ readonly methods: ["setFloorLabelObject"];
10348
+ };
10349
+ readonly roomParapetHeight: {
10350
+ readonly finalize: "on-signal";
10351
+ readonly methods: ["setRoomParapetHeight"];
10352
+ };
10353
+ readonly measure: {
10354
+ readonly finalize: "on-signal";
10355
+ readonly methods: ["setMeasurePoint1", "setMeasurePoint2"];
10356
+ };
10357
+ readonly remove: {
10358
+ readonly finalize: "immediate";
10359
+ readonly methods: ["removeElement", "removeObjectWithId"];
10360
+ };
10361
+ readonly duplicate: {
10362
+ readonly finalize: "immediate";
10363
+ readonly methods: ["duplicatePlanObject", "duplicatePlanObjects"];
10364
+ };
10365
+ readonly visibility: {
10366
+ readonly finalize: "immediate";
10367
+ readonly methods: ["setElementVisibility"];
10368
+ };
10369
+ readonly addObjects: {
10370
+ readonly finalize: "immediate";
10371
+ readonly methods: ["addPlanObjects"];
10372
+ };
10373
+ readonly addObjectFromItem: {
10374
+ readonly finalize: "immediate";
10375
+ readonly methods: ["addPlanObjectFromItem"];
10376
+ };
10377
+ readonly merge: {
10378
+ readonly finalize: "immediate";
10379
+ readonly methods: ["mergeObjects"];
10380
+ };
10381
+ readonly group: {
10382
+ readonly finalize: "immediate";
10383
+ readonly methods: ["groupObjects"];
10384
+ };
10385
+ readonly drawing: {
10386
+ readonly finalize: "on-signal";
10387
+ readonly methods: ["beginDrawing", "addNode", "addWall"];
10388
+ };
10389
+ readonly addAttic: {
10390
+ readonly finalize: "immediate";
10391
+ readonly methods: ["addAttic"];
10392
+ };
10393
+ readonly atticSide: {
10394
+ readonly finalize: "immediate";
10395
+ readonly methods: ["setAtticSide"];
10396
+ };
10397
+ readonly atticKneeHeight: {
10398
+ readonly finalize: "immediate";
10399
+ readonly methods: ["setAtticKneeHeight"];
10400
+ };
10401
+ readonly atticWidth: {
10402
+ readonly finalize: "immediate";
10403
+ readonly methods: ["setAtticWidth"];
10404
+ };
10405
+ readonly defaultWallThickness: {
10406
+ readonly finalize: "on-signal";
10407
+ readonly methods: ["setDefaultWallThickness"];
10408
+ };
10409
+ readonly defaultWallHeight: {
10410
+ readonly finalize: "on-signal";
10411
+ readonly methods: ["setDefaultWallHeight"];
10412
+ };
10413
+ readonly defaultParapetHeight: {
10414
+ readonly finalize: "on-signal";
10415
+ readonly methods: ["setDefaultParapetHeight"];
10416
+ };
10417
+ readonly defaultExteriorWallMaterial: {
10418
+ readonly finalize: "on-signal";
10419
+ readonly idleCommitMs: 3000;
10420
+ readonly methods: ["setDefaultExteriorWallMaterial"];
10421
+ };
10422
+ readonly defaultInteriorWallMaterial: {
10423
+ readonly finalize: "on-signal";
10424
+ readonly idleCommitMs: 3000;
10425
+ readonly methods: ["setDefaultInteriorWallMaterial"];
10426
+ };
10427
+ readonly defaultFloorMaterial: {
10428
+ readonly finalize: "on-signal";
10429
+ readonly idleCommitMs: 3000;
10430
+ readonly methods: ["setDefaultFloorMaterial"];
10431
+ };
10432
+ readonly customDataJson: {
10433
+ readonly finalize: "immediate";
10434
+ readonly methods: ["setElementCustomDataJson"];
10435
+ };
10436
+ readonly wallLeftMaterial: {
10437
+ readonly finalize: "on-signal";
10438
+ readonly idleCommitMs: 3000;
10439
+ readonly methods: ["setWallLeftMaterial"];
10440
+ };
10441
+ readonly wallRightMaterial: {
10442
+ readonly finalize: "on-signal";
10443
+ readonly idleCommitMs: 3000;
10444
+ readonly methods: ["setWallRightMaterial"];
10445
+ };
10446
+ readonly floorMaterial: {
10447
+ readonly finalize: "on-signal";
10448
+ readonly idleCommitMs: 3000;
10449
+ readonly methods: ["setFloorMaterial"];
10450
+ };
10451
+ readonly floorType: {
10452
+ readonly finalize: "immediate";
10453
+ readonly methods: ["setFloorType"];
10454
+ };
10455
+ readonly edgeType: {
10456
+ readonly finalize: "immediate";
10457
+ readonly methods: ["setEdgeType"];
10458
+ };
10459
+ readonly objectFlipX: {
10460
+ readonly finalize: "immediate";
10461
+ readonly methods: ["setObjectFlipX"];
10462
+ };
10463
+ readonly objectFlipY: {
10464
+ readonly finalize: "immediate";
10465
+ readonly methods: ["setObjectFlipY"];
10466
+ };
10467
+ readonly objectCustomColor: {
10468
+ readonly finalize: "immediate";
10469
+ readonly methods: ["setObjectCustomColor"];
10470
+ };
10471
+ readonly objectCustomLabel: {
10472
+ readonly finalize: "immediate";
10473
+ readonly methods: ["setObjectCustomLabel"];
10474
+ };
10475
+ readonly objectFixedZ: {
10476
+ readonly finalize: "immediate";
10477
+ readonly methods: ["setObjectFixedZ"];
10478
+ };
10479
+ readonly addMeasure: {
10480
+ readonly finalize: "immediate";
10481
+ readonly methods: ["addMeasure"];
10482
+ };
10483
+ readonly parameterChange: {
10484
+ readonly finalize: "on-signal";
10485
+ readonly idleCommitMs: 3000;
10486
+ readonly methods: ["applyKernelParameterChange"];
10487
+ };
10488
+ readonly addOrUpdateExternal: {
10489
+ readonly finalize: "immediate";
10490
+ readonly methods: ["addOrUpdateExternalPlanObjects"];
10491
+ };
10492
+ readonly constructionBubbleEdit: {
10493
+ readonly finalize: "immediate";
10494
+ readonly methods: ["adjustConstructionElementPosition"];
10495
+ };
10496
+ readonly objectBubbleEdit: {
10497
+ readonly finalize: "immediate";
10498
+ readonly methods: ["adjustObjectPosition"];
10499
+ };
10500
+ readonly objectToWallDistanceBubbleEdit: {
10501
+ readonly finalize: "immediate";
10502
+ readonly methods: ["adjustObjectToWallDistance"];
10503
+ };
10504
+ };
10505
+
10506
+ /** The label recorded for an open/held step — what the policy compares. A step-group
10507
+ * name (from run()/transaction()) or a synthetic label. Method names are dispatch
10508
+ * INPUT, not labels; run() maps them to a group (buildDispatchTable). */
10509
+ export declare type StepLabel = keyof typeof STEP_GROUPS | SyntheticStepLabel;
10510
+
10221
10511
  export declare class StringArray extends EmsArray<string> {
10222
10512
  }
10223
10513
 
@@ -10226,6 +10516,10 @@ export declare interface SubComponentWaiter {
10226
10516
  partId: number;
10227
10517
  }
10228
10518
 
10519
+ /** Step labels not derived from a dispatched method: held-phase / transaction labels
10520
+ * plus 'adhoc' (the run() fallback). Recorded only, never called on the handler. */
10521
+ export declare type SyntheticStepLabel = 'txn' | 'drawingMode' | 'configuratorMode' | 'externalObjectLoadStart' | 'insertItems' | 'replaceObject' | 'wallHeightBatch' | 'wallThicknessBatch' | 'wallMaterialBatch' | 'adhoc';
10522
+
10229
10523
  export declare type ThreeJsColorsIn3dScene = Record<keyof typeof ROOMLE_COLORS, Color>;
10230
10524
 
10231
10525
  /**
@@ -10342,6 +10636,78 @@ export declare interface UiPossibleChildTag extends RapiTag {
10342
10636
  possibleChildren: UiPossibleChild[];
10343
10637
  }
10344
10638
 
10639
+ /**
10640
+ * Two-class split, and the source of truth for `InteractionMethodName`: everything on
10641
+ * UndoRedoHandler is Excluded from it (see types.ts).
10642
+ *
10643
+ * Where does a method go? Does its body wrap a core call in `this.run(...)`?
10644
+ * • Yes → PlanInteractionHandlerExtension (subclass): opens a tracked step, so it
10645
+ * may be classified in STEP_GROUPS and dispatched (adjust*,
10646
+ * applyKernelParameterChange, addOrUpdateExternalPlanObjects).
10647
+ * • No → UndoRedoHandler (here): step machinery (run, commit, transaction, held-
10648
+ * phase controls, dispose) and boundary ops that only reset/commit around a core
10649
+ * call (undo/redo, loadPlanXML, endDrawing, …). Never dispatched.
10650
+ */
10651
+ export declare class UndoRedoHandler {
10652
+ private _disposed;
10653
+ protected _handler: PlanInteractionHandler;
10654
+ private _state;
10655
+ private _pendingContinuations;
10656
+ private _commitWhenSettled;
10657
+ private _idleCommitTimer;
10658
+ constructor(handler: PlanInteractionHandler);
10659
+ dispose(): void;
10660
+ private _scheduleIdleCommit;
10661
+ private _clearIdleCommit;
10662
+ get isDisposed(): boolean;
10663
+ run<T>(methodName: InteractionMethodName, args: unknown[], apply: () => T): T;
10664
+ commit(): void;
10665
+ clearHistory(): void;
10666
+ private reset;
10667
+ undo(): void;
10668
+ redo(): void;
10669
+ loadPlanXML(xml: string): Plan_2;
10670
+ createPlanWithObjectFromItem(object: KernelObject, position: KernelVector3, rotationInRad: number): Plan_2;
10671
+ endDrawing(point: {
10672
+ x: number;
10673
+ y: number;
10674
+ z: number;
10675
+ }): void;
10676
+ cancelDrawing(): void;
10677
+ private _hold;
10678
+ private _release;
10679
+ manageExternalObjectLoadingStart(reason?: string): void;
10680
+ resumeExternalObjectLoading(reason?: string): void;
10681
+ manageExternalObjectLoadingEnd(shouldEnd?: boolean): void;
10682
+ startConfiguringMode(): void;
10683
+ endConfiguringMode(): void;
10684
+ beginContinuousOperation(): void;
10685
+ endContinuousOperation(): void;
10686
+ endContinuousOperationIfHeld(): void;
10687
+ transaction<T>(fn: () => T | Promise<T>, opts?: {
10688
+ newStep?: boolean;
10689
+ label?: StepLabel;
10690
+ id?: string | number;
10691
+ finalize?: FinalizeMode;
10692
+ idleCommitMs?: number;
10693
+ }): Promise<T>;
10694
+ manageItemInsertion<T>(callback: () => T | Promise<T>, newUndoRedoStep?: boolean, finalize?: FinalizeMode): Promise<T>;
10695
+ /**
10696
+ * Explicit product-swap primitive: pins one interaction across a remove
10697
+ * followed by an add so the pair always lands as a single undo/redo step,
10698
+ * regardless of either half's own finalize policy. `perform` is expected to
10699
+ * end with an operation that owns its own release (e.g. the catalog flow's
10700
+ * `manageItemInsertion`, or the HI flow's reason-driven
10701
+ * `manageExternalObjectLoadingEnd`) — that release performs the actual
10702
+ * commit. The `finally` below is a safety net: it only fires if `perform`
10703
+ * never reached that release (it threw, or simply never triggered one),
10704
+ * so the manager can't get stuck held.
10705
+ */
10706
+ replaceObject<T>(elementId: string | number, perform: () => T | Promise<T>): Promise<T>;
10707
+ expectContinuation(): void;
10708
+ onCoreLoad(reason: HiLoadObjectReason): void;
10709
+ }
10710
+
10345
10711
  export declare const enum Unit {
10346
10712
  InchFeet = 0,
10347
10713
  MM = 1,