vease 1.48.0-rc.13 → 1.48.0-rc.15

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 (81) hide show
  1. package/package.json +1 -1
  2. package/tests/e2e/utils/app_interaction.js +2 -2
  3. package/tests/e2e/utils/app_interaction.ts +4 -3
  4. package/tests/e2e/utils/camera_interaction.js +1 -0
  5. package/tests/e2e/utils/camera_interaction.ts +30 -21
  6. package/tests/e2e/utils/clipping_planes_interaction.ts +8 -7
  7. package/tests/e2e/utils/create_objects.ts +27 -13
  8. package/tests/e2e/utils/data/helpers/attribute.js +4 -4
  9. package/tests/e2e/utils/data/helpers/attribute.ts +36 -27
  10. package/tests/e2e/utils/data/helpers/color.js +12 -10
  11. package/tests/e2e/utils/data/helpers/color.ts +65 -21
  12. package/tests/e2e/utils/data/helpers/color_picker.js +3 -6
  13. package/tests/e2e/utils/data/helpers/color_picker.ts +15 -8
  14. package/tests/e2e/utils/data/mesh/cells/attribute.js +10 -10
  15. package/tests/e2e/utils/data/mesh/cells/attribute.ts +27 -11
  16. package/tests/e2e/utils/data/mesh/cells/color.js +8 -8
  17. package/tests/e2e/utils/data/mesh/cells/color.ts +9 -8
  18. package/tests/e2e/utils/data/mesh/cells/visibility.js +2 -2
  19. package/tests/e2e/utils/data/mesh/cells/visibility.ts +3 -2
  20. package/tests/e2e/utils/data/mesh/edges/attribute.js +10 -10
  21. package/tests/e2e/utils/data/mesh/edges/attribute.ts +27 -11
  22. package/tests/e2e/utils/data/mesh/edges/color.js +8 -8
  23. package/tests/e2e/utils/data/mesh/edges/color.ts +9 -8
  24. package/tests/e2e/utils/data/mesh/edges/visibility.js +2 -2
  25. package/tests/e2e/utils/data/mesh/edges/visibility.ts +3 -2
  26. package/tests/e2e/utils/data/mesh/edges/width.js +2 -2
  27. package/tests/e2e/utils/data/mesh/edges/width.ts +3 -2
  28. package/tests/e2e/utils/data/mesh/points/attribute.js +4 -4
  29. package/tests/e2e/utils/data/mesh/points/attribute.ts +17 -5
  30. package/tests/e2e/utils/data/mesh/points/color.js +8 -8
  31. package/tests/e2e/utils/data/mesh/points/color.ts +9 -8
  32. package/tests/e2e/utils/data/mesh/points/size.js +2 -2
  33. package/tests/e2e/utils/data/mesh/points/size.ts +3 -2
  34. package/tests/e2e/utils/data/mesh/points/visibility.js +2 -2
  35. package/tests/e2e/utils/data/mesh/points/visibility.ts +3 -2
  36. package/tests/e2e/utils/data/mesh/polygon/attribute.js +10 -10
  37. package/tests/e2e/utils/data/mesh/polygon/attribute.ts +27 -11
  38. package/tests/e2e/utils/data/mesh/polygon/color.js +8 -8
  39. package/tests/e2e/utils/data/mesh/polygon/color.ts +9 -8
  40. package/tests/e2e/utils/data/mesh/polygon/textures.js +2 -2
  41. package/tests/e2e/utils/data/mesh/polygon/textures.ts +3 -2
  42. package/tests/e2e/utils/data/mesh/polygon/visibility.js +2 -2
  43. package/tests/e2e/utils/data/mesh/polygon/visibility.ts +3 -2
  44. package/tests/e2e/utils/data/mesh/polyhedra/attribute.js +10 -10
  45. package/tests/e2e/utils/data/mesh/polyhedra/attribute.ts +27 -11
  46. package/tests/e2e/utils/data/mesh/polyhedra/color.js +10 -10
  47. package/tests/e2e/utils/data/mesh/polyhedra/color.ts +11 -10
  48. package/tests/e2e/utils/data/mesh/polyhedra/visibility.js +2 -2
  49. package/tests/e2e/utils/data/mesh/polyhedra/visibility.ts +3 -2
  50. package/tests/e2e/utils/data/model/attribute.js +26 -26
  51. package/tests/e2e/utils/data/model/attribute.ts +70 -26
  52. package/tests/e2e/utils/data/model/color.js +8 -8
  53. package/tests/e2e/utils/data/model/color.ts +9 -8
  54. package/tests/e2e/utils/data/model/edges/visibility.js +2 -2
  55. package/tests/e2e/utils/data/model/edges/visibility.ts +3 -2
  56. package/tests/e2e/utils/data/model/points/size.js +2 -2
  57. package/tests/e2e/utils/data/model/points/size.ts +3 -2
  58. package/tests/e2e/utils/data/model/points/visibility.js +2 -2
  59. package/tests/e2e/utils/data/model/points/visibility.ts +3 -2
  60. package/tests/e2e/utils/data_manager.ts +13 -12
  61. package/tests/e2e/utils/extension.js +2 -2
  62. package/tests/e2e/utils/extension.ts +5 -4
  63. package/tests/e2e/utils/fixtures.js +3 -3
  64. package/tests/e2e/utils/fixtures.ts +15 -12
  65. package/tests/e2e/utils/load.js +1 -1
  66. package/tests/e2e/utils/load.ts +7 -7
  67. package/tests/e2e/utils/navigate.js +52 -36
  68. package/tests/e2e/utils/navigate.ts +80 -46
  69. package/tests/e2e/utils/object_trees/common.js +8 -3
  70. package/tests/e2e/utils/object_trees/common.ts +57 -20
  71. package/tests/e2e/utils/object_trees/main_object_tree.js +10 -10
  72. package/tests/e2e/utils/object_trees/main_object_tree.ts +26 -17
  73. package/tests/e2e/utils/object_trees/model_components_object_tree.js +18 -18
  74. package/tests/e2e/utils/object_trees/model_components_object_tree.ts +52 -26
  75. package/tests/e2e/utils/other.js +5 -1
  76. package/tests/e2e/utils/other.ts +12 -2
  77. package/tests/e2e/utils/project_interaction.ts +3 -2
  78. package/tests/e2e/utils/types/kill_port.d.js +1 -0
  79. package/tests/e2e/utils/types/kill_port.d.ts +3 -0
  80. package/tests/e2e/utils/viewer_interaction.js +38 -26
  81. package/tests/e2e/utils/viewer_interaction.ts +110 -43
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vease",
3
- "version": "1.48.0-rc.13",
3
+ "version": "1.48.0-rc.15",
4
4
  "description": "Desktop and cloud software for data visualization",
