architwin 1.14.16 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/lib/architwin.d.ts +13 -2
  2. package/lib/architwin.js +1 -1
  3. package/lib/atwinui/components/toolbar/i18n.js +71 -3
  4. package/lib/atwinui/components/toolbar/index.js +5 -1
  5. package/lib/atwinui/components/toolbar/menuBar.d.ts +1 -0
  6. package/lib/atwinui/components/toolbar/menuBar.js +12 -0
  7. package/lib/atwinui/components/toolbar/spacePartition/roomFormPane.d.ts +2 -0
  8. package/lib/atwinui/components/toolbar/spacePartition/roomFormPane.js +41 -12
  9. package/lib/atwinui/components/toolbar/spacePartition/roomTreePane.d.ts +21 -2
  10. package/lib/atwinui/components/toolbar/spacePartition/roomTreePane.js +32 -12
  11. package/lib/atwinui/components/toolbar/tagFormPane.js +2 -1
  12. package/lib/atwinui/components/toolbar/tagListPane.d.ts +7 -2
  13. package/lib/atwinui/components/toolbar/tagListPane.js +126 -38
  14. package/lib/atwinui/events.d.ts +3 -1
  15. package/lib/atwinui/events.js +629 -107
  16. package/lib/atwinui/index.js +9 -1
  17. package/lib/color.js +12 -1
  18. package/lib/loaders/polydrawerLoader.js +3 -0
  19. package/lib/types.d.ts +75 -1
  20. package/lib/types.js +17 -0
  21. package/package.json +1 -1
  22. package/static/atwinui.css +55 -7
  23. package/static/colors/SOFT_ROYAL_BLUE.png +0 -0
  24. package/static/colors/YELLOW_ORANGE.png +0 -0
  25. package/static/utility.css +156 -537
  26. package/lib/atwinui/components/toolbar/roomCreation/roomFormPane.d.ts +0 -68
  27. package/lib/atwinui/components/toolbar/roomCreation/roomFormPane.js +0 -798
  28. package/lib/atwinui/components/toolbar/roomCreation/roomLayerListPane.d.ts +0 -33
  29. package/lib/atwinui/components/toolbar/roomCreation/roomLayerListPane.js +0 -447
  30. package/lib/atwinui/components/toolbar/tagIotForm.d.ts +0 -20
  31. package/lib/atwinui/components/toolbar/tagIotForm.js +0 -391
  32. package/lib/atwinui/components/toolbar/usersPane.d.ts +0 -14
  33. package/lib/atwinui/components/toolbar/usersPane.js +0 -273
  34. package/lib/convert.d.ts +0 -13
  35. package/lib/convert.js +0 -54
@@ -167,6 +167,40 @@ i18n
167
167
  "RotateMinimap": "Rotate Minimap",
168
168
  "General Settings": "General Settings",
169
169
  "UploadImage": "Upload Image",
170
+ "IoTTags": "IoT Tags",
171
+ "AddIoTTag": "Add IoT Tag",
172
+ "LinkedSystems": "Linked Systems",
173
+ "BEMAC": "BEMAC",
174
+ "HANASYS": "HANASYS",
175
+ "URLLink": "URL Link",
176
+ "ModelName": "Model Name",
177
+ "SerialNumber": "Serial Number",
178
+ "ManufacturerSite": "Manufacturer Site",
179
+ "IoTDevices": "IoT Devices",
180
+ "SelectDevice": "Select Device",
181
+ "SystemLink": "System Link",
182
+ "LinkedIoTDevices": "Linked IoT Devices",
183
+ "Power": "Power",
184
+ "Temperature": "Temperature",
185
+ "Humidity": "Humidity",
186
+ "Pressure": "Pressure",
187
+ "Proximity": "Proximity",
188
+ "Fluid": "Fluid",
189
+ "Light": "Light",
190
+ "Gas": "Gas",
191
+ "Chemical": "Chemical",
192
+ "Submeter": "Submeter",
193
+ "Frequency": "Frequency",
194
+ "DeleteDevice": "Delete Device",
195
+ "ConfirmDeleteDevice": "Are you sure you want to delete this device? This action cannot be reversed",
196
+ "SuccessDeleteDevice": "Successfully deleted device",
197
+ "URL Link": "URL Link",
198
+ "Model Name": "Model Name",
199
+ "Serial Number": "Serial Number",
200
+ "Manufacturer Site": "Manufacturer Site",
201
+ "Select Device": "Select Device",
202
+ "System Link": "System Link",
203
+ "EditIoTTag": "Edit IoT Tag",
170
204
  "Unsend": "Unsend",
171
205
  "Pipes": "Pipes",
172
206
  "SelectPipeType": "Select Pipe Type",
@@ -234,8 +268,11 @@ i18n
234
268
  "SuccessWindowDelete": "Succesfully deleted window",
235
269
  "EnterFloorMaterial": "Enter floor material",
236
270
  "EnterWallMaterial": "Enter wall material",
