diff --git a/platform/docs/docs/platform/services/data/index.md b/platform/docs/docs/platform/services/data/index.md index e93f225e1..3253ba9ee 100644 --- a/platform/docs/docs/platform/services/data/index.md +++ b/platform/docs/docs/platform/services/data/index.md @@ -20,7 +20,6 @@ We maintain the following non-ui Services: - [Toolbar Service](./ToolbarService.md) - [Measurement Service](../data/MeasurementService.md) - [Customization Service](./../customization-service/customizationService.md) -- [State Sync Service](../../../../versioned_docs/version-3.9/migration-guide/3p8-to-3p9/5-StateSyncService.md) - [Panel Service](../data/PanelService.md) ## Service Architecture diff --git a/platform/docs/docusaurus.config.js b/platform/docs/docusaurus.config.js index 8643de7b8..db1a2d190 100644 --- a/platform/docs/docusaurus.config.js +++ b/platform/docs/docusaurus.config.js @@ -1,17 +1,13 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const path = require('path'); - // read this text file const fs = require('fs'); const versions = fs.readFileSync('../../version.txt', 'utf8').split('\n'); const ArchivedVersionsDropdownItems = [ + { + version: '3.9', + href: 'https://v3p9.docs.ohif.org', + isExternal: true, + }, { version: '3.8.5', href: 'https://v3p8.docs.ohif.org', @@ -128,11 +124,10 @@ module.exports = { // respectPrefersColorScheme: true, }, announcementBar: { - id: 'cornerstone20_ohif_anniversary', + id: 'ohif310_segmentation_ui_update', content: - '🎉 Celebrating OHIF’s 10-Year Anniversary with Cornerstone 2.0! Explore enhanced segmentation, new video & microscopy viewports, UI/UX upgrades, and blazing fast prefetching. Dive into the release notes here! 🚀', + '🛠️ OHIF 3.10 is here! Explore powerful new segmentation tools, including local AI-assisted workflows, real-time 3D GrowCut, segment statistics, and undo/redo. Plus, enjoy a polished new UI library and smoother interactions across the board. Read the release notes here! 🔍✨', }, - prism: { theme: require('prism-react-renderer').themes.github, darkTheme: require('prism-react-renderer').themes.dracula, diff --git a/platform/docs/versioned_docs/version-3.9/README.md b/platform/docs/versioned_docs/version-3.10/README.md similarity index 88% rename from platform/docs/versioned_docs/version-3.9/README.md rename to platform/docs/versioned_docs/version-3.10/README.md index 9b5a6f7d5..f7d7e0a17 100644 --- a/platform/docs/versioned_docs/version-3.9/README.md +++ b/platform/docs/versioned_docs/version-3.10/README.md @@ -24,10 +24,28 @@ Key features: Tailwind CSS -
-
- Subscribe to our newsletter - Release Notes +
+
+ Subscribe to our newsletter + Release Notes
diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/architecture-diagram b/platform/docs/versioned_docs/version-3.10/assets/designs/architecture-diagram similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/architecture-diagram rename to platform/docs/versioned_docs/version-3.10/assets/designs/architecture-diagram diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/canny-full.fig b/platform/docs/versioned_docs/version-3.10/assets/designs/canny-full.fig similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/canny-full.fig rename to platform/docs/versioned_docs/version-3.10/assets/designs/canny-full.fig diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/cloud.svg b/platform/docs/versioned_docs/version-3.10/assets/designs/cloud.svg similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/cloud.svg rename to platform/docs/versioned_docs/version-3.10/assets/designs/cloud.svg diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/embedded-viewer-diagram b/platform/docs/versioned_docs/version-3.10/assets/designs/embedded-viewer-diagram similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/embedded-viewer-diagram rename to platform/docs/versioned_docs/version-3.10/assets/designs/embedded-viewer-diagram diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/nginx-image-archive.fig b/platform/docs/versioned_docs/version-3.10/assets/designs/nginx-image-archive.fig similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/nginx-image-archive.fig rename to platform/docs/versioned_docs/version-3.10/assets/designs/nginx-image-archive.fig diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/npm-logo-red.svg b/platform/docs/versioned_docs/version-3.10/assets/designs/npm-logo-red.svg similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/npm-logo-red.svg rename to platform/docs/versioned_docs/version-3.10/assets/designs/npm-logo-red.svg diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/scope-of-project.fig b/platform/docs/versioned_docs/version-3.10/assets/designs/scope-of-project.fig similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/scope-of-project.fig rename to platform/docs/versioned_docs/version-3.10/assets/designs/scope-of-project.fig diff --git a/platform/docs/versioned_docs/version-3.9/assets/designs/user-access-control-request-flow.fig b/platform/docs/versioned_docs/version-3.10/assets/designs/user-access-control-request-flow.fig similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/designs/user-access-control-request-flow.fig rename to platform/docs/versioned_docs/version-3.10/assets/designs/user-access-control-request-flow.fig diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/Loading-Indicator.png b/platform/docs/versioned_docs/version-3.10/assets/img/Loading-Indicator.png new file mode 100644 index 000000000..d559db402 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/Loading-Indicator.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/OHIF-e2e-test-studies.png b/platform/docs/versioned_docs/version-3.10/assets/img/OHIF-e2e-test-studies.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/OHIF-e2e-test-studies.png rename to platform/docs/versioned_docs/version-3.10/assets/img/OHIF-e2e-test-studies.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/SR-exported.png b/platform/docs/versioned_docs/version-3.10/assets/img/SR-exported.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/SR-exported.png rename to platform/docs/versioned_docs/version-3.10/assets/img/SR-exported.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_DEPLOY.png b/platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_DEPLOY.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_DEPLOY.png rename to platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_DEPLOY.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_PR_CHECKS.png b/platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_PR_CHECKS.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_PR_CHECKS.png rename to platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_PR_CHECKS.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png b/platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png rename to platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_RELEASE.png b/platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_RELEASE.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/WORKFLOW_RELEASE.png rename to platform/docs/versioned_docs/version-3.10/assets/img/WORKFLOW_RELEASE.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/aboutModal.png b/platform/docs/versioned_docs/version-3.10/assets/img/aboutModal.png new file mode 100644 index 000000000..4f3552f34 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/aboutModal.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/add-extension.png b/platform/docs/versioned_docs/version-3.10/assets/img/add-extension.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/add-extension.png rename to platform/docs/versioned_docs/version-3.10/assets/img/add-extension.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/add-mode.png b/platform/docs/versioned_docs/version-3.10/assets/img/add-mode.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/add-mode.png rename to platform/docs/versioned_docs/version-3.10/assets/img/add-mode.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure1.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure1.png new file mode 100644 index 000000000..754c7f660 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure1.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure10.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure10.png new file mode 100644 index 000000000..8286a7f58 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure10.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure2.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure2.png new file mode 100644 index 000000000..4d09923fb Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure2.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure3.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure3.png new file mode 100644 index 000000000..f56218dd8 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure3.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure4.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure4.png new file mode 100644 index 000000000..81dbb4284 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure4.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure5.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure5.png new file mode 100644 index 000000000..235f4ae54 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure5.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure6.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure6.png new file mode 100644 index 000000000..f860599c5 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure6.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure7.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure7.png new file mode 100644 index 000000000..24b486361 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure7.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure8.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure8.png new file mode 100644 index 000000000..1ab7679fb Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure8.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/azure9.png b/platform/docs/versioned_docs/version-3.10/assets/img/azure9.png new file mode 100644 index 000000000..3825f11d6 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/azure9.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/browser-console-non-secure-context.png b/platform/docs/versioned_docs/version-3.10/assets/img/browser-console-non-secure-context.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/browser-console-non-secure-context.png rename to platform/docs/versioned_docs/version-3.10/assets/img/browser-console-non-secure-context.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/captureViewportModal.png b/platform/docs/versioned_docs/version-3.10/assets/img/captureViewportModal.png new file mode 100644 index 000000000..4cdc10820 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/captureViewportModal.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/cli-search-no-verbose.png b/platform/docs/versioned_docs/version-3.10/assets/img/cli-search-no-verbose.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/cli-search-no-verbose.png rename to platform/docs/versioned_docs/version-3.10/assets/img/cli-search-no-verbose.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/cli-search-with-verbose.png b/platform/docs/versioned_docs/version-3.10/assets/img/cli-search-with-verbose.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/cli-search-with-verbose.png rename to platform/docs/versioned_docs/version-3.10/assets/img/cli-search-with-verbose.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/clock-mode.png b/platform/docs/versioned_docs/version-3.10/assets/img/clock-mode.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/clock-mode.png rename to platform/docs/versioned_docs/version-3.10/assets/img/clock-mode.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/clock-mode1.png b/platform/docs/versioned_docs/version-3.10/assets/img/clock-mode1.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/clock-mode1.png rename to platform/docs/versioned_docs/version-3.10/assets/img/clock-mode1.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/colorbarImage.png b/platform/docs/versioned_docs/version-3.10/assets/img/colorbarImage.png new file mode 100644 index 000000000..f862211c4 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/colorbarImage.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/context-menu.jpg b/platform/docs/versioned_docs/version-3.10/assets/img/context-menu.jpg new file mode 100644 index 000000000..4fef53fa9 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/context-menu.jpg differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/cornerstone-tools-link.gif b/platform/docs/versioned_docs/version-3.10/assets/img/cornerstone-tools-link.gif similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/cornerstone-tools-link.gif rename to platform/docs/versioned_docs/version-3.10/assets/img/cornerstone-tools-link.gif diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/cors-browser-console-errors.png b/platform/docs/versioned_docs/version-3.10/assets/img/cors-browser-console-errors.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/cors-browser-console-errors.png rename to platform/docs/versioned_docs/version-3.10/assets/img/cors-browser-console-errors.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/cors-network-panel-errors.png b/platform/docs/versioned_docs/version-3.10/assets/img/cors-network-panel-errors.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/cors-network-panel-errors.png rename to platform/docs/versioned_docs/version-3.10/assets/img/cors-network-panel-errors.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/create-extension.png b/platform/docs/versioned_docs/version-3.10/assets/img/create-extension.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/create-extension.png rename to platform/docs/versioned_docs/version-3.10/assets/img/create-extension.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/create-mode.png b/platform/docs/versioned_docs/version-3.10/assets/img/create-mode.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/create-mode.png rename to platform/docs/versioned_docs/version-3.10/assets/img/create-mode.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/custom-logo.png b/platform/docs/versioned_docs/version-3.10/assets/img/custom-logo.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/custom-logo.png rename to platform/docs/versioned_docs/version-3.10/assets/img/custom-logo.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/customizable-overlay.jpeg b/platform/docs/versioned_docs/version-3.10/assets/img/customizable-overlay.jpeg similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/customizable-overlay.jpeg rename to platform/docs/versioned_docs/version-3.10/assets/img/customizable-overlay.jpeg diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/data-source-configuration-ui.png b/platform/docs/versioned_docs/version-3.10/assets/img/data-source-configuration-ui.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/data-source-configuration-ui.png rename to platform/docs/versioned_docs/version-3.10/assets/img/data-source-configuration-ui.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/dcm4chee-upload.gif b/platform/docs/versioned_docs/version-3.10/assets/img/dcm4chee-upload.gif similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/dcm4chee-upload.gif rename to platform/docs/versioned_docs/version-3.10/assets/img/dcm4chee-upload.gif diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-4d.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-4d.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-4d.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-4d.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-measurements.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-measurements.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-measurements.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-measurements.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-pdf.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-pdf.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-pdf.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-pdf.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-ptct.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-ptct.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-ptct.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-ptct.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-rtstruct.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-rtstruct.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-rtstruct.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-rtstruct.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-segmentation.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-segmentation.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-segmentation.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-segmentation.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-video.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-video.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-video.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-video.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-volume-rendering.webp b/platform/docs/versioned_docs/version-3.10/assets/img/demo-volume-rendering.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-volume-rendering.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-volume-rendering.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/demo-volumeRendering.png b/platform/docs/versioned_docs/version-3.10/assets/img/demo-volumeRendering.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/demo-volumeRendering.png rename to platform/docs/versioned_docs/version-3.10/assets/img/demo-volumeRendering.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/dicom-json-public.png b/platform/docs/versioned_docs/version-3.10/assets/img/dicom-json-public.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/dicom-json-public.png rename to platform/docs/versioned_docs/version-3.10/assets/img/dicom-json-public.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/dicom-json.png b/platform/docs/versioned_docs/version-3.10/assets/img/dicom-json.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/dicom-json.png rename to platform/docs/versioned_docs/version-3.10/assets/img/dicom-json.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/docker-pacs.png b/platform/docs/versioned_docs/version-3.10/assets/img/docker-pacs.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/docker-pacs.png rename to platform/docs/versioned_docs/version-3.10/assets/img/docker-pacs.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/e2e-cypress-final.png b/platform/docs/versioned_docs/version-3.10/assets/img/e2e-cypress-final.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/e2e-cypress-final.png rename to platform/docs/versioned_docs/version-3.10/assets/img/e2e-cypress-final.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/e2e-cypress.png b/platform/docs/versioned_docs/version-3.10/assets/img/e2e-cypress.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/e2e-cypress.png rename to platform/docs/versioned_docs/version-3.10/assets/img/e2e-cypress.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/embedded-viewer-diagram.png b/platform/docs/versioned_docs/version-3.10/assets/img/embedded-viewer-diagram.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/embedded-viewer-diagram.png rename to platform/docs/versioned_docs/version-3.10/assets/img/embedded-viewer-diagram.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/filtering-worklist.png b/platform/docs/versioned_docs/version-3.10/assets/img/filtering-worklist.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/filtering-worklist.png rename to platform/docs/versioned_docs/version-3.10/assets/img/filtering-worklist.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/github-readme-branches-Jun2024.png b/platform/docs/versioned_docs/version-3.10/assets/img/github-readme-branches-Jun2024.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/github-readme-branches-Jun2024.png rename to platform/docs/versioned_docs/version-3.10/assets/img/github-readme-branches-Jun2024.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/google-create-credentials.png b/platform/docs/versioned_docs/version-3.10/assets/img/google-create-credentials.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/google-create-credentials.png rename to platform/docs/versioned_docs/version-3.10/assets/img/google-create-credentials.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/google-enable-apis.png b/platform/docs/versioned_docs/version-3.10/assets/img/google-enable-apis.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/google-enable-apis.png rename to platform/docs/versioned_docs/version-3.10/assets/img/google-enable-apis.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/google-healthcare-service-agent-warning.png b/platform/docs/versioned_docs/version-3.10/assets/img/google-healthcare-service-agent-warning.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/google-healthcare-service-agent-warning.png rename to platform/docs/versioned_docs/version-3.10/assets/img/google-healthcare-service-agent-warning.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/google-manually-add-scopes.png b/platform/docs/versioned_docs/version-3.10/assets/img/google-manually-add-scopes.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/google-manually-add-scopes.png rename to platform/docs/versioned_docs/version-3.10/assets/img/google-manually-add-scopes.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/google-oauth-consent-steps.png b/platform/docs/versioned_docs/version-3.10/assets/img/google-oauth-consent-steps.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/google-oauth-consent-steps.png rename to platform/docs/versioned_docs/version-3.10/assets/img/google-oauth-consent-steps.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/google-projects-drop-down.png b/platform/docs/versioned_docs/version-3.10/assets/img/google-projects-drop-down.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/google-projects-drop-down.png rename to platform/docs/versioned_docs/version-3.10/assets/img/google-projects-drop-down.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/google-provided-accounts-checkbox.png b/platform/docs/versioned_docs/version-3.10/assets/img/google-provided-accounts-checkbox.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/google-provided-accounts-checkbox.png rename to platform/docs/versioned_docs/version-3.10/assets/img/google-provided-accounts-checkbox.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/hangingProtocolExample.png b/platform/docs/versioned_docs/version-3.10/assets/img/hangingProtocolExample.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/hangingProtocolExample.png rename to platform/docs/versioned_docs/version-3.10/assets/img/hangingProtocolExample.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/iframe-basic.png b/platform/docs/versioned_docs/version-3.10/assets/img/iframe-basic.png new file mode 100644 index 000000000..5934a9422 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/iframe-basic.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/iframe-headers.png b/platform/docs/versioned_docs/version-3.10/assets/img/iframe-headers.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/iframe-headers.png rename to platform/docs/versioned_docs/version-3.10/assets/img/iframe-headers.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/jwt-explained.png b/platform/docs/versioned_docs/version-3.10/assets/img/jwt-explained.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/jwt-explained.png rename to platform/docs/versioned_docs/version-3.10/assets/img/jwt-explained.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/keycloak-default-theme.png b/platform/docs/versioned_docs/version-3.10/assets/img/keycloak-default-theme.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/keycloak-default-theme.png rename to platform/docs/versioned_docs/version-3.10/assets/img/keycloak-default-theme.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/keycloak-ohif-theme.png b/platform/docs/versioned_docs/version-3.10/assets/img/keycloak-ohif-theme.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/keycloak-ohif-theme.png rename to platform/docs/versioned_docs/version-3.10/assets/img/keycloak-ohif-theme.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/labelling-flow.png b/platform/docs/versioned_docs/version-3.10/assets/img/labelling-flow.png new file mode 100644 index 000000000..d16f46149 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/labelling-flow.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/large-pt-ct.jpeg b/platform/docs/versioned_docs/version-3.10/assets/img/large-pt-ct.jpeg similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/large-pt-ct.jpeg rename to platform/docs/versioned_docs/version-3.10/assets/img/large-pt-ct.jpeg diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/layoutSelectorAdvancedPresetGeneratorImage.png b/platform/docs/versioned_docs/version-3.10/assets/img/layoutSelectorAdvancedPresetGeneratorImage.png new file mode 100644 index 000000000..6a912d77c Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/layoutSelectorAdvancedPresetGeneratorImage.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/layoutSelectorCommonPresetsImage.png b/platform/docs/versioned_docs/version-3.10/assets/img/layoutSelectorCommonPresetsImage.png new file mode 100644 index 000000000..57bf60ab1 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/layoutSelectorCommonPresetsImage.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/loading-indicator-icon.png b/platform/docs/versioned_docs/version-3.10/assets/img/loading-indicator-icon.png new file mode 100644 index 000000000..934d03aed Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/loading-indicator-icon.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/loading-indicator-percent.png b/platform/docs/versioned_docs/version-3.10/assets/img/loading-indicator-percent.png new file mode 100644 index 000000000..b4f466b21 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/loading-indicator-percent.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/locizeSponsor.svg b/platform/docs/versioned_docs/version-3.10/assets/img/locizeSponsor.svg similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/locizeSponsor.svg rename to platform/docs/versioned_docs/version-3.10/assets/img/locizeSponsor.svg diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/locked-sr.png b/platform/docs/versioned_docs/version-3.10/assets/img/locked-sr.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/locked-sr.png rename to platform/docs/versioned_docs/version-3.10/assets/img/locked-sr.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/measurement-labels-auto.png b/platform/docs/versioned_docs/version-3.10/assets/img/measurement-labels-auto.png new file mode 100644 index 000000000..619608429 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/measurement-labels-auto.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/measurement-panel-1.png b/platform/docs/versioned_docs/version-3.10/assets/img/measurement-panel-1.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/measurement-panel-1.png rename to platform/docs/versioned_docs/version-3.10/assets/img/measurement-panel-1.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/measurement-panel-prompt.png b/platform/docs/versioned_docs/version-3.10/assets/img/measurement-panel-prompt.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/measurement-panel-prompt.png rename to platform/docs/versioned_docs/version-3.10/assets/img/measurement-panel-prompt.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/measurement-panel-tracked.png b/platform/docs/versioned_docs/version-3.10/assets/img/measurement-panel-tracked.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/measurement-panel-tracked.png rename to platform/docs/versioned_docs/version-3.10/assets/img/measurement-panel-tracked.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/measurement-temporary.png b/platform/docs/versioned_docs/version-3.10/assets/img/measurement-temporary.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/measurement-temporary.png rename to platform/docs/versioned_docs/version-3.10/assets/img/measurement-temporary.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/measurements-prevNext.png b/platform/docs/versioned_docs/version-3.10/assets/img/measurements-prevNext.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/measurements-prevNext.png rename to platform/docs/versioned_docs/version-3.10/assets/img/measurements-prevNext.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/memory-profiling-regular.png b/platform/docs/versioned_docs/version-3.10/assets/img/memory-profiling-regular.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/memory-profiling-regular.png rename to platform/docs/versioned_docs/version-3.10/assets/img/memory-profiling-regular.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/microscopy.webp b/platform/docs/versioned_docs/version-3.10/assets/img/microscopy.webp similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/microscopy.webp rename to platform/docs/versioned_docs/version-3.10/assets/img/microscopy.webp diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/migration-modes.png b/platform/docs/versioned_docs/version-3.10/assets/img/migration-modes.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/migration-modes.png rename to platform/docs/versioned_docs/version-3.10/assets/img/migration-modes.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/migration-split-button.png b/platform/docs/versioned_docs/version-3.10/assets/img/migration-split-button.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/migration-split-button.png rename to platform/docs/versioned_docs/version-3.10/assets/img/migration-split-button.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/mode-archs.png b/platform/docs/versioned_docs/version-3.10/assets/img/mode-archs.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/mode-archs.png rename to platform/docs/versioned_docs/version-3.10/assets/img/mode-archs.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/mode-clock.png b/platform/docs/versioned_docs/version-3.10/assets/img/mode-clock.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/mode-clock.png rename to platform/docs/versioned_docs/version-3.10/assets/img/mode-clock.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/mode-template.png b/platform/docs/versioned_docs/version-3.10/assets/img/mode-template.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/mode-template.png rename to platform/docs/versioned_docs/version-3.10/assets/img/mode-template.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/nginx-image-archive.png b/platform/docs/versioned_docs/version-3.10/assets/img/nginx-image-archive.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/nginx-image-archive.png rename to platform/docs/versioned_docs/version-3.10/assets/img/nginx-image-archive.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/ohif-cli-list.png b/platform/docs/versioned_docs/version-3.10/assets/img/ohif-cli-list.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/ohif-cli-list.png rename to platform/docs/versioned_docs/version-3.10/assets/img/ohif-cli-list.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/ohif-non-secure-context.png b/platform/docs/versioned_docs/version-3.10/assets/img/ohif-non-secure-context.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/ohif-non-secure-context.png rename to platform/docs/versioned_docs/version-3.10/assets/img/ohif-non-secure-context.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/ohif-pacs-keycloak.png b/platform/docs/versioned_docs/version-3.10/assets/img/ohif-pacs-keycloak.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/ohif-pacs-keycloak.png rename to platform/docs/versioned_docs/version-3.10/assets/img/ohif-pacs-keycloak.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/open-graph.png b/platform/docs/versioned_docs/version-3.10/assets/img/open-graph.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/open-graph.png rename to platform/docs/versioned_docs/version-3.10/assets/img/open-graph.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/overview.png b/platform/docs/versioned_docs/version-3.10/assets/img/overview.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/overview.png rename to platform/docs/versioned_docs/version-3.10/assets/img/overview.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/panel-module-left-right.png b/platform/docs/versioned_docs/version-3.10/assets/img/panel-module-left-right.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/panel-module-left-right.png rename to platform/docs/versioned_docs/version-3.10/assets/img/panel-module-left-right.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/panel-module-v3.png b/platform/docs/versioned_docs/version-3.10/assets/img/panel-module-v3.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/panel-module-v3.png rename to platform/docs/versioned_docs/version-3.10/assets/img/panel-module-v3.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/panelmodule-icon.png b/platform/docs/versioned_docs/version-3.10/assets/img/panelmodule-icon.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/panelmodule-icon.png rename to platform/docs/versioned_docs/version-3.10/assets/img/panelmodule-icon.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/preferSizeOverAccuracy.png b/platform/docs/versioned_docs/version-3.10/assets/img/preferSizeOverAccuracy.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/preferSizeOverAccuracy.png rename to platform/docs/versioned_docs/version-3.10/assets/img/preferSizeOverAccuracy.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/progressDropdown.png b/platform/docs/versioned_docs/version-3.10/assets/img/progressDropdown.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/progressDropdown.png rename to platform/docs/versioned_docs/version-3.10/assets/img/progressDropdown.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptAddSeriesContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptAddSeriesContent.png new file mode 100644 index 000000000..53c721160 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptAddSeriesContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptBeginTrackingContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptBeginTrackingContent.png new file mode 100644 index 000000000..d5a2aa261 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptBeginTrackingContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardDirtyContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardDirtyContent.png new file mode 100644 index 000000000..aedd30e3e Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardDirtyContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardSeriesContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardSeriesContent.png new file mode 100644 index 000000000..cad713435 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardSeriesContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardStudyContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardStudyContent.png new file mode 100644 index 000000000..7cbafd216 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptDiscardStudyContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptRtstructContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptRtstructContent.png new file mode 100644 index 000000000..71af4eb47 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptRtstructContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptSRTrackingContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptSRTrackingContent.png new file mode 100644 index 000000000..365f62411 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptSRTrackingContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptTrackStudyContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptTrackStudyContent.png new file mode 100644 index 000000000..d5a2aa261 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptTrackStudyContent.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/promptsegmentationContent.png b/platform/docs/versioned_docs/version-3.10/assets/img/promptsegmentationContent.png new file mode 100644 index 000000000..0091b988b Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/promptsegmentationContent.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/reference-lines-from-start.png b/platform/docs/versioned_docs/version-3.10/assets/img/reference-lines-from-start.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/reference-lines-from-start.png rename to platform/docs/versioned_docs/version-3.10/assets/img/reference-lines-from-start.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/restore-exported-sr.png b/platform/docs/versioned_docs/version-3.10/assets/img/restore-exported-sr.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/restore-exported-sr.png rename to platform/docs/versioned_docs/version-3.10/assets/img/restore-exported-sr.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/scope-of-project.png b/platform/docs/versioned_docs/version-3.10/assets/img/scope-of-project.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/scope-of-project.png rename to platform/docs/versioned_docs/version-3.10/assets/img/scope-of-project.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/segDisplayEditingFalse.png b/platform/docs/versioned_docs/version-3.10/assets/img/segDisplayEditingFalse.png new file mode 100644 index 000000000..a6d130621 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/segDisplayEditingFalse.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/segDisplayEditingTrue.png b/platform/docs/versioned_docs/version-3.10/assets/img/segDisplayEditingTrue.png new file mode 100644 index 000000000..993f23f3b Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/segDisplayEditingTrue.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/segmentation-overlay.png b/platform/docs/versioned_docs/version-3.10/assets/img/segmentation-overlay.png new file mode 100644 index 000000000..ed49baf29 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/segmentation-overlay.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/segmentationShowAddSegmentImage.png b/platform/docs/versioned_docs/version-3.10/assets/img/segmentationShowAddSegmentImage.png new file mode 100644 index 000000000..f53c75a80 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/segmentationShowAddSegmentImage.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/segmentationTableModeImage.png b/platform/docs/versioned_docs/version-3.10/assets/img/segmentationTableModeImage.png new file mode 100644 index 000000000..22f952621 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/segmentationTableModeImage.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/segmentationTableModeImage2.png b/platform/docs/versioned_docs/version-3.10/assets/img/segmentationTableModeImage2.png new file mode 100644 index 000000000..c0de2b70f Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/segmentationTableModeImage2.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/self-signed-cert-advanced-warning.png b/platform/docs/versioned_docs/version-3.10/assets/img/self-signed-cert-advanced-warning.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/self-signed-cert-advanced-warning.png rename to platform/docs/versioned_docs/version-3.10/assets/img/self-signed-cert-advanced-warning.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/self-signed-cert-warning.png b/platform/docs/versioned_docs/version-3.10/assets/img/self-signed-cert-warning.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/self-signed-cert-warning.png rename to platform/docs/versioned_docs/version-3.10/assets/img/self-signed-cert-warning.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/seriesSort.png b/platform/docs/versioned_docs/version-3.10/assets/img/seriesSort.png new file mode 100644 index 000000000..f325392b5 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/seriesSort.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/services-data.png b/platform/docs/versioned_docs/version-3.10/assets/img/services-data.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/services-data.png rename to platform/docs/versioned_docs/version-3.10/assets/img/services-data.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/services-measurements.png b/platform/docs/versioned_docs/version-3.10/assets/img/services-measurements.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/services-measurements.png rename to platform/docs/versioned_docs/version-3.10/assets/img/services-measurements.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/services-ui.png b/platform/docs/versioned_docs/version-3.10/assets/img/services-ui.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/services-ui.png rename to platform/docs/versioned_docs/version-3.10/assets/img/services-ui.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/services.png b/platform/docs/versioned_docs/version-3.10/assets/img/services.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/services.png rename to platform/docs/versioned_docs/version-3.10/assets/img/services.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/static-dicom-web.png b/platform/docs/versioned_docs/version-3.10/assets/img/static-dicom-web.png new file mode 100644 index 000000000..fab41fc84 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/static-dicom-web.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/studyMenuItemsImage.png b/platform/docs/versioned_docs/version-3.10/assets/img/studyMenuItemsImage.png new file mode 100644 index 000000000..b70a44d79 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/studyMenuItemsImage.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/surge-deploy.gif b/platform/docs/versioned_docs/version-3.10/assets/img/surge-deploy.gif similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/surge-deploy.gif rename to platform/docs/versioned_docs/version-3.10/assets/img/surge-deploy.gif diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/template-extension-files.png b/platform/docs/versioned_docs/version-3.10/assets/img/template-extension-files.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/template-extension-files.png rename to platform/docs/versioned_docs/version-3.10/assets/img/template-extension-files.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/template-mode-files.png b/platform/docs/versioned_docs/version-3.10/assets/img/template-mode-files.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/template-mode-files.png rename to platform/docs/versioned_docs/version-3.10/assets/img/template-mode-files.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/template-mode-ui.png b/platform/docs/versioned_docs/version-3.10/assets/img/template-mode-ui.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/template-mode-ui.png rename to platform/docs/versioned_docs/version-3.10/assets/img/template-mode-ui.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/thumbnailMenuItemsImage.png b/platform/docs/versioned_docs/version-3.10/assets/img/thumbnailMenuItemsImage.png new file mode 100644 index 000000000..135433748 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/thumbnailMenuItemsImage.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/toolbar-module.png b/platform/docs/versioned_docs/version-3.10/assets/img/toolbar-module.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/toolbar-module.png rename to platform/docs/versioned_docs/version-3.10/assets/img/toolbar-module.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/toolbarModule-layout.png b/platform/docs/versioned_docs/version-3.10/assets/img/toolbarModule-layout.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/toolbarModule-layout.png rename to platform/docs/versioned_docs/version-3.10/assets/img/toolbarModule-layout.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/toolbarModule-nested-buttons.png b/platform/docs/versioned_docs/version-3.10/assets/img/toolbarModule-nested-buttons.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/toolbarModule-nested-buttons.png rename to platform/docs/versioned_docs/version-3.10/assets/img/toolbarModule-nested-buttons.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/toolbarModule-zoom.png b/platform/docs/versioned_docs/version-3.10/assets/img/toolbarModule-zoom.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/toolbarModule-zoom.png rename to platform/docs/versioned_docs/version-3.10/assets/img/toolbarModule-zoom.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/toolbox-modal.png b/platform/docs/versioned_docs/version-3.10/assets/img/toolbox-modal.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/toolbox-modal.png rename to platform/docs/versioned_docs/version-3.10/assets/img/toolbox-modal.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/tracked-not-tracked.png b/platform/docs/versioned_docs/version-3.10/assets/img/tracked-not-tracked.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/tracked-not-tracked.png rename to platform/docs/versioned_docs/version-3.10/assets/img/tracked-not-tracked.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/tracking-workflow1.png b/platform/docs/versioned_docs/version-3.10/assets/img/tracking-workflow1.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/tracking-workflow1.png rename to platform/docs/versioned_docs/version-3.10/assets/img/tracking-workflow1.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/tracking-workflow2.png b/platform/docs/versioned_docs/version-3.10/assets/img/tracking-workflow2.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/tracking-workflow2.png rename to platform/docs/versioned_docs/version-3.10/assets/img/tracking-workflow2.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/tracking-workflow3.png b/platform/docs/versioned_docs/version-3.10/assets/img/tracking-workflow3.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/tracking-workflow3.png rename to platform/docs/versioned_docs/version-3.10/assets/img/tracking-workflow3.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/ui-modal.gif b/platform/docs/versioned_docs/version-3.10/assets/img/ui-modal.gif similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/ui-modal.gif rename to platform/docs/versioned_docs/version-3.10/assets/img/ui-modal.gif diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/ui-services.png b/platform/docs/versioned_docs/version-3.10/assets/img/ui-services.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/ui-services.png rename to platform/docs/versioned_docs/version-3.10/assets/img/ui-services.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/uploader.gif b/platform/docs/versioned_docs/version-3.10/assets/img/uploader.gif similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/uploader.gif rename to platform/docs/versioned_docs/version-3.10/assets/img/uploader.gif diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-access-control-request-flow.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-access-control-request-flow.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-access-control-request-flow.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-access-control-request-flow.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-hotkeys-default.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-hotkeys-default.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-hotkeys-default.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-hotkeys-default.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-hotkeys.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-hotkeys.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-hotkeys.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-hotkeys.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-measurement-export.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-measurement-export.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-measurement-export.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-measurement-export.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-open-viewer.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-open-viewer.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-open-viewer.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-open-viewer.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-study-filter.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-study-filter.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-study-filter.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-study-filter.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-study-list.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-study-list.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-study-list.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-study-list.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-study-next.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-study-next.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-study-next.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-study-next.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-study-panel.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-study-panel.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-study-panel.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-study-panel.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-study-summary.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-study-summary.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-study-summary.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-study-summary.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-studyist-modespecific.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-studyist-modespecific.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-studyist-modespecific.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-studyist-modespecific.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-toolbar-download-icon.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-toolbar-download-icon.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-toolbar-download-icon.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-toolbar-download-icon.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-toolbar-extra.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-toolbar-extra.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-toolbar-extra.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-toolbar-extra.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-toolbar-preset.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-toolbar-preset.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-toolbar-preset.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-toolbar-preset.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-toolbarDownload.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-toolbarDownload.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-toolbarDownload.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-toolbarDownload.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-layout.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-layout.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-layout.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-layout.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-main.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-main.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-main.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-main.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-toolbar-measurements.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-toolbar-measurements.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-toolbar-measurements.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-toolbar-measurements.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-toolbar.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-toolbar.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-viewer-toolbar.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-viewer-toolbar.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/user-viewer.png b/platform/docs/versioned_docs/version-3.10/assets/img/user-viewer.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/user-viewer.png rename to platform/docs/versioned_docs/version-3.10/assets/img/user-viewer.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/viewport-action-corners.png b/platform/docs/versioned_docs/version-3.10/assets/img/viewport-action-corners.png new file mode 100644 index 000000000..887bfe029 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/viewport-action-corners.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/viewport-download-warning.png b/platform/docs/versioned_docs/version-3.10/assets/img/viewport-download-warning.png new file mode 100644 index 000000000..863596b9d Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/viewport-download-warning.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/viewport-notification.png b/platform/docs/versioned_docs/version-3.10/assets/img/viewport-notification.png new file mode 100644 index 000000000..cef7c4611 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/viewport-notification.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/viewportModule-layout.png b/platform/docs/versioned_docs/version-3.10/assets/img/viewportModule-layout.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/viewportModule-layout.png rename to platform/docs/versioned_docs/version-3.10/assets/img/viewportModule-layout.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/viewportModule.png b/platform/docs/versioned_docs/version-3.10/assets/img/viewportModule.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/viewportModule.png rename to platform/docs/versioned_docs/version-3.10/assets/img/viewportModule.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/viewportOverlay-customization.png b/platform/docs/versioned_docs/version-3.10/assets/img/viewportOverlay-customization.png new file mode 100644 index 000000000..7f7245c35 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/viewportOverlay-customization.png differ diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/webgl-int16.png b/platform/docs/versioned_docs/version-3.10/assets/img/webgl-int16.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/webgl-int16.png rename to platform/docs/versioned_docs/version-3.10/assets/img/webgl-int16.png diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/webgl-report-norm16.png b/platform/docs/versioned_docs/version-3.10/assets/img/webgl-report-norm16.png similarity index 100% rename from platform/docs/versioned_docs/version-3.9/assets/img/webgl-report-norm16.png rename to platform/docs/versioned_docs/version-3.10/assets/img/webgl-report-norm16.png diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/windowLevelActionMenu.png b/platform/docs/versioned_docs/version-3.10/assets/img/windowLevelActionMenu.png new file mode 100644 index 000000000..1a1b43b86 Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/windowLevelActionMenu.png differ diff --git a/platform/docs/versioned_docs/version-3.10/assets/img/windowLevelPresets.png b/platform/docs/versioned_docs/version-3.10/assets/img/windowLevelPresets.png new file mode 100644 index 000000000..f98a282fc Binary files /dev/null and b/platform/docs/versioned_docs/version-3.10/assets/img/windowLevelPresets.png differ diff --git a/platform/docs/versioned_docs/version-3.9/configuration/_category_.json b/platform/docs/versioned_docs/version-3.10/configuration/_category_.json similarity index 100% rename from platform/docs/versioned_docs/version-3.9/configuration/_category_.json rename to platform/docs/versioned_docs/version-3.10/configuration/_category_.json diff --git a/platform/docs/versioned_docs/version-3.9/configuration/configurationFiles.md b/platform/docs/versioned_docs/version-3.10/configuration/configurationFiles.md similarity index 94% rename from platform/docs/versioned_docs/version-3.9/configuration/configurationFiles.md rename to platform/docs/versioned_docs/version-3.10/configuration/configurationFiles.md index c8dac49ba..be6829c74 100644 --- a/platform/docs/versioned_docs/version-3.9/configuration/configurationFiles.md +++ b/platform/docs/versioned_docs/version-3.10/configuration/configurationFiles.md @@ -28,7 +28,7 @@ The simplest way is to update the existing default config: ```js title="platform/app/public/config/default.js" window.config = { - routerBasename: '/', + routerBasename: null, extensions: [], modes: [], showStudyList: true, @@ -81,7 +81,7 @@ window.config = ({ servicesManager } = {}) => { } }, }, - routerBasename: '/', + routerBasename: null, dataSources: [ { namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', @@ -125,7 +125,7 @@ Here are a list of some options available: - `investigationalUseDialog`: This should contain an object with `option` value, it can be either `always` which always shows the dialog once per session, `never` which never shows the dialog, or `configure` which shows the dialog once and won't show it again until a set number of days defined by the user, if it's set to configure, you are required to add an additional property `days` which is the number of days to wait before showing the dialog again. - `groupEnabledModesFirst`: boolean, if set to true, all valid modes for the study get grouped together first, then the rest of the modes. If false, all modes are shown in the order they are defined in the configuration. - `experimentalStudyBrowserSort`: boolean, if set to true, you will get the experimental StudyBrowserSort component in the UI, which displays a list of sort functions that the displaySets can be sorted by, the sort reflects in all part of the app including the thumbnail/study panel. These sort functions are defined in the customizationModule and can be expanded by users. -- `disableConfirmationPrompts`: boolean, if set to true, it skips confirmation prompts for measurement tracking and hydration. +- `disableConfirmationPrompts`: boolean, if set to true, it skips confirmation prompts for segmentation related prompts. - `showPatientInfo`: string, if set to 'visible', the patient info header will be shown and its initial state is expanded. If set to 'visibleCollapsed', the patient info header will be shown but it's initial state is collapsed. If set to 'disabled', the patient info header will never be shown, and if set to 'visibleReadOnly', the patient info header will be shown and always expanded. - `requestTransferSyntaxUID` : Request a specific Transfer syntax from dicom web server ex: 1.2.840.10008.1.2.4.80 (applied only if acceptHeader is not set) - `omitQuotationForMultipartRequest`: Some servers (e.g., .NET) require the `multipart/related` request to be sent without quotation marks. Defaults to `false`. If your server doesn't require this, then setting this flag to `true` might improve performance (by removing the need for preflight requests). Also note that @@ -192,6 +192,7 @@ if auth headers are used, a preflight request is required. - `allowMultiSelectExport`: (default to false), if set to true, the user will be able to select the datasource to export the report to. - `activateViewportBeforeInteraction`: (default to true), if set to false, tools can be used directly without the need to click and activate the viewport. - `autoPlayCine`: (default to false), if set to true, data sets with the DICOM frame time tag (i.e. (0018,1063)) will auto play when displayed +- `addWindowLevelActionMenu`: (default to true), if set to false, the window level action menu item is NOT added to the viewport action corners - `dangerouslyUseDynamicConfig`: Dynamic config allows user to pass `configUrl` query string. This allows to load config without recompiling application. If the `configUrl` query string is passed, the worklist and modes will load from the referenced json rather than the default .env config. If there is no `configUrl` path provided, the default behaviour is used and there should not be any deviation from current user experience.
Points to consider while using `dangerouslyUseDynamicConfig`:
- User have to enable this feature by setting `dangerouslyUseDynamicConfig.enabled:true`. By default it is `false`. @@ -307,44 +308,6 @@ reasons: However, if you would like to get compressed data in a specific transfer syntax, you can modify the `acceptHeader` configuration or `requestTransferSyntaxUID` configuration. -## Default Initial Query -The default initial query for the worklist can be set as a session key in the configuration file. -For example, the following configuration automatically searches for patient names containing `Test`. - -```javascript -if (!window.location.search) { - window.sessionStorage.setItem( - 'queryFilterValues', - JSON.stringify({ - patientName: 'Test', - }) - ); -} -``` - -### Query For Studies From Today -Querying for a computed date range can be done by computing the date range -in the config file, see e2e.js for an example, reproduced below. To use this, -enter the query criteria '?today' as the full search criteria. - -```javascript -if (window.location.search === '?today') { - const now = new Date(); - const month = now.getMonth() + 1; - const day = now.getDate(); - window.sessionStorage.setItem( - 'queryFilterValues', - JSON.stringify({ - studyDate: { - startDate: `${now.getFullYear()}${month < 10 ? '0' + month : month}${day < 10 ? '0' + day : day}`, - endDate: null, - }, - }) - ); -} -``` - - ## Environment Variables We use environment variables at build and dev time to change the Viewer's diff --git a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/_category_.json b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/_category_.json similarity index 100% rename from platform/docs/versioned_docs/version-3.9/configuration/dataSources/_category_.json rename to platform/docs/versioned_docs/version-3.10/configuration/dataSources/_category_.json diff --git a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/configuration-ui.md b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/configuration-ui.md similarity index 98% rename from platform/docs/versioned_docs/version-3.9/configuration/dataSources/configuration-ui.md rename to platform/docs/versioned_docs/version-3.10/configuration/dataSources/configuration-ui.md index 1ff70f409..200fc167f 100644 --- a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/configuration-ui.md +++ b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/configuration-ui.md @@ -117,7 +117,7 @@ with the labels returned from `getItemLabels`. ## Creation via Customization Module The generic UI (i.e. `DataSourceConfigurationComponent`) uses the -[OHIF UI customization service](../../platform/services/ui/customization-service.md) to +[OHIF UI customization service](../../platform/services/customization-service/customizationService.md) to instantiate the `BaseDataSourceConfigurationAPI` instance to configure a data source. A UI configurable data source should have a `configurationAPI` field as part of diff --git a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/dicom-json.md b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/dicom-json.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/configuration/dataSources/dicom-json.md rename to platform/docs/versioned_docs/version-3.10/configuration/dataSources/dicom-json.md diff --git a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/dicom-web-proxy.md b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/dicom-web-proxy.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/configuration/dataSources/dicom-web-proxy.md rename to platform/docs/versioned_docs/version-3.10/configuration/dataSources/dicom-web-proxy.md diff --git a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/dicom-web.md b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/dicom-web.md similarity index 93% rename from platform/docs/versioned_docs/version-3.9/configuration/dataSources/dicom-web.md rename to platform/docs/versioned_docs/version-3.10/configuration/dataSources/dicom-web.md index 79d9e3db2..2707370fe 100644 --- a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/dicom-web.md +++ b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/dicom-web.md @@ -123,7 +123,7 @@ configuration looks like: ```js window.config = { - routerBasename: '/', + routerBasename: null, extensions: [], modes: [], showStudyList: true, @@ -194,13 +194,14 @@ See the [`singlepart`](#singlepart) data source configuration option. ### BulkDataURI -The `bulkDataURI` configuration option allows the datasource to use the -bulkdata end points for retrieving metadata if originally was not included in the +The `bulkDataURI` configuration option alters how the datasource uses the +bulkdata end points for retrieving metadata if the data was originally not included in the response from the server. This is useful for the metadata information that are big and can/should be retrieved in a separate request. In case the bulkData URI is relative (instead of absolute) the `relativeResolution` option can be used to -specify the resolution of the relative URI. The possible values are `studies`, `series` and `instances`. -Certainly the knowledge of how the server is configured is required to use this option. +specify the resolution of the relative URI. The possible values are `studies`, `series`. + +The default value is shown below (this will be added if not included in the config). ```js bulkDataURI: { @@ -209,6 +210,12 @@ bulkDataURI: { }, ``` +The other options allowed are: + +* transform - to take the string and return an updated string +* startsWith and prefixWith - to remove a standard prefix and add an optional prefix + * Used primarily for a reverse proxy or change in URL naming +* relativeResolution - used to set bulkdata paths to studies resolution for incorrect bulkdata paths ### Running DCM4CHEE diff --git a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/introduction.md b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/introduction.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/configuration/dataSources/introduction.md rename to platform/docs/versioned_docs/version-3.10/configuration/dataSources/introduction.md diff --git a/platform/docs/versioned_docs/version-3.10/configuration/dataSources/static-files.md b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/static-files.md new file mode 100644 index 000000000..ec460db2b --- /dev/null +++ b/platform/docs/versioned_docs/version-3.10/configuration/dataSources/static-files.md @@ -0,0 +1,100 @@ +--- +sidebar_position: 5 +sidebar_label: Static Files +--- + + +# Static DICOMweb Files for Enhanced Performance + +This section describes how to generate and serve static DICOMweb files, significantly improving the performance of your OHIF Viewer setup. These files are pre-processed and compressed, minimizing storage space and reducing serving time to the bare minimum (disk read and HTTP stream write). + +## Static-DICOMWeb Project + +The core tool for this process is the `static-wado` project, available on GitHub: + +[static-wado]: https://github.com/RadicalImaging/Static-DICOMWeb + +This project contains two main components: + +* **`static-wado-creator`:** Converts raw DICOM files into a DICOMweb-compliant directory structure, optimizing them for efficient serving. +* **`static-wado-webserver`:** A simple web server specifically designed to serve the generated static DICOMweb files. + +## Prerequisites + +- Node.js and npm (or yarn) installed on your system. + +## Installation + +1. **Clone the Repository:** + + ```bash + git clone https://github.com/RadicalImaging/Static-DICOMWeb + cd Static-DICOMWeb + ``` + +2. **Install Dependencies:** + + ```bash + yarn install + ``` + +## Generating Static DICOMweb Files + +1. **Prepare your DICOM data:** Organize your DICOM files into a directory. For example `/Users/alireza/dicom/test-static-script/ACRIN-CT`. + +2. **Convert to DICOMweb Structure:** + Use the `mkdicomweb.js` script from the `static-wado-creator` package to create the DICOMweb directory: + + ```bash + node packages/static-wado-creator/bin/mkdicomweb.js '/Users/alireza/dicom/test-static-script/ACRIN-CT' -o '/Users/alireza/dicom/test-static-script/output' + ``` + + * **Replace:** + * `/Users/alireza/dicom/test-static-script/ACRIN-CT` with the path to your directory of DICOM files. + * `/Users/alireza/dicom/test-static-script/output` with your desired output directory for the DICOMweb structure. + + This command will generate a directory structure similar to this in your output location: + + ![alt text](../../assets/img/static-dicom-web.png) + +## Serving Static Files with the Web Server + +1. **Start the Server:** + + Run the `dicomwebserver.mjs` script from the `static-wado-webserver` package, specifying the port and the DICOMweb directory: + + ```bash + node packages/static-wado-webserver/bin/dicomwebserver.mjs -p 3001 -o /Users/alireza/dicom/test-static-script/output + ``` + + * **`-p 3001`:** Sets the server to listen on port 3001. You can change this if needed. + * **`-o /Users/alireza/dicom/test-static-script/output`:** Specifies the path to your generated DICOMweb directory. + + :::info + The `-p` (port) and `-o` (output directory) flags are used to configure the server. + ::: + +## Running OHIF Viewer with Static Data + +1. **Use the `local_static.js` Configuration:** + + Start the OHIF Viewer in development mode using the provided `local_static.js` configuration file: + + ```bash + yarn dev:static + ``` + +2. **Configuration Details:** + + The `local_static.js` configuration file is pre-configured to point to: + + ```js + qidoRoot: 'http://localhost:3001/dicomweb', + wadoRoot: 'http://localhost:3001/dicomweb', + ``` + + This matches the default port (3001) used by the `static-wado-webserver`. + + :::info + If you change the port or output directory when running the `static-wado-webserver`, you **must** also update the `qidoRoot` and `wadoRoot` values in your `local_static.js` configuration file accordingly to ensure the OHIF Viewer can access the data. + ::: diff --git a/platform/docs/versioned_docs/version-3.9/configuration/tour-demo.gif b/platform/docs/versioned_docs/version-3.10/configuration/tour-demo.gif similarity index 100% rename from platform/docs/versioned_docs/version-3.9/configuration/tour-demo.gif rename to platform/docs/versioned_docs/version-3.10/configuration/tour-demo.gif diff --git a/platform/docs/versioned_docs/version-3.9/configuration/tours.md b/platform/docs/versioned_docs/version-3.10/configuration/tours.md similarity index 82% rename from platform/docs/versioned_docs/version-3.9/configuration/tours.md rename to platform/docs/versioned_docs/version-3.10/configuration/tours.md index 849c82f1b..340800053 100644 --- a/platform/docs/versioned_docs/version-3.9/configuration/tours.md +++ b/platform/docs/versioned_docs/version-3.10/configuration/tours.md @@ -13,62 +13,39 @@ Tours allow you to provide step-by-step guidance to users, explaining different ### Adding a Tour to your Configuration -Here’s an example of adding a tour to your configuration file: +Here's how you can add a tour to your configuration file: ```javascript window.config = { - tours: [ - { - id: 'basicViewerTour', - route: '/viewer', - steps: [ + customizationService: { + 'ohif.tours': { + $set: [ { - id: 'scroll', - title: 'Scrolling Through Images', - text: 'You can scroll through the images using the mouse wheel or scrollbar.', - attachTo: { - element: '.viewport-element', - on: 'top', - }, - advanceOn: { - selector: '.cornerstone-viewport-element', - event: 'CORNERSTONE_TOOLS_MOUSE_WHEEL', - }, - }, - { - id: 'zoom', - title: 'Zooming In and Out', - text: 'You can zoom the images using the right click.', - attachTo: { - element: '.viewport-element', - on: 'left', - }, - advanceOn: { - selector: '.cornerstone-viewport-element', - event: 'CORNERSTONE_TOOLS_MOUSE_UP', - }, - }, - // Add more steps as needed - ], - tourOptions: { - useModalOverlay: true, - defaultStepOptions: { - buttons: [ + id: 'basicViewerTour', + route: '/viewer', + steps: [ { - text: 'Skip all', - action() { - this.complete(); + id: 'zoom', + title: 'Zooming In and Out', + text: 'You can zoom the images using the right click.', + attachTo: { + element: '.viewport-element', + on: 'left', + }, + advanceOn: { + selector: '.cornerstone-viewport-element', + event: 'CORNERSTONE_TOOLS_MOUSE_UP', }, - secondary: true, }, ], }, - }, + ], }, - ], + }, }; ``` + ## Explanation of Parameters ### `tours` Array diff --git a/platform/docs/versioned_docs/version-3.9/configuration/url.md b/platform/docs/versioned_docs/version-3.10/configuration/url.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/configuration/url.md rename to platform/docs/versioned_docs/version-3.10/configuration/url.md diff --git a/platform/docs/versioned_docs/version-3.9/conformance.md b/platform/docs/versioned_docs/version-3.10/conformance.md similarity index 83% rename from platform/docs/versioned_docs/version-3.9/conformance.md rename to platform/docs/versioned_docs/version-3.10/conformance.md index d0ca8ba00..ac34b46de 100644 --- a/platform/docs/versioned_docs/version-3.9/conformance.md +++ b/platform/docs/versioned_docs/version-3.10/conformance.md @@ -1,6 +1,6 @@ --- sidebar_position: 12 -sidebar_label: DICOM Conformance Statement (NEW) +sidebar_label: DICOM Conformance Statement title: DICOM Conformance Statement --- diff --git a/platform/docs/versioned_docs/version-3.9/deployment/_category_.json b/platform/docs/versioned_docs/version-3.10/deployment/_category_.json similarity index 100% rename from platform/docs/versioned_docs/version-3.9/deployment/_category_.json rename to platform/docs/versioned_docs/version-3.10/deployment/_category_.json diff --git a/platform/docs/versioned_docs/version-3.9/deployment/authorization.md b/platform/docs/versioned_docs/version-3.10/deployment/authorization.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/deployment/authorization.md rename to platform/docs/versioned_docs/version-3.10/deployment/authorization.md diff --git a/platform/docs/versioned_docs/version-3.10/deployment/azure.md b/platform/docs/versioned_docs/version-3.10/deployment/azure.md new file mode 100644 index 000000000..219532d90 --- /dev/null +++ b/platform/docs/versioned_docs/version-3.10/deployment/azure.md @@ -0,0 +1,176 @@ +--- +sidebar_position: 12 +--- + +# Microsoft Azure + +This guide explains how to configure a DICOM datasource in OHIF using Azure Healthcare APIs. It focuses on the configuration details and parameters necessary for integration. + +--- + +## Configuring Azure Healthcare APIs as a DICOMweb Data Source + +Follow these steps to set up Azure as a DICOM datasource for the OHIF Viewer. + +--- + +### Azure AD Registration: + +1. Navigate to the Azure Portal. +2. Select **"Azure Active Directory"** > **"App registrations"** > **"New registration"**. +3. Name your application. +4. Under **"Supported account types"**, select **"Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)"**. +5. Enter the following values in your redirect URI tab: + + ![Redirect URI](../assets/img/azure4.png) + +--- + +### API Permissions: + +1. Under your registered application, go to **"API permissions"**. +2. Click **"Add a permission"**. +3. Choose the Azure API for DICOM (**Dicom.ReadWrite**). If you can't find it, refer to the "Configure Azure DICOMWEB Service" section and then return to this step. + + ![API Permissions](../assets/img/azure1.png) + +--- + +### Authentication: + +1. Under **"Authentication"**, check the **"ID tokens"** box since we are using OpenID Connect. + +--- + +### App Client ID and Tenant ID: + +1. Copy your app client ID and tenant ID to prepare for use in configuring an OHIF datasource. + +--- + +### Consent: + +1. The first time a user logs in, they will be prompted to consent to the permissions your application has requested. +2. Once they grant consent, your application can use the obtained access token to call the specific Microsoft API on behalf of the user. + + ![Consent](../assets/img/azure5.png) + +--- + +### Configure Azure DICOMWEB Service: + +1. **Create a Health Data Services workspace**: + + ![Create Workspace](../assets/img/azure6.png) + +2. Visit the newly created workspace and press **"Deploy DICOM Service"**: + + ![Deploy DICOM Service](../assets/img/azure7.png) + +3. After the DICOM service is deployed, visit the **"CORS headers"** section: + + ![CORS Headers](../assets/img/azure8.png) + +4. Set the headers and origins to `*` and specify the HTTP methods you'd like to use: + + ![Set Headers](../assets/img/azure9.png) + +5. Save the changes. + +6. Add the Microsoft emails of the users you'd like to grant access to your DICOM service in the **"Access control"** section and assign them the **"DICOM Data Owner"** role (or other roles depending on your requirements): + + ![Access Control](../assets/img/azure10.png) + +7. Copy your DICOM service URL to prepare it for usage in OHIF as a datasource: + + ![DICOM Service URL](../assets/img/azure3.png) + +8. Upload your DICOM files to your service. + +--- + +## 1. Configure OIDC Authentication + +Azure uses OpenID Connect (OIDC) for authentication. Update the OIDC section in your configuration file with the following parameters: + +```json +"oidc": [ + { + "redirect_uri": "/callback", + "response_type": "id_token token", + "scope": "openid https://dicom.healthcareapis.azure.com/Dicom.ReadWrite", + "post_logout_redirect_uri": "/logout-redirect.html", + "automaticSilentRenew": false, + "revokeAccessTokenOnSignout": true, + "loadUserInfo": false, + "authority": "https://login.microsoftonline.com/{tenant-id}/v2.0/", + "client_id": "{client-id}" + } +] +``` + +#### Parameters: +- **redirect_uri**: The URL where users are redirected after successful authentication. +- **response_type**: Specifies the authentication response type (id_token and token). +- **scope**: Defines the level of access. Use `Dicom.ReadWrite` to allow read and write access to DICOM data. +- **post_logout_redirect_uri**: The URL users are redirected to after logout. +- **automaticSilentRenew**: Automatically renews tokens without user interaction. Set to `false` for manual renewal. +- **revokeAccessTokenOnSignout**: Revokes access tokens upon logout for added security. +- **loadUserInfo**: Disables loading additional user information; set to `false` for Azure as it is not supported. +- **authority**: The Azure AD tenant URL for OIDC authorization. +- **client_id**: The application’s client ID from Azure AD. + +--- + +## 2. Add the Data Source Configuration + +Update the data source configuration file with your Azure Healthcare APIs details: + +```json +{ + "namespace": "@ohif/extension-default.dataSourcesModule.dicomweb", + "sourceName": "ohif_azure", + "friendlyName": "ohif_azure", + "configuration": { + "singlepart": "bulkdata,pdf,video", + "imageRendering": "wadors", + "thumbnailRendering": "wadors", + "supportsWildcard": true, + "enableStudyLazyLoad": true, + "supportsFuzzyMatching": false, + "supportsStow": true, + "qidoRoot": "https://{your-dicom-instance}.dicom.azurehealthcareapis.com/v2", + "wadoUriRoot": "https://{your-dicom-instance}.dicom.azurehealthcareapis.com/v2", + "wadoRoot": "https://{your-dicom-instance}.dicom.azurehealthcareapis.com/v2" + } +} +``` + +#### Parameters: +- **qidoRoot**: Base URL for QIDO-RS queries. +- **wadoUriRoot**: Base URL for WADO-URI requests. +- **wadoRoot**: Base URL for WADO-RS requests. + +--- + +## 3. Running the Viewer with Azure Configuration + +1. Save the above configurations in your OHIF Viewer configuration file. +2. Run the viewer: + + ```bash + cd OHIFViewer + yarn install + APP_CONFIG=config/azure.js yarn run dev + ``` + + Replace `config/azure.js` with the path to your configuration file. + +--- + +### Additional Notes +- Ensure that the Azure Healthcare API is enabled for your subscription and that the necessary permissions (e.g., `Dicom.ReadWrite`) are assigned to the OIDC client. +- The `qidoRoot`, `wadoUriRoot`, and `wadoRoot` should point to your Azure DICOM service URL. Replace `{your-dicom-instance}` with your actual instance name. + +This setup allows OHIF to interact seamlessly with Azure's Healthcare APIs, enabling robust DICOM management and visualization. + diff --git a/platform/docs/versioned_docs/version-3.9/deployment/build-for-production.md b/platform/docs/versioned_docs/version-3.10/deployment/build-for-production.md similarity index 88% rename from platform/docs/versioned_docs/version-3.9/deployment/build-for-production.md rename to platform/docs/versioned_docs/version-3.10/deployment/build-for-production.md index d1dd508bd..dbd89a8a9 100644 --- a/platform/docs/versioned_docs/version-3.9/deployment/build-for-production.md +++ b/platform/docs/versioned_docs/version-3.10/deployment/build-for-production.md @@ -102,18 +102,12 @@ directory: yarn global add http-server # Change the directory to the platform/app +cd platform/app # Serve the files in our current directory npx serve ./dist -c ../public/serve.json ``` -:::caution -In the video below notice that there is `platform/viewer` which has been renamed to `platform/app` in the latest version -::: - -
- -
### Automating Builds and Deployments diff --git a/platform/docs/versioned_docs/version-3.10/deployment/cors.md b/platform/docs/versioned_docs/version-3.10/deployment/cors.md new file mode 100644 index 000000000..7035ab213 --- /dev/null +++ b/platform/docs/versioned_docs/version-3.10/deployment/cors.md @@ -0,0 +1,144 @@ +--- +sidebar_position: 8 +--- + +# Cross-Origin Information for OHIF + +This document describes various security configurations, settings and environments/contexts needed to fully leverage OHIF’s capabilities. One may need some configurations while others might need ALL of them - it all depends on the environment OHIF is expected to run in. + +In particular, three of OHIF’s features depend on these configurations: +- [Embedding OHIF in an iframe](#embedding-ohif-in-an-iframe) +- [XMLHttpRequests to fetch data from data sources](#cors-in-ohif) + + +## Embedding OHIF in an iframe + +As described [here](./iframe.md), there are cases where OHIF will be embedded in an iframe. The following links provide more information for setting up and configuring OHIF to work in an iframe: + +- [OHIF iframe documentation](./iframe.md#static-build) +- [OHIF as a Cross-origin Resource in an iframe](#ohif-as-a-cross-origin-resource-in-an-iframe) + +## Secure Context + +MDN defines a secure context as [“a Window or Worker for which certain minimum standards of authentication and confidentiality are met.“](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) + +Any local URL is considered secure. The following are some examples of local URLs that are considered secure… +- http://localhost +- http://127.0.0.1:3000 + +URLs that are NOT local must be delivered over `https://` or `wss://` (i.e. TLS) to be considered secure. See [When is a context considered secure](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure) in MDN for more information. + +### iframes + +A page embedded in an iframe is considered secure if it itself and every one of its embedding ancestors are delivered securely. Otherwise it is deemed insecure. + + +### Configuring/setting up a secure context + +[Local URLs are considered secure](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure), and as such whenever OHIF is accessed via a local URL (e.g. http://localhost:3000) it is running in a secure context. For example, in a development environment using the default webpack setup, OHIF can be deployed and accessed in a secure context at http://localhost:3000. + +The best alternative is to host OHIF over HTTPS. + +:::tip +OHIF can be served over HTTPS in a variety of ways (these are just some examples). +- Website hosting services that offer HTTPS deployment (e.g,. Netlify) or offer HTTPS load balancers (AWS, Google Cloud etc.) +- Setting up a reverse proxy (e.g. `nginx`) with a self-signed certificate that forwards requests to the OHIF server + - [An OHIF Docker image can be set up this way](./docker/docker.md#ssl). +::: + +## Origin Definition + +According to [MDN](https://developer.mozilla.org/en-US/docs/Glossary/Origin), a Web content’s origin is defined by the scheme (protocol), hostname (domain), and port of the URL used to access it. Two objects have the same origin only when the scheme, hostname, and port all match. + +## CORS - Cross-Origin Resource Sharing + +A cross-origin resource is a resource (e.g. image, JSON, etc) that is served by one origin and used/referenced by a different origin. + +CORS is the protocol utilized by web servers and browsers whereby a server of one origin identifies and/or restricts which of its resources that other origins (i.e. other than its own) a browser should allow access to. By default a browser does not permit cross-origin resource sharing. + +The CORS mechanism relies on the HTTP response headers from the server to indicate if a resource can be shared with a different origin. + +See the [MDN CORS article](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) for more information. + +### CORS HTTP Headers + +The header that mostly concerns OHIF is listed below and should be configured accordingly on the DICOMweb server or any data source that OHIF would make XMLHttpRequests to for its data. + +```http +Access-Control-Allow-Origin: `` | * +``` + +:::tip +The `Access-Control-Allow-Origin` header specifies which origins can access the served resource embedded in the response. + +Either a single, specific origin (i.e. ``) can be specified or ALL origins (i.e. *) + +See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#access-control-allow-origin) for more information. +::: + +### CORS in OHIF + +OHIF fetches and displays data and images from data sources. It invokes XMLHttpRequests to some data sources such as DICOMweb data sources to fetch the information to render. Typically, a DICOMweb server is hosted on a completely different origin than the one serving OHIF. As such, those XMLHttpRequests use CORS. + +### Troubleshooting CORS in OHIF + +The following is an example screenshot of the browser console when one of OHIF’s DICOMweb data source servers is not configured for CORS. + +![CORS browser console errors](../assets/img/cors-browser-console-errors.png) + +And the following is what is in the accompanying network tab. + +![CORS browser network panel errors](../assets/img/cors-network-panel-errors.png) + +:::info +Setting the appropriate CORS header varies per server or service that is hosting the data source. What follows below is just one example to remedy the problem. +::: + +:::tip +If Orthanc is the data source running in a Docker container composed with/behind nginx. And OHIF is being served at localhost:3000. The issue can be remedied by adding either of the following to Orthanc’s Docker container nginx.conf file. + +```nginx +add_header 'Access-Control-Allow-Origin' 'http://localhost:3000' always; +``` + +Or + +```nginx +add_header 'Access-Control-Allow-Origin' '*' always; +``` +::: + + + + +### Header Values (see [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy#usage) for more information) + +|Value|Description| +|-----|-----------| +|same-site|Only requests from the same site can read the resource.| +|same-origin|Only requests from the same origin can read the resource.| +|cross-origin|Requests from any origin can read the resource. The value is useful and [exists](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy#relationship_to_cross-origin_embedder_policy_coep) primarily for letting documents with the [COEP require-corp value](#header-values-pertinent-to-ohif-see-mdn-for-more-information-1) know that the resource is ok to be embedded| + +### OHIF and CORP + + +#### PDF from a Cross Origin DICOMweb Data Source + +There are some DICOMweb data sources (e.g. dcm4chee) whereby OHIF uses the data source’s `/rendered` endpoint to embed a DICOM PDF document in the OHIF DOM using an `` tag. + +As specified for the [COEP require-corp value](#header-values-pertinent-to-ohif-see-mdn-for-more-information-1), a page like OHIF with COEP header `require-corp` can embed cross-origin resources in DOM elements that have the [`crossorigin` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) OR the resource is delivered with an appropriate CORP header. The `` tag does NOT support the `crossorigin` attribute. As such, the PDF must be delivered with a CORP header. + +:::tip +Setting the CORP header varies per server or service that is hosting the data source. The following is just one example. + +For a dcm4chee DICOMweb data source composed in Docker behind nginx, the CORP header can be configured in the nginx.conf file as such: + +```nginx +add_header 'Cross-Origin-Resource-Policy' 'cross-origin' always; +``` + +If the dcm4chee server and the OHIF server are hosted on the same site, then the following would also work: +```nginx +add_header 'Cross-Origin-Resource-Policy' 'same-site' always; +``` +::: diff --git a/platform/docs/versioned_docs/version-3.10/deployment/custom-url-access.md b/platform/docs/versioned_docs/version-3.10/deployment/custom-url-access.md new file mode 100644 index 000000000..c4639aedf --- /dev/null +++ b/platform/docs/versioned_docs/version-3.10/deployment/custom-url-access.md @@ -0,0 +1,116 @@ +--- +sidebar_position: 4 +title: Custom URL Access/Build +--- + + +# Hosting the Web Viewer on a Custom URL Path + +You can host the viewer on a subpath like `/abc` instead of the root `/`. There are **two levels** of customization depending on how you want to serve your static assets. + + +## Simple Setup (Recommended for Most Use Cases) + +If you want to make the viewer accessible from a custom path (e.g. `/abc`) and **don’t care where the assets are loaded from** (they’ll be fetched from the root `/`), this setup is for you. + +### What You Get + +- Viewer available at `https://yourdomain.com/abc` +- All assets (JS, WASM, etc.) still loaded from the root (`/app.js`, `/viewer.wasm`, etc.) + +### How To Set It Up + +1. Set `routerBasename` in your config file (e.g., `config/myConfig.js`) to `/abc` +2. Build the viewer with: + +```bash +APP_CONFIG=config/myConfig.js yarn build +``` + +### Local Development + +```bash +APP_CONFIG=config/myConfig.js yarn dev +``` + +--- + +## Advanced Setup (Custom Asset Path) + +If you want to host the viewer at `/abc` **and** serve static assets from a different location (e.g. `/my-private-assets`), this is a more advanced scenario. + +### What You Get + +- Viewer accessible from `https://yourdomain.com/abc` +- All assets loaded from `https://yourdomain.com/my-private-assets/` + +### Why This is Tricky + +Some libraries (especially ones using WASM) load assets using **relative paths**, which can break if not handled carefully. To solve this: + +- Set `routerBasename` to `/abc` +- Set `PUBLIC_URL` to `/my-private-assets/` +- Webpack will load assets from the specified public URL. + +### Local Development Notes + +In development, use proxy rewrites to handle relative asset paths. Example for `dicom-microscopy-viewer`: + +```js +proxy: { + '/dicom-microscopy-viewer': { + target: 'http://localhost:3000', + pathRewrite: { + '^/dicom-microscopy-viewer': `/${PUBLIC_URL}/dicom-microscopy-viewer`, + }, + }, +} +``` + +This ensures local development can find assets even when libraries expect them at certain paths. + + +### Building and Serving in Production + +To build the viewer for production: + +```bash +PUBLIC_URL=/my-private-assets/ APP_CONFIG=config/myConfig.js yarn build +``` + +If you're using `npx serve`, make sure to update `serve.json`: + +```json +{ + "rewrites": [{ "source": "*", "destination": "/abc/index.html" }] +} +``` + +Serve the viewer like this: + +```bash +cd platform/app +mv dist abc # Rename dist folder to match your viewer route +npx serve -c ./public/serve.json +``` + +--- + +### 🐳 Using Docker? You're Covered + +If you’re using our Dockerfile, you’re all set — it already handles copying specific asset folders (like `dicom-microscopy-viewer`) to the root: + +```Dockerfile +COPY --from=builder /usr/src/app/platform/app/dist/dicom-microscopy-viewer /usr/share/nginx/html/dicom-microscopy-viewer +``` + +Keep an eye on the browser network tab for any assets that might fail to load — if any other libraries require similar treatment, you’ll need to handle those as well. + +--- + +## Summary + +| Goal | routerBasename | PUBLIC_URL | Assets Load From | +|-----------------------------------|----------------|-----------------------|--------------------------| +| Viewer at `/abc`, assets from `/` | `/abc` | default | Root `/` | +| Viewer at `/abc`, assets from `/my-private-assets` | `/abc` | `/my-private-assets/` | `/my-private-assets/` | diff --git a/platform/docs/versioned_docs/version-3.10/deployment/docker/docker.md b/platform/docs/versioned_docs/version-3.10/deployment/docker/docker.md new file mode 100644 index 000000000..e9c7e212f --- /dev/null +++ b/platform/docs/versioned_docs/version-3.10/deployment/docker/docker.md @@ -0,0 +1,210 @@ +--- +sidebar_position: 4 +--- + +# Docker + +The OHIF source code provides a [Dockerfile](https://github.com/OHIF/Viewers/blob/master/Dockerfile) to create and run a Docker image that containerizes an [nginx](https://www.nginx.com/) web server serving the OHIF Viewer. + +:::info +This Dockerfile is the same used to generate the [OHIF image(s) on Docker Hub](https://hub.docker.com/r/ohif/app/tags). +::: + + +## Running the Docker Container with our pre-built images from Docker Hub + + +To run the Docker container, use the following command based on whether you're targeting a release or beta version. (Learn more about versioning [here](../../development/getting-started.md#branches).) + +```sh +# beta version +docker run -d -p 3000:80 ohif/app:v3.10.0-beta.33 + +# release version +docker run -d -p 3000:80 ohif/app:v3.9.2 +``` + +This will run the Docker container and serve the OHIF Viewer at `http://localhost:3000`. You can name the container anything you want by adding the `--name` flag (e.g., `docker run -d -p 3000:80 --name ohif-viewer-container ohif/app:v3.10.0-beta.33`). + + +## Building the Docker Image From Source + +:::tip +Building a Docker image comes in handy when OHIF has been customized (e.g. with custom extensions, modes, hanging protocols, etc.). For convenience, there are basic OHIF images built in Docker Hub. Find the latest [release](https://hub.docker.com/r/ohif/app/tags?page=1&name=latest) and [dev](https://hub.docker.com/r/ohif/app/tags?page=1&name=beta) images all in Docker Hub. +::: + +### Prerequisites +The machine on which to build and run the Docker container must have: +1. All of the [requirements](../build-for-production.md#build-for-production) for building a production version of OHIF. +2. A checked out branch of the OHIF Viewer. +3. [Docker](https://docs.docker.com/get-docker/) installed. + +### Building the Docker Image + +:::info +In this tutorial, we will build the Docker image for the OHIF Viewer and OHIF server as defined in the `default.js` config which points to our server and our studies. + +If you need the Viewer to show your own server studies, you need to build the viewer with a custom configuration that points to your server and your studies. + +You can set build arguments to point to your custom configuration file. For more information on data sources, see [here](../../platform/extensions/modules/data-source.md). + +::: + + + + +To build the Docker image from the terminal: + +- Navigate to the OHIF Viewer code root directory (base of the monorepo). +- Run a basic Docker build command: + + ```sh + docker build . -t ohif-viewer-image + ``` + + *Note*: The name `ohif-viewer-image` is an example. You can replace it with any name and tag of your choice by changing the `-t` value (e.g., `-t my-image:latest`). This naming is arbitrary for local Docker images. + +- To customize the build, you can include optional build arguments to set defaults for the app configuration, public path, or port: + + ```sh + docker build . -t ohif-viewer-image \ + --build-arg APP_CONFIG=config/e2e.js \ + --build-arg PUBLIC_URL=/ohif/ \ + --build-arg PORT=6000 + ``` + +#### Available Build Arguments (Optional) +You can use the following build arguments to customize the Docker image: + +- `APP_CONFIG`: (Optional) Sets the default app configuration (e.g., `config/e2e.js`). This value can be overridden later by setting an environment variable (you can set it in the docker run command). +- `PUBLIC_URL`: (Optional) Specifies the public path for serving the OHIF Viewer (e.g., `/ohif/`). This value is baked into the build and cannot be changed without rebuilding the image. +- `PORT`: (Optional) Sets the application’s port. + +#### Examples of Using Build Arguments +Here are examples of how to use the `--build-arg` option: + +- Set the public path: + + ```sh + docker build . --build-arg PUBLIC_URL=/ohif/ + ``` + +- Set a custom app configuration: + + ```sh + docker build . --build-arg APP_CONFIG=config/kheops.js + ``` + +- Specify a port: + + ```sh + docker build . --build-arg PORT=6000 + ``` + +- Combine multiple arguments: + + ```sh + docker build . --build-arg PUBLIC_URL=/ohif/ --build-arg APP_CONFIG=config/kheops.js --build-arg PORT=6000 + ``` + +:::info PUBLIC_URL Explanation +The `PUBLIC_URL` build argument sets the public path for serving the OHIF Viewer. For example, using `--build-arg PUBLIC_URL=/ohif/` will serve the worklist at `http://host/ohif/` and the viewer at `http://host/ohif/viewer`. While the worklist is also accessible at `http://host/`, it redirects to the `PUBLIC_URL`. +::: + +--- + +## Running the Docker Container + +After building the Docker image, you can run it as a container using the following command. The name of the Docker image (`ohif-viewer-image`) is specified at the end, while the flags control various runtime settings. + +```sh +docker run -d -p 3000:80/tcp --name ohif-viewer-container ohif-viewer-image +``` + +- `-d`: Runs the container in the background and prints the container ID. + +- `-p {host-port}:{nginx-port}/tcp`: Maps the container's `nginx` port to a port on the host machine. For example, `3000:80` maps host port 3000 to container port 80. + +- `--name`: Assigns an arbitrary name to the container for easy identification (e.g., `ohif-viewer-container`). + + + +### Configuring the `nginx` Listen Port + +The `nginx` server uses the `{PORT}` environment variable to determine the listening port inside the container. By default, this is set to `80`. You can override it during runtime or build: + +#### Setting the Port at Runtime + +Use the `-e PORT={container-port}` flag to set the listening port and publish it with `-p`. For example, the following command sets the container port to `8080` and maps it to host port `3000`: + +```sh +docker run -d -e PORT=8080 -p 3000:8080/tcp --name ohif-viewer-container ohif-viewer-image +``` + +#### Setting the Port During Build + +To bake the port configuration into the Docker image, use the `--build-arg PORT={container-port}` flag when building the image: + +```sh +docker build . --build-arg PORT=8080 +``` + +then you can run the container with the following command: + +```sh +docker run -d -p 3000:8080/tcp --name ohif-viewer-container ohif-viewer-image +``` + +--- + +### Specifying the OHIF Configuration File + +You can specify the OHIF configuration file for the container in three ways: + +1. **[Build Default](#build-default)**: Set the default configuration file during the build process. +2. **[Volume Mounting](#volume-mounting)**: Mount a local configuration file into the container. +3. **[Environment Variable](#environment-variable)**: Pass the configuration file contents directly as an environment variable. + +#### Build Default + +Set the configuration file during the build process using the `--build-arg APP_CONFIG={config-path}` flag. For example: + +```sh +docker build . --build-arg APP_CONFIG=config/kheops +``` + +--- + +#### Volume Mounting + +To use a local configuration file, mount it as a volume during runtime. For example, to use a file located at `/path/to/config/file.js`, use the `-v` flag: + +```sh +docker run -d -p 3000:80/tcp -v /path/to/config/file.js:/usr/share/nginx/html/app-config.js --name ohif-viewer-container ohif-viewer-image +``` + +:::tip +Ensure the path to the local configuration file is absolute, as some Docker versions require it. +::: + +--- + +#### Environment Variable + +Alternatively, you can specify the configuration file contents directly as an environment variable (`APP_CONFIG`). This method is useful in environments like Google Cloud. + +**Important**: The `APP_CONFIG` variable must contain the file's contents, not its file path. Use the `cat` command to read the file and pass its contents as the environment variable: + +```sh +docker run -d -p 3000:80/tcp -e APP_CONFIG="$(cat /path/to/the/config/file)" --name ohif-viewer-container ohif-viewer-image +``` + +:::tip +- Remove single-line comments (`//`) from the configuration file to prevent issues when serving the file to the OHIF client. +- As an alternative to the `cat` command, you can convert the file to a single line and copy-paste it directly. Tools like [Visual Studio Code](https://stackoverflow.com/questions/46491061/shortcut-for-joining-two-lines) and [Notepad++](https://superuser.com/questions/518229/how-do-i-remove-linebreaks-in-notepad) offer "Join Lines" commands to help with this. +- If both the [Volume Mounting](#volume-mounting) and [Environment Variable](#environment-variable) methods are used, the Volume Mounting method takes precedence. +::: + +--- + +This rewrite improves readability by reorganizing information into smaller, clear sections and providing consistent formatting for examples and tips. diff --git a/platform/docs/versioned_docs/version-3.10/deployment/docker/ssl.md b/platform/docs/versioned_docs/version-3.10/deployment/docker/ssl.md new file mode 100644 index 000000000..1942468ec --- /dev/null +++ b/platform/docs/versioned_docs/version-3.10/deployment/docker/ssl.md @@ -0,0 +1,127 @@ +--- +sidebar_position: 2 +title: SSL +--- + +# SSL + +:::caution +We make no claims or guarantees regarding this section concerning security. If in doubt, enlist the help of an expert and conduct proper audits. +::: + + +If OHIF is not deployed over SSL, this means information transferred to/from OHIF is not encrypted. Consideration must be given as to whether OHIF should be deployed in a secure context over SSL. + +### Specifying the SSL Port, Certificate and Private Key + +For convenience, the [built Docker image](#building-the-docker-image) can be run over SSL by +- setting the `{SSL_PORT}` environment variable +- volume mounting the SSL certificate +- volume mounting the SSL private key + +:::info +The volume mounted SSL certificate and private key are mapped to the [`ssl_certificate`](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate) and [`ssl_certificate_key`](http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate_key) `nginx` directives respectively. +::: + +Similar to the [`nginx` listen port](#configuring-the-nginx-listen-port), the `{SSL_PORT}` environment variable is the internal port that `nginx` listens on to serve the OHIF web server over SSL and has to be likewise published via the `-p` switch. + +The following is an example command running the Docker container over SSL. Note that depending on the version of Docker, an absolute path to the certificate and private key files might be required. + +```sh +docker run -d -e SSL_PORT=443 -p 3003:443/tcp -v /path/to/certificate:/etc/ssl/certs/ssl-certificate.crt -v /path/to/private/key:/etc/ssl/private/ssl-private-key.key --name ohif-viewer-container ohif-viewer-image +``` + +:::caution +The above deploys OHIF over SSL using `nginx`'s default SSL configuration. For further OHIF server hardening and security configuration, consider enlisting an expert and then editing OHIF's `nginx` [SSL template configuration file](https://github.com/OHIF/Viewers/blob/8a8ae237d26faf123abeb073cbf0cd426c3e9ef2/.docker/Viewer-v3.x/default.ssl.conf.template) with further [security settings](https://nginx.org/en/docs/http/ngx_http_ssl_module.html) and [tweaks](http://nginx.org/en/docs/http/configuring_https_servers.html) and then [build a new Docker image](#building-the-docker-image) from there. +::: + +:::caution +The private key is a secure entity and should have restricted access. Keep it safe! +::: + +:::caution +The presence of the `{SSL_PORT}` environment variable is used to trigger to deploy over SSL as opposed to HTTP. If `{SSL_PORT}` is NOT defined, then HTTP is used even if the certificate and private key volumes are mounted. +::: + +:::tip +The read and write permissions of the source, mounted volumes are preserved in the Docker container. The volume mounted certificate and private key require read permission. + +One way to ensure both are readable is to issue the following on the host system terminal prior to running the Docker container and mounting the certificate and private key volumes. + +```sh +sudo chmod 644 /path/to/certificate /path/to/private/key +``` +::: + +:::tip +The SSL certificate and private key can be either [CA issued](#ca-signed-certificates) or [self-signed](#self-signed-certificates). +::: + + +### CA Signed Certificates + +According to [SSL.com](https://www.ssl.com/faqs/what-is-a-certificate-authority/), a global certificate authority (CA) is a trusted authority and organization that guarantees the identity of other, third-party entities and guarantees the integrity of the electronic information (e.g. web site data) those third-party entities provide and deliver. + +There are many globally trusted CAs. Below is a non-exhaustive list of some CAs including links to some documentation for creating and installing certificates and keys from those authorities to be used with `nginx`. +- [GoDaddy](https://ca.godaddy.com/help/nginx-install-a-certificate-6722) +- [Let's Encrypt](https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/) +- [digicert](https://www.digicert.com/kb/csr-ssl-installation/nginx-openssl.htm) + + +### Self-Signed Certificates + +According to [Entrust](https://www.entrust.com/resources/faq/what-is-a-self-signed-certificate), a self-signed certificate is one that is NOT signed by a trusted, public [CA authority](#ca-signed-certificates), but instead (typically) signed by the developer or individual or organization responsible for a web site. + +Browsers will treat self-signed certificates as not secure because the signer is not publicly recognized and trusted. When visiting a site encrypted with a self-signed certificate, the browser will present a screen similar to the following warning about the potential risk. + +![Self-signed certificate warning](../../assets/img/self-signed-cert-warning.png) + +For a self-signed certificate this is normal and expected. Clicking the `Advanced` button displays further information as well as a link for proceeding to site that the certificate is encrypting. + +![Self-signed certificate warning](../../assets/img/self-signed-cert-advanced-warning.png) + + +Self-signed certificates might be appropriate for testing or perhaps deploying a site within an organization's internal LAN. In any case, consult an expert prior to deploying OHIF over SSL. + +:::tip +A self-signed certificate can be generated using [`openssl`](https://www.openssl.org/) on the command line. +::: + +To create a self-signed certificate: +1. Open a command prompt. +2. Issue the following command: + ```sh + sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /desired/key/directory/self-signed-private.key -out /desired/cert/directory/self-signed.crt + ``` + + The chart below describes each of the items in the command. + + |Command Item|Description| + |------------|-----------| + |sudo|temporarily grant access as the root/super user to run the `openssl` command| + |openssl|the command line tool for creating and managing certificates and keys| + |req|this together with the subsequent `-x509` indicates to request to generate a self-signed certificate| + |-x509|this together with the `req` indicates to request to generate a self-signed certificate| + |-nodes|skip the option to secure the certificate with a passphrase; this allows `nginx` to start up with without intervention to enter a passphrase each time| + |-days 365|the number of days the certificate will be valid for| + |-newkey rsa:2048|create the a new certificate and key together and make an RSA key that is 2048 bits long| + |-keyout|the path and file name where the private key will be written to| + |-out|the path and file name where the certificate will be written to| + +3. Answer the prompts that follow. The table below lists the various prompts. The default value for each prompt is shown within the square brackets. The most important prompt is `Common Name (e.g. server FQDN or YOUR name)`. For this enter the IP address of the OHIF server being secured. + + |Prompt| + |------| + |Country Name (2 letter code) [AU]| + |State or Province Name (full name) [Some-State]| + |Locality Name (eg, city) []| + |Organization Name (eg, company) [Internet Widgets Pty Ltd]| + |Organizational Unit Name (eg, section) []| + |Common Name (e.g. server FQDN or YOUR name) []| + |Email Address []| + +4. Once completed, the self-signed certificate and private key will be in the locations specified by the `-keyout` and `-out` flags and can be [volume mounted](#specifying-the-ssl-port-certificate-and-private-key) accordingly to the OHIF Docker container. + +:::tip +Windows' users can access `openssl` using [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/). +::: diff --git a/platform/docs/versioned_docs/version-3.9/deployment/google-cloud-healthcare.md b/platform/docs/versioned_docs/version-3.10/deployment/google-cloud-healthcare.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/deployment/google-cloud-healthcare.md rename to platform/docs/versioned_docs/version-3.10/deployment/google-cloud-healthcare.md diff --git a/platform/docs/versioned_docs/version-3.10/deployment/iframe.md b/platform/docs/versioned_docs/version-3.10/deployment/iframe.md new file mode 100644 index 000000000..671756911 --- /dev/null +++ b/platform/docs/versioned_docs/version-3.10/deployment/iframe.md @@ -0,0 +1,55 @@ +--- +sidebar_position: 7 +sidebar_label: iframe +--- + +# iframe + +With the transition to more advanced visualization, loading, and rendering techniques using WebWorkers, WASM, and WebGL, the script tag usage of the OHIF viewer v3 has been deprecated. +An alternative option for script tag usage is to employ an iframe. You can utilize the iframe element to load the OHIF viewer and establish communication with it using the postMessage API if needed. + +We recommend utilizing modern development practices and incorporating OHIF viewer within your application using a more modular and integrated approach, such as leveraging bundlers, other UI +components, and frameworks. + +## Static Build + +You can use the iframe element to load the OHIF viewer as a child element of your application if you need the +viewer to be embedded within your application. The iframe element can be used as follows (use your own custom styles) + +```html + @@ -29,17 +30,24 @@ is expected to support, [check out it's interface in `@ohif/core`][interface] | ---------- | ------------------------------------- | | `hide()` | Hides the open modal | | `show()` | Shows the provided content in a modal | +| `customComponent()` | Overrides the default Modal component | ## Implementations | Implementation | Consumer | | ---------------------------------- | --------- | | [Modal Provider][modal-provider]\* | Modal.jsx | - -`*` - Denotes maintained by OHIF +| customComponent | user extensions via `setServiceImplementation({customComponent: Modal})` | +### Custom Component +If you would like to customize the modal component that OHIF uses, you can register your own +component with the `customComponent` property. + +```js +setServiceImplementation({customComponent: Modal}) +``` > 3rd Party implementers may be added to this table via pull requests. diff --git a/platform/docs/versioned_docs/version-3.9/platform/services/ui/ui-notification-service.md b/platform/docs/versioned_docs/version-3.10/platform/services/ui/ui-notification-service.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/platform/services/ui/ui-notification-service.md rename to platform/docs/versioned_docs/version-3.10/platform/services/ui/ui-notification-service.md diff --git a/platform/docs/versioned_docs/version-3.9/platform/services/ui/ui-viewport-dialog-service.md b/platform/docs/versioned_docs/version-3.10/platform/services/ui/ui-viewport-dialog-service.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/platform/services/ui/ui-viewport-dialog-service.md rename to platform/docs/versioned_docs/version-3.10/platform/services/ui/ui-viewport-dialog-service.md diff --git a/platform/docs/versioned_docs/version-3.9/platform/services/ui/viewport-action-menu.md b/platform/docs/versioned_docs/version-3.10/platform/services/ui/viewport-action-menu.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/platform/services/ui/viewport-action-menu.md rename to platform/docs/versioned_docs/version-3.10/platform/services/ui/viewport-action-menu.md diff --git a/platform/docs/versioned_docs/version-3.9/platform/services/ui/viewport-grid-service.md b/platform/docs/versioned_docs/version-3.10/platform/services/ui/viewport-grid-service.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/platform/services/ui/viewport-grid-service.md rename to platform/docs/versioned_docs/version-3.10/platform/services/ui/viewport-grid-service.md diff --git a/platform/docs/versioned_docs/version-3.9/platform/themeing.md b/platform/docs/versioned_docs/version-3.10/platform/themeing.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/platform/themeing.md rename to platform/docs/versioned_docs/version-3.10/platform/themeing.md diff --git a/platform/docs/versioned_docs/version-3.9/release-notes.md b/platform/docs/versioned_docs/version-3.10/release-notes.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/release-notes.md rename to platform/docs/versioned_docs/version-3.10/release-notes.md diff --git a/platform/docs/versioned_docs/version-3.9/resources.md b/platform/docs/versioned_docs/version-3.10/resources.md similarity index 88% rename from platform/docs/versioned_docs/version-3.9/resources.md rename to platform/docs/versioned_docs/version-3.10/resources.md index 4c60e18fb..bbdd4a18f 100644 --- a/platform/docs/versioned_docs/version-3.9/resources.md +++ b/platform/docs/versioned_docs/version-3.10/resources.md @@ -9,8 +9,29 @@ Throughout the development of the OHIF Viewer, we have participated in various conferences and "hackathons". In this page, we will provide the presentations and other resources that we have provided to the community in the past: +## 2025 + +### Machine Learning in Medical Imaging Consortium (MaLMIC) | January 2025 + +We presented two talks at the Machine Learning in Medical Imaging Consortium (MaLMIC) 2025 conference. + +- Advanced Medical Imaging Visualization [Slides](https://docs.google.com/presentation/d/1HZDL-72nNe4BPawDxR3XnSFLB3oLo72RjExc-KHDZfo/edit?usp=sharing) +- Introducing Advanced Segmentation Tools in the OHIF Viewer and Cornerstone3D [Slides](https://docs.google.com/presentation/d/146oJ24PPsFZaDPHeFudRF1dmbL42K9yHzQdXXAXdWxk/edit?usp=sharing) + + ## 2024 +### ITCR Sustainment Session 2024 + +Dr. Gordon Harris presented at ITCR sustainment session about the future of OHIF. + +- OHIF Sustainability [Slides](https://docs.google.com/presentation/d/15380mjCzBKBj9PuysCW1Q9ODnyoypJrCDpj3atTtK6I/edit?usp=sharing) + +### ITCR Sustainment Panel 2024 + +- Advanced Medical Imaging Visualization [Slides](https://docs.google.com/presentation/d/1alUp9uJpoJs3aAUE0KqrufGo6e6HHvXYmOAdJp-Rlkc/edit?usp=sharing) + + ### IMNO 2024 - March 19-20, 2024 We participated in the Imaging Network Ontario (ImNO) 2024 symposium, presenting three posters. One of our presentations received the best talk award during the session. diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/_category_.json b/platform/docs/versioned_docs/version-3.10/user-guide/_category_.json similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/_category_.json rename to platform/docs/versioned_docs/version-3.10/user-guide/_category_.json diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/index.md b/platform/docs/versioned_docs/version-3.10/user-guide/index.md similarity index 90% rename from platform/docs/versioned_docs/version-3.9/user-guide/index.md rename to platform/docs/versioned_docs/version-3.10/user-guide/index.md index 52f44bad8..f40ef30df 100644 --- a/platform/docs/versioned_docs/version-3.9/user-guide/index.md +++ b/platform/docs/versioned_docs/version-3.10/user-guide/index.md @@ -44,6 +44,8 @@ Below the study list are pagination options for 25, 50, or 100 studies per page. ![user-study-next](../assets/img/user-study-next.png) +For static wado servers, you can enable fuzzy matching by setting the `supportsFuzzyMatching` property to true, after enabling it, fuzzy matching will be peformed on the patient name field, for example, if PatientName is "John^Doe", then "jo", "Do" and "John Doe" will all match. However "ohn" will not match. + ## Study Summary Click on a study to expand the study summary panel. diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/Language.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/Language.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/Language.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/Language.md diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/_category_.json b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/_category_.json similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/_category_.json rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/_category_.json diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/hotkeys.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/hotkeys.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/hotkeys.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/hotkeys.md diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/index.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/index.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/index.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/index.md diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/measurement-panel.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/measurement-panel.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/measurement-panel.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/measurement-panel.md diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/measurement-tracking.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/measurement-tracking.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/measurement-tracking.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/measurement-tracking.md diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/study-panel.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/study-panel.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/study-panel.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/study-panel.md diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/toolbar.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/toolbar.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/toolbar.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/toolbar.md diff --git a/platform/docs/versioned_docs/version-3.9/user-guide/viewer/viewport.md b/platform/docs/versioned_docs/version-3.10/user-guide/viewer/viewport.md similarity index 100% rename from platform/docs/versioned_docs/version-3.9/user-guide/viewer/viewport.md rename to platform/docs/versioned_docs/version-3.10/user-guide/viewer/viewport.md diff --git a/platform/docs/versioned_docs/version-3.9/assets/img/iframe-basic.png b/platform/docs/versioned_docs/version-3.9/assets/img/iframe-basic.png deleted file mode 100644 index 25ea20708..000000000 Binary files a/platform/docs/versioned_docs/version-3.9/assets/img/iframe-basic.png and /dev/null differ diff --git a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/static-files.md b/platform/docs/versioned_docs/version-3.9/configuration/dataSources/static-files.md deleted file mode 100644 index 2741e0495..000000000 --- a/platform/docs/versioned_docs/version-3.9/configuration/dataSources/static-files.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 5 -sidebar_label: Static Files ---- - -# Static Files - -There is a binary DICOM to static file generator, which provides easily served -binary files. The files are all compressed in order to reduce space -significantly, and are pre-computed for the files required for OHIF, so that the -performance of serving the files is just the read from disk/write to http stream -time, without any extra processing time. - -The project for the static wado files is located here: [static-wado]: -https://github.com/OHIF/static-wado - -It can be compiled with Java and Gradle, and then run against a set of dicom, in -the example located in /dicom/study1 outputting to /dicomweb, and then a server -run against that data, like this: - -```bash -git clone https://github.com/OHIF/static-wado -cd static-wado -./gradlew installDist -StaticWado/build/install/StaticWado/bin/StaticWado -d /dicomweb /dicom/study1 -cd /dicomweb -npx http-server -p 5000 --cors -g - -# you can use npx serve ./dist -l 8080 -c ../public/serve.json as an alternative to http-server -``` - -There is then a dev environment in the platform/app directory which can be -run against those files, like this: - -``` -cd platform/app -yarn dev:static -``` - -Additional studies can be added to the dicomweb by re-running the StaticWado -command. It will create a single studies.gz index file (JSON DICOM file, -compressed) containing an index of all studies created. There is then a small -extension to OHIF which performs client side indexing. - -The StaticWado command also knows how to deploy a client and dicomweb directory -to Amazon s3, which can then server files up directly. There is another build -setup build:aws in the viewer package.json to create such a deployment. diff --git a/platform/docs/versioned_docs/version-3.9/deployment/cors.md b/platform/docs/versioned_docs/version-3.9/deployment/cors.md deleted file mode 100644 index 135c9f961..000000000 --- a/platform/docs/versioned_docs/version-3.9/deployment/cors.md +++ /dev/null @@ -1,313 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Cross-Origin Information for OHIF - -This document describes various security configurations, settings and environments/contexts needed to fully leverage OHIF’s capabilities. One may need some configurations while others might need ALL of them - it all depends on the environment OHIF is expected to run in. - -In particular, three of OHIF’s features depend on these configurations: -- [OHIF’s use of SharedArrayBuffer](#sharedarraybuffer) -- [Embedding OHIF in an iframe](#embedding-ohif-in-an-iframe) -- [XMLHttpRequests to fetch data from data sources](#cors-in-ohif) - - - -## SharedArrayBuffer -A `SharedArrayBuffer` is a JavaScript object that is similar to an `ArrayBuffer` but can be shared between web workers and the window that spawned them via the `postMessage` API. See [SharedArrayBuffer in MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) for more information. - -:::tip -To turn off Shared Array Buffer completely, just set `useSharedArrayBuffer` to `false` in the [OHIF configuration](../configuration/configurationFiles.md). But keep in mind that you will not get the performance boost that Shared Array Buffer offers for decoding and rendering big volumes where web workers write to the same memory space. -::: - -### Security Requirements - -In order to use `SharedArrayBuffer` objects in the browser, the following security conditions must be met: - -- The page must be served in a [secure context](#secure-context). -- The page must have [cross-origin isolation](#cross-origin-isolation) enabled. - -### `SharedArrayBuffer` in OHIF - -OHIF uses `SharedArrayBuffer` in its volume loader (from Cornerstone3D). It comes with the benefit of improved performance and optimization at the cost of some configuration to use it. - -As such, if the following popup is shown when launching OHIF then the OHIF server will have to be configured to permit the loading of volumetric images and data. Note that stack viewports are still available and functional even when this error is present. - -![OHIF in non-secure context](../assets/img/ohif-non-secure-context.png) - -To better determine which (if not all) of the [security requirements](#security-requirements) are lacking, have a look at the browser console. - -Output in the console similar to the following indicates that OHIF is not running in a [secure context](#secure-context). - -![browser console for non-secure context](../assets/img/browser-console-non-secure-context.png) - -Absence of the above error in the console together with the presence of the Cross Origin Isolation popup warning, likely indicates that either or both of the [COOP](#coop---cross-origin-opener-policy) and/or [COEP](#coep---cross-origin-embedder-policy) headers are not set for OHIF. - -## Embedding OHIF in an iframe - -As described [here](./iframe.md), there are cases where OHIF will be embedded in an iframe. The following links provide more information for setting up and configuring OHIF to work in an iframe: - -- [OHIF iframe documentation](./iframe.md#static-build) -- [OHIF as a Cross-origin Resource in an iframe](#ohif-as-a-cross-origin-resource-in-an-iframe) - -## Secure Context - -MDN defines a secure context as [“a Window or Worker for which certain minimum standards of authentication and confidentiality are met.“](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) - -Any local URL is considered secure. The following are some examples of local URLs that are considered secure… -- http://localhost -- http://127.0.0.1:3000 - -URLs that are NOT local must be delivered over `https://` or `wss://` (i.e. TLS) to be considered secure. See [When is a context considered secure](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure) in MDN for more information. - -### iframes - -A page embedded in an iframe is considered secure if it itself and every one of its embedding ancestors are delivered securely. Otherwise it is deemed insecure. - -### Why does OHIF require a secure context? - -Beyond all of the inherent benefits of a secure connection, OHIF requires a secure context so that it can utilize [SharedArrayBuffer](#sharedarraybuffer) objects for volume rendering. - -### Configuring/setting up a secure context - -[Local URLs are considered secure](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure), and as such whenever OHIF is accessed via a local URL (e.g. http://localhost:3000) it is running in a secure context. For example, in a development environment using the default webpack setup, OHIF can be deployed and accessed in a secure context at http://localhost:3000. - -The best alternative is to host OHIF over HTTPS. - -:::tip -OHIF can be served over HTTPS in a variety of ways (these are just some examples). -- Website hosting services that offer HTTPS deployment (e.g,. Netlify) or offer HTTPS load balancers (AWS, Google Cloud etc.) -- Setting up a reverse proxy (e.g. `nginx`) with a self-signed certificate that forwards requests to the OHIF server - - [An OHIF Docker image can be set up this way](./docker.md#ssl). -::: - -## Origin Definition - -According to [MDN](https://developer.mozilla.org/en-US/docs/Glossary/Origin), a Web content’s origin is defined by the scheme (protocol), hostname (domain), and port of the URL used to access it. Two objects have the same origin only when the scheme, hostname, and port all match. - -## CORS - Cross-Origin Resource Sharing - -A cross-origin resource is a resource (e.g. image, JSON, etc) that is served by one origin and used/referenced by a different origin. - -CORS is the protocol utilized by web servers and browsers whereby a server of one origin identifies and/or restricts which of its resources that other origins (i.e. other than its own) a browser should allow access to. By default a browser does not permit cross-origin resource sharing. - -The CORS mechanism relies on the HTTP response headers from the server to indicate if a resource can be shared with a different origin. - -See the [MDN CORS article](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) for more information. - -### CORS HTTP Headers - -The header that mostly concerns OHIF is listed below and should be configured accordingly on the DICOMweb server or any data source that OHIF would make XMLHttpRequests to for its data. - -```http -Access-Control-Allow-Origin: `` | * -``` - -:::tip -The `Access-Control-Allow-Origin` header specifies which origins can access the served resource embedded in the response. - -Either a single, specific origin (i.e. ``) can be specified or ALL origins (i.e. *) - -See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#access-control-allow-origin) for more information. -::: - -### CORS in OHIF - -OHIF fetches and displays data and images from data sources. It invokes XMLHttpRequests to some data sources such as DICOMweb data sources to fetch the information to render. Typically, a DICOMweb server is hosted on a completely different origin than the one serving OHIF. As such, those XMLHttpRequests use CORS. - -### Troubleshooting CORS in OHIF - -The following is an example screenshot of the browser console when one of OHIF’s DICOMweb data source servers is not configured for CORS. - -![CORS browser console errors](../assets/img/cors-browser-console-errors.png) - -And the following is what is in the accompanying network tab. - -![CORS browser network panel errors](../assets/img/cors-network-panel-errors.png) - -:::info -Setting the appropriate CORS header varies per server or service that is hosting the data source. What follows below is just one example to remedy the problem. -::: - -:::tip -If Orthanc is the data source running in a Docker container composed with/behind nginx. And OHIF is being served at localhost:3000. The issue can be remedied by adding either of the following to Orthanc’s Docker container nginx.conf file. - -```nginx -add_header 'Access-Control-Allow-Origin' 'http://localhost:3000' always; -``` - -Or - -```nginx -add_header 'Access-Control-Allow-Origin' '*' always; -``` -::: - -## COOP - Cross-Origin Opener Policy - -The COOP HTTP response header restricts the global, root document of the page from being referenced and accessed by another cross-origin document that might open the page in a window. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) for more information. - -### Header Values Pertinent to OHIF (see [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy#syntax) for more information) - -|Value|Description| -|-----|-----------| -|same-origin|Restricts the document to be referenced by openers of the same origin only.| - -### COOP in OHIF - -COOP is required for [SharedArrayBuffer](#sharedarraybuffer) usage in OHIF. See also [Troubleshooting Cross-origin Isolation in OHIF](#troubleshooting-cross-origin-isolation-in-ohif). - -## COEP - Cross-Origin Embedder Policy - -The COEP HTTP response header restricts cross-origin documents from being embedded into a document (e.g. in an iframe, video, image, etc). See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy) for more information. - -### Header Values Pertinent to OHIF (see [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy#syntax) for more information) - -|Value|Description| -|-----|-----------| -|require-corp|Permits the document to load either of the following embedded resources:
  • Those from the same origin
  • Cross-origin resources embedded by a DOM element that has the appropriate [crossorigin attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) set
  • Cross-origin resources with the appropriate [CORP response header](#corp---cross-origin-resource-policy)
-|credentialless|See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy#syntax) for more information| - -### COEP in OHIF - -COEP is required for [SharedArrayBuffer](#sharedarraybuffer) usage in OHIF. See also [Troubleshooting Cross-origin Isolation in OHIF](#troubleshooting-cross-origin-isolation-in-ohif). - -## Cross-origin Isolation - -Cross-origin isolation is [enabled](https://web.dev/cross-origin-isolation-guide/#enable-cross-origin-isolation) for a web page when the following COOP and COEP headers are set. -- [COOP](#coop---cross-origin-opener-policy) with `same-origin` -- [COEP](#coep---cross-origin-embedder-policy) with `require-corp` or `credentialless` - -### iframe - -An iframe is considered to have cross-origin isolation enabled if it itself has the appropriate COOP and COEP headers set as well as every one of its embedding ancestors. - -### Troubleshooting Cross-origin Isolation in OHIF - -The [SharedArrayBuffer in OHIF](#sharedarraybuffer-in-ohif) section describes how to determine if there are problems with cross-origin isolation in OHIF. If it is determined that COOP and/or COEP is indeed an issue, then the COOP and COEP headers must be set for OHIF. How to accomplish this varies per server or service that is hosting OHIF. The following are just a few examples. - -:::tip -In the default dev environment, the following can be set in the webpack.pwa.js file… - -```javascript -devServer: { - headers: { - "Cross-Origin-Opener-Policy": "same-origin", - "Cross-Origin-Embedder-Policy": "require-corp" - } -} -``` -::: - -:::tip -If deploying OHIF using Netlify, the Netlify configuration [file](https://docs.netlify.com/configure-builds/file-based-configuration/) can be used to configure the headers as such… - -``` -[[headers]] - # Define which paths this specific [[headers]] block will cover. - for = "/*" - - [headers.values] - Cross-Origin-Opener-Policy = "same-origin" - Cross-Origin-Embedder-Policy = "require-corp" -``` -::: - -:::tip -If OHIF is served behind nginx, then the headers can be set in the nginx.conf file as follows. The [template nginx configuration file](https://github.com/OHIF/Viewers/blob/master/.docker/Viewer-v3.x/default.conf.template) for creating a [OHIF Docker image](./docker.md#building-the-docker-image) has an example of this too. -```nginx -server { - location / { - add_header Cross-Origin-Opener-Policy same-origin; - add_header Cross-Origin-Embedder-Policy require-corp; - } -} -``` -::: - -## CORP - Cross-Origin Resource Policy - -The CORP HTTP response header indicates which origins can read and use a resource. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy) for more information. - -### Header Values (see [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy#usage) for more information) - -|Value|Description| -|-----|-----------| -|same-site|Only requests from the same site can read the resource.| -|same-origin|Only requests from the same origin can read the resource.| -|cross-origin|Requests from any origin can read the resource. The value is useful and [exists](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cross-Origin_Resource_Policy#relationship_to_cross-origin_embedder_policy_coep) primarily for letting documents with the [COEP require-corp value](#header-values-pertinent-to-ohif-see-mdn-for-more-information-1) know that the resource is ok to be embedded| - -### OHIF and CORP - -There are two scenarios where the CORP header is relevant to OHIF: - -- [PDF from a Cross Origin DICOMweb Data Source](#pdf-from-a-cross-origin-dicomweb-data-source) -- [OHIF as a Cross-origin Resource in an iframe](#ohif-as-a-cross-origin-resource-in-an-iframe) - -Both these scenarios stem from the fact that OHIF has to be served with the [COEP](#coep---cross-origin-embedder-policy) header to support [SharedArrayBuffer](#sharedarraybuffer). - -#### PDF from a Cross Origin DICOMweb Data Source - -There are some DICOMweb data sources (e.g. dcm4chee) whereby OHIF uses the data source’s `/rendered` endpoint to embed a DICOM PDF document in the OHIF DOM using an `` tag. - -As specified for the [COEP require-corp value](#header-values-pertinent-to-ohif-see-mdn-for-more-information-1), a page like OHIF with COEP header `require-corp` can embed cross-origin resources in DOM elements that have the [`crossorigin` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) OR the resource is delivered with an appropriate CORP header. The `` tag does NOT support the `crossorigin` attribute. As such, the PDF must be delivered with a CORP header. - -:::tip -Setting the CORP header varies per server or service that is hosting the data source. The following is just one example. - -For a dcm4chee DICOMweb data source composed in Docker behind nginx, the CORP header can be configured in the nginx.conf file as such: - -```nginx -add_header 'Cross-Origin-Resource-Policy' 'cross-origin' always; -``` - -If the dcm4chee server and the OHIF server are hosted on the same site, then the following would also work: -```nginx -add_header 'Cross-Origin-Resource-Policy' 'same-site' always; -``` -::: - -#### OHIF as a Cross-origin Resource in an iframe - -There are cases where [OHIF is embedded in an iframe](./iframe.md) and the embedding page is from a different origin. Again due to the [security requirements for SharedArrayBuffer](#security-requirements), [both OHIF and the embedding page](#iframe) must have the appropriate COEP header. In this scenario, OHIF is the cross-origin resource and since the ` - - -:::tip -Since `@cornerstonejs/tools` depends on `@cornerstonejs/core`, if you need the changes -you made in `@cornerstonejs/core` to be reflected in `@cornerstonejs/tools`, you need to -also link `@cornerstonejs/core` to `@cornerstonejs/tools`. - -```sh -cd /path/to/cornerstonejs-core -# for the core -yarn link - -cd /path/to/cornerstonejs-tools -yarn link "@cornerstonejs/core" - -# for the tools -yarn link - -# inside OHIF -cd /path/to/OHIFViewer -yarn link "@cornerstonejs/core" -yarn link "@cornerstonejs/tools" -``` -::: diff --git a/platform/docs/versioned_docs/version-3.9/migration-guide/3p8-to-3p9/index.md b/platform/docs/versioned_docs/version-3.9/migration-guide/3p8-to-3p9/index.md deleted file mode 100644 index 56e414e87..000000000 --- a/platform/docs/versioned_docs/version-3.9/migration-guide/3p8-to-3p9/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: 3p8-to-3p9 -title: 3.8 -> 3.9 -sidebar_position: 1 ---- - -Here are the changes you need to make to migrate from 3.8 to 3.9. diff --git a/platform/docs/versioned_docs/version-3.9/platform/services/data/SegmentationService.md b/platform/docs/versioned_docs/version-3.9/platform/services/data/SegmentationService.md deleted file mode 100644 index 31e4b6726..000000000 --- a/platform/docs/versioned_docs/version-3.9/platform/services/data/SegmentationService.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -sidebar_position: 7 -sidebar_label: Segmentation Service ---- - -# Segmentation Service - -## Overview - -Using Segmentation Service you can create, edit and delete segmentation data, and -change appearance of the segmentation including color, opacity and visibility. - -Segmentations in OHIF are based on the Segmentations in Cornerstone3D. You can -read more about it in the [Cornerstone Segmentation](https://www.cornerstonejs.org/docs/concepts/cornerstone-tools/segmentation/). OHIF currently only supports -one representation of the segmentation data. - -## Events - -There are seven events that get publish in `MeasurementService`: - -| Event | Description | -| --------------------- | ------------------------------------------------------ | -| SEGMENTATION_MODIFIED | Fires when a segmentation is updated e.g., segment added, removed etc.| -| SEGMENTATION_DATA_MODIFIED | Fires when the segmentation data changes | -| SEGMENTATION_ADDED | Fires when a new segmentation is added to OHIF | -| SEGMENTATION_REMOVED | Fires when a segmentation is removed from OHIF | -| SEGMENT_LOADING_COMPLETE | Fires when a segment group adds its pixel data to the volume | -| SEGMENTATION_LOADING_COMPLETE | Fires when the full segmentation volume is filled with its segments | - - -## API - -### Segmentation Creation - -- `createEmptyLabelmapForDisplaySetUID`: based on a reference displaySet, create a new segmentation. E.g., create a new segmentation based on a CT series -- `createSegmentationForSEGDisplaySet`: given a segDisplaySet loaded by a sopClassHandler, create a new segmentation -- `addSegmentationRepresentationToToolGroup`: given the toolGroupId, add the given segmentationId to the toolGroup. - - -### Segmentation Behavior - -- setActiveSegmentationForToolGroup, getSegmentations, getSegmentation, jumpToSegmentCenter, highlightSegment - - -### Segment Behavior - -- setSegmentLocked, removeSegment, addSegment, setSegmentLocked, setSegmentLabel, setActiveSegment, -setSegmentRGBAColor - -### Segmentation Configuration - -Setters - -- setSegmentVisibility, setSegmentColor, setSegmentRGBA, setSegmentOpacity, toggleSegmentationVisibility, diff --git a/platform/docs/versioned_docs/version-3.9/platform/services/ui/customization-service.md b/platform/docs/versioned_docs/version-3.9/platform/services/ui/customization-service.md deleted file mode 100644 index a6baf90f4..000000000 --- a/platform/docs/versioned_docs/version-3.9/platform/services/ui/customization-service.md +++ /dev/null @@ -1,504 +0,0 @@ ---- -sidebar_position: 7 -sidebar_label: Customization Service ---- -# Customization Service - -There are a lot of places where users may want to configure certain elements -differently between different modes or for different deployments. A mode -example might be the use of a custom overlay showing mode related DICOM header -information such as radiation dose or patient age. - -The use of this service enables these to be defined in a typed fashion by -providing an easy way to set default values for this, but to allow a -non-default value to be specified by the configuration or mode. - -This service is a UI service in that part of the registration allows for registering -UI components and types to deal with, but it does not directly provide an UI -displayable elements unless customized to do so. - -Note: Customization Service itself doesn't implement the actual customization, -but rather just provide mechanism to register reusable prototypes, to configure -those prototypes with actual configurations, and to use the configured objects -(components, data, whatever). -Actual implementation of the customization is totally up to the component that -supports customization. (for example, `CustomizableViewportOverlay` component uses -`CustomizationService` to implement viewport overlay that is easily customizable -from configuration.) - -## Global, Default and Mode customizations -There are various customization sets that define the lifetime/setup of the -customization. The global customizations are those used for overriding -customizations defined elsewhere, and allow replacing a customization. - -Mode customizations are only registered for the lifetime of the mode, allowing -the mode definition to update/modify the underlying behaviour. This is related -to default customizations, which provide a fallback if the mode or global customization -isn't defined. Default customizations may only be defined once, otherwise throwing -an exception. - -## Append and Merge Customizations -In addition to the replace a customization, there is the ability to merge or append -a customization. The merge customization simply applies the lodash merge functionality -to the existing customization, with the new one, while the append customization -modifies the customization by appending to the value. - -### Append Behaviour -When a list is found in the destination object, the append source object is -examined to see how to handle the change. If the source is simply a list, -then the list object is appended, and no additional changes are performed. -However, if the source is an object other than a list, then the iterable -attributes of the object are examined to match child objects to the destination list, -according to the following table: - -* Natural or zero number value - match the given index location and merge at the point -* Fractional number value - insert at a new point in the list, starting from the end or beginning -* keyword - match a value having the same id as the keyword, inserting at the end, or at _priority as defined in the keywords above. - -#### Example Append - -```javascript -const destination = [ - 1, - {id: 'two', value: 2}, - {id: 'three', value: 3} -] - -const source = { - two: { value: 'updated2' }, - 1: { extraValue: 2 }, - 1.0001: { id: 'inserted', value: 1.0001 }, - -1: { value: -3 }, -} -``` - -Results in two updates to `destination[1]`, the first using an id match on 'two', while the second one -does a positional match on `1`, resulting in the value `{id: 'two', value: 'updated2', extraValue: 2 }` - -Then, it inserts the id 'inserted' after position 1. - -Finally, position -1 (the end position) is updated from value 3 to value -3. - -The ordering is not specified on any of these insertions, so can happen out of order. Use multiple updates to perform order specific inserts. - -## Registering customizable modules (or defining customization prototypes) - -Extensions and Modes can register customization templates they support. -It is done by adding `getCustomizationModule()` in the extension or mode definition. - -Below is the protocol of the `getCustomizationModule()`, if defined in Typescript. - -```typescript - getCustomizationModule() : { name: string, value: any }[] -``` - -If the name is 'default', it is the a default customization, while if it -is 'global', then it is a priority/over-riding customization. - -In the `value` of each customizations, you will define customization prototype(s). -These customization prototype(s) can be considered like "Prototype" in Javascript. -These can be used to extend the customization definitions from configurations. -Default customizations will be often used to define all the customization prototypes, -Default customizations will be often used to define all the customization prototypes, -as they will be loaded automatically along with the defining extension or mode. - - -For example, the `@ohif/extension-default` extension defines, - -```js - getCustomizationModule: () => [ - //... - - { - name: 'default', - value: [ - { - id: 'ohif.overlayItem', - content: function (props) { - if (this.condition && !this.condition(props)) return null; - - const { instance } = props; - const value = - instance && this.attribute - ? instance[this.attribute] - : this.contentF && typeof this.contentF === 'function' - ? this.contentF(props) - : null; - if (!value) return null; - - return ( - - {this.label && ( - {this.label} - )} - {value} - - ); - }, - }, - ], - }, - - //... - ], -``` - -And this `ohif.overlayItem` object will be used as a prototype (and template) to define items -to be displayed on `CustomizableViewportOverlay`. See how we use the `ohif.overlayItem` in -the example below. - -## Configuring customizations - -There are several ways to register customizations. The -`APP_CONFIG.customizationService` -field is used as a per-configuration entry. This object can list single -configurations by id, or it can list sets of customizations by referring to -the `customizationModule` in an extension. - -NOTE that these definitions from APP_CONFIG will be loaded by default, just like -extension/modes default customization. - -Below is the example configuration for `CustomizableViewportOverlay` component -customization, using the customization prototype `ohif.overlayItem` defined in -`ohif/extension-defaul` extension.: - -```js -window.config = { - //... - - // in the APP_CONFIG file set the top right area to show the patient name - // using PN: as a prefix when the study has a non-empty patient name. - customizationService: { - cornerstoneOverlayTopRight: { - id: 'cornerstoneOverlayTopRight', - items: [ - { - id: 'PatientNameOverlay', - // Note below that here we are using the customization prototype of - // `ohif.overlayItem` which was registered to the customization module in - // `ohif/extension-default` extension. - customizationType: 'ohif.overlayItem', - // the following props are passed to the `ohif.overlayItem` prototype - // which is used to render the overlay item based on the label, color, - // conditions, etc. - attribute: 'PatientName', - label: 'PN:', - title: 'Patient Name', - color: 'yellow', - condition: ({ instance }) => - instance && - instance.PatientName && - instance.PatientName.Alphabetic, - contentF: ({ instance, formatters: { formatPN } }) => - formatPN(instance.PatientName.Alphabetic) + - ' ' + - (instance.PatientSex ? '(' + instance.PatientSex + ')' : ''), - }, - ], - }, - }, - - //... -} -``` - -In the customization configuration, you can use `customizationType` fields to -define the prototype that customization object should inherit from. -The `customizationType` field is simply the id of another customization object. - - -## Implementing customization using CustomizationService - -### Mode Customizations - -Mode-specific customizations are no different from the global ones, -except that the mode customizations are specific to one mode and -are not globally applied. Mode-specific customizations are also cleared -before the mode `onModeEnter` is called, and they can have new values registered in the `onModeEnter` - -Following on our example above to customize the overlay, we can now add a mode customization -with a bottom-right overlay. - -```js -// Import the type from the extension itself -import OverlayUICustomization from "@ohif/cornerstone-extension"; - -// In the mode itself, customizations can be registered: -onModeEnter: { - // Note how the object can be strongly typed - const bottomRight: OverlayUICustomization = { - id: 'cornerstoneOverlayBottomRight', - // Note the type is the previously registered ohif.cornerstoneOverlay - customizationType: 'ohif.cornerstoneOverlay', - // The cornerstoneOverlay definition requires an items list here. - items: [ - // Custom definitions for the context menu here. - ], - }; - customizationService.addModeCustomizations(bottomRight); -} -``` - -The mode customizations are retrieved via the `getModeCustomization` function, -providing an id, and optionally a default value. The retrieval will return, -in order: - -1. Global customization with the given id. -2. Mode customization with the id. -3. The default value specified. - -The return value then inherits the `customizationType` instance, so that the -value can be typed and have default values and functionality provided. The object -can then be used in a way defined by the extension provided that customization -point. - -```ts -const cornerstoneOverlay = customizationService.getModeCustomization( - "cornerstoneOverlay", - { customizationType: "ohif.cornerstoneOverlay" }, -); - -const { component: overlayComponent, props } = - customizationService.getComponent(cornerstoneOverlay); - -return ( - -); -``` - -This example shows fetching the default component to render this object. The -returned object would be a sub-type of ohif.cornerstoneOverlay if defined. This -object can be a React component or other object such as a commands list, for -example (this example comes from the context menu customizations as that one -uses commands lists): - -```ts -cornerstoneContextMenu = customizationService.get( - "cornerstoneContextMenu", - defaultMenu, -); -commandsManager.run(cornerstoneContextMenu, extraProps); -``` - -### Global Customizations - -Global customizations are retrieved in the same was as mode customizations, except -that the `getGlobalCustomization` is called instead of the mode call. - -### Types - -Some types for the customization service are provided by the `@ohif/ui` types -export. Additionally, extensions can provide a Types export with custom -typing, allowing for better typing for the extension specific capabilities. -This allows for having strong typing when declaring customizations, for example: - -```ts -import { Types } from '@ohif/ui'; - -const customContextMenu: Types.ContextMenu.Menu = - { - id: 'cornerstoneContextMenu', - customizationType: 'ohif.contextMenu', - // items will be type checked to be in accordance with UIContextMenu.items - items: [ ... ] - }, -``` - -### Inheritance - -JavaScript property inheritance can be supplied by defining customizations -with id corresponding to the customizationType value. For example: - -```js -getCustomizationModule = () => ([ - { - name: 'default', - value: [ - { - id: 'ohif.overlayItem', - content: function (props) { - return (

{this.label} {props.instance[this.attribute]}

) - }, - }, - ], - } -]) -``` - -defines an overlay item which has a React content object as the render value. -This can then be used by specifying a `customizationType` of `ohif.overlayItem`, for example: - -```js -const overlayItem: Types.UIOverlayItem = { - id: 'anOverlayItem', - customizationType: 'ohif.overlayItem', - attribute: 'PatientName', - label: 'PN:', -}; -``` - -# Customizations - -This section can be used to specify various customization capabilities. - -## Text color for StudyBrowser tabs - -This is the recommended pattern for deep customization of class attributes, -making it fine grained, and have it apply a set of attributes, mostly from -tailwind. In this case it is a double indirection, as the buttons class -uses it's own internal class names. - -* Name: 'class:StudyBrowser' -* Attributes: -** `true` for the is active true text color -** `false` for the is active false text color. -** Values are button colors, from the Button class, eg default, white, black - -## customRoutes - -* Name: `customRoutes` global -* Attributes: -** `routes` of type List of route objects (see `route/index.tsx`) is a set of route objects to add. -** Should any element of routes match an existing baked in element, the baked in one will be replaced. -** `notFoundRoute` is the route to display when nothing is found (this has to be at the end of the overall list, so can't be added to routes) - -### Example - -```js -{ - id: 'customRoutes', - routes: [ - { - path: '/myroute', - children: MyRouteReactFunction, - } - ], -} -``` - -There is a usage of this example commented out in config/default.js that -looks like the code below. This example is provided by the default extension, -again with commented out code. Uncomment the getCustomizationModule customRoutes -code in the default module to activate this, and then go to: `http://localhost:3000/custom` -to see the custom route. - -Note the name of this is the customization module name, which usually won't match -the id, and in fact there can be multiple customization objects defined for a single -customization module, to allow for customizing sets of related values. - -```js -customizationService: [ - // Shows a custom route -access via http://localhost:3000/custom - '@ohif/extension-default.customizationModule.helloPage', -], -``` - -## Customizable Viewport Overlay - -Below is the full example configuration of the customizable viewport overlay and the screenshot of the result overlay. - -There are working examples that can be run with: -``` -set APP_CONFIG=config/customization.js -yarn dev -``` - -```javascript -// this is part of customization.js, an example customization dataset -window.config = { - - // This shows how to append to the customization data - customizationService: [ - { - id: '@ohif/cornerstoneOverlay', - // Append recursively, rather than replacing - merge: 'Append', - topRightItems: { - id: 'cornerstoneOverlayTopRight', - items: [ - { - id: 'PatientNameOverlay', - // Note below that here we are using the customization prototype of - // `ohif.overlayItem` which was registered to the customization module in - // `ohif/extension-default` extension. - customizationType: 'ohif.overlayItem', - // the following props are passed to the `ohif.overlayItem` prototype - // which is used to render the overlay item based on the label, color, - // conditions, etc. - attribute: 'PatientName', - label: 'PN:', - title: 'Patient Name', - color: 'yellow', - condition: ({ instance }) => instance?.PatientName, - contentF: ({ instance, formatters: { formatPN } }) => - formatPN(instance.PatientName) + - (instance.PatientSex ? ' (' + instance.PatientSex + ')' : ''), - }, - ], - }, - - topLeftItems: { - items: { - // Note the -10000 means -10000 + length of existing list, which is - // much before the start of hte list, so put the new value at the start. - '-10000': - { - id: 'Species', - customizationType: 'ohif.overlayItem', - label: 'Species:', - color: 'red', - background: 'green', - condition: ({ instance }) => - instance?.PatientSpeciesDescription, - contentF: ({ instance }) => - instance.PatientSpeciesDescription + - '/' + - instance.PatientBreedDescription, - }, - }, - }, - }, -... -``` - - - -## Context Menus - -Context menus can be created by defining the menu structure and click -interaction, as defined in the `ContextMenu/types`. There are examples -below specific to the cornerstone context, because the actual click -handler and attributes used to decide when and how to display the menu -are specific to the context used for where the menu is displayed. - -## Cornerstone Context Menu - -The default cornerstone context menu can be customized by setting the -`cornerstoneContextMenu`. For a full example, see `findingsContextMenu`. - -## Customizable Cornerstone Viewport Click Behaviour - -The behaviour on clicking on the cornerstone viewport can be customized -by setting the `cornerstoneViewportClickCommands`. This is intended to -support both the cornerstone 3D internal commands as well as things like -context menus. Currently it supports buttons 1-3, as well as modifier keys -by associating a commands list with the button to click. See `initContextMenu` -for more details. - -## Please add additional customizations above this section -> 3rd Party implementers may be added to this table via pull requests. - - - - -[interface]: https://github.com/OHIF/Viewers/blob/master/platform/core/src/services/UIModalService/index.js -[modal-provider]: https://github.com/OHIF/Viewers/blob/master/platform/ui/src/contextProviders/ModalProvider.js -[modal-consumer]: https://github.com/OHIF/Viewers/tree/master/platform/ui/src/components/ohifModal -[ux-article]: https://uxplanet.org/best-practices-for-modals-overlays-dialog-windows-c00c66cddd8c - diff --git a/platform/docs/versioned_sidebars/version-3.8-sidebars.json b/platform/docs/versioned_sidebars/version-3.10-sidebars.json similarity index 100% rename from platform/docs/versioned_sidebars/version-3.8-sidebars.json rename to platform/docs/versioned_sidebars/version-3.10-sidebars.json diff --git a/platform/docs/versioned_sidebars/version-3.9-sidebars.json b/platform/docs/versioned_sidebars/version-3.9-sidebars.json deleted file mode 100644 index caea0c03b..000000000 --- a/platform/docs/versioned_sidebars/version-3.9-sidebars.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "tutorialSidebar": [ - { - "type": "autogenerated", - "dirName": "." - } - ] -} diff --git a/platform/docs/versions.json b/platform/docs/versions.json index 2c682a57e..75608e321 100644 --- a/platform/docs/versions.json +++ b/platform/docs/versions.json @@ -1 +1 @@ -["3.9"] +["3.10"]