diff --git a/extensions/cornerstone-dicom-rt/src/getSopClassHandlerModule.ts b/extensions/cornerstone-dicom-rt/src/getSopClassHandlerModule.ts
index d0c490e4b..85b87b722 100644
--- a/extensions/cornerstone-dicom-rt/src/getSopClassHandlerModule.ts
+++ b/extensions/cornerstone-dicom-rt/src/getSopClassHandlerModule.ts
@@ -31,7 +31,7 @@ function _getDisplaySetsFromSeries(
const displaySet = {
Modality: 'RTSTRUCT',
loading: false,
- isReconstructable: false, // by default for now since it is a volumetric SEG currently
+ isReconstructable: false,
displaySetInstanceUID: utils.guid(),
SeriesDescription,
SeriesNumber,
@@ -87,6 +87,7 @@ function _getDisplaySetsFromSeries(
const addedDisplaySet = displaySetsAdded[0];
if (addedDisplaySet.SeriesInstanceUID === displaySet.referencedSeriesInstanceUID) {
displaySet.referencedDisplaySetInstanceUID = addedDisplaySet.displaySetInstanceUID;
+ displaySet.isReconstructable = addedDisplaySet.isReconstructable;
unsubscribe();
}
}
@@ -94,6 +95,7 @@ function _getDisplaySetsFromSeries(
} else {
const referencedDisplaySet = referencedDisplaySets[0];
displaySet.referencedDisplaySetInstanceUID = referencedDisplaySet.displaySetInstanceUID;
+ displaySet.isReconstructable = referencedDisplaySet.isReconstructable;
}
displaySet.load = ({ headers, createSegmentation = true }) =>
diff --git a/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.ts b/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.ts
index 29f041694..705a46f11 100644
--- a/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.ts
+++ b/extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.ts
@@ -34,7 +34,7 @@ function _getDisplaySetsFromSeries(
const displaySet = {
Modality: 'SEG',
loading: false,
- isReconstructable: true, // by default for now since it is a volumetric SEG currently
+ isReconstructable: false,
displaySetInstanceUID: utils.guid(),
SeriesDescription,
SeriesNumber,
@@ -91,12 +91,14 @@ function _getDisplaySetsFromSeries(
const addedDisplaySet = displaySetsAdded[0];
if (addedDisplaySet.SeriesInstanceUID === displaySet.referencedSeriesInstanceUID) {
displaySet.referencedDisplaySetInstanceUID = addedDisplaySet.displaySetInstanceUID;
+ displaySet.isReconstructable = addedDisplaySet.isReconstructable;
unsubscribe();
}
}
);
} else {
displaySet.referencedDisplaySetInstanceUID = referencedDisplaySet.displaySetInstanceUID;
+ displaySet.isReconstructable = referencedDisplaySet.isReconstructable;
}
displaySet.load = async ({ headers }) =>
diff --git a/extensions/cornerstone/src/components/SelectItemWithModality.tsx b/extensions/cornerstone/src/components/SelectItemWithModality.tsx
index b97506d17..237d46c17 100644
--- a/extensions/cornerstone/src/components/SelectItemWithModality.tsx
+++ b/extensions/cornerstone/src/components/SelectItemWithModality.tsx
@@ -4,11 +4,16 @@ import React from 'react';
const SelectItemWithModality = ({
displaySet,
showModality = true,
+ dataCY = `${displaySet.label}-${displaySet.Modality}`,
}: {
displaySet: AppTypes.DisplaySet;
showModality?: boolean;
+ dataCY?: string;
}): JSX.Element => (
-
+
{displaySet.label}
{showModality && displaySet.Modality && (
diff --git a/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenu.tsx b/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenu.tsx
index 496e57bf8..dd695b921 100644
--- a/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenu.tsx
+++ b/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenu.tsx
@@ -206,6 +206,7 @@ function ViewportDataOverlayMenu({ viewportId }: withAppTypes<{ viewportId: stri
onClick={() => {
setPendingSegmentations([...pendingSegmentations, `seg-${Date.now()}`]);
}}
+ dataCY={`AddSegmentationDataOverlay-${viewportId}`}
>
Segmentation
@@ -289,7 +290,10 @@ function ViewportDataOverlayMenu({ viewportId }: withAppTypes<{ viewportId: stri
value={item.displaySetInstanceUID}
className="pr-2"
>
-
+
))}
diff --git a/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenuWrapper.tsx b/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenuWrapper.tsx
index a7cc6e96f..902311191 100644
--- a/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenuWrapper.tsx
+++ b/extensions/cornerstone/src/components/ViewportDataOverlaySettingMenu/ViewportDataOverlayMenuWrapper.tsx
@@ -18,6 +18,7 @@ type DataOverlayMenuProps = {
onOpen?: () => void;
onClose?: () => void;
disabled?: boolean;
+ id?: string;
};
export function ViewportDataOverlayMenuWrapper(props: DataOverlayMenuProps): ReactNode {
@@ -40,6 +41,7 @@ export function ViewportDataOverlayMenuWrapper(props: DataOverlayMenuProps): Rea
const Icon = ;
+ const idProp = rest.id ? { id: `${rest.id}-${viewportId}` } : {};
return (
{Icon}
diff --git a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts
index 04824161f..3a463ef48 100644
--- a/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts
+++ b/extensions/cornerstone/src/services/ViewportService/CornerstoneViewportService.ts
@@ -835,16 +835,19 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
const displaySetModality = displaySet?.Modality;
// filter overlay display sets (e.g. segmentation) since they will get handled below via the segmentation service
- const filteredVolumeInputArray = volumeInputArray.filter(volumeInput => {
- const displaySet = displaySetService.getDisplaySetByUID(volumeInput.displaySetInstanceUID);
- return !displaySet?.isOverlayDisplaySet;
- });
+ const filteredVolumeInputArray = volumeInputArray
+ .map((volumeInput, index) => {
+ return { volumeInput, displaySetOptions: displaySetOptions[index] };
+ })
+ .filter(({ volumeInput }) => {
+ const displaySet = displaySetService.getDisplaySetByUID(volumeInput.displaySetInstanceUID);
+ return !displaySet?.isOverlayDisplaySet;
+ });
// Todo: use presentations states
- const volumesProperties = filteredVolumeInputArray.map((volumeInput, index) => {
+ const volumesProperties = filteredVolumeInputArray.map(({ volumeInput, displaySetOptions }) => {
const { volumeId } = volumeInput;
- const displaySetOption = displaySetOptions[index];
- const { voi, voiInverted, colormap, displayPreset } = displaySetOption;
+ const { voi, voiInverted, colormap, displayPreset } = displaySetOptions;
const properties = {} as ViewportProperties;
if (voi && (voi.windowWidth || voi.windowCenter)) {
@@ -887,14 +890,10 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
if (backgroundDisplaySet.length !== 1) {
throw new Error('Background display set not found');
}
-
- await viewport.setVolumes([
- { volumeId: `${VOLUME_LOADER_SCHEME}:${backgroundDisplaySet[0].displaySetInstanceUID}` },
- ]);
- } else {
- await viewport.setVolumes(filteredVolumeInputArray);
}
+ await viewport.setVolumes(volumeInputArray);
+
if (addOverlayFn) {
addOverlayFn();
}
diff --git a/extensions/cornerstone/src/utils/nthLoader.ts b/extensions/cornerstone/src/utils/nthLoader.ts
index 90aab65a8..c8e0e59ef 100644
--- a/extensions/cornerstone/src/utils/nthLoader.ts
+++ b/extensions/cornerstone/src/utils/nthLoader.ts
@@ -48,7 +48,7 @@ export default function interleaveNthLoader({
// iterate over all volumes, and get their imageIds, and interleave
// the imageIds and save them in AllRequests for later use
const originalRequests = volumes
- .map(volume => volume.getImageLoadRequests())
+ .map(volume => volume.getImageLoadRequests?.() ?? [])
.filter(requests => requests?.[0]?.imageId);
const orderedRequests = originalRequests.map(request => getNthFrames(request));
diff --git a/extensions/default/src/stores/useDisplaySetSelectorStore.ts b/extensions/default/src/stores/useDisplaySetSelectorStore.ts
index e5973ad0e..8c413650f 100644
--- a/extensions/default/src/stores/useDisplaySetSelectorStore.ts
+++ b/extensions/default/src/stores/useDisplaySetSelectorStore.ts
@@ -24,7 +24,7 @@ type DisplaySetSelectorState = {
/**
* Stores a mapping from `::` to `displaySetInstanceUID`.
*/
- displaySetSelectorMap: Record;
+ displaySetSelectorMap: Record>;
/**
* Sets the display set selector for a given key.
@@ -32,7 +32,7 @@ type DisplaySetSelectorState = {
* @param key - The key.
* @param value - The `displaySetInstanceUID` to associate with the key.
*/
- setDisplaySetSelector: (key: string, value: string) => void;
+ setDisplaySetSelector: (key: string, value: Array) => void;
/**
* Clears the entire display set selector map.
@@ -53,7 +53,7 @@ const createDisplaySetSelectorStore = (set): DisplaySetSelectorState => ({
/**
* Sets the display set selector for a given key.
*/
- setDisplaySetSelector: (key: string, value: string) =>
+ setDisplaySetSelector: (key: string, value: Array) =>
set(
state => ({
displaySetSelectorMap: {
diff --git a/extensions/default/src/utils/layerConfigurationUtils.ts b/extensions/default/src/utils/layerConfigurationUtils.ts
index 66cdc2a8e..917fd80e9 100644
--- a/extensions/default/src/utils/layerConfigurationUtils.ts
+++ b/extensions/default/src/utils/layerConfigurationUtils.ts
@@ -65,15 +65,23 @@ export function configureViewportForLayerAddition(params: {
viewport.viewportOptions.orientation = cornerstoneViewportService.getOrientation(viewportId);
}
- // Do not force volume for SEG and RTSTRUCT if there is only one display set
- if (requestedLayerDisplaySet.isOverlayDisplaySet && currentDisplaySetUIDs.length === 1) {
- viewport.viewportOptions.viewportType = 'stack';
- } else {
- viewport.viewportOptions.viewportType = 'volume';
+ // If a viewport type was already set do not reset it.
+ if (!viewport.viewportOptions.viewportType) {
+ // Do not force volume for SEG and RTSTRUCT if there is only one display set
+ if (requestedLayerDisplaySet.isOverlayDisplaySet && currentDisplaySetUIDs.length === 1) {
+ viewport.viewportOptions.viewportType = 'stack';
+ } else {
+ viewport.viewportOptions.viewportType = 'volume';
+ }
}
// create same amount of display set options as the number of display set UIDs
const displaySetOptions = allDisplaySetInstanceUIDs.map((uid, index) => {
+ // There is already a display set option for this display set, so return it.
+ if (viewport.displaySetOptions?.[index]) {
+ return viewport.displaySetOptions[index];
+ }
+
if (index === 0) {
// no colormap for background
return {};
diff --git a/extensions/default/src/utils/reuseCachedLayouts.ts b/extensions/default/src/utils/reuseCachedLayouts.ts
index b9a030f83..f2222dd4c 100644
--- a/extensions/default/src/utils/reuseCachedLayouts.ts
+++ b/extensions/default/src/utils/reuseCachedLayouts.ts
@@ -6,7 +6,7 @@ import { useHangingProtocolStageIndexStore } from '../stores/useHangingProtocolS
export type ReturnType = {
hangingProtocolStageIndexMap: Record;
viewportGridStore: Record;
- displaySetSelectorMap: Record;
+ displaySetSelectorMap: Record>;
};
/**
@@ -53,24 +53,33 @@ const reuseCachedLayout = (state, hangingProtocolService: HangingProtocolService
if (!displaySetOptions) {
return;
}
+ const activeDisplaySetUIDs = [];
+
for (let i = 0; i < displaySetOptions.length; i++) {
const displaySetUID = displaySetInstanceUIDs[i];
if (!displaySetUID) {
continue;
}
- if (viewportId === activeViewportId && i === 0) {
- setDisplaySetSelector(`${activeStudyUID}:activeDisplaySet:0`, displaySetUID);
+ if (viewportId === activeViewportId) {
+ activeDisplaySetUIDs.push(displaySetUID);
}
+
// The activeDisplaySet selector should only be set once (i.e. for the actual active display set)
if (displaySetOptions[i]?.id && displaySetOptions[i].id !== 'activeDisplaySet') {
+ // TODO: handle multiple layers/display sets for the non-active viewports
setDisplaySetSelector(
`${activeStudyUID}:${displaySetOptions[i].id}:${
displaySetOptions[i].matchedDisplaySetsIndex || 0
}`,
- displaySetUID
+ [displaySetUID]
);
}
}
+
+ if (viewportId === activeViewportId) {
+ // After going through all the display set options for the active viewport, store the display set selector array
+ setDisplaySetSelector(`${activeStudyUID}:activeDisplaySet:0`, activeDisplaySetUIDs);
+ }
});
setHangingProtocolStageIndex(cacheId, hpInfo);
diff --git a/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts b/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts
index fdb6a8189..52cb1e0ed 100644
--- a/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts
+++ b/platform/core/src/services/HangingProtocolService/HangingProtocolService.ts
@@ -1355,7 +1355,7 @@ export default class HangingProtocolService extends PubSubService {
const { StudyInstanceUID: activeStudyUID } = this.activeStudy;
viewport.displaySets.forEach(displaySetOptions => {
const { id, matchedDisplaySetsIndex = 0 } = displaySetOptions;
- const reuseDisplaySetUID =
+ const reuseDisplaySetUIDs =
id && displaySetSelectorMap[`${activeStudyUID}:${id}:${matchedDisplaySetsIndex || 0}`];
const viewportDisplaySetMain = this.displaySetMatchDetails.get(id);
@@ -1366,14 +1366,17 @@ export default class HangingProtocolService extends PubSubService {
);
// Use the display set provided instead
- if (reuseDisplaySetUID) {
- // This display set should have already been validated
- const displaySetInfo: HangingProtocol.DisplaySetInfo = {
- displaySetInstanceUID: reuseDisplaySetUID,
- displaySetOptions,
- };
+ if (reuseDisplaySetUIDs) {
+ reuseDisplaySetUIDs.forEach(reuseDisplaySetUID => {
+ // This display set should have already been validated
+ const displaySetInfo: HangingProtocol.DisplaySetInfo = {
+ displaySetInstanceUID: reuseDisplaySetUID,
+ displaySetOptions,
+ };
+
+ displaySetsInfo.push(displaySetInfo);
+ });
- displaySetsInfo.push(displaySetInfo);
return;
}
@@ -1383,7 +1386,7 @@ export default class HangingProtocolService extends PubSubService {
const { displaySetInstanceUID } = viewportDisplaySet;
const displaySetInfo: HangingProtocol.DisplaySetInfo = {
- displaySetInstanceUID,
+ displaySetInstanceUID: displaySetInstanceUID,
displaySetOptions,
};
@@ -1476,14 +1479,16 @@ export default class HangingProtocolService extends PubSubService {
const { displaySetService } = this._servicesManager.services;
const { displaySetSelectorMap } = options;
if (displaySetSelectorMap) {
- Object.entries(displaySetSelectorMap).forEach(([key, displaySetInstanceUID]) => {
- const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
+ Object.entries(displaySetSelectorMap).forEach(([key, displaySetInstanceUIDs]) => {
+ displaySetInstanceUIDs.forEach(displaySetInstanceUID => {
+ const displaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
- if (!displaySet) {
- throw new Error(
- `The displaySetInstanceUID ${displaySetInstanceUID} is not found in the displaySetService`
- );
- }
+ if (!displaySet) {
+ throw new Error(
+ `The displaySetInstanceUID ${displaySetInstanceUID} is not found in the displaySetService`
+ );
+ }
+ });
});
}
}
diff --git a/platform/core/src/types/HangingProtocol.ts b/platform/core/src/types/HangingProtocol.ts
index eeb91424b..b20ecfad3 100644
--- a/platform/core/src/types/HangingProtocol.ts
+++ b/platform/core/src/types/HangingProtocol.ts
@@ -49,7 +49,7 @@ export type SetProtocolOptions = {
* This is normally transparent to the user of this, but in order to specify
* specific instances, they can be added like that.
*/
- displaySetSelectorMap?: Record;
+ displaySetSelectorMap?: Record>;
/** Used to define the display sets already in view, in order to allow
* filling empty viewports with other instances.
diff --git a/platform/ui-next/src/components/Button/Button.tsx b/platform/ui-next/src/components/Button/Button.tsx
index 3b7db1cef..e8ae3d01f 100644
--- a/platform/ui-next/src/components/Button/Button.tsx
+++ b/platform/ui-next/src/components/Button/Button.tsx
@@ -35,6 +35,7 @@ export interface ButtonProps
extends React.ButtonHTMLAttributes,
VariantProps {
asChild?: boolean;
+ dataCY?: string;
}
const Button = React.forwardRef(
diff --git a/platform/ui-next/src/components/ToolButton/ToolButton.tsx b/platform/ui-next/src/components/ToolButton/ToolButton.tsx
index fa221c9de..35ac74cdc 100644
--- a/platform/ui-next/src/components/ToolButton/ToolButton.tsx
+++ b/platform/ui-next/src/components/ToolButton/ToolButton.tsx
@@ -97,6 +97,7 @@ function ToolButton(props: ToolButtonProps) {
size="icon"
aria-label={defaultTooltip}
disabled={disabled}
+ name={id}
>
{children || (
{
+ const studyInstanceUID = '1.3.12.2.1107.5.2.32.35162.30000015050317233592200000046';
+ const mode = 'viewer';
+ await visitStudy(page, studyInstanceUID, mode, 2000);
+});
+
+test('should launch MPR with unhydrated SEG chosen from the data overlay menu', async ({
+ page,
+}) => {
+ await page.getByTestId('side-panel-header-right').click();
+
+ await page.getByTestId('Layout').click();
+ await page.getByTestId('MPR').click();
+
+ await page.waitForTimeout(5000);
+ await checkForScreenshot(
+ page,
+ page,
+ screenShotPaths.mprThenSEGOverlayNoHydration.mprPreSEGOverlayNoHydration
+ );
+
+ // Hover over the middle/sagittal viewport so that the data overlay menu is available.
+ await page.locator('css=div[data-viewportid="mpr-sagittal"]').hover();
+ await page.getByTestId('dataOverlayMenu-mpr-sagittal-btn').click();
+ await page.getByTestId('AddSegmentationDataOverlay-mpr-sagittal').click();
+ await page.getByText('SELECT A SEGMENTATION').click();
+ await page.getByTestId('Segmentation').click();
+
+ // Hide the overlay menu.
+ await page.getByTestId('dataOverlayMenu-mpr-sagittal-btn').click();
+
+ await page.waitForTimeout(5000);
+ await checkForScreenshot(
+ page,
+ page,
+ screenShotPaths.mprThenSEGOverlayNoHydration.mprPostSEGOverlayNoHydration
+ );
+});
diff --git a/tests/SEGDataOverlayNoHydrationThenMPR.spec.ts b/tests/SEGDataOverlayNoHydrationThenMPR.spec.ts
new file mode 100644
index 000000000..6892d1ac9
--- /dev/null
+++ b/tests/SEGDataOverlayNoHydrationThenMPR.spec.ts
@@ -0,0 +1,38 @@
+import { test } from 'playwright-test-coverage';
+import { visitStudy, checkForScreenshot, screenShotPaths } from './utils';
+
+test.beforeEach(async ({ page }) => {
+ const studyInstanceUID = '1.3.12.2.1107.5.2.32.35162.30000015050317233592200000046';
+ const mode = 'viewer';
+ await visitStudy(page, studyInstanceUID, mode, 2000);
+});
+
+test('should launch MPR with unhydrated SEG chosen from the data overlay menu', async ({
+ page,
+}) => {
+ await page.getByTestId('side-panel-header-right').click();
+ await page.getByTestId('dataOverlayMenu-default-btn').click();
+ await page.getByTestId('AddSegmentationDataOverlay-default').click();
+ await page.getByText('SELECT A SEGMENTATION').click();
+ await page.getByTestId('Segmentation').click();
+
+ // Hide the overlay menu.
+ await page.getByTestId('dataOverlayMenu-default-btn').click();
+
+ await page.waitForTimeout(5000);
+ await checkForScreenshot(
+ page,
+ page,
+ screenShotPaths.segDataOverlayNoHydrationThenMPR.segDataOverlayNoHydrationPreMPR
+ );
+
+ await page.getByTestId('Layout').click();
+ await page.getByTestId('MPR').click();
+
+ await page.waitForTimeout(5000);
+ await checkForScreenshot(
+ page,
+ page,
+ screenShotPaths.segDataOverlayNoHydrationThenMPR.segDataOverlayNoHydrationPostMPR
+ );
+});
diff --git a/tests/SEGNoHydrationThenMPR.spec.ts b/tests/SEGNoHydrationThenMPR.spec.ts
new file mode 100644
index 000000000..83527557d
--- /dev/null
+++ b/tests/SEGNoHydrationThenMPR.spec.ts
@@ -0,0 +1,22 @@
+import { test } from 'playwright-test-coverage';
+import { visitStudy, checkForScreenshot, screenShotPaths } from './utils';
+
+test.beforeEach(async ({ page }) => {
+ const studyInstanceUID = '1.3.12.2.1107.5.2.32.35162.30000015050317233592200000046';
+ const mode = 'viewer';
+ await visitStudy(page, studyInstanceUID, mode, 2000);
+});
+
+test('should launch MPR with unhydrated SEG', async ({ page }) => {
+ await page.getByTestId('side-panel-header-right').click();
+ await page.getByTestId('study-browser-thumbnail-no-image').dblclick();
+
+ await page.waitForTimeout(5000);
+ await checkForScreenshot(page, page, screenShotPaths.segNoHydrationThenMPR.segNoHydrationPreMPR);
+
+ await page.getByTestId('Layout').click();
+ await page.getByTestId('MPR').click();
+
+ await page.waitForTimeout(5000);
+ await checkForScreenshot(page, page, screenShotPaths.segNoHydrationThenMPR.segNoHydrationPostMPR);
+});
diff --git a/tests/screenshots/chromium/MPRThenSEGOverlayNoHydration.spec.ts/mprPostSEGOverlayNoHydration.png b/tests/screenshots/chromium/MPRThenSEGOverlayNoHydration.spec.ts/mprPostSEGOverlayNoHydration.png
new file mode 100644
index 000000000..3eaea10fa
Binary files /dev/null and b/tests/screenshots/chromium/MPRThenSEGOverlayNoHydration.spec.ts/mprPostSEGOverlayNoHydration.png differ
diff --git a/tests/screenshots/chromium/MPRThenSEGOverlayNoHydration.spec.ts/mprPreSEGOverlayNoHydration.png b/tests/screenshots/chromium/MPRThenSEGOverlayNoHydration.spec.ts/mprPreSEGOverlayNoHydration.png
new file mode 100644
index 000000000..a29219a43
Binary files /dev/null and b/tests/screenshots/chromium/MPRThenSEGOverlayNoHydration.spec.ts/mprPreSEGOverlayNoHydration.png differ
diff --git a/tests/screenshots/chromium/SEGDataOverlayNoHydrationThenMPR.spec.ts/segDataOverlayNoHydrationPostMpr.png b/tests/screenshots/chromium/SEGDataOverlayNoHydrationThenMPR.spec.ts/segDataOverlayNoHydrationPostMpr.png
new file mode 100644
index 000000000..9d2de88a0
Binary files /dev/null and b/tests/screenshots/chromium/SEGDataOverlayNoHydrationThenMPR.spec.ts/segDataOverlayNoHydrationPostMpr.png differ
diff --git a/tests/screenshots/chromium/SEGDataOverlayNoHydrationThenMPR.spec.ts/segDataOverlayNoHydrationPreMpr.png b/tests/screenshots/chromium/SEGDataOverlayNoHydrationThenMPR.spec.ts/segDataOverlayNoHydrationPreMpr.png
new file mode 100644
index 000000000..f0ae1d8cc
Binary files /dev/null and b/tests/screenshots/chromium/SEGDataOverlayNoHydrationThenMPR.spec.ts/segDataOverlayNoHydrationPreMpr.png differ
diff --git a/tests/screenshots/chromium/SEGNoHydrationThenMPR.spec.ts/segNoHydrationPostMpr.png b/tests/screenshots/chromium/SEGNoHydrationThenMPR.spec.ts/segNoHydrationPostMpr.png
new file mode 100644
index 000000000..5c7c798cc
Binary files /dev/null and b/tests/screenshots/chromium/SEGNoHydrationThenMPR.spec.ts/segNoHydrationPostMpr.png differ
diff --git a/tests/screenshots/chromium/SEGNoHydrationThenMPR.spec.ts/segNoHydrationPreMpr.png b/tests/screenshots/chromium/SEGNoHydrationThenMPR.spec.ts/segNoHydrationPreMpr.png
new file mode 100644
index 000000000..c01f6c3c4
Binary files /dev/null and b/tests/screenshots/chromium/SEGNoHydrationThenMPR.spec.ts/segNoHydrationPreMpr.png differ
diff --git a/tests/utils/screenShotPaths.ts b/tests/utils/screenShotPaths.ts
index b0bf7505a..59e3ef60b 100644
--- a/tests/utils/screenShotPaths.ts
+++ b/tests/utils/screenShotPaths.ts
@@ -89,6 +89,18 @@ const screenShotPaths = {
mprAfterSegHydrated: 'mprAfterSegHydrated.png',
mprAfterSegHydratedAfterLayoutChange: 'mprAfterSegHydratedAfterLayoutChange.png',
},
+ segNoHydrationThenMPR: {
+ segNoHydrationPreMPR: 'segNoHydrationPreMpr.png',
+ segNoHydrationPostMPR: 'segNoHydrationPostMpr.png',
+ },
+ segDataOverlayNoHydrationThenMPR: {
+ segDataOverlayNoHydrationPreMPR: 'segDataOverlayNoHydrationPreMpr.png',
+ segDataOverlayNoHydrationPostMPR: 'segDataOverlayNoHydrationPostMpr.png',
+ },
+ mprThenSEGOverlayNoHydration: {
+ mprPreSEGOverlayNoHydration: 'mprPreSEGOverlayNoHydration.png',
+ mprPostSEGOverlayNoHydration: 'mprPostSEGOverlayNoHydration.png',
+ },
rtHydration: {
rtPostHydration: 'rtPostHydration.png',
rtPreHydration: 'rtPreHydration.png',