271
+ "PressEscCancelRelocation": "Press Esc key to cancel relocation.",
272
+ "MoveTagCancelled": "Move Tag Cancelled",
237
273
  "Window": "Window",
238
- "CannotBackDrawingMode": "Cannot go back while drawing mode is active."
274
+ "CannotBackDrawingMode": "Cannot go back while drawing mode is active.",
275
+ "PleaseOffDrawingMode": "Action cannot be done, please turn off drawing mode."
239
276
  }
240
277
  },
241
278
  ja: {
@@ -320,7 +357,7 @@ i18n
320
357
  "EditRoom": "ルーム編集",
321
358
  "Memo": "メモ",
322
359
  "WallHeight": "高さ",
323
- "AddPartition": "パーティション追加",
360
+ "AddPartition": "区画追加",
324
361
  "DeleteRoom": "ルーム削除",
325
362
  "DoneDrawing": "描画完了",
326
363
  "NoPartitionDisplay": "表示する区画がありません",
@@ -402,6 +439,34 @@ i18n
402
439
  "RotateMinimap": "画像回転",
403
440
  "Search...": "検索...",
404
441
  "UploadImage": "画像をアップロード",
442
+ "IoTTags": "IoTタグ",
443
+ "AddIoTTag": "IoTタグの追加",
444
+ "LinkedSystems": "連携方式",
445
+ "BEMAC": "BEMAC",
446
+ "HANASYS": "HANASYS",
447
+ "URLLink": "URLリンク",
448
+ "ModelName": "機器名",
449
+ "SerialNumber": "シリアルナンバー",
450
+ "ManufacturerSite": "メーカーURL",
451
+ "IoTDevices": "IoT情報",
452
+ "SelectDevice": "IoT選択",
453
+ "SystemLink": "システムリンク",
454
+ "LinkedIoTDevices": "設定済みIoT",
455
+ "EditIoTTag": "IoTタグ編集",
456
+ "Power": "電力",
457
+ "Temperature": "温度",
458
+ "Humidity": "湿度",
459
+ "Pressure": "圧力",
460
+ "Proximity": "近接",
461
+ "Fluid": "流体",
462
+ "Light": "光",
463
+ "Gas": "ガス",
464
+ "Chemical": "化学物質",
465
+ "Submeter": "サブメーター",
466
+ "Frequency": "周波数",
467
+ "DeleteDevice": "デバイス削除",
468
+ "ConfirmDeleteDevice": "この操作は元に戻せません。このデバイスを削除しますか?",
469
+ "SuccessDeleteDevice": "デバイスを削除しました",
405
470
  "Unsend": "取り消し",
406
471
  "Pipes": "矢印マーカー",
407
472
  "SelectPipeType": "矢印マーカー種別選択",
@@ -469,8 +534,11 @@ i18n
469
534
  "SuccessWindowDelete": "建具の削除が完了しました",
470
535
  "EnterFloorMaterial": "仕上げ(床)を入力",
471
536
  "EnterWallMaterial": "仕上げ(壁)を入力",
537
+ "MoveTagCancelled": "タグの移動がキャンセルされました",
538
+ "PressEscCancelRelocation": "再配置をキャンセルするには、Esc キーを押します。",
472
539
  "Window": "建具",
473
- "CannotBackDrawingMode": "描画モードがアクティブな間は戻ることができません。"
540
+ "CannotBackDrawingMode": "描画モードがアクティブな間は戻ることができません。",
541
+ "PleaseOffDrawingMode": "操作を行う前に、描画モードをオフにしてください。"
474
542
  }
475
543
  }
476
544
  },
@@ -25,13 +25,14 @@ import { renderRoomTreePane } from "./spacePartition/roomTreePane";
25
25
  import { renderRoomFormPane } from "./spacePartition/roomFormPane";
26
26
  import { renderBasepointCalibratePane } from "./basepointCalibratePane";
27
27
  import { renderGeneralSettingsMenu } from "./generalSettingsMenuPane";
28
+ import { renderTagIOTFormPane } from './tagIotFormPane';
28
29
  import { renderScreenSharePane } from "./screenSharePane";
29
30
  import { PipeList } from "./pipeListPane";
30
31
  import { PipeForm } from "./pipeFormPane";
31
32
  const pipeList = new PipeList();
32
33
  const pipeForm = new PipeForm();
33
34
  let iFrame, sidebarContainer;