5
5
  "keywords": [
6
6
  "Desktop",
@@ -1,7 +1,7 @@
1
1
  import { afterActionWait } from "./constants.js";
2
2
  //#region tests/e2e/utils/app_interaction.ts
3
- function moveMouseOutOfTheWay(window) {
4
- return window.mouse.move(0, 0);
3
+ async function moveMouseOutOfTheWay(window) {
4
+ await window.mouse.move(0, 0);
5
5
  }
6
6
  async function closeAllMenus(window) {
7
7
  await window.keyboard.press("Escape");
@@ -1,9 +1,10 @@
1
+ import type { Page } from "@playwright/test";
1
2
  import { afterActionWait } from "./constants";
2
3
 
3
- function moveMouseOutOfTheWay(window) {
4
- return window.mouse.move(0, 0);
4
+ async function moveMouseOutOfTheWay(window: Page): Promise<void> {
5
+ await window.mouse.move(0, 0);
5
6
  }
6
- async function closeAllMenus(window) {
7
+ async function closeAllMenus(window: Page): Promise<void> {
7
8
  await window.keyboard.press("Escape");
8
9
  await window.waitForTimeout(afterActionWait);
9
10
  }
@@ -83,6 +83,7 @@ async function toggleShrinkFilter(window) {
83
83
  async function setShrinkFactor(window, shrinkFactorValue) {
84
84
  const slider = window.getByTestId("shrinkFactorSlider");
85
85
  const box = await slider.boundingBox();
86
+ if (!box) throw new Error("Could not get bounding box of the shrink factor slider.");
86
87
  const clickX = box.width * shrinkFactorValue;
87
88
  await slider.click({ position: {
88
89
  x: clickX,
@@ -1,29 +1,31 @@
1
+ import type { Page } from "@playwright/test";
2
+
1
3
  import { afterActionWait, dragElement, getHybridViewerCanvas } from "./viewer_interaction";
2
4
  import { closeAllMenus, moveMouseOutOfTheWay } from "./app_interaction";
3
5
 
4
- async function resetCamera(window) {
6
+ async function resetCamera(window: Page): Promise<void> {
5
7
  await window.getByTestId("resetCameraButton").click();
6
8
  await moveMouseOutOfTheWay(window);
7
9
  await window.waitForTimeout(afterActionWait);
8
10
  }
9
11
 
10
- async function rotateCamera(window, deltaX, deltaY = 0) {
12
+ async function rotateCamera(window: Page, deltaX: number, deltaY = 0): Promise<void> {
11
13
  const hybridViewerCanvas = getHybridViewerCanvas(window);
12
14
  await dragElement(window, hybridViewerCanvas, { deltaX, deltaY });
13
15
  }
14
16
 
15
- async function toggleCenterOnClick(window) {
17
+ async function toggleCenterOnClick(window: Page): Promise<void> {
16
18
  await window.getByTestId("centerOnClickButton").click();
17
19
  await window.waitForTimeout(afterActionWait);
18
20
  }
19
21
 
20
- async function toggleGridScale(window) {
22
+ async function toggleGridScale(window: Page): Promise<void> {
21
23
  await closeAllMenus(window);
22
24
  await window.getByTestId("gridScaleButton").click();
23
25
  await window.waitForTimeout(afterActionWait);
24
26
  }
25
27
 
26
- async function setZScaling(window, zScaleValue) {
28
+ async function setZScaling(window: Page, zScaleValue: number): Promise<void> {
27
29
  await closeAllMenus(window);
28
30
  await window.getByTestId("zScalingButton").click();
29
31
  await window.waitForTimeout(afterActionWait);
@@ -42,12 +44,12 @@ async function setZScaling(window, zScaleValue) {
42
44
  await window.waitForTimeout(afterActionWait);
43
45
  }
44
46
 
45
- async function toggleCameraManager(window) {
47
+ async function toggleCameraManager(window: Page): Promise<void> {
46
48
  await window.getByTestId("cameraManagerButton").click();
47
49
  await window.waitForTimeout(afterActionWait);
48
50
  }
49
51
 
50
- async function saveCameraPosition(window, name) {
52
+ async function saveCameraPosition(window: Page, name: string): Promise<void> {
51
53
  const input = window.getByTestId("cameraPositionNameInput").locator("input");
52
54
  await input.fill(name);
53
55
  await window.waitForTimeout(afterActionWait);
@@ -55,28 +57,28 @@ async function saveCameraPosition(window, name) {
55
57
  await window.waitForTimeout(afterActionWait);
56
58
  }
57
59
 
58
- async function closeCameraManager(window) {
60
+ async function closeCameraManager(window: Page): Promise<void> {
59
61
  await window.getByTestId("closeCameraManagerButton").click();
60
62
  await window.waitForTimeout(afterActionWait);
61
63
  }
62
64
 
63
- async function toggleCameraOrientation(window) {
65
+ async function toggleCameraOrientation(window: Page): Promise<void> {
64
66
  await window.getByTestId("cameraOrientationButton").click();
65
67
  await window.waitForTimeout(afterActionWait);
66
68
  }
67
69
 
68
- async function selectCameraOrientation(window, label) {
70
+ async function selectCameraOrientation(window: Page, label: string): Promise<void> {
69
71
  const vtkKey = label.replace("+", "Plus").replace("-", "Minus");
70
72
  await window.getByTestId(`cameraOrientation${vtkKey}Button`).click();
71
73
  await window.waitForTimeout(afterActionWait);
72
74
  }
73
75
 
74
- async function restoreCameraPosition(window, name) {
76
+ async function restoreCameraPosition(window: Page, name: string): Promise<void> {
75
77
  await window.getByTestId(`restoreCameraPosition${name}Button`).click();
76
78
  await window.waitForTimeout(afterActionWait);
77
79
  }
78
80
 
79
- async function ensureHighlightMenuOpen(window, childButtonTestId) {
81
+ async function ensureHighlightMenuOpen(window: Page, childButtonTestId: string): Promise<void> {
80
82
  if (!(await window.getByTestId(childButtonTestId).isVisible())) {
81
83
  await window.getByTestId("highlightOnHoverButton").click();
82
84
  await window.waitForTimeout(afterActionWait);
@@ -87,32 +89,35 @@ async function ensureHighlightMenuOpen(window, childButtonTestId) {
87
89
  }
88
90
  }
89
91
 
90
- async function toggleShrinkFilter(window) {
92
+ async function toggleShrinkFilter(window: Page): Promise<void> {
91
93
  await window.getByTestId("shrinkFilterButton").click();
92
94
  await window.waitForTimeout(afterActionWait);
93
95
  }
94
96
 
95
- async function setShrinkFactor(window, shrinkFactorValue) {
97
+ async function setShrinkFactor(window: Page, shrinkFactorValue: number): Promise<void> {
96
98
  const slider = window.getByTestId("shrinkFactorSlider");
97
99
  const box = await slider.boundingBox();
100
+ if (!box) {
101
+ throw new Error("Could not get bounding box of the shrink factor slider.");
102
+ }
98
103
  const clickX = box.width * shrinkFactorValue;
99
104
  await slider.click({ position: { x: clickX, y: box.height / 2 } });
100
105
  await window.waitForTimeout(afterActionWait);
101
106
  }
102
107
 
103
- async function resetShrinkFilter(window) {
108
+ async function resetShrinkFilter(window: Page): Promise<void> {
104
109
  await window.getByTestId("resetShrinkButton").click();
105
110
  await window.waitForTimeout(afterActionWait);
106
111
  }
107
112
 
108
- async function toggleShrinkTargetAllVisible(window) {
113
+ async function toggleShrinkTargetAllVisible(window: Page): Promise<void> {
109
114
  const switchElement = window.getByTestId("shrinkTargetAllVisibleSwitch");
110
115
  const checkbox = switchElement.getByRole("checkbox");
111
116
  await checkbox.click();
112
117
  await window.waitForTimeout(afterActionWait);
113
118
  }
114
119
 
115
- async function selectShrinkDatasets(window, datasetName, index = 0) {
120
+ async function selectShrinkDatasets(window: Page, datasetName: string, index = 0): Promise<void> {
116
121
  const select = window.getByTestId("shrinkSelectedDatasetsSelect");
117
122
  await select.click();
118
123
  await window.waitForTimeout(afterActionWait);
@@ -123,20 +128,24 @@ async function selectShrinkDatasets(window, datasetName, index = 0) {
123
128
  await window.waitForTimeout(afterActionWait);
124
129
  }
125
130
 
126
- async function toggleRuler(window) {
131
+ async function toggleRuler(window: Page): Promise<void> {
127
132
  await closeAllMenus(window);
128
133
  await window.getByTestId("rulerButton").click();
129
134
  await window.waitForTimeout(afterActionWait);
130
135
  }
131
136
 
132
- async function toggleRulerSnap(window) {
137
+ async function toggleRulerSnap(window: Page): Promise<void> {
133
138
  const switchElement = window.getByTestId("rulerSnapToggle");
134
139
  const checkbox = switchElement.getByRole("checkbox");
135
140
  await checkbox.click();
136
141
  await window.waitForTimeout(afterActionWait);
137
142
  }
138
143
 
139
- async function setRulerPointInput(window, pointIndex, coords) {
144
+ async function setRulerPointInput(
145
+ window: Page,
146
+ pointIndex: number,
147
+ coords: number[],
148
+ ): Promise<void> {
140
149
  const card = window.getByTestId("rulerPointCard").nth(pointIndex - 1);
141
150
  for (let axis = 0; axis < coords.length; axis += 1) {
142
151
  const input = card.getByTestId("rulerPointCoordInput").nth(axis).locator("input");
@@ -147,7 +156,7 @@ async function setRulerPointInput(window, pointIndex, coords) {
147
156
  await window.waitForTimeout(afterActionWait);
148
157
  }
149
158
 
150
- async function clearRuler(window) {
159
+ async function clearRuler(window: Page): Promise<void> {
151
160
  await window.getByTestId("rulerClearButton").click();
152
161
  await window.waitForTimeout(afterActionWait);
153
162
  }
@@ -1,16 +1,17 @@
1
+ import type { Page } from "@playwright/test";
1
2
  import { afterActionWait } from "./viewer_interaction";
2
3
 
3
- async function toggleClippingPlanes(window) {
4
+ async function toggleClippingPlanes(window: Page): Promise<void> {
4
5
  await window.getByTestId("clippingPlanesButton").click();
5
6
  await window.waitForTimeout(afterActionWait);
6
7
  }
7
8
 
8
- async function invertPlaneNormal(window, planeIndex = 0) {
9
+ async function invertPlaneNormal(window: Page, planeIndex = 0): Promise<void> {
9
10
  await window.getByTestId("invertNormalButton").nth(planeIndex).click();
10
11
  await window.waitForTimeout(afterActionWait);
11
12
  }
12
13
 
13
- async function setPlaneOrigin(window, planeIndex, origin) {
14
+ async function setPlaneOrigin(window: Page, planeIndex: number, origin: number[]): Promise<void> {
14
15
  const card = window.getByTestId("planeCard").nth(planeIndex);
15
16
  for (let axis = 0; axis < origin.length; axis += 1) {
16
17
  const input = card.getByTestId("planeOriginInput").nth(axis).locator("input");
@@ -21,7 +22,7 @@ async function setPlaneOrigin(window, planeIndex, origin) {
21
22
  await window.waitForTimeout(afterActionWait);
22
23
  }
23
24
 
24
- async function setPlaneNormal(window, planeIndex, normal) {
25
+ async function setPlaneNormal(window: Page, planeIndex: number, normal: number[]): Promise<void> {
25
26
  const card = window.getByTestId("planeCard").nth(planeIndex);
26
27
  for (let axis = 0; axis < normal.length; axis += 1) {
27
28
  const input = card.getByTestId("planeNormalInput").nth(axis).locator("input");
@@ -32,17 +33,17 @@ async function setPlaneNormal(window, planeIndex, normal) {
32
33
  await window.waitForTimeout(afterActionWait);
33
34
  }
34
35
 
35
- async function addClippingPlane(window) {
36
+ async function addClippingPlane(window: Page): Promise<void> {
36
37
  await window.getByTestId("addPlaneButton").click();
37
38
  await window.waitForTimeout(afterActionWait);
38
39
  }
39
40
 
40
- async function toggleTargetAllVisible(window) {
41
+ async function toggleTargetAllVisible(window: Page): Promise<void> {
41
42
  await window.getByTestId("targetAllVisibleSwitch").getByRole("checkbox").click();
42
43
  await window.waitForTimeout(afterActionWait);
43
44
  }
44
45
 
45
- async function selectClippingDatasets(window, datasetName, index = 0) {
46
+ async function selectClippingDatasets(window: Page, datasetName: string, index = 0): Promise<void> {
46
47
  await window.getByTestId("selectedDatasetsSelect").click();
47
48
  await window.waitForTimeout(afterActionWait);
48
49
  await window.getByRole("option", { name: datasetName }).nth(index).click();
@@ -1,10 +1,18 @@
1
+ import type { Locator, Page } from "@playwright/test";
2
+
1
3
  import { afterActionWait, getHybridViewerCanvas } from "./viewer_interaction";
2
4
 
3
- function getCreateToolsPanelButton(window) {
5
+ interface PointCoords {
6
+ x: number;
7
+ y: number;
8
+ z: number;
9
+ }
10
+
11
+ function getCreateToolsPanelButton(window: Page): Locator {
4
12
  return window.getByTestId("createToolsPanel");
5
13
  }
6
14
 
7
- async function openCreateToolsPanel(window) {
15
+ async function openCreateToolsPanel(window: Page): Promise<void> {
8
16
  const createToolsPanelButton = getCreateToolsPanelButton(window);
9
17
  const isOpen = await createToolsPanelButton.isVisible();
10
18
  if (!isOpen) {
@@ -13,7 +21,7 @@ async function openCreateToolsPanel(window) {
13
21
  }
14
22
  }
15
23
 
16
- async function closeCreateToolsPanel(window) {
24
+ async function closeCreateToolsPanel(window: Page): Promise<void> {
17
25
  const createToolsPanelButton = getCreateToolsPanelButton(window);
18
26
  const isOpen = await createToolsPanelButton.isVisible();
19
27
  if (isOpen) {
@@ -22,13 +30,19 @@ async function closeCreateToolsPanel(window) {
22
30
  }
23
31
  }
24
32
 
25
- async function selectCreateTool(window, toolId) {
33
+ async function selectCreateTool(window: Page, toolId: string): Promise<void> {
26
34
  const createToolButton = window.getByTestId(`createToolCard-${toolId}`);
27
35
  await createToolButton.click();
28
36
  await window.waitForTimeout(afterActionWait);
29
37
  }
30
38
 
31
- async function fillPointCoords(window, index, x, y, z) {
39
+ async function fillPointCoords(
40
+ window: Page,
41
+ index: number,
42
+ x: number,
43
+ y: number,
44
+ z: number,
45
+ ): Promise<void> {
32
46
  const row = window.getByTestId(`point-${index}`);
33
47
  const inputs = row.locator("input");
34
48
  await inputs.nth(0).fill(x.toString());
@@ -39,13 +53,13 @@ async function fillPointCoords(window, index, x, y, z) {
39
53
  await window.waitForTimeout(afterActionWait);
40
54
  }
41
55
 
42
- async function addPointRow(window) {
56
+ async function addPointRow(window: Page): Promise<void> {
43
57
  await window.getByTestId("addPointButton").click();
44
58
  await window.waitForTimeout(afterActionWait);
45
59
  }
46
60
 
47
- async function fillPointsCoords(window, coords) {
48
- async function fillNext(index) {
61
+ async function fillPointsCoords(window: Page, coords: PointCoords[]): Promise<void> {
62
+ async function fillNext(index: number): Promise<void> {
49
63
  if (index >= coords.length) {
50
64
  return;
51
65
  }
@@ -60,12 +74,12 @@ async function fillPointsCoords(window, coords) {
60
74
  await fillNext(0);
61
75
  }
62
76
 
63
- async function clickPickButton(window) {
77
+ async function clickPickButton(window: Page): Promise<void> {
64
78
  await window.getByTestId("pickButton").click();
65
79
  await window.waitForTimeout(afterActionWait);
66
80
  }
67
81
 
68
- async function pickPointInViewer(window, x, y) {
82
+ async function pickPointInViewer(window: Page, x: number, y: number): Promise<void> {
69
83
  const hybridViewerCanvas = getHybridViewerCanvas(window);
70
84
  await hybridViewerCanvas.click({
71
85
  position: { x, y },
@@ -73,17 +87,17 @@ async function pickPointInViewer(window, x, y) {
73
87
  await window.waitForTimeout(afterActionWait);
74
88
  }
75
89
 
76
- async function submitCreateObject(window) {
90
+ async function submitCreateObject(window: Page): Promise<void> {
77
91
  await window.getByTestId("submitButton").click();
78
92
  await window.waitForTimeout(afterActionWait);
79
93
  }
80
94
 
81
- async function closePickingBanner(window) {
95
+ async function closePickingBanner(window: Page): Promise<void> {
82
96
  await window.getByTestId("pickingActiveChip").click();
83
97
  await window.waitForTimeout(afterActionWait);
84
98
  }
85
99
 
86
- async function toggleClosedCurve(window) {
100
+ async function toggleClosedCurve(window: Page): Promise<void> {
87
101
  await window.getByTestId("closedCurveCheckbox").getByRole("checkbox").check();
88
102
  await window.waitForTimeout(afterActionWait);
89
103
  }
@@ -41,7 +41,7 @@ async function setFeatureColorMap(window, menuTestId, colorMap) {
41
41
  await moveMouseOutOfTheWay(window);
42
42
  await window.waitForTimeout(afterActionWait);
43
43
  }
44
- async function applyAttribute(window, menuTestId, { attributeType, attributeName, item = void 0, colorMap = void 0, min = void 0, max = void 0 }) {
44
+ async function applyAttribute(window, menuTestId, { attributeType, attributeName, item, colorMap, min, max }) {
45
45
  if (typeof menuTestId === "string") {
46
46
  await ensureMenuOpen(window, menuTestId);
47
47
  await ensureFeatureVisible(window, menuTestId);
@@ -64,7 +64,7 @@ async function applyAttribute(window, menuTestId, { attributeType, attributeName
64
64
  }).first().click();
65
65
  await window.waitForTimeout(afterActionWait);
66
66
  if (item !== void 0) await setFeatureItem(window, menuTestId, item);
67
- if (colorMap) await setFeatureColorMap(window, menuTestId, colorMap);
67
+ if (colorMap !== void 0 && colorMap !== "") await setFeatureColorMap(window, menuTestId, colorMap);
68
68
  if (min !== void 0) {
69
69
  const input = container.getByTestId("attributeMinInput").first().locator("input");
70
70
  await input.fill(min.toString());
@@ -81,10 +81,10 @@ async function applyAttribute(window, menuTestId, { attributeType, attributeName
81
81
  await window.waitForTimeout(afterActionWait);
82
82
  await moveMouseOutOfTheWay(window);
83
83
  }
84
- function setFeatureAttribute(window, viewerObjectType, feature, attributeType, attributeName, options = {}) {
84
+ async function setFeatureAttribute(window, viewerObjectType, feature, attributeType, attributeName, options = {}) {
85
85
  let menuTestId = `${viewerObjectType}${feature}Menu`;
86
86
  if (viewerObjectType === "model") menuTestId = "modelStyleMenu";
87
- return applyAttribute(window, menuTestId, {
87
+ await applyAttribute(window, menuTestId, {
88
88
  attributeType,
89
89
  attributeName,
90
90
  ...options
@@ -1,3 +1,4 @@
1
+ import type { Locator, Page } from "@playwright/test";
1
2
  import {
2
3
  SLIDER_PINK,
3
4
  clickColorPickerCanvas,
@@ -10,7 +11,7 @@ import {
10
11
  moveMouseOutOfTheWay,
11
12
  } from "@tests/utils/viewer_interaction";
12
13
 
13
- async function resetMenuScroll(window, scrollTop = 0) {
14
+ async function resetMenuScroll(window: Page, scrollTop = 0): Promise<void> {
14
15
  await window.evaluate((top) => {
15
16
  const cardTexts = document.querySelectorAll(".v-card-text");
16
17
  for (const cardTextElement of cardTexts) {
@@ -19,14 +20,18 @@ async function resetMenuScroll(window, scrollTop = 0) {
19
20
  }, scrollTop);
20
21
  }
21
22
 
22
- function getMenuContainer(window, menuTestId) {
23
+ function getMenuContainer(window: Page, menuTestId: string | Locator): Locator {
23
24
  if (typeof menuTestId === "string") {
24
25
  return window.getByTestId(menuTestId);
25
26
  }
26
27
  return menuTestId;
27
28
  }
28
29
 
29
- async function setFeatureItem(window, menuTestId, item) {
30
+ async function setFeatureItem(
31
+ window: Page,
32
+ menuTestId: string | Locator,
33
+ item: number,
34
+ ): Promise<void> {
30
35
  const container = getMenuContainer(window, menuTestId);
31
36
  const itemSelector = container.getByTestId("itemSelector").first();
32
37
  await itemSelector.waitFor({ state: "visible" });
@@ -45,7 +50,11 @@ async function setFeatureItem(window, menuTestId, item) {
45
50
  await moveMouseOutOfTheWay(window);
46
51
  }
47
52
 
48
- async function setFeatureColorMap(window, menuTestId, colorMap) {
53
+ async function setFeatureColorMap(
54
+ window: Page,
55
+ menuTestId: string | Locator,
56
+ colorMap: string,
57
+ ): Promise<void> {
49
58
  const container = getMenuContainer(window, menuTestId);
50
59
  const colorMapPicker = container.getByTestId("colorMapPicker").first();
51
60
  await colorMapPicker.waitFor({ state: "visible" });
@@ -80,17 +89,10 @@ interface ApplyAttributeOptions {
80
89
  }
81
90
 
82
91
  async function applyAttribute(
83
- window,
84
- menuTestId,
85
- {
86
- attributeType,
87
- attributeName,
88
- item = undefined,
89
- colorMap = undefined,
90
- min = undefined,
91
- max = undefined,
92
- }: ApplyAttributeOptions,
93
- ) {
92
+ window: Page,
93
+ menuTestId: string | Locator,
94
+ { attributeType, attributeName, item, colorMap, min, max }: ApplyAttributeOptions,
95
+ ): Promise<void> {
94
96
  if (typeof menuTestId === "string") {
95
97
  await ensureMenuOpen(window, menuTestId);
96
98
  await ensureFeatureVisible(window, menuTestId);
@@ -125,7 +127,7 @@ async function applyAttribute(
125
127
  await setFeatureItem(window, menuTestId, item);
126
128
  }
127
129
 
128
- if (colorMap) {
130
+ if (colorMap !== undefined && colorMap !== "") {
129
131
  await setFeatureColorMap(window, menuTestId, colorMap);
130
132
  }
131
133
 
@@ -146,22 +148,29 @@ async function applyAttribute(
146
148
  await moveMouseOutOfTheWay(window);
147
149
  }
148
150
 
149
- function setFeatureAttribute(
150
- window,
151
- viewerObjectType,
152
- feature,
153
- attributeType,
154
- attributeName,
155
- options = {},
156
- ) {
151
+ interface FeatureAttributeOptions {
152
+ item?: number;
153
+ colorMap?: string;
154
+ min?: number | string;
155
+ max?: number | string;
156
+ }
157
+
158
+ async function setFeatureAttribute(
159
+ window: Page,
160
+ viewerObjectType: string,
161
+ feature: string,
162
+ attributeType: string,
163
+ attributeName: string,
164
+ options: FeatureAttributeOptions = {},
165
+ ): Promise<void> {
157
166
  let menuTestId = `${viewerObjectType}${feature}Menu`;
158
167
  if (viewerObjectType === "model") {
159
168
  menuTestId = "modelStyleMenu";
160
169
  }
161
- return applyAttribute(window, menuTestId, { attributeType, attributeName, ...options });
170
+ await applyAttribute(window, menuTestId, { attributeType, attributeName, ...options });
162
171
  }
163
172
 
164
- async function setQuickColorMap(window, colorMap) {
173
+ async function setQuickColorMap(window: Page, colorMap: string): Promise<void> {
165
174
  const colorMapListFilter = window
166
175
  .getByTestId("colorMapListFilter")
167
176
  .filter({ visible: true })
@@ -182,7 +191,7 @@ async function setQuickColorMap(window, colorMap) {
182
191
  await moveMouseOutOfTheWay(window);
183
192
  }
184
193
 
185
- async function setFeatureNoDataColor(window, menuTestId) {
194
+ async function setFeatureNoDataColor(window: Page, menuTestId: string | Locator): Promise<void> {
186
195
  if (typeof menuTestId === "string") {
187
196
  await ensureMenuOpen(window, menuTestId);
188
197
  }
@@ -39,6 +39,7 @@ async function setOpacity(window, menuTestId, percent) {
39
39
  await ensureFeatureVisible(window, menuTestId);
40
40
  const alphaSlider = window.getByTestId(menuTestId).getByTestId("colorPicker").locator(".v-color-picker-preview__alpha, .v-color-picker__alpha").first();
41
41
  const box = await alphaSlider.boundingBox();
42
+ if (!box) throw new Error("Could not get bounding box of the opacity slider");
42
43
  await alphaSlider.click({
43
44
  force: true,
44
45
  position: {
@@ -54,26 +55,27 @@ async function setColorBlack(window, menuTestId, container = window) {
54
55
  await setColoringStyle(window, menuTestId, "Constant", container);
55
56
  const canvas = container.getByTestId("colorPicker").locator(".v-color-picker-canvas").first();
56
57
  const box = await canvas.boundingBox();
58
+ if (!box) throw new Error("Could not get bounding box of the color canvas");
57
59
  await canvas.click({ position: {
58
60
  x: COLOR_CANVAS_OFFSET,
59
61
  y: box.height - COLOR_CANVAS_OFFSET
60
62
  } });
61
63
  await window.waitForTimeout(afterActionWait);
62
64
  }
63
- function setFeatureColorBlack(window, viewerObjectType, feature, container = window) {
64
- return setColorBlack(window, `${viewerObjectType}${feature}Menu`, container);
65
+ async function setFeatureColorBlack(window, viewerObjectType, feature, container = window) {
66
+ await setColorBlack(window, `${viewerObjectType}${feature}Menu`, container);
65
67
  }
66
- function setFeatureColor(window, viewerObjectType, feature, container = window) {
67
- return setColor(window, `${viewerObjectType}${feature}Menu`, container);
68
+ async function setFeatureColor(window, viewerObjectType, feature, container = window) {
69
+ await setColor(window, `${viewerObjectType}${feature}Menu`, container);
68
70
  }
69
- function setFeatureColorWithSlider(window, viewerObjectType, feature, container = window) {
70
- return setColorWithSlider(window, `${viewerObjectType}${feature}Menu`, container);
71
+ async function setFeatureColorWithSlider(window, viewerObjectType, feature, container = window) {
72
+ await setColorWithSlider(window, `${viewerObjectType}${feature}Menu`, container);
71
73
  }
72
- function setFeatureColoringStyle(window, viewerObjectType, feature, coloringStyle, container = window) {
73
- return setColoringStyle(window, `${viewerObjectType}${feature}Menu`, coloringStyle, container);
74
+ async function setFeatureColoringStyle(window, viewerObjectType, feature, coloringStyle, container = window) {
75
+ await setColoringStyle(window, `${viewerObjectType}${feature}Menu`, coloringStyle, container);
74
76
  }
75
- function setFeatureOpacity(window, viewerObjectType, feature, percent) {
76
- return setOpacity(window, `${viewerObjectType}${feature}Menu`, percent);
77
+ async function setFeatureOpacity(window, viewerObjectType, feature, percent) {
78
+ await setOpacity(window, `${viewerObjectType}${feature}Menu`, percent);
77
79
  }
78
80
  //#endregion
79
81
  export { setColor, setColorBlack, setColorWithSlider, setColoringStyle, setFeatureColor, setFeatureColorBlack, setFeatureColorWithSlider, setFeatureColoringStyle, setFeatureOpacity, setOpacity };