34
- let menuBar, actionBar, objectListPane, addObjectPane, tagListPane, tagFormPane, addMediaScreenForm, libraryPane, tagMessagingPane, themePane, modelControlPane, actionSettingsPane, roomTreePane, roomFormPane, basepointCalibratePane, generalSettingsPane, spaceUserListPane, viewingRemoteSpace, usersPane, pipeListPane, pipeFormPane;
35
+ let menuBar, actionBar, objectListPane, addObjectPane, tagListPane, tagFormPane, addMediaScreenForm, libraryPane, tagMessagingPane, themePane, modelControlPane, actionSettingsPane, roomTreePane, roomFormPane, basepointCalibratePane, generalSettingsPane, tagIotFormPane, spaceUserListPane, viewingRemoteSpace, usersPane, pipeListPane, pipeFormPane;
35
36
  function getIframeElement(iframeId) {
36
37
  if (!iframeId || iframeId === '') {
37
38
  console.error("IframeId is empty or undefined");
@@ -102,6 +103,7 @@ function renderToolbarUI(payload) {
102
103
  actionSettingsPane = renderActionSettingsPane();
103
104
  basepointCalibratePane = renderBasepointCalibratePane();
104
105
  generalSettingsPane = renderGeneralSettingsMenu();
106
+ tagIotFormPane = renderTagIOTFormPane();
105
107
  usersPane = renderScreenSharePane();
106
108
  pipeListPane = pipeList.renderPane();
107
109
  pipeFormPane = pipeForm.renderPane();
@@ -123,6 +125,7 @@ function renderToolbarUI(payload) {
123
125
  sidebarContainer.appendChild(tagListPane);
124
126
  sidebarContainer.appendChild(addMediaScreenForm);
125
127
  sidebarContainer.appendChild(generalSettingsPane);
128
+ sidebarContainer.appendChild(tagIotFormPane);
126
129
  sidebarContainer.appendChild(usersPane);
127
130
  sidebarContainer.appendChild(pipeListPane);
128
131
  sidebarContainer.appendChild(pipeFormPane);
@@ -146,6 +149,7 @@ function renderToolbarUI(payload) {
146
149
  roomFormPane.style.display = 'none';
147
150
  actionSettingsPane.style.display = 'none';
148
151
  generalSettingsPane.style.display = 'none';
152
+ tagIotFormPane.style.display = 'none';
149
153
  spaceUserListPane.style.display = 'none';
150
154
  viewingRemoteSpace.style.display = 'none';
151
155
  usersPane.style.display = 'none';
@@ -5,6 +5,7 @@ export declare let isThemeEnabled: boolean;
5
5
  export declare let isRoomCreationEnabled: boolean;
6
6
  export declare let isBIMEnabled: boolean;
7
7
  export declare let isGeneralSettingsEnabled: boolean;
8
+ export declare let isIoTTagEnabled: boolean;
8
9
  export declare let isSpaceScreenSharingEnabled: boolean;
9
10
  export declare let isPipeEnabled: boolean;
10
11
  export declare function renderMenuBar(iFrame: HTMLIFrameElement): HTMLDivElement;
@@ -12,6 +12,7 @@ export let isThemeEnabled = true;
12
12
  export let isRoomCreationEnabled = true;
13
13
  export let isBIMEnabled = true;
14
14
  export let isGeneralSettingsEnabled = true;
15
+ export let isIoTTagEnabled = true;
15
16
  export let isSpaceScreenSharingEnabled = false;
16
17
  export let isPipeEnabled = true;
17
18
  export function renderMenuBar(iFrame) {
@@ -47,6 +48,10 @@ export function renderMenuBar(iFrame) {
47
48
  <span class="mdi mdi-monitor-screenshot" id="at-screenshot-btn" data-cy="at-screenshot-btn"></span>
48
49
  <div class="at_icon_tooltip" data-cy="at-tooltip-screenshot">${i18n.t('Screenshot')}</div>
49
50
  </div>
51
+ <div class="at_sidebar_button_icon" style="display:${isIoTTagEnabled ? 'block' : 'none'}">
52
+ <span class="mdi mdi-apache-kafka" id="at-tag-iot-btn" data-cy="at-tag-iot-btn" target-pane="at-tag-list-pane"></span>
53
+ <div class="at_icon_tooltip" data-cy="at-tooltip-tag-iot-list">${i18n.t('IoTTags')}</div>
54
+ </div>
50
55
  <div class="at_sidebar_button_icon" style="display:${isPipeEnabled ? 'block' : 'none'}">
51
56
  <span class="mdi mdi-arrow-decision" id="at-pipe-btn" data-cy="at-pipe-btn" target-pane="at-pipe-list-pane"></span>
52
57
  <div class="at_icon_tooltip" data-cy="at-tooltip-pipe">${i18n.t('Pipes')}</div>
@@ -79,6 +84,7 @@ export function renderMenuBar(iFrame) {
79
84
  * based on the configuration specified in the _mpConfig object.
80
85
  */
81
86
  function setMenuItemsStatus() {
87
+ var _a, _b, _c, _d;
82
88
  const toolbarConfig = _mpConfig.toolbarConfig;
83
89
  const menuItems = _mpConfig.toolbarConfig.menuItems;
84
90
  console.log("menuItems", menuItems);
@@ -113,6 +119,11 @@ function setMenuItemsStatus() {
113
119
  isGeneralSettingsEnabled = _mpConfig.toolbarConfig.menuItems.generalSetting;
114
120
  log.info("__@ isGeneralSettingsEnabled: ", isGeneralSettingsEnabled);
115
121
  }
122
+ // IOT TAGS
123
+ if (((_a = menuItems === null || menuItems === void 0 ? void 0 : menuItems.iot) === null || _a === void 0 ? void 0 : _a.visible) !== undefined) {
124
+ isIoTTagEnabled = (_d = (_c = (_b = _mpConfig === null || _mpConfig === void 0 ? void 0 : _mpConfig.toolbarConfig) === null || _b === void 0 ? void 0 : _b.menuItems) === null || _c === void 0 ? void 0 : _c.iot) === null || _d === void 0 ? void 0 : _d.visible;
125
+ log.info("__@ isTagIoTFormEnabled: ", isIoTTagEnabled);
126
+ }
116
127
  // SCREEN SHARING
117
128
  if (menuItems.spaceScreenSharing !== undefined) {
118
129
  isSpaceScreenSharingEnabled = _mpConfig.toolbarConfig.menuItems.spaceScreenSharing;
@@ -145,6 +156,7 @@ export function setActiveMenu(id) {
145
156
  case 'at-room-creation-btn':
146
157
  case 'at-settings-btn':
147
158
  case 'at-general-setting-btn':
159
+ case 'at-tag-iot-btn':
148
160
  case 'at-pipe-btn':
149
161
  case 'at-screen-share-btn':
150
162
  if (parent.classList.contains('at_sidebar_button_icon_active')) {
@@ -116,3 +116,5 @@ export declare function setPreviousPartitionData(payload: PartitionNode): void;
116
116
  * @param wallUuid - The unique identifier of the wall to edit
117
117
  */
118
118
  export declare function handlePartitionWallEditBtn(wallUuid: string): Promise<void>;
119
+ export declare function getTempCurrentRoomEditData(): Array<PartitionNode>;
120
+ export declare function setTempCurrentRoomEditData(roomEditData: Array<PartitionNode>): void;
@@ -43,12 +43,12 @@ let inputWallMaterial;
43
43
  let wallMaterial = '';
44
44
  let isEditWindow = false;
45
45
  let currentEditWindowIndex = null;
46
- let newlyAddedWindow = null;
46
+ let tempCurrentEditRoom = null;
47
47
  export function renderRoomFormPane() {
48
48
  log.info("__@ renderRoomFormPane: ", roomFormMode);
49
49
  const element = document.createElement('div');
50
50
  element.classList.add('at_container');
51
- element.classList.add('at_w-12');
51
+ element.classList.add('at_w-15');
52
52
  element.classList.add('at_h-full');
53
53
  element.setAttribute('id', 'at-room-form-pane');
54
54
  element.setAttribute('data-cy', 'at-room-form-pane');
@@ -155,13 +155,13 @@ export function renderRoomFormPane() {
155
155
  </div>
156
156
  <div class="at_partition_footer">
157
157
  <!-- Add Partition Button -->
158
- <div class="at_button at_draw_partition_btn ${i18n.language === 'ja' ? 'at_draw_partition_btn_jp_font_size' : ''}"
158
+ <div class="at_button at_draw_partition_btn"
159
159
  id="at-draw-partition-form-btn" data-cy="at-draw-partition-form-btn">
160
160
  ${i18n.t('AddPartition')}
161
161
  <span class="mdi mdi-draw"></span>
162
162
  </div>
163
163
 
164
- <div class="at_button at_add_window_door_btn at_draw_partition_btn_jp_font_size"
164
+ <div class="at_button at_add_window_door_btn"
165
165
  id="at-add-window-door-btn" data-cy="at-add-window-door-btn" style="display:none;">
166
166
  ${i18n.t('AddWindowDoor')}
167
167
  <span class="mdi mdi-window-closed-variant"></span>
@@ -280,14 +280,24 @@ export function toggleDrawWindowButton() {
280
280
  if (currentPartitionData) {
281
281
  payload = {
282
282
  uuid: currentPartitionData.uuid,
283
- space_uuid: currentPartitionData.space_uuid,
284
- name: currentPartitionData.name,
285
- parent_uuid: currentPartitionData.parent_uuid,
286
283
  polygon_json: currentPolygonData
287
284
  };
288
285
  }
289
286
  // Re-render polygon
290
287
  renderPolygon(payload);
288
+ const objectIndex = _3DXObjects.findIndex(obj => obj.object.object_id == currentObject.object.object_id);
289
+ if (objectIndex != null) {
290
+ log.info("objectIndex", objectIndex);
291
+ if (_3DXObjects[objectIndex].children) {
292
+ _3DXObjects[objectIndex].children.map((win) => __awaiter(this, void 0, void 0, function* () {
293
+ var _c;
294
+ log.info("WIND", win);
295
+ if (win.index == ((_c = currentWall.windows) === null || _c === void 0 ? void 0 : _c.length) - 1 && win.wallUUID == currentWall.uuid) {
296
+ yield disposeModel(win);
297
+ }
298
+ }));
299
+ }
300
+ }
291
301
  }
292
302
  }
293
303
  /**
@@ -302,6 +312,7 @@ export function displayPartitionFormMode() {
302
312
  if (roomFormMode === "EDIT" /* FORM_MODE.EDIT */) {
303
313
  setPartitionFormMode("EDIT" /* FORM_MODE.EDIT */);
304
314
  currentEditRoomData = getCurrentEditRoomData();
315
+ tempCurrentEditRoom = Object.assign({}, currentEditRoomData);
305
316
  populatePartitionForm(currentEditRoomData);
306
317
  }
307
318
  else {
@@ -844,8 +855,9 @@ function displayWindows(window) {
844
855
  const element = document.createElement('div');
845
856
  element.classList.add('at_dropdown_item');
846
857
  // Extract the wall name from the format "_wall-{number}" using regex
847
- const match = window.name.match(/window-(\d+)$/);
858
+ const match = window.name.match(/Window (\d+)$/);
848
859
  let windowName = '';
860
+ log.info("match", match);
849
861
  if (match) {
850
862
  const wallNumber = parseInt(match[1]);
851
863
  windowName = `${i18n.t('Window')} ${wallNumber}`;
@@ -872,15 +884,18 @@ function displayWindows(window) {
872
884
  </div>
873
885
  <div class="at_subitem_right">
874
886
  <span class="mdi mdi-pencil" id="at-edit-window-btn-${window.index}" style="display: ${editDisplay};"></span>
875
- <span class="mdi mdi-check" id="at-confirm-edit-window-${window.index}" data-cy="at-confirm-edit-window-${window.index}" style="display: ${confirmDisplay};"></span>
887
+ <!-- <span class="mdi mdi-check" id="at-confirm-edit-window-${window.index}" data-cy="at-confirm-edit-window-${window.index}" style="display: ${confirmDisplay};"></span> -->
888
+ <div class="at_save_button at_text_xs at_ghost" id="at-confirm-edit-window-${window.index}" data-cy="at-confirm-edit-window-${window.index}" style="display: ${confirmDisplay}; margin-top: 2px !important;">
889
+ ${i18n.t('Save')}
890
+ </div>
876
891
  <span class="mdi mdi-delete-outline" id="at-delete-window-btn-${window.index}"></span>
877
892
  </div>
878
893
  </div>
879
894
  <div class="at_edit_name" id="at-edit-window-name-${window.index}" data-index="${window.index}" style="display: ${confirmDisplay};">
880
- <input class="at_edit_name_input" type="text" id="at-edit-window-name-input-${window.index}" data-cy="at-edit-window-name-input-${window.index}" value="${windowName}" placeholder="${i18n.t('EnterNameHere')}">
895
+ <input class="at_edit_name_input at_text_xs" type="text" id="at-edit-window-name-input-${window.index}" data-cy="at-edit-window-name-input-${window.index}" value="${windowName}" placeholder="${i18n.t('EnterNameHere')}">
881
896
  </div>
882
897
  <div class="at_edit_material" id="at-edit-window-material-${window.index}" data-index="${window.index}" style="display: ${confirmDisplay};">
883
- <input class="at_edit_material_input" type="text" id="at-edit-window-material-input-${window.index}" data-cy="at-edit-window-material-input-${window.index}" value="${(_a = window.material) !== null && _a !== void 0 ? _a : ''}" placeholder="${i18n.t('EnterMaterialHere')}">
898
+ <input class="at_edit_material_input at_text_xs" type="text" id="at-edit-window-material-input-${window.index}" data-cy="at-edit-window-material-input-${window.index}" value="${(_a = window.material) !== null && _a !== void 0 ? _a : ''}" placeholder="${i18n.t('EnterMaterialHere')}">
884
899
  </div>
885
900
  `;
886
901
  const nameElement = element.querySelector(`#at-window-name-${window.index}`);
@@ -913,6 +928,10 @@ function setupEditWindow(element, window) {
913
928
  return;
914
929
  // Show inputs when edit icon is clicked
915
930
  editBtn.addEventListener("click", () => {
931
+ if (isDrawing) {
932
+ notify.error(`${i18n.t('PleaseOffDrawingMode')}`);
933
+ return;
934
+ }
916
935
  log.info("window", window);
917
936
  editNameContainer.style.display = "flex";
918
937
  editMaterialContainer.style.display = "flex";
@@ -1243,6 +1262,7 @@ export function clearPartitionForm() {
1243
1262
  drawingMode = null;
1244
1263
  currentEditWindowIndex = null;
1245
1264
  isEditWindow = false;
1265
+ tempCurrentEditRoom = null;
1246
1266
  }
1247
1267
  /**
1248
1268
  * Cancels the drawing action for a partition.
@@ -1504,6 +1524,7 @@ export function setCurrentPartitionData() {
1504
1524
  setMeshChildrenMaterialProperty(currentHighlightedFace.component, currentHighlightedFace.name, currentHighlightedFace.type, currentHighlightedFace.value);
1505
1525
  }
1506
1526
  updatePartitionDataArray(newPayload, currentPartitionDataArray);
1527
+ log.info("if currentPartitionDataArray", currentPartitionDataArray);
1507
1528
  if (drawingMode === 'partition') {
1508
1529
  displayFaces(currentPolygonData);
1509
1530
  }
@@ -1525,6 +1546,7 @@ export function setCurrentPartitionData() {
1525
1546
  currentPartitionDataArray = currentPartitionDataArray.filter(partition => partition.uuid != currentPartitionData.uuid);
1526
1547
  dispatchSpaceEvent(SPACE_EVENTS.PARTITION_DISPOSED, currentPartitionData);
1527
1548
  currentPartitionData = null;
1549
+ log.info("else currentPartitionDataArray", currentPartitionDataArray);
1528
1550
  }
1529
1551
  }
1530
1552
  });
@@ -1552,10 +1574,11 @@ function updatePartitionDataArray(payload, currentPartitionDataArray) {
1552
1574
  currentPartitionData = payload;
1553
1575
  }
1554
1576
  else if (drawingMode === 'window') {
1577
+ log.info("currentPartitionData", currentPartitionData);
1555
1578
  // Update current partition data
1556
1579
  currentPartitionData.polygon_json = JSON.stringify(payload.polygon_json);
1557
1580
  // Update current partition data array
1558
- const currentPartitionDataIndex = currentPartitionDataArray.findIndex(partitionData => partitionData.uuid = currentPartitionData.uuid);
1581
+ const currentPartitionDataIndex = currentPartitionDataArray.findIndex(partitionData => partitionData.uuid == currentPartitionData.uuid);
1559
1582
  currentPartitionDataArray[currentPartitionDataIndex] = currentPartitionData;
1560
1583
  }
1561
1584
  dispatchSpaceEvent(SPACE_EVENTS.PARTITION_EDITED, { data: currentPartitionData });
@@ -1728,3 +1751,9 @@ export function handlePartitionWallEditBtn(wallUuid) {
1728
1751
  cancelDrawing();
1729
1752
  });
1730
1753
  }
1754
+ export function getTempCurrentRoomEditData() {
1755
+ return tempCurrentEditRoom;
1756
+ }
1757
+ export function setTempCurrentRoomEditData(roomEditData) {
1758
+ tempCurrentEditRoom = roomEditData;
1759
+ }
@@ -75,9 +75,28 @@ export declare function updateRoomVisibilityUI(parentId: string, isVisible: bool
75
75
  * @param name - The specific name/identifier of the child element to highlight
76
76
  */
77
77
  export declare function highlightSelectedPartitionChild(partitionId: string, name: string): void;
78
- export declare function toggeleExpandParitionWallChild(partitionId: string, name: string): void;
79
- export declare function highlightSelectedWallWindow(wallUuid: string, index: number | string): void;
78
+ /**
79
+ * Toggles the visibility of child elements within a partition wall by managing CSS classes.
80
+ * @param partitionId - The unique identifier of the partition containing the child elements
81
+ * @param name - The specific name/identifier of the child element whose container to toggle
82
+ * @param expand - Optional boolean to explicitly set expansion state (true = show, false = hide). If undefined, toggles current state
83
+ */
84
+ export declare function toggleExpandParitionWallChild(partitionId: string, name: string, expand?: boolean): void;
85
+ /**
86
+ * Highlights the selected window element by toggling CSS classes and ensures its parent partition is expanded.
87
+ * @param wallUuid - The unique identifier of the wall containing the window elements
88
+ * @param index - The index or identifier of the specific window element to highlight
89
+ */
90
+ export declare function highlightSelectedWindow(wallUuid: string, index: number | string): void;
91
+ /**
92
+ * Removes the highlight from all selected window items by removing the 'selected' CSS class.
93
+ */
80
94
  export declare function toggleHighlightedWindowItem(): void;
95
+ /**
96
+ * Calculates the midpoint (centroid) of multiple 3D coordinates by averaging their x, y, and z values.
97
+ * @param coords - An array of objects containing start Vector3 coordinates
98
+ * @returns A Vector3 representing the calculated midpoint of all input coordinates
99
+ */
81
100
  export declare function calculateMidPoint(coords: Array<{
82
101
  start: Vector3;
83
102
  }>): Vector3;
@@ -27,7 +27,7 @@ export function renderRoomTreePane() {
27
27
  log.info("__@ renderRoomTreePane");
28
28
  const element = document.createElement('div');
29
29
  element.classList.add('at_container');
30
- element.classList.add('at_w-12');
30
+ element.classList.add('at_w-15');
31
31
  element.classList.add('at_h-full');
32
32
  element.setAttribute('id', 'at-room-tree-pane');
33
33
  element.setAttribute('data-cy', 'at-room-tree-pane');
@@ -387,7 +387,6 @@ function toggleSelectedPartition() {
387
387
  yield goToPosition(wallBottomMidPoint);
388
388
  highlightSelectedPartitionChild(partitionId, objectName);
389
389
  toggleHighlightedWindowItem();
390
- toggeleExpandParitionWallChild(partitionId, objectName);
391
390
  }
392
391
  catch (e) {
393
392
  log.info('goToPosition failed: ', e);
@@ -453,7 +452,7 @@ function toggleSelectedPartition() {
453
452
  try {
454
453
  const windowBottomMidPoint = calculateMidPoint(windowCoords);
455
454
  yield goToPosition(windowBottomMidPoint);
456
- highlightSelectedWallWindow(wallUuid, windowIndex);
455
+ highlightSelectedWindow(wallUuid, windowIndex);
457
456
  }
458
457
  catch (e) {
459
458
  log.info('goToPosition failed: ', e);
@@ -613,10 +612,8 @@ export function updatePolygonVisibilityData(isVisible, currPartition, isFloor, p
613
612
  log.info("WALL!");
614
613
  // WALLS
615
614
  targetItem = polygonJson.walls.find(item => item.uuid === polygonItemId) || null;
616
- // <START_COMMENT> TODO: 16032 - uncomment when polygon loader window visibility update is implemented
617
- // const windows = targetItem?.windows || null
618
- // windows?.forEach(w => w.options.is_visible = isVisible)
619
- // <END_COMMENT> TODO: 16032 - uncomment when polygon loader window visibility update is implemented
615
+ const windows = (targetItem === null || targetItem === void 0 ? void 0 : targetItem.windows) || null;
616
+ windows === null || windows === void 0 ? void 0 : windows.forEach(w => w.options.is_visible = isVisible);
620
617
  }
621
618
  log.info("targetItem:", targetItem);
622
619
  if (targetItem) {
@@ -669,6 +666,9 @@ function updatePolygonData(currPartition, isVisible, isUpdateAllChildren) {
669
666
  polygonJson.floor.options.is_visible = isVisible;
670
667
  polygonJson.walls.forEach(wall => {
671
668
  wall.options.is_visible = isVisible;
669
+ if (wall === null || wall === void 0 ? void 0 : wall.windows) {
670
+ wall === null || wall === void 0 ? void 0 : wall.windows.forEach(window => window.options.is_visible = isVisible);
671
+ }
672
672
  });
673
673
  }
674
674
  }
@@ -724,18 +724,25 @@ export function highlightSelectedPartitionChild(partitionId, name) {
724
724
  header.classList.toggle('selected', isSelected);
725
725
  const arrow = header.querySelector('.at_partition_child_expand_icon');
726
726
  if (arrow && arrow.textContent) {
727
- // Use replace to only affect elements that have arrows
728
727
  if (isSelected) {
729
728
  arrow.textContent = arrow.textContent.replace('▶', '▼');
729
+ toggleExpandParitionWallChild(partitionId, name, false);
730
730
  }
731
731
  else {
732
732
  arrow.textContent = arrow.textContent.replace('▼', '▶');
733
+ toggleExpandParitionWallChild(partitionId, name, true);
733
734
  }
734
735
  }
735
736
  }
736
737
  });
737
738
  }
738
- export function toggeleExpandParitionWallChild(partitionId, name) {
739
+ /**
740
+ * Toggles the visibility of child elements within a partition wall by managing CSS classes.
741
+ * @param partitionId - The unique identifier of the partition containing the child elements
742
+ * @param name - The specific name/identifier of the child element whose container to toggle
743
+ * @param expand - Optional boolean to explicitly set expansion state (true = show, false = hide). If undefined, toggles current state
744
+ */
745
+ export function toggleExpandParitionWallChild(partitionId, name, expand) {
739
746
  const partitionChildren = document.querySelectorAll(`li[partition-li-id="${partitionId}"]`);
740
747
  const targetId = `partition-child-${name}`;
741
748
  partitionChildren.forEach((partitionChild) => {
@@ -743,7 +750,7 @@ export function toggeleExpandParitionWallChild(partitionId, name) {
743
750
  const listContainer = partitionChild.querySelector('.at_wall_children_container');
744
751
  if (listContainer) {
745
752
  if (isSelected) {
746
- listContainer.classList.toggle('at_hidden');
753
+ listContainer.classList.toggle('at_hidden', expand !== undefined ? !expand : undefined);
747
754
  }
748
755
  else {
749
756
  listContainer.classList.add('at_hidden');
@@ -823,7 +830,12 @@ function openWindowEdit(targetElement, parentRoomElement, parentRoomUuid, partit
823
830
  }
824
831
  });
825
832
  }
826
- export function highlightSelectedWallWindow(wallUuid, index) {
833
+ /**
834
+ * Highlights the selected window element by toggling CSS classes and ensures its parent partition is expanded.
835
+ * @param wallUuid - The unique identifier of the wall containing the window elements
836
+ * @param index - The index or identifier of the specific window element to highlight
837
+ */
838
+ export function highlightSelectedWindow(wallUuid, index) {
827
839
  const wallWindow = document.querySelectorAll(`li[wall-id="${wallUuid}"]`);
828
840
  const targetId = `window-${wallUuid}-${index}`;
829
841
  wallWindow.forEach((windowElement) => {
@@ -831,17 +843,25 @@ export function highlightSelectedWallWindow(wallUuid, index) {
831
843
  const parentWallItem = windowElement.closest('li.at_partition_wall_row_item');
832
844
  const partitionId = parentWallItem.getAttribute('partition-li-id');
833
845
  const objectName = parentWallItem.getAttribute('object-name');
834
- toggeleExpandParitionWallChild(partitionId, objectName);
846
+ toggleExpandParitionWallChild(partitionId, objectName, true);
835
847
  }
836
848
  windowElement.classList.toggle('selected', windowElement.id === targetId);
837
849
  });
838
850
  }
851
+ /**
852
+ * Removes the highlight from all selected window items by removing the 'selected' CSS class.
853
+ */
839
854
  export function toggleHighlightedWindowItem() {
840
855
  const windowItems = document.querySelectorAll('li.at_wall_window_row_item.selected');
841
856
  windowItems.forEach(el => {
842
857
  el.classList.remove('selected');
843
858
  });
844
859
  }
860
+ /**
861
+ * Calculates the midpoint (centroid) of multiple 3D coordinates by averaging their x, y, and z values.
862
+ * @param coords - An array of objects containing start Vector3 coordinates
863
+ * @returns A Vector3 representing the calculated midpoint of all input coordinates
864
+ */
845
865
  export function calculateMidPoint(coords) {
846
866
  const count = coords.length;
847
867
  const sum = coords.reduce((acc, coord) => ({
@@ -1,5 +1,6 @@
1
1
  import { _tagCategories, _tags, getMpTags } from "../../../architwin";
2
2
  import { convertToCssRgb, stringContains } from "../../../utils";
3
+ import { TAG_TYPE } from "../../../types";
3
4
  import { renderTags, setSelectedCategoryFilter, setSelectedSubcategoryFilter, filterTagList, getAllSubcategories, selectedCategoryFilterId, sortTags, selectedTagSortOption } from './tagListPane';
4
5
  import i18n from './i18n';
5
6
  let mode = 'adding';
@@ -341,7 +342,7 @@ function selectOption(option, elementId, skipToggle = false) {
341
342
  const elementId = isFilterDropdown ? 'at-subcategory-filter-options' : 'at-subcategory-options';
342
343
  clearInnerHTML(elementId);
343
344
  }
344
- const tags = getMpTags();
345
+ let tags = getMpTags().filter(tag => !tag.tag_type || tag.tag_type !== TAG_TYPE.IOT);
345
346
  const filteredTags = filterTagList(tags);
346
347
  const sortedTags = sortTags(filteredTags ? filteredTags : tags, selectedTagSortOption);
347
348
  renderTags(sortedTags);
@@ -1,12 +1,14 @@
1
- import { ITag, ITagCategory, SortConfig } from "../../../types";
1
+ import { ITag, ITagCategory, SortConfig, TAG_TYPE } from "../../../types";
2
2
  import { MpSdk } from "../../../../bundle/sdk";
3
3
  export declare let selectedCategoryFilterId: any;
4
4
  export declare let selectedSubCategoryFilterId: any;
5
+ export declare let isTagPaneActive: boolean;
6
+ export declare let currentTagPaneMode: TAG_TYPE | null;
5
7
  export declare let selectedTagSortOption: SortConfig;
6
8
  export declare function renderTagListPane(): HTMLElement;
7
9
  export declare function isTagPartOfCategory(categoryUUID: string): boolean;
8
10
  export declare function renderTags(tags: Array<ITag>, showOwnTagsOnly?: boolean): void;
9
- export declare function renderTagRow(tag: MpSdk.Tag.TagData, tagIconUrl: string): HTMLElement;
11
+ export declare function renderTagRow(tag: MpSdk.Tag.TagData, tagIconUrl: string, tag_type?: string): HTMLElement;
10
12
  export declare function setTagLink(link: string): void;
11
13
  export declare function getTagLink(): void;
12
14
  export declare function addClickEventToTagRow(tag: MpSdk.Tag.TagData): void;
@@ -18,6 +20,9 @@ export declare function getSearchTagTerm(): string;
18
20
  export declare function searchTagList(tags: Array<ITag>): Array<ITag>;
19
21
  export declare function setSearchTagTerm(searchTagName: string): void;
20
22
  export declare function searchClearfield(): void;
23
+ export declare function filterIotTagList(tags: Array<ITag>): Array<ITag>;
24
+ export declare function setTagPaneActive(value: boolean): void;
25
+ export declare function setCurrentTagPaneMode(value: TAG_TYPE | null): void;
21
26
  export declare const sortTags: (items: ITag[], options: SortConfig) => ITag[];
22
27
  export declare function updateSelectedTagSortOption(sortOption: string): void;
23
28
  export declare function resetSelectedTagSortOption(): void;