The OHIF Viewer is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.
+
The OHIF Viewer is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index 71b56df6a..000000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-./_book/*
diff --git a/docs/CNAME b/docs/CNAME
deleted file mode 100644
index b6d936979..000000000
--- a/docs/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-docs.ohif.org
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index 20d3ac4ed..000000000
--- a/docs/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# How To: Documentation Step-by-Step
-
-We use [GitBook](https://www.gitbook.com/) to create our documentation. It primarily uses markdown, html, css, js, misc. plugins, and configuration to generate high quality, easy to read, and easy to maintain documentation.
-
-## Getting Started
-
-_Requirements:_
-
-Make sure you have the [`gitbook-cli`](https://www.npmjs.com/package/gitbook-cli) installed globally:
-
-(Note that gitbook 3.2.3 works with node 10.19.0 and node 10.24.0, but not with node 14.x.)
-> `npm install -g gitbook-cli`
-
-### Editing and Previewing Changes
-
-Currently, you can only edit and preview a single "book" at a time. We maintain one "book" per API major version. You can find each version's book at:
-
-_Past Versions:_
-
-- Template:
- - `/docs/v`
-- Examples:
- - `/docs/v1`
- - `/docs/v2`
-
-_Latest Version:_
-
-The latest version will always be located in `/docs/latest`
-
-_Live Preview:_
-
-In your terminal / command prompt:
-
-```bash
-cd /docs/latest
-gitbook install
-gitbook serve
-```
-
-Which should generate output like:
-
-> starting server...
-> serving book on http://localhost:4000
-
-Navigating to the the provided URL will show a preview of what the generated book should look like. Any edits you make to the book's markdown files should automatically update in your browser.
-
-### Publishing
diff --git a/docs/_redirects b/docs/_redirects
deleted file mode 100644
index d28537fec..000000000
--- a/docs/_redirects
+++ /dev/null
@@ -1,3 +0,0 @@
-# Netlify redirects
-# SPA rules for our docs
-/* /index.html 200
diff --git a/docs/latest/.gitignore b/docs/latest/.gitignore
deleted file mode 100644
index 09ea21bf7..000000000
--- a/docs/latest/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-_book/
diff --git a/docs/latest/README.md b/docs/latest/README.md
deleted file mode 100644
index e4cd6d152..000000000
--- a/docs/latest/README.md
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-> ATTENTION! You are looking at the docs for the `OHIF-v3` Viewer (third time is always a charm). If you're looking for the our `OHIF-v2` (React stable version) or OHIF-v1 (deprecated `Meteor` version) select it's version from the dropdown box in the top left corner
-> of this page.
-
-
-# Introduction
-
-The [Open Health Imaging Foundation][ohif-org] (OHIF) Viewer is an open source,
-web-based, medical imaging viewer. It can be configured to connect to Image
-Archives that support [DicomWeb][dicom-web], and offers support for mapping to
-proprietary API formats. OHIF maintained extensions add support for viewing,
-annotating, and reporting on DICOM images in 2D (slices) and 3D (volumes).
-
-
-
-
-
-
The OHIF Viewer v3: A general purpose DICOM Viewer (Live Demo)
-
-
-
-
-## What's new in `OHIF-v3`
-`OHIF-v3` is our second try for a React-based viewer, and is the third version of
-our medical image web viewers from the start. The summary of changes include:
-
-- Addition of workflow modes
-
- - Often, medical imaging use cases involves lots of specific workflows that re-use
- functionalities. We have added the capability of workflow modes, that enable people
- to customize user interface and configure application for specific workflow.
- - The idea is to re-use the functionalities that extensions provide and create a workflow.
- Brain segmentation workflow is different from prostate segmentation in UI for sure; however, they share the segmentation tools that can be re-used.
- - Our vision is that technical people focus of developing extensions which provides
- core functionalities, and experts to build modes by picking the appropriate functionalities
- from each extension.
-
-
-- Redux store has been removed from the viewer, and a cleaner, more powerful
-- tailwind CSS
-- End-to-end test suite
-
-
-Below, you can find the gap analysis between the `OHIF-v2` and `OHIF-v3`:
-
-
-{% include "./_gap_analysis.md" %}
-
-
-
-## Where to next?
-
-
-The Open Health Imaging Foundation intends to provide a simple general purpose
-DICOM Viewer which can be easily extended for specific uses. If you find
-yourself unable to extend the viewer for your purposes, please reach out via our
-[GitHub issues][gh-issues]. We are actively seeking feedback on ways to improve
-our integration and extension points.
-
-
-Check out these helpful links:
-
-- Ready to dive into some code? Check out our
- [Getting Started Guide](./development/getting-started.md).
-- We're an active, vibrant community.
- [Learn how you can be more involved.](./development/contributing.md)
-- Feeling lost? Read our [help page](./help.md).
-
-
-
-
-
-
-
-
-
-
-[ohif-org]: http://www.ohif.org
-[ohif-demo]: http://viewer.ohif.org/
-[dicom-web]: https://en.wikipedia.org/wiki/DICOMweb
-[gh-issues]: https://github.com/OHIF/Viewers/issues
-
diff --git a/docs/latest/SUMMARY.md b/docs/latest/SUMMARY.md
deleted file mode 100644
index f9a723f74..000000000
--- a/docs/latest/SUMMARY.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# OHIF Viewers
-
-- [Our Process](our-process.md)
-- User Manuals
- - [Overview](userManuals/index.md)
- - [Study List](userManuals/studyList/index.md)
- - [Viewer](userManuals/viewer/index.md)
- - [Study Panel](userManuals/viewer/studyPanel/study-panel.md)
- - [Measurement Panel](userManuals/viewer/measurementPanel/measurement-panel.md)
- - [Viewport](userManuals/viewer/viewport/viewport.md)
- - [Toolbar](userManuals/viewer/toolbar/toolbar.md)
- - [Hot keys](userManuals/viewer/hotkeys/hotkeys.md)
- - [Language](userManuals/viewer/language/language.md)
-- Development
- - [Getting Started](development/getting-started.md)
- - [Contributing](development/contributing.md)
- - [Continuous Integration](development/continous-integration.md)
- - [Testing](development/testing.md)
-- [Configuring Data Source](configuring/index.md)
- - [Local DICOM Server](configuring/data-source.md)
-
----
-
-- [Architecture](architecture/index.md)
-- [Viewer](viewer/index.md)
- - [Configuration](viewer/configuration.md)
- - [Theming](viewer/themeing.md)
- - [Internationalization](viewer/internationalization.md)
-- [Extensions](extensions/index.md#Overview)
- - [Registering](extensions/index.md#registering-an-extension)
- - [OHIF Maintained](extensions/index.md#ohif-maintained-extensions)
- - [Lifecycle Hooks](extensions/index.md#lifecycle-hooks)
- - [preRegistration](extensions/lifecycle/pre-registration.md)
- - [onModeEnter](extensions/lifecycle/on-mode-enter.md)
- - [onModeExit](extensions/lifecycle/on-mode-exit.md)
- - [Modules](extensions/index.md#modules)
- - [Toolbar](extensions/modules/toolbar.md)
- - [Commands](extensions/modules/commands.md)
- - [DataSource](extensions/modules/data-source.md)
- - [SOPClassHandler](extensions/modules/sop-class-handler.md)
- - [Viewport](extensions/modules/viewport.md)
- - [Panel](extensions/modules/panel.md)
- - [LayoutTemplate](extensions/modules/layout-template.md)
- - [HangingProtocol](extensions/modules/hpModule.md)
- - [Context](extensions/index.md#contexts)
- - [ExtensionManager](managers/extension.md)
-- [Modes](modes/index.md)
- - [LifeCycle](modes/lifeCycle.md#overview)
- - [Validity](modes/validity.md#overview)
- - [Routes](modes/routes.md#overview)
-- [Managers](managers/index.md)
- - [Extension Manager](managers/extension.md)
- - [Service Manager](managers/service.md)
- - [Commands Manager](managers/commands.md)
- - [Hotkeys Manager](managers/hotkeys.md)
-- [Services](services/index.md)
- - [Data Services](services/data/index.md)
- - [Dicom Metadata Store](services/data/DicomMetadataStore.md)
- - [DisplaySet Service](services/data/DisplaySetService.md)
- - [Hanging Protocol Service](services/data/HangingProtocolService.md)
- - [Toolbar Service](services/data/ToolbarService.md)
- - [Measurement Service](services/data/MeasurementService.md)
- - [UI Services](services/ui/index.md)
- - [UI Notification Service](services/ui/ui-notification-service.md)
- - [UI Modal Service](services/ui/ui-modal-service.md)
- - [UI Dialog Service](services/ui/ui-dialog-service.md)
- - [UI Viewport Dialog Service](services/ui/ui-viewport-dialog-service.md)
- - [Viewport Grid Service](services/ui/ViewportGridService.md)
- - [Pub/Sub Pattern](services/pubsub.md)
-
-- [Deployment](deployment/index.md)
- - [Build for Production](deployment/recipes/build-for-production.md)
- - [Static](deployment/recipes/static-assets.md)
- - [Nginx + Image Archive](deployment/recipes/nginx--image-archive.md)
- - [User Account Control](deployment/recipes/user-account-control.md)
- - [Google Cloud Healthcare](connecting-to-image-archives/google-cloud-healthcare.md)
-
-
-- [FAQ](faq/index.md)
- - [Scope of Project](faq/scope-of-project.md)
- - [Browser Support](faq/browser-support.md)
- - [PWA vs Packaged](faq/pwa-vs-packaged.md)
-- [Help](help.md) -->
diff --git a/docs/latest/_gap_analysis.md b/docs/latest/_gap_analysis.md
deleted file mode 100644
index f7d02d44a..000000000
--- a/docs/latest/_gap_analysis.md
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
OHIF-v2 functionalities
-
OHIF-v3
-
Comment
-
-
-
-
-
Rendering of 2D images via Cornerstone
-
✅
-
-
-
-
Study List
-
✅
-
-
-
-
Series Browser
-
✅
-
-
-
-
DICOM JSON
-
✅
-
-
-
-
2D Tools via CornerstoneTools
-
✅
-
-
-
-
OpenID Connect standard authentication flow for connecting to identity providers
-
🔜
-
In Progress
-
-
-
Internationalization
-
🔜
-
Not Started
-
-
-
Drag/drop DICOM data into the viewer (see https://viewer.ohif.org/local)
-
🔜
-
Not Started
-
-
-
IHE Invoke Image Display - Standard-compliant launching of the viewer (e.g. from PACS or RIS)
-
🔜
-
Not Started
-
-
-
DICOM PDF support
-
🔜
-
Not Started
-
-
-
DICOM Whole-slide imaging viewport
-
🔜
-
Not Started
-
-
-
Displaying non-renderable DICOM as HTML
-
🔜
-
Not Started
-
-
-
Segmentation support
-
🔜
-
Not Started
-
-
-
RT STRUCT support
-
🔜
-
Not Started
-
-
-
White-labelling: Easily replace the OHIF Logo with your logo
-
🔜
-
Not Started
-
-
-
DICOM upload to PACS
-
🔜
-
Not Started
-
-
-
Google Cloud adapter
-
🔜
-
Not Started
-
-
-
VTK Extension + MIP / MPR layout
-
❌
-
Other plans
-
-
-
UMD Build (Embedded Viewer).
-
❌
-
The problem is that this breaks a bunch of extensions that rely on third party scripts (e.g. VTK) which have their own web worker loaders.
diff --git a/docs/latest/extensions/index.md b/docs/latest/extensions/index.md
deleted file mode 100644
index c88e05d56..000000000
--- a/docs/latest/extensions/index.md
+++ /dev/null
@@ -1,263 +0,0 @@
-# Extensions
-
-- [Extensions](#extensions)
- - [Overview](#overview)
- - [Extension Skeleton](#extension-skeleton)
- - [OHIF-Maintained Extensions](#ohif-maintained-extensions)
- - [Registering an Extension](#registering-an-extension)
- - [Registering at Runtime](#registering-at-runtime)
- - [Registering at Build Time](#registering-at-build-time)
- - [Lifecycle Hooks](#lifecycle-hooks)
- - [Modules](#modules)
- - [Contexts](#contexts)
-
-## Overview
-We have re-designed the architecture of the `OHIF-v3` to enable building applications
-that are easily extensible to various use cases (modes) that behind the scene would utilize desired functionalities (extensions) to reach the goal of the use case.
-
-Previously, extensions were “additive” and could not easily be mixed and matched within the same viewer for different use cases. Previous `OHIF-v2` architecture meant that
-any minor extension alteration usually would require the user to hard fork. E.g. removing some of the tools from the toolbar of the cornerstone extension meant you had to hard fork it, which was frustrating if the implementation was otherwise the same as master.
-
-
-> - Developers should make packages of *reusable* functionality as extensions, and can consume
-> publicly available extensions.
-> - Any conceivable radiological workflow or viewer setup will be able to be built with the platform through *modes*.
-
-
-
-Practical examples of extensions include:
-
-- A set of segmentation tools that build on top of the `cornerstone` viewport
-- A set of rendering functionalities to volume render the data
-- [See our maintained extensions for more examples of what's possible](#maintained-extensions)
-
-
-
-Diagram showing how extensions are configured and accessed.
-
-
-
-
-## Extension Skeleton
-
-An extension is a plain JavaScript object that has an `id` property, and one or
-more [modules](#modules) and/or [lifecycle hooks](#lifecycle-hooks).
-
-```js
-// prettier-ignore
-export default {
- /**
- * Only required property. Should be a unique value across all extensions.
- */
- id: 'example-extension',
-
- // Lifecyle
- preRegistration() { /* */ },
- onModeEnter() { /* */ },
- onModeExit() { /* */ },
- // Modules
- getLayoutTemplateModule() { /* */ },
- getDataSourcesModule() { /* */ },
- getSopClassHandlerModule() { /* */ },
- getPanelModule() { /* */ },
- getViewportModule() { /* */ },
- getCommandsModule() { /* */ },
- getContextModule() { /* */ },
- getToolbarModule() { /* */ },
- getHangingProtocolModule() { /* */ },
-}
-```
-
-## OHIF-Maintained Extensions
-A small number of powerful extensions for popular use cases are maintained by
-OHIF. They're co-located in the [`OHIF/Viewers`][viewers-repo] repository, in
-the top level [`extensions/`][ext-source] directory.
-
-{% include "./_maintained-extensions-table.md" %}
-
-
-## Registering an Extension
-
-Extensions are building blocks that need to be registered. There are two different ways to register and configure extensions: At
-[runtime](#registering-at-runtime) and at
-[build time](#registering-at-build-time).
-You can leverage one or both strategies. Which one(s) you choose depend on your
-application's requirements.
-
-Each [module](#modules) defined by the extension
-becomes available to the modes via the `ExtensionManager` by requesting it via
-its id. [Read more about Extension Manager](#extension-manager)
-
-
-
-### Registering at Runtime
-
-The `@ohif/viewer` uses a [configuration file](../viewer/configuration.md) at
-startup. The schema for that file includes an `extensions` key that supports an
-array of extensions to register.
-
-```js
-import MyFirstExtension from '@ohif/extension-first'
-import MySecondExtension from '@ohif/extension-second'
-
-const extensionConfig = {/* extension configuration */}
-
-// prettier-ignore
-const config = {
- routerBasename: '/',
- extensions: [
- MyFirstExtension,
- [
- MySecondExtension,
- extensionConfig
- ],
- ],
- modes: [/* modes */],
- showStudyList: true,
- dataSources: [ /* data source config */]
-}
-```
-
-Then, behind the scene, the runtime-added extensions will get merged with the
-default app extensions (note: default app extensions include: `OHIFDefaultExtension`,
- `OHIFCornerstoneExtension`, `OHIFDICOMSRExtension`,
- `OHIFMeasurementTrackingExtension`)
-
-### Registering at Build Time
-
-The `@ohif/viewer` works best when built as a "Progressive Web Application"
-(PWA). If you know the extensions your application will need, you can specify
-them at "build time" to leverage advantages afforded to us by modern tooling:
-
-- Code Splitting (dynamic imports)
-- Tree Shaking
-- Dependency deduplication
-
-You can update the list of bundled extensions by:
-
-1. Having your `@ohif/viewer` project depend on the extension
-2. Importing and adding it to the list of extensions in the
- `/platform/src/index.js` entrypoint:
-
- ```js
- import OHIFDefaultExtension from '@ohif/extension-default';
- import OHIFCornerstoneExtension from '@ohif/extension-cornerstone';
- import OHIFMeasurementTrackingExtension from '@ohif/extension-measurement-tracking';
- import OHIFDICOMSRExtension from '@ohif/extension-dicom-sr';
- import MyFirstExtension from '@ohif/extension-first'
-
- /** Combine our appConfiguration and "baked-in" extensions */
- const appProps = {
- config: window ? window.config : {},
- defaultExtensions: [
- OHIFDefaultExtension,
- OHIFCornerstoneExtension,
- OHIFMeasurementTrackingExtension,
- OHIFDICOMSRExtension,
- MyFirstExtension
- ],
- };
- ```
-
-## Lifecycle Hooks
-
-Currently, there are three lifecycle hook for extensions:
-
-
-[`preRegistration`](./lifecycle/pre-registration.md)
-This hook is called once on initialization of the entire viewer application, used to initialize the extensions state, and consume user defined extension configuration. If an extension defines the [`preRegistration`](./lifecycle/pre-registration.md)
-lifecycle hook, it is called before any modules are registered in the
-`ExtensionManager`. It's most commonly used to wire up extensions to
-[services](./../services/index.md) and [commands](./modules/commands.md), and to
-bootstrap 3rd party libraries.
-
-
-[`onModeEnter`](./lifecycle/on-mode-enter.md): This hook is called whenever a new mode is entered, or a mode’s data or datasource is switched. This hook can be used to initialize data.
-
-[`onModeExit`](./lifecycle/on-mode-exit.md): Similarly to onModeEnter, this hook is called when navigating away from a mode, or before a mode’s data or datasource is changed. This can be used to clean up data (e.g. remove annotations that do not need to be persisted)
-
-
-
-## Modules
-Modules are the meat of extensions, the `blocks` that we have been talking about a lot.
-They provide "definitions", components, and filtering/mapping logic that are then made available to modes and services.
-
-Each module type has a special purpose, and is consumed by our viewer
-differently.
-
-
-{% include "./_modules.md" %}
-
-
-Tbl. Module types with abridged descriptions and examples. Each module links to a dedicated documentation page.
-
-
-
-
-### Contexts
-
-The `@ohif/viewer` tracks "active contexts" that extensions can use to scope
-their functionality. Some example contexts being:
-
-- Route: `ROUTE:VIEWER`, `ROUTE:STUDY_LIST`
-- Active Viewport: `ACTIVE_VIEWPORT:CORNERSTONE`, `ACTIVE_VIEWPORT:VTK`
-
-An extension module can use these to say "Only show this Toolbar Button if the
-active viewport is a Cornerstone viewport." This helps us use the appropriate UI
-and behaviors depending on the current contexts.
-
-For example, if we have hotkey that "rotates the active viewport", each Viewport
-module that supports this behavior can add a command with the same name, scoped
-to the appropriate context. When the `command` is fired, the "active contexts"
-are used to determine the appropriate implementation of the rotate behavior.
-
-
-
-
-
-
-
-
-
-
-
-
-[viewers-repo]: https://github.com/OHIF/Viewers
-[ext-source]: https://github.com/OHIF/Viewers/tree/master/extensions
-[module-types]: https://github.com/OHIF/Viewers/blob/master/platform/core/src/extensions/MODULE_TYPES.js
-
diff --git a/docs/latest/extensions/lifecycle/on-mode-enter.md b/docs/latest/extensions/lifecycle/on-mode-enter.md
deleted file mode 100644
index 9c785e129..000000000
--- a/docs/latest/extensions/lifecycle/on-mode-enter.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Lifecycle Hook: onModeEnter
-
-If an extension defines the `onModeEnter` lifecycle hook, it is called
-when a new mode is enters, or a mode's data or datasource is switched.
-
-For instance, in DICOM structured report extension (`dicom-sr`), we are using
-`onModeEnter` to re-create the displaySets after a new mode is entered.
-
-_Example `onModeEnter` hook implementation_
-
-```js
-export default {
- id: 'org.ohif.dicom-sr',
-
- onModeEnter({ servicesManager}) {
- const { DisplaySetService } = servicesManager.services;
- const displaySetCache = DisplaySetService.getDisplaySetCache();
-
- const srDisplaySets = displaySetCache.filter(
- ds => ds.SOPClassHandlerId === SOPClassHandlerId
- );
-
- srDisplaySets.forEach(ds => {
- // New mode route, allow SRs to be hydrated again
- ds.isHydrated = false;
- });
- },
-};
-```
diff --git a/docs/latest/extensions/lifecycle/on-mode-exit.md b/docs/latest/extensions/lifecycle/on-mode-exit.md
deleted file mode 100644
index bfd1a7727..000000000
--- a/docs/latest/extensions/lifecycle/on-mode-exit.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Lifecylce Hook: onModeExit
-
-If an extension defines the `onModeExit` lifecycle hook, it is called when navigating
-away from a mode. This hook can be used to clean up data tasks such as unregistering services,
-removing annotations that do not need to be persisted.
-
-_Example `onModeExit` hook implementation_
-
-```js
-export default {
- id: 'myExampleExtension',
-
- onModeExit({ servicesManager, commandsManager}) {
- myCacheServie.purge()
- },
-};
-```
diff --git a/docs/latest/managers/index.md b/docs/latest/managers/index.md
deleted file mode 100644
index 88e384783..000000000
--- a/docs/latest/managers/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Managers
-
-## Overview
-
-
-`OHIF` uses `Managers` to accomplish various purposes such as registering new services, dependency injection, and aggregating and exposing `extension` features.
-
-`OHIF-v3` provides the following managers which we will discuss in depth.
-
-{% include "./_managers.md" %}
-
-
-
-
-
-
-
-
-
-[core-services]: https://github.com/OHIF/Viewers/tree/master/platform/core/src/services
-[services-manager]: https://github.com/OHIF/Viewers/blob/master/platform/core/src/services/ServicesManager.js
-[cross-cutting-concerns]: https://en.wikipedia.org/wiki/Cross-cutting_concern
-
diff --git a/docs/latest/modes/_anatomy.md b/docs/latest/modes/_anatomy.md
deleted file mode 100644
index 86c216192..000000000
--- a/docs/latest/modes/_anatomy.md
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
Property
-
Description
-
-
-
-
-
- id
-
-
unique mode id used to refer to the mode
-
-
-
- displayName
-
-
actual name of the mode being displayed for each study in the study summary panel
- A viewport powered by cornerstone.js. Adds support for 2D DICOM rendering and manipulation, as well as support for the tools features in cornerstone-tools. Also adds "CINE Dialog" to the Toolbar.
-
+
+> ATTENTION! You are looking at the docs for the `OHIF-v3` Viewer (third time is
+> always a charm). If you're looking for the our `OHIF-v2` (React stable
+> version) or OHIF-v1 (deprecated `Meteor` version) select it's version from the
+> dropdown box in the top left corner of this page.
+
+The [Open Health Imaging Foundation][ohif-org] (OHIF) Viewer is an open source,
+web-based, medical imaging viewer. It can be configured to connect to Image
+Archives that support [DicomWeb][dicom-web], and offers support for mapping to
+proprietary API formats. OHIF maintained extensions add support for viewing,
+annotating, and reporting on DICOM images in 2D (slices) and 3D (volumes).
+
+
+
+
+
+
+
+## What's new in `OHIF-v3`
+
+`OHIF-v3` is our second try for a React-based viewer, and is the third version
+of our medical image web viewers from the start. The summary of changes include:
+
+- Addition of workflow modes
+ - Often, medical imaging use cases involves lots of specific workflows that
+ re-use functionalities. We have added the capability of workflow modes, that
+ enable people to customize user interface and configure application for
+ specific workflow.
+ - The idea is to re-use the functionalities that extensions provide and create
+ a workflow. Brain segmentation workflow is different from prostate
+ segmentation in UI for sure; however, they share the segmentation tools that
+ can be re-used.
+ - Our vision is that technical people focus of developing extensions which
+ provides core functionalities, and experts to build modes by picking the
+ appropriate functionalities from each extension.
+
+* Redux store has been removed from the viewer, and a cleaner, more powerful
+* Tailwind CSS
+* End-to-end test suite
+
+Below, you can find the gap analysis between the `OHIF-v2` and `OHIF-v3`:
+
+
+
+
+
OHIF-v2 functionalities
+
OHIF-v3
+
Comment
+
+
+
+
+
Rendering of 2D images via Cornerstone
+
✅
+
+
+
+
Study List
+
✅
+
+
+
+
Series Browser
+
✅
+
+
+
+
DICOM JSON
+
✅
+
+
+
+
2D Tools via CornerstoneTools
+
✅
+
+
+
+
OpenID Connect standard authentication flow for connecting to identity providers
+
✅
+
+
+
+
Internationalization
+
✅
+
+
+
+
Drag/drop DICOM data into the viewer (see https://viewer.ohif.org/local)
+
✅
+
+
+
+
White-labelling: Easily replace the OHIF Logo with your logo
+
✅
+
+
+
+
DICOM Whole-slide imaging viewport
+
🔜
+
In Progress
+
+
+
IHE Invoke Image Display - Standard-compliant launching of the viewer (e.g. from PACS or RIS)
+
🔜
+
Not Started
+
+
+
DICOM PDF support
+
🔜
+
Not Started
+
+
+
Displaying non-renderable DICOM as HTML
+
🔜
+
Not Started
+
+
+
Segmentation support
+
🔜
+
Not Started
+
+
+
RT STRUCT support
+
🔜
+
Not Started
+
+
+
DICOM upload to PACS
+
🔜
+
Not Started
+
+
+
Google Cloud adapter
+
🔜
+
Not Started
+
+
+
VTK Extension + MIP / MPR layout
+
❌
+
Other plans that involves amazing news soon!
+
+
+
UMD Build (Embedded Viewer).
+
❌
+
The problem is that this breaks a bunch of extensions that rely on third party scripts (e.g. VTK) which have their own web worker loaders.
+
+
+
+
+## Where to next?
+
+The Open Health Imaging Foundation intends to provide a simple general purpose
+DICOM Viewer which can be easily extended for specific uses. If you find
+yourself unable to extend the viewer for your purposes, please reach out via our
+[GitHub issues][gh-issues]. We are actively seeking feedback on ways to improve
+our integration and extension points.
+
+Check out these helpful links:
+
+- Ready to dive into some code? Check out our
+ [Getting Started Guide](./development/getting-started.md).
+- We're an active, vibrant community.
+ [Learn how you can be more involved.](./development/contributing.md)
+- Feeling lost? Read our [help page](./help.md).
+
+
+
+
+[ohif-org]: https://www.ohif.org
+[ohif-demo]: http://viewer.ohif.org/
+[dicom-web]: https://en.wikipedia.org/wiki/DICOMweb
+[gh-issues]: https://github.com/OHIF/Viewers/issues
+
diff --git a/docs/latest/assets/designs/architecture-diagram b/platform/docs/docs/assets/designs/architecture-diagram
similarity index 100%
rename from docs/latest/assets/designs/architecture-diagram
rename to platform/docs/docs/assets/designs/architecture-diagram
diff --git a/docs/latest/assets/designs/canny-full.fig b/platform/docs/docs/assets/designs/canny-full.fig
similarity index 100%
rename from docs/latest/assets/designs/canny-full.fig
rename to platform/docs/docs/assets/designs/canny-full.fig
diff --git a/docs/latest/assets/designs/cloud.svg b/platform/docs/docs/assets/designs/cloud.svg
similarity index 100%
rename from docs/latest/assets/designs/cloud.svg
rename to platform/docs/docs/assets/designs/cloud.svg
diff --git a/docs/latest/assets/designs/embedded-viewer-diagram b/platform/docs/docs/assets/designs/embedded-viewer-diagram
similarity index 100%
rename from docs/latest/assets/designs/embedded-viewer-diagram
rename to platform/docs/docs/assets/designs/embedded-viewer-diagram
diff --git a/docs/latest/assets/designs/nginx-image-archive.fig b/platform/docs/docs/assets/designs/nginx-image-archive.fig
similarity index 100%
rename from docs/latest/assets/designs/nginx-image-archive.fig
rename to platform/docs/docs/assets/designs/nginx-image-archive.fig
diff --git a/docs/latest/assets/designs/npm-logo-red.svg b/platform/docs/docs/assets/designs/npm-logo-red.svg
similarity index 100%
rename from docs/latest/assets/designs/npm-logo-red.svg
rename to platform/docs/docs/assets/designs/npm-logo-red.svg
diff --git a/docs/latest/assets/designs/scope-of-project.fig b/platform/docs/docs/assets/designs/scope-of-project.fig
similarity index 100%
rename from docs/latest/assets/designs/scope-of-project.fig
rename to platform/docs/docs/assets/designs/scope-of-project.fig
diff --git a/docs/latest/assets/designs/user-access-control-request-flow.fig b/platform/docs/docs/assets/designs/user-access-control-request-flow.fig
similarity index 100%
rename from docs/latest/assets/designs/user-access-control-request-flow.fig
rename to platform/docs/docs/assets/designs/user-access-control-request-flow.fig
diff --git a/docs/latest/assets/img/OHIF-Viewer.png b/platform/docs/docs/assets/img/OHIF-Viewer.png
similarity index 100%
rename from docs/latest/assets/img/OHIF-Viewer.png
rename to platform/docs/docs/assets/img/OHIF-Viewer.png
diff --git a/docs/latest/assets/img/OHIF-e2e-test-studies.png b/platform/docs/docs/assets/img/OHIF-e2e-test-studies.png
similarity index 100%
rename from docs/latest/assets/img/OHIF-e2e-test-studies.png
rename to platform/docs/docs/assets/img/OHIF-e2e-test-studies.png
diff --git a/platform/docs/docs/assets/img/SR-exported.png b/platform/docs/docs/assets/img/SR-exported.png
new file mode 100644
index 000000000..fc477adf6
Binary files /dev/null and b/platform/docs/docs/assets/img/SR-exported.png differ
diff --git a/docs/latest/assets/img/WORKFLOW_DEPLOY.png b/platform/docs/docs/assets/img/WORKFLOW_DEPLOY.png
similarity index 100%
rename from docs/latest/assets/img/WORKFLOW_DEPLOY.png
rename to platform/docs/docs/assets/img/WORKFLOW_DEPLOY.png
diff --git a/docs/latest/assets/img/WORKFLOW_PR_CHECKS.png b/platform/docs/docs/assets/img/WORKFLOW_PR_CHECKS.png
similarity index 100%
rename from docs/latest/assets/img/WORKFLOW_PR_CHECKS.png
rename to platform/docs/docs/assets/img/WORKFLOW_PR_CHECKS.png
diff --git a/docs/latest/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png b/platform/docs/docs/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png
similarity index 100%
rename from docs/latest/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png
rename to platform/docs/docs/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png
diff --git a/docs/latest/assets/img/WORKFLOW_RELEASE.png b/platform/docs/docs/assets/img/WORKFLOW_RELEASE.png
similarity index 100%
rename from docs/latest/assets/img/WORKFLOW_RELEASE.png
rename to platform/docs/docs/assets/img/WORKFLOW_RELEASE.png
diff --git a/docs/latest/assets/img/cornerstone-tools-link.gif b/platform/docs/docs/assets/img/cornerstone-tools-link.gif
similarity index 100%
rename from docs/latest/assets/img/cornerstone-tools-link.gif
rename to platform/docs/docs/assets/img/cornerstone-tools-link.gif
diff --git a/docs/latest/assets/img/custom-logo.png b/platform/docs/docs/assets/img/custom-logo.png
similarity index 100%
rename from docs/latest/assets/img/custom-logo.png
rename to platform/docs/docs/assets/img/custom-logo.png
diff --git a/docs/latest/assets/img/docker-pacs.png b/platform/docs/docs/assets/img/docker-pacs.png
similarity index 100%
rename from docs/latest/assets/img/docker-pacs.png
rename to platform/docs/docs/assets/img/docker-pacs.png
diff --git a/docs/latest/assets/img/e2e-cypress-final.png b/platform/docs/docs/assets/img/e2e-cypress-final.png
similarity index 100%
rename from docs/latest/assets/img/e2e-cypress-final.png
rename to platform/docs/docs/assets/img/e2e-cypress-final.png
diff --git a/docs/latest/assets/img/e2e-cypress.png b/platform/docs/docs/assets/img/e2e-cypress.png
similarity index 100%
rename from docs/latest/assets/img/e2e-cypress.png
rename to platform/docs/docs/assets/img/e2e-cypress.png
diff --git a/docs/latest/assets/img/embedded-viewer-diagram.png b/platform/docs/docs/assets/img/embedded-viewer-diagram.png
similarity index 100%
rename from docs/latest/assets/img/embedded-viewer-diagram.png
rename to platform/docs/docs/assets/img/embedded-viewer-diagram.png
diff --git a/docs/latest/assets/img/jwt-explained.png b/platform/docs/docs/assets/img/jwt-explained.png
similarity index 100%
rename from docs/latest/assets/img/jwt-explained.png
rename to platform/docs/docs/assets/img/jwt-explained.png
diff --git a/docs/latest/assets/img/keycloak-default-theme.png b/platform/docs/docs/assets/img/keycloak-default-theme.png
similarity index 100%
rename from docs/latest/assets/img/keycloak-default-theme.png
rename to platform/docs/docs/assets/img/keycloak-default-theme.png
diff --git a/docs/latest/assets/img/keycloak-ohif-theme.png b/platform/docs/docs/assets/img/keycloak-ohif-theme.png
similarity index 100%
rename from docs/latest/assets/img/keycloak-ohif-theme.png
rename to platform/docs/docs/assets/img/keycloak-ohif-theme.png
diff --git a/docs/latest/assets/img/locizeSponsor.svg b/platform/docs/docs/assets/img/locizeSponsor.svg
similarity index 100%
rename from docs/latest/assets/img/locizeSponsor.svg
rename to platform/docs/docs/assets/img/locizeSponsor.svg
diff --git a/platform/docs/docs/assets/img/locked-sr.png b/platform/docs/docs/assets/img/locked-sr.png
new file mode 100644
index 000000000..3c6ba7d53
Binary files /dev/null and b/platform/docs/docs/assets/img/locked-sr.png differ
diff --git a/docs/latest/assets/img/mode-archs.png b/platform/docs/docs/assets/img/mode-archs.png
similarity index 100%
rename from docs/latest/assets/img/mode-archs.png
rename to platform/docs/docs/assets/img/mode-archs.png
diff --git a/docs/latest/assets/img/nginx-image-archive.png b/platform/docs/docs/assets/img/nginx-image-archive.png
similarity index 100%
rename from docs/latest/assets/img/nginx-image-archive.png
rename to platform/docs/docs/assets/img/nginx-image-archive.png
diff --git a/docs/latest/assets/img/open-graph.png b/platform/docs/docs/assets/img/open-graph.png
similarity index 100%
rename from docs/latest/assets/img/open-graph.png
rename to platform/docs/docs/assets/img/open-graph.png
diff --git a/docs/latest/assets/img/panel-module-left-right.png b/platform/docs/docs/assets/img/panel-module-left-right.png
similarity index 100%
rename from docs/latest/assets/img/panel-module-left-right.png
rename to platform/docs/docs/assets/img/panel-module-left-right.png
diff --git a/docs/latest/assets/img/panel-module-v3.png b/platform/docs/docs/assets/img/panel-module-v3.png
similarity index 100%
rename from docs/latest/assets/img/panel-module-v3.png
rename to platform/docs/docs/assets/img/panel-module-v3.png
diff --git a/docs/latest/assets/img/panelmodule-icon.png b/platform/docs/docs/assets/img/panelmodule-icon.png
similarity index 100%
rename from docs/latest/assets/img/panelmodule-icon.png
rename to platform/docs/docs/assets/img/panelmodule-icon.png
diff --git a/platform/docs/docs/assets/img/restore-exported-sr.png b/platform/docs/docs/assets/img/restore-exported-sr.png
new file mode 100644
index 000000000..7aeca2692
Binary files /dev/null and b/platform/docs/docs/assets/img/restore-exported-sr.png differ
diff --git a/docs/latest/assets/img/scope-of-project.png b/platform/docs/docs/assets/img/scope-of-project.png
similarity index 100%
rename from docs/latest/assets/img/scope-of-project.png
rename to platform/docs/docs/assets/img/scope-of-project.png
diff --git a/docs/latest/assets/img/services-data.png b/platform/docs/docs/assets/img/services-data.png
similarity index 100%
rename from docs/latest/assets/img/services-data.png
rename to platform/docs/docs/assets/img/services-data.png
diff --git a/docs/latest/assets/img/services-measurements.png b/platform/docs/docs/assets/img/services-measurements.png
similarity index 100%
rename from docs/latest/assets/img/services-measurements.png
rename to platform/docs/docs/assets/img/services-measurements.png
diff --git a/docs/latest/assets/img/services-ui.png b/platform/docs/docs/assets/img/services-ui.png
similarity index 100%
rename from docs/latest/assets/img/services-ui.png
rename to platform/docs/docs/assets/img/services-ui.png
diff --git a/docs/latest/assets/img/services.png b/platform/docs/docs/assets/img/services.png
similarity index 100%
rename from docs/latest/assets/img/services.png
rename to platform/docs/docs/assets/img/services.png
diff --git a/docs/latest/assets/img/surge-deploy.gif b/platform/docs/docs/assets/img/surge-deploy.gif
similarity index 100%
rename from docs/latest/assets/img/surge-deploy.gif
rename to platform/docs/docs/assets/img/surge-deploy.gif
diff --git a/docs/latest/assets/img/toolbarModule-layout.png b/platform/docs/docs/assets/img/toolbarModule-layout.png
similarity index 100%
rename from docs/latest/assets/img/toolbarModule-layout.png
rename to platform/docs/docs/assets/img/toolbarModule-layout.png
diff --git a/docs/latest/assets/img/toolbarModule-nested-buttons.png b/platform/docs/docs/assets/img/toolbarModule-nested-buttons.png
similarity index 100%
rename from docs/latest/assets/img/toolbarModule-nested-buttons.png
rename to platform/docs/docs/assets/img/toolbarModule-nested-buttons.png
diff --git a/docs/latest/assets/img/toolbarModule-zoom.png b/platform/docs/docs/assets/img/toolbarModule-zoom.png
similarity index 100%
rename from docs/latest/assets/img/toolbarModule-zoom.png
rename to platform/docs/docs/assets/img/toolbarModule-zoom.png
diff --git a/docs/latest/assets/img/toolbarModule.png b/platform/docs/docs/assets/img/toolbarModule.png
similarity index 100%
rename from docs/latest/assets/img/toolbarModule.png
rename to platform/docs/docs/assets/img/toolbarModule.png
diff --git a/platform/docs/docs/assets/img/tracked-not-tracked.png b/platform/docs/docs/assets/img/tracked-not-tracked.png
new file mode 100644
index 000000000..d61b36d7e
Binary files /dev/null and b/platform/docs/docs/assets/img/tracked-not-tracked.png differ
diff --git a/platform/docs/docs/assets/img/tracking-workflow1.png b/platform/docs/docs/assets/img/tracking-workflow1.png
new file mode 100644
index 000000000..d5b5959fa
Binary files /dev/null and b/platform/docs/docs/assets/img/tracking-workflow1.png differ
diff --git a/platform/docs/docs/assets/img/tracking-workflow2.png b/platform/docs/docs/assets/img/tracking-workflow2.png
new file mode 100644
index 000000000..988e56d4b
Binary files /dev/null and b/platform/docs/docs/assets/img/tracking-workflow2.png differ
diff --git a/platform/docs/docs/assets/img/tracking-workflow3.png b/platform/docs/docs/assets/img/tracking-workflow3.png
new file mode 100644
index 000000000..c62fde75c
Binary files /dev/null and b/platform/docs/docs/assets/img/tracking-workflow3.png differ
diff --git a/docs/latest/assets/img/ui-modal.gif b/platform/docs/docs/assets/img/ui-modal.gif
similarity index 100%
rename from docs/latest/assets/img/ui-modal.gif
rename to platform/docs/docs/assets/img/ui-modal.gif
diff --git a/docs/latest/assets/img/ui-services.png b/platform/docs/docs/assets/img/ui-services.png
similarity index 100%
rename from docs/latest/assets/img/ui-services.png
rename to platform/docs/docs/assets/img/ui-services.png
diff --git a/docs/latest/assets/img/user-access-control-request-flow.png b/platform/docs/docs/assets/img/user-access-control-request-flow.png
similarity index 100%
rename from docs/latest/assets/img/user-access-control-request-flow.png
rename to platform/docs/docs/assets/img/user-access-control-request-flow.png
diff --git a/docs/latest/assets/img/user-hotkeys-default.png b/platform/docs/docs/assets/img/user-hotkeys-default.png
similarity index 100%
rename from docs/latest/assets/img/user-hotkeys-default.png
rename to platform/docs/docs/assets/img/user-hotkeys-default.png
diff --git a/docs/latest/assets/img/user-hotkeys.png b/platform/docs/docs/assets/img/user-hotkeys.png
similarity index 100%
rename from docs/latest/assets/img/user-hotkeys.png
rename to platform/docs/docs/assets/img/user-hotkeys.png
diff --git a/docs/latest/assets/img/user-measurement-edit-name.png b/platform/docs/docs/assets/img/user-measurement-edit-name.png
similarity index 100%
rename from docs/latest/assets/img/user-measurement-edit-name.png
rename to platform/docs/docs/assets/img/user-measurement-edit-name.png
diff --git a/docs/latest/assets/img/user-measurement-edit.png b/platform/docs/docs/assets/img/user-measurement-edit.png
similarity index 100%
rename from docs/latest/assets/img/user-measurement-edit.png
rename to platform/docs/docs/assets/img/user-measurement-edit.png
diff --git a/docs/latest/assets/img/user-measurement-export.png b/platform/docs/docs/assets/img/user-measurement-export.png
similarity index 100%
rename from docs/latest/assets/img/user-measurement-export.png
rename to platform/docs/docs/assets/img/user-measurement-export.png
diff --git a/docs/latest/assets/img/user-measurement-name.png b/platform/docs/docs/assets/img/user-measurement-name.png
similarity index 100%
rename from docs/latest/assets/img/user-measurement-name.png
rename to platform/docs/docs/assets/img/user-measurement-name.png
diff --git a/docs/latest/assets/img/user-measurement-panel-modal.png b/platform/docs/docs/assets/img/user-measurement-panel-modal.png
similarity index 100%
rename from docs/latest/assets/img/user-measurement-panel-modal.png
rename to platform/docs/docs/assets/img/user-measurement-panel-modal.png
diff --git a/docs/latest/assets/img/user-measurement-panel-tracked.png b/platform/docs/docs/assets/img/user-measurement-panel-tracked.png
similarity index 100%
rename from docs/latest/assets/img/user-measurement-panel-tracked.png
rename to platform/docs/docs/assets/img/user-measurement-panel-tracked.png
diff --git a/docs/latest/assets/img/user-measurement-prevnext.png b/platform/docs/docs/assets/img/user-measurement-prevnext.png
similarity index 100%
rename from docs/latest/assets/img/user-measurement-prevnext.png
rename to platform/docs/docs/assets/img/user-measurement-prevnext.png
diff --git a/platform/docs/docs/assets/img/user-open-viewer.png b/platform/docs/docs/assets/img/user-open-viewer.png
new file mode 100644
index 000000000..5e2b29c4e
Binary files /dev/null and b/platform/docs/docs/assets/img/user-open-viewer.png differ
diff --git a/platform/docs/docs/assets/img/user-study-filter.png b/platform/docs/docs/assets/img/user-study-filter.png
new file mode 100644
index 000000000..05d0c4ba7
Binary files /dev/null and b/platform/docs/docs/assets/img/user-study-filter.png differ
diff --git a/platform/docs/docs/assets/img/user-study-list.png b/platform/docs/docs/assets/img/user-study-list.png
new file mode 100644
index 000000000..4d589599e
Binary files /dev/null and b/platform/docs/docs/assets/img/user-study-list.png differ
diff --git a/platform/docs/docs/assets/img/user-study-next.png b/platform/docs/docs/assets/img/user-study-next.png
new file mode 100644
index 000000000..b082eedea
Binary files /dev/null and b/platform/docs/docs/assets/img/user-study-next.png differ
diff --git a/platform/docs/docs/assets/img/user-study-panel.png b/platform/docs/docs/assets/img/user-study-panel.png
new file mode 100644
index 000000000..42db7c2f7
Binary files /dev/null and b/platform/docs/docs/assets/img/user-study-panel.png differ
diff --git a/platform/docs/docs/assets/img/user-study-summary.png b/platform/docs/docs/assets/img/user-study-summary.png
new file mode 100644
index 000000000..e5a5aad16
Binary files /dev/null and b/platform/docs/docs/assets/img/user-study-summary.png differ
diff --git a/platform/docs/docs/assets/img/user-studyist-modespecific.png b/platform/docs/docs/assets/img/user-studyist-modespecific.png
new file mode 100644
index 000000000..bf878bc59
Binary files /dev/null and b/platform/docs/docs/assets/img/user-studyist-modespecific.png differ
diff --git a/platform/docs/docs/assets/img/user-toolbar-download-icon.png b/platform/docs/docs/assets/img/user-toolbar-download-icon.png
new file mode 100644
index 000000000..ca7eef55c
Binary files /dev/null and b/platform/docs/docs/assets/img/user-toolbar-download-icon.png differ
diff --git a/docs/latest/assets/img/user-toolbar-download.png b/platform/docs/docs/assets/img/user-toolbar-download.png
similarity index 100%
rename from docs/latest/assets/img/user-toolbar-download.png
rename to platform/docs/docs/assets/img/user-toolbar-download.png
diff --git a/docs/latest/assets/img/user-toolbar-extra.png b/platform/docs/docs/assets/img/user-toolbar-extra.png
similarity index 100%
rename from docs/latest/assets/img/user-toolbar-extra.png
rename to platform/docs/docs/assets/img/user-toolbar-extra.png
diff --git a/platform/docs/docs/assets/img/user-toolbar-preset.png b/platform/docs/docs/assets/img/user-toolbar-preset.png
new file mode 100644
index 000000000..5a2401468
Binary files /dev/null and b/platform/docs/docs/assets/img/user-toolbar-preset.png differ
diff --git a/docs/latest/assets/img/user-viewer-components.png b/platform/docs/docs/assets/img/user-viewer-components.png
similarity index 100%
rename from docs/latest/assets/img/user-viewer-components.png
rename to platform/docs/docs/assets/img/user-viewer-components.png
diff --git a/platform/docs/docs/assets/img/user-viewer-layout.png b/platform/docs/docs/assets/img/user-viewer-layout.png
new file mode 100644
index 000000000..71110885d
Binary files /dev/null and b/platform/docs/docs/assets/img/user-viewer-layout.png differ
diff --git a/platform/docs/docs/assets/img/user-viewer-main.png b/platform/docs/docs/assets/img/user-viewer-main.png
new file mode 100644
index 000000000..1ef3e76da
Binary files /dev/null and b/platform/docs/docs/assets/img/user-viewer-main.png differ
diff --git a/platform/docs/docs/assets/img/user-viewer-toolbar-measurements.png b/platform/docs/docs/assets/img/user-viewer-toolbar-measurements.png
new file mode 100644
index 000000000..2cb7fd7f0
Binary files /dev/null and b/platform/docs/docs/assets/img/user-viewer-toolbar-measurements.png differ
diff --git a/platform/docs/docs/assets/img/user-viewer-toolbar.png b/platform/docs/docs/assets/img/user-viewer-toolbar.png
new file mode 100644
index 000000000..fc36c58c0
Binary files /dev/null and b/platform/docs/docs/assets/img/user-viewer-toolbar.png differ
diff --git a/docs/latest/assets/img/user-viewer.png b/platform/docs/docs/assets/img/user-viewer.png
similarity index 100%
rename from docs/latest/assets/img/user-viewer.png
rename to platform/docs/docs/assets/img/user-viewer.png
diff --git a/docs/latest/assets/img/viewportModule-layout.png b/platform/docs/docs/assets/img/viewportModule-layout.png
similarity index 100%
rename from docs/latest/assets/img/viewportModule-layout.png
rename to platform/docs/docs/assets/img/viewportModule-layout.png
diff --git a/docs/latest/assets/img/viewportModule.png b/platform/docs/docs/assets/img/viewportModule.png
similarity index 100%
rename from docs/latest/assets/img/viewportModule.png
rename to platform/docs/docs/assets/img/viewportModule.png
diff --git a/platform/docs/docs/configuration/_category_.json b/platform/docs/docs/configuration/_category_.json
new file mode 100644
index 000000000..0aea1748d
--- /dev/null
+++ b/platform/docs/docs/configuration/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Configuration",
+ "position": 4
+}
diff --git a/docs/latest/viewer/configuration.md b/platform/docs/docs/configuration/configuration.md
similarity index 74%
rename from docs/latest/viewer/configuration.md
rename to platform/docs/docs/configuration/configuration.md
index 1f0314347..46bf1b824 100644
--- a/docs/latest/viewer/configuration.md
+++ b/platform/docs/docs/configuration/configuration.md
@@ -1,12 +1,22 @@
+---
+sidebar_position: 3
+sidebar_label: Configuration
+---
+
# Viewer: Configuration
+The OHIF Viewer Platform strives to be highly configurable and extensible. This
+makes it easier for our community members to keep their "secret sauce" private,
+and incentives contributions back to the platform. The `@ohif/viewer` project of
+the platform is the lynchpin that combines everything to create our application.
+
We maintain a number of common viewer application configurations at
[`/platform/viewer/public/configs`][config-dir].
-You can take a look at how to use different configs in the [Environment Variables](../configuring/index.md#environment-variables)
+You can take a look at how to use different configs in the
+[Environment Variables](../platform/environment-variables)
-
-```js
+```js title="/platform/viewer/public/configs"
window.config = {
routerBasename: '/',
/**
diff --git a/docs/latest/configuring/data-source.md b/platform/docs/docs/configuration/data-sources.md
similarity index 77%
rename from docs/latest/configuring/data-source.md
rename to platform/docs/docs/configuration/data-sources.md
index f47b12241..cd0e8d6ae 100644
--- a/docs/latest/configuring/data-source.md
+++ b/platform/docs/docs/configuration/data-sources.md
@@ -1,15 +1,12 @@
+---
+sidebar_position: 2
+sidebar_label: Data Sources
+---
+
+# Data Sources
+
## Set up a local DICOM server
-- [Set up a local DICOM server](#set-up-a-local-dicom-server)
- - [Requirements](#requirements)
-- [Open Source DICOM Image Archives](#open-source-dicom-image-archives)
- - [Running Orthanc](#running-orthanc)
- - [Orthanc: Learn More](#orthanc-learn-more)
- - [Connecting to Orthanc](#connecting-to-orthanc)
- - [Configuration: Learn More](#configuration-learn-more)
- - [Running DCM4CHEE](#running-dcm4chee)
-
-
ATTENTION! Already have a remote or local server? Skip to the
[configuration section](#configuration-learn-more) below.
@@ -39,11 +36,10 @@ in command prompt or terminal_
> the ip docker-machine ip throws. This is the value [`WebPack`][webpack-proxy]
> uses to proxy requests
-
-
## Open Source DICOM Image Archives
-There are a lot of options available to you to use as a local DICOM server. Here are some of the more popular ones:
+There are a lot of options available to you to use as a local DICOM server. Here
+are some of the more popular ones:
| Archive | Installation |
| --------------------------------------------- | ---------------------------------- |
@@ -55,11 +51,8 @@ There are a lot of options available to you to use as a local DICOM server. Here
_Feel free to make a Pull Request if you want to add to this list._
-
Below, we will focus on `DCM4CHEE` and `Orthanc` usage:
-
-
### Running Orthanc
_Start Orthanc:_
@@ -107,8 +100,8 @@ yarn run dev:orthanc
> [Essentials Configuration](./index.md) guide.
Let's take a look at what's going on under the hood here. `yarn run dev:orthanc`
-is running the `dev:orthanc` script in our project's `package.json` (inside `platform/viewer`). That script
-is:
+is running the `dev:orthanc` script in our project's `package.json` (inside
+`platform/viewer`). That script is:
```js
cross-env NODE_ENV=development PROXY_TARGET=/dicom-web PROXY_DOMAIN=http://localhost:8042 APP_CONFIG=config/docker_nginx-orthanc.js webpack-dev-server --config .webpack/webpack.pwa.js -w
@@ -163,32 +156,36 @@ window.config = {
To learn more about how you can configure the OHIF Viewer, check out our
[Configuration Guide](./index.md).
-
-
### Running DCM4CHEE
-dcm4che is a collection of open source applications for healthcare enterprise written in Java programming language
-which implements DICOM standard. dcm4chee (extra 'e' at the end) is dcm4che project
-for an Image Manager/Image Archive which provides storage, retrieval and other functionalities.
-You can read more about dcm4chee in their website [here](https://www.dcm4che.org/)
-
-DCM4chee installation is out of scope for these tutorials and can be found [here](https://github.com/dcm4che/dcm4chee-arc-light/wiki/Run-minimum-set-of-archive-services-on-a-single-host)
-
-An overview of steps for running OHIF Viewer using a local DCM4CHEE is shown below:
-
-
+dcm4che is a collection of open source applications for healthcare enterprise
+written in Java programming language which implements DICOM standard. dcm4chee
+(extra 'e' at the end) is dcm4che project for an Image Manager/Image Archive
+which provides storage, retrieval and other functionalities. You can read more
+about dcm4chee in their website [here](https://www.dcm4che.org/)
+DCM4chee installation is out of scope for these tutorials and can be found
+[here](https://github.com/dcm4che/dcm4chee-arc-light/wiki/Run-minimum-set-of-archive-services-on-a-single-host)
+An overview of steps for running OHIF Viewer using a local DCM4CHEE is shown
+below:
+
+
+
[dcm4chee]: https://github.com/dcm4che/dcm4chee-arc-light
-[dcm4chee-docker]: https://github.com/dcm4che/dcm4chee-arc-light/wiki/Running-on-Docker
+[dcm4chee-docker]:
+ https://github.com/dcm4che/dcm4chee-arc-light/wiki/Running-on-Docker
[orthanc]: https://www.orthanc-server.com/
[orthanc-docker]: http://book.orthanc-server.com/users/docker.html
[dicomcloud]: https://github.com/DICOMcloud/DICOMcloud
[dicomcloud-install]: https://github.com/DICOMcloud/DICOMcloud#running-the-code
[osirix]: http://www.osirix-viewer.com/
[horos]: https://www.horosproject.org/
-[default-config]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/public/config/default.js
-[html-templates]: https://github.com/OHIF/Viewers/tree/master/platform/viewer/public/html-templates
-[config-files]: https://github.com/OHIF/Viewers/tree/master/platform/viewer/public/config
+[default-config]:
+ https://github.com/OHIF/Viewers/blob/master/platform/viewer/public/config/default.js
+[html-templates]:
+ https://github.com/OHIF/Viewers/tree/master/platform/viewer/public/html-templates
+[config-files]:
+ https://github.com/OHIF/Viewers/tree/master/platform/viewer/public/config
diff --git a/docs/latest/configuring/index.md b/platform/docs/docs/configuration/index.md
similarity index 89%
rename from docs/latest/configuring/index.md
rename to platform/docs/docs/configuration/index.md
index fc0b8b62d..16e359140 100644
--- a/docs/latest/configuring/index.md
+++ b/platform/docs/docs/configuration/index.md
@@ -1,14 +1,9 @@
-# Configuring Data Source
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
-
-
-- [Configuring Data Source](#configuring-data-source)
- - [Overview](#overview)
- - [Configuration Files](#configuration-files)
- - [Environment Variables](#environment-variables)
-
-
-## Overview
+# Overview
After following the steps outlined in
[Getting Started](./../development/getting-started.md), you'll notice that the
@@ -20,7 +15,6 @@ nice folks over at [dcmjs.org][dcmjs-org]. While convenient for getting started,
the time may come when you want to develop using your own data either locally or
remotely.
-
## Configuration Files
The configuration for our viewer is in the `platform/viewer/public/config`
@@ -31,9 +25,7 @@ and registered extension's features, are configured using this file.
The simplest way is to update the existing default config:
-> _/platform/viewer/public/config/default.js_
-
-```js
+```js title="platform/viewer/public/config/default.js"
window.config = {
routerBasename: '/',
extensions: [],
@@ -61,24 +53,18 @@ window.config = {
],
defaultDataSourceName: 'dicomweb',
};
-
```
-
-> As you can see a new change in `OHIF-v3` is the addition of `dataSources`.
-> You can build your own datasource and map it to the internal data structure of OHIF’s > metadata and enjoy using other peoples developed mode on your own data!
->
-> You can read more about data sources at [Data Source section in Modes](../modes/index.md)
+> As you can see a new change in `OHIF-v3` is the addition of `dataSources`. You
+> can build your own datasource and map it to the internal data structure of
+> OHIF’s > metadata and enjoy using other peoples developed mode on your own
+> data!
>
+> You can read more about data sources at
+> [Data Source section in Modes](../platform/modes/index.md)
-
-
-
-
-
-
-The configuration can also be written as a JS Function in case you need to inject dependencies like external services:
-
+The configuration can also be written as a JS Function in case you need to
+inject dependencies like external services:
```js
window.config = ({ servicesManager } = {}) => {
@@ -141,12 +127,6 @@ alternative data source (or even specify different default hotkeys).
| `PROXY_TARGET` | When developing, proxy requests that match this pattern to `PROXY_DOMAIN` | `undefined` |
| `PROXY_DOMAIN` | When developing, proxy requests from `PROXY_TARGET` to `PROXY_DOMAIN` | `undefined` |
-
-
-
-
-
-
You can also create a new config file and specify its path relative to the build
output's root by setting the `APP_CONFIG` environment variable. You can set the
value of this environment variable a few different ways:
@@ -163,8 +143,6 @@ value of this environment variable a few different ways:
After updating the configuration, `yarn run build` to generate updated build
output.
-
-
@@ -172,17 +150,17 @@ output.
[dcmjs-org]: https://server.dcmjs.org/dcm4chee-arc/aets/DCM4CHEE/wado
[dicom-web]: https://en.wikipedia.org/wiki/DICOMweb
-[storescu]: http://support.dcmtk.org/docs/storescu.html
+[storescu]: https://support.dcmtk.org/docs/storescu.html
[webpack-proxy]: https://webpack.js.org/configuration/dev-server/#devserverproxy
[orthanc-docker-compose]: https://github.com/OHIF/Viewers/tree/master/.docker/Nginx-Orthanc
[dcm4chee]: https://github.com/dcm4che/dcm4chee-arc-light
[dcm4chee-docker]: https://github.com/dcm4che/dcm4chee-arc-light/wiki/Running-on-Docker
[orthanc]: https://www.orthanc-server.com/
-[orthanc-docker]: http://book.orthanc-server.com/users/docker.html
+[orthanc-docker]: https://book.orthanc-server.com/users/docker.html
[dicomcloud]: https://github.com/DICOMcloud/DICOMcloud
[dicomcloud-install]: https://github.com/DICOMcloud/DICOMcloud#running-the-code
-[osirix]: http://www.osirix-viewer.com/
+[osirix]: https://www.osirix-viewer.com/
[horos]: https://www.horosproject.org/
[default-config]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/public/config/default.js
[html-templates]: https://github.com/OHIF/Viewers/tree/master/platform/viewer/public/html-templates
diff --git a/platform/docs/docs/deployment/_category_.json b/platform/docs/docs/deployment/_category_.json
new file mode 100644
index 000000000..534be1dfb
--- /dev/null
+++ b/platform/docs/docs/deployment/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Deployment",
+ "position": 3
+}
diff --git a/docs/latest/deployment/recipes/build-for-production.md b/platform/docs/docs/deployment/build-for-production.md
similarity index 66%
rename from docs/latest/deployment/recipes/build-for-production.md
rename to platform/docs/docs/deployment/build-for-production.md
index a77ab21cb..2df1daa82 100644
--- a/docs/latest/deployment/recipes/build-for-production.md
+++ b/platform/docs/docs/deployment/build-for-production.md
@@ -1,11 +1,9 @@
+---
+sidebar_position: 2
+---
+
# Build for Production
-> If you've already followed the
-> ["Getting Started" Guide](/development/getting-started.md), you can skip ahead
-> to [Configuration](#configuration)
-
-## Overview
-
### Build Machine Requirements
- [Node.js & NPM](https://nodejs.org/en/download/)
@@ -26,29 +24,28 @@ More on: _[`git clone`](https://git-scm.com/docs/git-clone),
_From .zip:_
-[OHIF/Viewers: react.zip](https://github.com/OHIF/Viewers/archive/master.zip)
+[OHIF/Viewers: master.zip](https://github.com/OHIF/Viewers/archive/master.zip)
### Restore Dependencies & Build
Open your terminal, and navigate to the directory containing the source files.
Next run these commands:
-```js
-// If you haven't already, enable yarn workspaces
+```bash
+# If you haven't already, enable yarn workspaces
yarn config set workspaces-experimental true
-// Restore dependencies
+# Restore dependencies
yarn install
-// Build source code for production
+# Build source code for production
yarn run build
```
If everything worked as expected, you should have a new `dist/` directory in the
-project's folder. It should roughly resemble the following:
+`platform/viewer/dist` folder. It should roughly resemble the following:
-```bash
-platform/viewer/dist/
+```bash title="platform/viewer/dist/"
├── app-config.js
├── app.bundle.js
├── app.css
@@ -73,7 +70,7 @@ and registered extension's features, are configured using this file.
The easiest way to apply your own configuration is to modify the `default.js`
file. For more advanced cofiguration options, check out our
-[configuration essentials guide](/configuring/index.md).
+[configuration essentials guide](../configuration/index.md).
## Next Steps
@@ -81,18 +78,18 @@ file. For more advanced cofiguration options, check out our
_Drag-n-drop_
-- [Netlify: Drop](/deployment/recipes/static-assets.md#netlify-drop)
+- [Netlify: Drop](./static-assets#netlify-drop)
_Easy_
-- [Surge.sh](/deployment/recipes/static-assets.md#surgesh)
-- [GitHub Pages](/deployment/recipes/static-assets.md#github-pages)
+- [Surge.sh](./static-assets#surgesh)
+- [GitHub Pages](./static-assets#github-pages)
_Advanced_
-- [AWS S3 + Cloudfront](/deployment/recipes/static-assets.md#aws-s3--cloudfront)
-- [GCP + Cloudflare](/deployment/recipes/static-assets.md#gcp--cloudflare)
-- [Azure](/deployment/recipes/static-assets.md#azure)
+- [AWS S3 + Cloudfront](./static-assets#aws-s3--cloudfront)
+- [GCP + Cloudflare](./static-assets#gcp--cloudflare)
+- [Azure](./static-assets#azure)
### Testing Build Output Locally
@@ -100,18 +97,20 @@ A quick way to test your build output locally is to spin up a small webserver.
You can do this by running the following commands in the `dist/` output
directory:
-```js
-// Install http-server as a globally available package
+```bash
+# Install http-server as a globally available package
yarn global add http-server
-// Change the directory to the platform/viewer
+# Change the directory to the platform/viewer
-// Serve the files in our current directory
-// Accessible at: `http://localhost:8080`
+# Serve the files in our current directory
+# Accessible at: `http://localhost:8080`
npx http-server ./dist
```
-
+
+
+
### Automating Builds and Deployments
@@ -124,8 +123,6 @@ web application. For a starting point, check out this repository's own use of:
- [Netlify][netlify]: [netlify.toml][netlify.toml] |
[build-deploy-preview.sh][build-deploy-preview.sh]
-
-
[circleci]: https://circleci.com/gh/OHIF/Viewers
[circleci-config]: https://github.com/OHIF/Viewers/blob/master/.circleci/config.yml
diff --git a/docs/latest/connecting-to-image-archives/google-cloud-healthcare.md b/platform/docs/docs/deployment/google-cloud-healthcare.md
similarity index 78%
rename from docs/latest/connecting-to-image-archives/google-cloud-healthcare.md
rename to platform/docs/docs/deployment/google-cloud-healthcare.md
index 3bf2e6833..532bf4cc6 100644
--- a/docs/latest/connecting-to-image-archives/google-cloud-healthcare.md
+++ b/platform/docs/docs/deployment/google-cloud-healthcare.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 6
+---
+
# Google Cloud Healthcare
> Coming soon - We are working on bringing Google Cloud Healthcare to OHIF-v3
diff --git a/docs/latest/deployment/index.md b/platform/docs/docs/deployment/index.md
similarity index 56%
rename from docs/latest/deployment/index.md
rename to platform/docs/docs/deployment/index.md
index e60e4ed39..3d8b6b891 100644
--- a/docs/latest/deployment/index.md
+++ b/platform/docs/docs/deployment/index.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
+
# Deployment
The OHIF Viewer can be embedded in other web applications via it's [packaged
@@ -17,9 +22,11 @@ applications. If you find yourself a little lost, please don't hesitate to
## Deployment Scenarios
### Embedded Viewer (deprecated)
-`OHIF-v3` has deprecated deploying the viewer as an embedded viewer the number of underlying
-libraries that run web workers are increasing for OHIF. An example of these libraries is
-OHIF's 3D rendering functionality that is provided by `vtk-js`.
+
+`OHIF-v3` has deprecated deploying the viewer as an embedded viewer the number
+of underlying libraries that run web workers are increasing for OHIF. An example
+of these libraries is OHIF's 3D rendering functionality that is provided by
+`vtk-js`.
### Stand-alone Viewer
@@ -28,7 +35,8 @@ benefits, but comes at the cost of time and complexity. Some benefits include:
_Today:_
-- Leverage [extensions](/extensions/index.md) and [modes](/modes/index.md) to drop-in powerful new features
+- Leverage [extensions](../platform/extensions/index.md) and
+ [modes](../platform/modes/index.md) to drop-in powerful new features
- Add routes and customize the viewer's workflow
- Finer control over styling and whitelabeling
@@ -53,7 +61,7 @@ deployment experience.
"Building", or creating, the files you will need is the same regardless of the
web host you choose. You can find detailed instructions on how to configure and
build the OHIF Viewer in our
-["Build for Production" guide](./recipes/build-for-production.md).
+["Build for Production" guide](./build-for-production.md).
##### Part 2 - Host Your App
@@ -63,18 +71,18 @@ via one of these guides:
_Drag-n-drop_
-- [Netlify: Drop](/deployment/recipes/static-assets.md#netlify-drop)
+- [Netlify: Drop](./static-assets.md#netlify-drop)
_Easy_
-- [Surge.sh](/deployment/recipes/static-assets.md#surgesh)
-- [GitHub Pages](/deployment/recipes/static-assets.md#github-pages)
+- [Surge.sh](./static-assets.md#surgesh)
+- [GitHub Pages](./static-assets.md#github-pages)
_Advanced_
-- [AWS S3 + Cloudfront](/deployment/recipes/static-assets.md#aws-s3--cloudfront)
-- [GCP + Cloudflare](/deployment/recipes/static-assets.md#gcp--cloudflare)
-- [Azure](/deployment/recipes/static-assets.md#azure)
+- [AWS S3 + Cloudfront](./static-assets.md#aws-s3--cloudfront)
+- [GCP + Cloudflare](./static-assets.md#gcp--cloudflare)
+- [Azure](./static-assets.md#azure)
## Data
@@ -89,14 +97,14 @@ support it yet, but it is gaining wider adoption.
If you have an existing archive and intend to host the OHIF Viewer at the same
domain name as your archive, then connecting the two is as simple as following
the steps layed out in our
-[Configuration Essentials Guide](./../configuring/index.md).
+[Configuration Essentials Guide](./../configuration/index.md).
#### What if I don't have an imaging archive?
We provide some guidance on configuring a local image archive in our
-[Data Source Essentials](./../configuring/index.md#set-up-a-local-DICOM-server) guide. Hosting an
-archive remotely is a little trickier. You can check out some of our
-[advanced recipes](#recipes) for modeled setups that may work for you.
+[Data Source Essentials](./../configuration/index.md#set-up-a-local-DICOM-server)
+guide. Hosting an archive remotely is a little trickier. You can check out some
+of our [advanced recipes](#recipes) for modeled setups that may work for you.
#### What if I intend to host the OHIF Viewer at a different domain?
@@ -116,95 +124,112 @@ There are two important steps to making sure this setup works:
Most image archives do not provide either of these features "out of the box".
It's common to use IIS, Nginx, or Apache to route incoming requests and append
appropriate headers. You can find an example of this setup in our
-[Nginx + Image Archive Deployment Recipe](./recipes/nginx--image-archive.md).
+[Nginx + Image Archive Deployment Recipe](./nginx--image-archive.md).
#### What if my archive doesn't support DicomWeb?
-It's possible to supply all Study data via JSON format, in the event you do not have a DicomWeb endpoint.
-You can host all of the relevant files on any web accessible server (Amazon S3, Azure Blob Storage, Local file server etc.)
+It's possible to supply all Study data via JSON format, in the event you do not
+have a DicomWeb endpoint. You can host all of the relevant files on any web
+accessible server (Amazon S3, Azure Blob Storage, Local file server etc.)
-This JSON is supplied via the '?url=' query parameter.
-It should reference an endpoint that returns **application/json** formatted text.
+This JSON is supplied via the '?url=' query parameter. It should reference an
+endpoint that returns **application/json** formatted text.
-If you do not have an API, you can simply return a text file containing the JSON from any web server.
+If you do not have an API, you can simply return a text file containing the JSON
+from any web server.
+You tell the OHIF viewer to use JSON by using the `dicomjson` datasource and
+appending `'?url='` query to your mode's route:
-You tell the OHIF viewer to use JSON by using the `dicomjson` datasource and appending `'?url='` query to your mode's route:
+e.g.
+`https://my-test-ohif-server/myMode/dicomjson?url=https://my-json-server/study-uid.json`
-eg. `https://my-test-ohif-server/myMode/dicomjson?url=https://my-json-server/study-uid.json`
+The returned JSON object must contain a single root object with a 'studies'
+array.
+You can read more about using different data sources for mode's routes
+[here](../platform/modes/routes.md#route-path)
-The returned JSON object must contain a single root object with a 'studies' array.
+_Sample JSON format:_
-You can read more about using different data sources for mode's routes [here](../modes/routes.md#route-path)
-
-*Sample JSON format:*
-```JSON
+```json
{
- "studies": [
- {
- "StudyInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.78",
- "StudyDescription": "BRAIN SELLA",
- "StudyDate": "20010108",
- "StudyTime": "120022",
- "PatientName": "MISTER^MR",
- "PatientId": "832040",
- "series": [
- {
- "SeriesDescription": "SAG T-1",
- "SeriesInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.121",
- "SeriesNumber": 2,
- "SeriesDate": "20010108",
- "SeriesTime": "120318",
- "Modality": "MR",
- "instances": [
- {
- "metadata": {
- "Columns": 512,
- "Rows": 512,
- "InstanceNumber": 3,
- "AcquisitionNumber": 0,
- "PhotometricInterpretation": "MONOCHROME2",
- "BitsAllocated": 16,
- "BitsStored": 16,
- "PixelRepresentation": 1,
- "SamplesPerPixel": 1,
- "PixelSpacing": [0.390625, 0.390625],
- "HighBit": 15,
- "ImageOrientationPatient": [0,1,0,0,0,-1],
- "ImagePositionPatient": [11.600000,-92.500000, 98.099998],
- "FrameOfReferenceUID": "1.2.840.113619.2.5.1762583153.223134.978956938.470",
- "ImageType": ["ORIGINAL","PRIMARY","OTHER"],
- "Modality": "MR",
- "SOPInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.124",
- "SeriesInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.121",
- "StudyInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.78"
- },
- "url": "dicomweb://s3.amazonaws.com/lury/MRStudy/1.2.840.113619.2.5.1762583153.215519.978957063.124.dcm"
- }
- ]
- }
- ]
- }
- ]
+ "studies": [
+ {
+ "StudyInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.78",
+ "StudyDescription": "BRAIN SELLA",
+ "StudyDate": "20010108",
+ "StudyTime": "120022",
+ "PatientName": "MISTER^MR",
+ "PatientId": "832040",
+ "series": [
+ {
+ "SeriesDescription": "SAG T-1",
+ "SeriesInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.121",
+ "SeriesNumber": 2,
+ "SeriesDate": "20010108",
+ "SeriesTime": "120318",
+ "Modality": "MR",
+ "instances": [
+ {
+ "metadata": {
+ "Columns": 512,
+ "Rows": 512,
+ "InstanceNumber": 3,
+ "AcquisitionNumber": 0,
+ "PhotometricInterpretation": "MONOCHROME2",
+ "BitsAllocated": 16,
+ "BitsStored": 16,
+ "PixelRepresentation": 1,
+ "SamplesPerPixel": 1,
+ "PixelSpacing": [0.390625, 0.390625],
+ "HighBit": 15,
+ "ImageOrientationPatient": [0, 1, 0, 0, 0, -1],
+ "ImagePositionPatient": [11.6, -92.5, 98.099998],
+ "FrameOfReferenceUID": "1.2.840.113619.2.5.1762583153.223134.978956938.470",
+ "ImageType": ["ORIGINAL", "PRIMARY", "OTHER"],
+ "Modality": "MR",
+ "SOPInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.124",
+ "SeriesInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.121",
+ "StudyInstanceUID": "1.2.840.113619.2.5.1762583153.215519.978957063.78"
+ },
+ "url": "dicomweb://s3.amazonaws.com/lury/MRStudy/1.2.840.113619.2.5.1762583153.215519.978957063.124.dcm"
+ }
+ ]
+ }
+ ]
+ }
+ ]
}
```
-More info on this JSON format can be found here [Issue #1500](https://github.com/OHIF/Viewers/issues/1500)
+More info on this JSON format can be found here
+[Issue #1500](https://github.com/OHIF/Viewers/issues/1500)
**Implementation Notes:**
-1. For each instance url (dicom object) in the returned JSON, you must prefix the `url` with `dicomjson:` in order for the cornerstone image loader to retrieve it correctly.
- eg. `https://image-server/my-image.dcm` ---> `dicomjson:https://image-server/my-image.dcm`
-2. The JSON format above is compatible with >= v3.7.8 of the application in `V2` version. Older versions of the viewer used a different JSON format. As of 20/04/20 the public [https://viewer.ohif.org/] is a pre 3.0 version that does not support this format yet.
-3. The JSON format is case-sensitive. Please ensure you have matched casing with the naturalised Dicom format referenced in [Issue #1500](https://github.com/OHIF/Viewers/issues/1500).
-*CORS Issues (Cross-Origin Resource Sharing)*
+1. For each instance url (dicom object) in the returned JSON, you must prefix
+ the `url` with `dicomjson:` in order for the cornerstone image loader to
+ retrieve it correctly. eg. `https://image-server/my-image.dcm` --->
+ `dicomjson:https://image-server/my-image.dcm`
+2. The JSON format above is compatible with >= v3.7.8 of the application in `V2`
+ version. Older versions of the viewer used a different JSON format. As of
+ 20/04/20 the public [https://viewer.ohif.org/] is a pre 3.0 version that does
+ not support this format yet.
+3. The JSON format is case-sensitive. Please ensure you have matched casing with
+ the naturalised Dicom format referenced in
+ [Issue #1500](https://github.com/OHIF/Viewers/issues/1500).
-If you host a JSON API or Images on a different domain from the the app itself, you will likely have CORS issues. This will also happen when testing from Localhost and reaching out to remote servers.
-Even if the domain is the same, different ports, subdomains or protocols (https vs http) will also cause CORS errors.
-You will to need add a configuration on each server hosting these assets to allow your App server origin.
+_CORS Issues (Cross-Origin Resource Sharing)_
+
+If you host a JSON API or Images on a different domain from the the app itself,
+you will likely have CORS issues. This will also happen when testing from
+Localhost and reaching out to remote servers. Even if the domain is the same,
+different ports, subdomains or protocols (https vs http) will also cause CORS
+errors. You will to need add a configuration on each server hosting these assets
+to allow your App server origin.
For example:
@@ -214,17 +239,26 @@ Your JSON API is hosted on `https://my-json-api.aws.com`
And your images are stored on Amazon S3 at `https://my-s3-bucket.aws.com`
-When you first start your application, browsing to `https://my-ohif-server.com/myMode/dicomjson?url=https://my-json-api.aws.com/api/my-json-study-info.json`, you will likely get a CORS error in the browser console as it tries to connect to `https://my-json-api.aws.com`.
+When you first start your application, browsing to
+`https://my-ohif-server.com/myMode/dicomjson?url=https://my-json-api.aws.com/api/my-json-study-info.json`,
+you will likely get a CORS error in the browser console as it tries to connect
+to `https://my-json-api.aws.com`.
-Adding a setting on the JSON server to allow the CORS origin = `https://my-ohif-server.com` should solve this.
+Adding a setting on the JSON server to allow the CORS origin =
+`https://my-ohif-server.com` should solve this.
-Next, you will likely get a similar CORS error, as the browser tries to go to `https://my-s3-bucket.aws.com`.
-You will need to go to the S3 bucket configuration, and add a CORS setting to allow origin = `https://my-ohif-server.com`.
-
-Essentially, whenever the application connects to a remote resource, you will need to add the applications url to the allowed CORS Origins on that resource. Adding an origin similar to https://localhost:3000 will also allow for local testing.
+Next, you will likely get a similar CORS error, as the browser tries to go to
+`https://my-s3-bucket.aws.com`. You will need to go to the S3 bucket
+configuration, and add a CORS setting to allow origin =
+`https://my-ohif-server.com`.
+Essentially, whenever the application connects to a remote resource, you will
+need to add the applications url to the allowed CORS Origins on that resource.
+Adding an origin similar to https://localhost:3000 will also allow for local
+testing.
### Securing Your Data
+
Coming soon
diff --git a/docs/latest/development/continous-integration.md b/platform/docs/docs/development/continous-integration.md
similarity index 76%
rename from docs/latest/development/continous-integration.md
rename to platform/docs/docs/development/continous-integration.md
index cfc9a09a0..d1e79a673 100644
--- a/docs/latest/development/continous-integration.md
+++ b/platform/docs/docs/development/continous-integration.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 6
+sidebar_label: Continous Integration
+---
+
# Continous Integration (CI)
This repository uses `CircleCI` and `Netlify` for continous integration.
@@ -25,12 +30,7 @@ The PR_CHECKS workflow (Pull Request Checks) runs our automated unit and
end-to-end tests for every code check-in. These tests must all pass before code
can be merged to our `master` branch.
-
+
### Workflow: PR_OPTIONAL_DOCKER_PUBLISH
@@ -38,12 +38,7 @@ The PR_OPTIONAL_DOCKER_PUBLISH workflow allows for "manual approval" to publish
the pull request as a tagged docker image. This is helpful when changes need to
be tested with the Google Adapter before merging to `master`.
-
Workflow diagram for PR_WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH
-
+
> NOTE: This workflow will fail unless it's for a branch on our `upstream`
> repository. If you need this functionality, but the branch is from a fork,
@@ -56,12 +51,7 @@ It uses the Netlify CLI to deploy assets created as part of the repository's PWA
Build process (`yarn run build`). The workflow allows for "Manual Approval" to
promote the build to `STAGING` and `PRODUCTION` environments.
-
+ );
+}
+```
diff --git a/platform/ui/src/views/Viewer/Viewer.mdx.todo b/platform/docs/docs/platform/component-library/example-views/Viewer.mdx.todo
similarity index 96%
rename from platform/ui/src/views/Viewer/Viewer.mdx.todo
rename to platform/docs/docs/platform/component-library/example-views/Viewer.mdx.todo
index 701869382..2420b44a4 100644
--- a/platform/ui/src/views/Viewer/Viewer.mdx.todo
+++ b/platform/docs/docs/platform/component-library/example-views/Viewer.mdx.todo
@@ -5,7 +5,7 @@ route: examples/viewer
---
import { useState } from 'react';
-import { Playground, Props } from 'docz';
+
import {
NavBar,
SidePanel,
@@ -23,15 +23,15 @@ import {
ViewportPane,
StudySummary,
MeasurementTable,
-} from '../../components';
-import Header from './components/Header';
-import { DragAndDropProvider } from '../../contextProviders';
+ Header,
+ DragAndDropProvider,
+} from '@ohif/ui';
import { tabs } from './studyBrowserMockData';
# Viewer
-
+```jsx live
{() => {
const [activeMeasurementItem, setActiveMeasurementItem] = useState(null);
const descriptionData = {
@@ -175,4 +175,4 @@ import { tabs } from './studyBrowserMockData';
);
}}
-
+```
diff --git a/platform/docs/docs/platform/component-library/example-views/_category_.json b/platform/docs/docs/platform/component-library/example-views/_category_.json
new file mode 100644
index 000000000..f9601aa2b
--- /dev/null
+++ b/platform/docs/docs/platform/component-library/example-views/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Example Views",
+ "position": 6
+}
diff --git a/platform/ui/src/pages/getting-started.mdx b/platform/docs/docs/platform/component-library/getting-started.mdx
similarity index 65%
rename from platform/ui/src/pages/getting-started.mdx
rename to platform/docs/docs/platform/component-library/getting-started.mdx
index fba66447f..80f3704c8 100644
--- a/platform/ui/src/pages/getting-started.mdx
+++ b/platform/docs/docs/platform/component-library/getting-started.mdx
@@ -1,10 +1,9 @@
---
-name: Getting Started
-route: /
+sidebar_position: 1
+sidebar_label: Getting Started
---
-import { Playground } from 'docz';
-import { Button } from '../components';
+import { Button } from '@ohif/ui';
# Getting Started
@@ -19,10 +18,10 @@ It's maintained in a monorepo, in the
Install `@ohif/ui` from your terminal:
```bash
-// with npm
+# with npm
npm i @ohif/ui --save-exact
-// with yarn
+# with yarn
yarn add @ohif/ui --exact
```
@@ -33,15 +32,13 @@ yarn add @ohif/ui --exact
import { Button } from '@ohif/ui';
```
-
-
-
-
-
+```jsx live
+
+
+
+```
## Examples
In the **Examples** section you can check many examples on how to build your
application using `@ohif/ui` components.
-
-...
diff --git a/docs/latest/viewer/environment-variables.md b/platform/docs/docs/platform/environment-variables.md
similarity index 90%
rename from docs/latest/viewer/environment-variables.md
rename to platform/docs/docs/platform/environment-variables.md
index ce18f9849..4fd2691a4 100644
--- a/docs/latest/viewer/environment-variables.md
+++ b/platform/docs/docs/platform/environment-variables.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+sidebar_label: Environment Variables
+---
# Environment Variables
There are a number of environment variables we use at build time to influence the output application's behavior.
diff --git a/platform/docs/docs/platform/extensions/_category_.json b/platform/docs/docs/platform/extensions/_category_.json
new file mode 100644
index 000000000..b7a30d960
--- /dev/null
+++ b/platform/docs/docs/platform/extensions/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Extensions",
+ "position": 9
+}
diff --git a/platform/docs/docs/platform/extensions/extension.md b/platform/docs/docs/platform/extensions/extension.md
new file mode 100644
index 000000000..70d2407f7
--- /dev/null
+++ b/platform/docs/docs/platform/extensions/extension.md
@@ -0,0 +1,55 @@
+---
+sidebar_position: 4
+sidebar_label: Extension Manager
+---
+
+# Extension Manager
+
+## Overview
+The `ExtensionManager` is a class made available to us via the `@ohif/core`
+project (platform/core). Our application instantiates a single instance of it,
+and provides a `ServicesManager` and `CommandsManager` along with the
+application's configuration through the appConfig key (optional).
+
+```js
+const commandsManager = new CommandsManager();
+const servicesManager = new ServicesManager();
+const extensionManager = new ExtensionManager({
+ commandsManager,
+ servicesManager,
+ appConfig,
+});
+```
+
+The `ExtensionManager` only has a few public members:
+
+- `setActiveDataSource` - Sets the active data source for the application
+- `getDataSources` - Returns the registered data sources
+- `getActiveDataSource` - Returns the currently active data source
+- `getModuleEntry` - Returns the module entry by the give id.
+
+
+## Accessing Modules
+
+We use `getModuleEntry` in our `ViewerLayout` logic to find the panels based on the
+provided IDs in the mode's configuration.
+
+
+For instance: `extensionManager.getModuleEntry("org.ohif.measurement-tracking.panelModule.seriesList")`
+accesses the `seriesList` panel from `panelModule` of the `org.ohif.measurement-tracking` extension.
+
+
+```js
+const getPanelData = id => {
+ const entry = extensionManager.getModuleEntry(id);
+ const content = entry.component;
+
+ return {
+ iconName: entry.iconName,
+ iconLabel: entry.iconLabel,
+ label: entry.label,
+ name: entry.name,
+ content,
+ };
+};
+```
diff --git a/platform/docs/docs/platform/extensions/index.md b/platform/docs/docs/platform/extensions/index.md
new file mode 100644
index 000000000..ea45995a0
--- /dev/null
+++ b/platform/docs/docs/platform/extensions/index.md
@@ -0,0 +1,363 @@
+---
+sidebar_position: 1
+sidebar_label: Introduction
+---
+
+# Introduction
+
+We have re-designed the architecture of the `OHIF-v3` to enable building
+applications that are easily extensible to various use cases (modes) that behind
+the scene would utilize desired functionalities (extensions) to reach the goal
+of the use case.
+
+Previously, extensions were “additive” and could not easily be mixed and matched
+within the same viewer for different use cases. Previous `OHIF-v2` architecture
+meant that any minor extension alteration usually would require the user to hard
+fork. E.g. removing some of the tools from the toolbar of the cornerstone
+extension meant you had to hard fork it, which was frustrating if the
+implementation was otherwise the same as master.
+
+> - Developers should make packages of _reusable_ functionality as extensions,
+> and can consume publicly available extensions.
+> - Any conceivable radiological workflow or viewer setup will be able to be
+> built with the platform through _modes_.
+
+Practical examples of extensions include:
+
+- A set of segmentation tools that build on top of the `cornerstone` viewport
+- A set of rendering functionalities to volume render the data
+- [See our maintained extensions for more examples of what's possible](#maintained-extensions)
+
+**Diagram showing how extensions are configured and accessed.**
+
+
+
+## Extension Skeleton
+
+An extension is a plain JavaScript object that has an `id` property, and one or
+more [modules](#modules) and/or [lifecycle hooks](#lifecycle-hooks).
+
+```js
+// prettier-ignore
+export default {
+ /**
+ * Only required property. Should be a unique value across all extensions.
+ */
+ id: 'example-extension',
+
+ // Lifecyle
+ preRegistration() { /* */ },
+ onModeEnter() { /* */ },
+ onModeExit() { /* */ },
+ // Modules
+ getLayoutTemplateModule() { /* */ },
+ getDataSourcesModule() { /* */ },
+ getSopClassHandlerModule() { /* */ },
+ getPanelModule() { /* */ },
+ getViewportModule() { /* */ },
+ getCommandsModule() { /* */ },
+ getContextModule() { /* */ },
+ getToolbarModule() { /* */ },
+ getHangingProtocolModule() { /* */ },
+}
+```
+
+## OHIF-Maintained Extensions
+
+A small number of powerful extensions for popular use cases are maintained by
+OHIF. They're co-located in the [`OHIF/Viewers`][viewers-repo] repository, in
+the top level [`extensions/`][ext-source] directory.
+
+
+
+## Registering an Extension
+
+Extensions are building blocks that need to be registered. There are two
+different ways to register and configure extensions: At
+[runtime](#registering-at-runtime) and at
+[build time](#registering-at-build-time). You can leverage one or both
+strategies. Which one(s) you choose depend on your application's requirements.
+
+Each [module](#modules) defined by the extension becomes available to the modes
+via the `ExtensionManager` by requesting it via its id.
+[Read more about Extension Manager](#extension-manager)
+
+### Registering at Runtime
+
+The `@ohif/viewer` uses a [configuration file](../../configuration/index.md) at
+startup. The schema for that file includes an `extensions` key that supports an
+array of extensions to register.
+
+```js
+import MyFirstExtension from '@ohif/extension-first';
+import MySecondExtension from '@ohif/extension-second';
+
+const extensionConfig = {
+ /* extension configuration */
+};
+
+const config = {
+ routerBasename: '/',
+ extensions: [MyFirstExtension, [MySecondExtension, extensionConfig]],
+ modes: [
+ /* modes */
+ ],
+ showStudyList: true,
+ dataSources: [
+ /* data source config */
+ ],
+};
+```
+
+Then, behind the scene, the runtime-added extensions will get merged with the
+default app extensions (note: default app extensions include:
+`OHIFDefaultExtension`, `OHIFCornerstoneExtension`, `OHIFDICOMSRExtension`,
+`OHIFMeasurementTrackingExtension`)
+
+### Registering at Build Time
+
+The `@ohif/viewer` works best when built as a "Progressive Web Application"
+(PWA). If you know the extensions your application will need, you can specify
+them at "build time" to leverage advantages afforded to us by modern tooling:
+
+- Code Splitting (dynamic imports)
+- Tree Shaking
+- Dependency deduplication
+
+You can update the list of bundled extensions by:
+
+1. Having your `@ohif/viewer` project depend on the extension
+2. Importing and adding it to the list of extensions in the entrypoint:
+
+```js title="/platform/src/index.js"
+import OHIFDefaultExtension from '@ohif/extension-default';
+import OHIFCornerstoneExtension from '@ohif/extension-cornerstone';
+import OHIFMeasurementTrackingExtension from '@ohif/extension-measurement-tracking';
+import OHIFDICOMSRExtension from '@ohif/extension-dicom-sr';
+import MyFirstExtension from '@ohif/extension-first';
+
+/** Combine our appConfiguration and "baked-in" extensions */
+const appProps = {
+ config: window ? window.config : {},
+ defaultExtensions: [
+ OHIFDefaultExtension,
+ OHIFCornerstoneExtension,
+ OHIFMeasurementTrackingExtension,
+ OHIFDICOMSRExtension,
+ MyFirstExtension,
+ ],
+};
+```
+
+## Lifecycle Hooks
+
+Currently, there are three lifecycle hook for extensions:
+
+[`preRegistration`](./lifecycle/#preRegistration) This hook is called once on
+initialization of the entire viewer application, used to initialize the
+extensions state, and consume user defined extension configuration. If an
+extension defines the [`preRegistration`](./lifecycle/#preRegistration)
+lifecycle hook, it is called before any modules are registered in the
+`ExtensionManager`. It's most commonly used to wire up extensions to
+[services](./../services/index.md) and [commands](./modules/commands.md), and to
+bootstrap 3rd party libraries.
+
+[`onModeEnter`](./lifecycle#onModeEnter): This hook is called whenever a new
+mode is entered, or a mode’s data or datasource is switched. This hook can be
+used to initialize data.
+
+[`onModeExit`](./lifecycle#onModeExit): Similarly to onModeEnter, this hook is
+called when navigating away from a mode, or before a mode’s data or datasource
+is changed. This can be used to clean up data (e.g. remove annotations that do
+not need to be persisted)
+
+## Modules
+
+Modules are the meat of extensions, the `blocks` that we have been talking about
+a lot. They provide "definitions", components, and filtering/mapping logic that
+are then made available to modes and services.
+
+Each module type has a special purpose, and is consumed by our viewer
+differently.
+
+
+
+Tbl. Module types
+with abridged descriptions and examples. Each module links to a dedicated
+documentation page.
+
+### Contexts
+
+The `@ohif/viewer` tracks "active contexts" that extensions can use to scope
+their functionality. Some example contexts being:
+
+- Route: `ROUTE:VIEWER`, `ROUTE:STUDY_LIST`
+- Active Viewport: `ACTIVE_VIEWPORT:CORNERSTONE`, `ACTIVE_VIEWPORT:VTK`
+
+An extension module can use these to say "Only show this Toolbar Button if the
+active viewport is a Cornerstone viewport." This helps us use the appropriate UI
+and behaviors depending on the current contexts.
+
+For example, if we have hotkey that "rotates the active viewport", each Viewport
+module that supports this behavior can add a command with the same name, scoped
+to the appropriate context. When the `command` is fired, the "active contexts"
+are used to determine the appropriate implementation of the rotate behavior.
+
+
+
+
+[viewers-repo]: https://github.com/OHIF/Viewers
+[ext-source]: https://github.com/OHIF/Viewers/tree/master/extensions
+[module-types]: https://github.com/OHIF/Viewers/blob/master/platform/core/src/extensions/MODULE_TYPES.js
+
diff --git a/docs/latest/extensions/lifecycle/pre-registration.md b/platform/docs/docs/platform/extensions/lifecycle.md
similarity index 51%
rename from docs/latest/extensions/lifecycle/pre-registration.md
rename to platform/docs/docs/platform/extensions/lifecycle.md
index 0cb256a54..87c77800d 100644
--- a/docs/latest/extensions/lifecycle/pre-registration.md
+++ b/platform/docs/docs/platform/extensions/lifecycle.md
@@ -1,4 +1,19 @@
-# Lifecylce Hook: preRegistration
+---
+sidebar_position: 3
+sidebar_label: Lifecycle Hooks
+---
+
+# Extensions: Lifecycle Hooks
+
+## Overview
+
+Extensions can implement specific lifecycle methods.
+
+- preRegistration
+- onModeEnter
+- onModeExit
+
+## preRegistration
If an extension defines the `preRegistration` lifecycle hook, it is called
before any modules are registered in the `ExtensionManager`. This hook can be
@@ -14,11 +29,10 @@ The `preRegistration` hook receives an object containing the
`configuration` that was provided with the extension at time of registration.
Example `preRegistration` implementation that register a new service and make it
-available in the app. We will talk more in details for creating a new service for
-`OHIF-v3`.
+available in the app. We will talk more in details for creating a new service
+for `OHIF-v3`.
```js
-
// new service inside new extension
import MyNewService from './MyNewService';
@@ -63,3 +77,52 @@ export default {
},
};
```
+
+## onModeEnter
+
+If an extension defines the `onModeEnter` lifecycle hook, it is called when a
+new mode is enters, or a mode's data or datasource is switched.
+
+For instance, in DICOM structured report extension (`dicom-sr`), we are using
+`onModeEnter` to re-create the displaySets after a new mode is entered.
+
+_Example `onModeEnter` hook implementation_
+
+```js
+export default {
+ id: 'org.ohif.dicom-sr',
+
+ onModeEnter({ servicesManager }) {
+ const { DisplaySetService } = servicesManager.services;
+ const displaySetCache = DisplaySetService.getDisplaySetCache();
+
+ const srDisplaySets = displaySetCache.filter(
+ ds => ds.SOPClassHandlerId === SOPClassHandlerId
+ );
+
+ srDisplaySets.forEach(ds => {
+ // New mode route, allow SRs to be hydrated again
+ ds.isHydrated = false;
+ });
+ },
+};
+```
+
+## onModeExit
+
+If an extension defines the `onModeExit` lifecycle hook, it is called when
+navigating away from a mode. This hook can be used to clean up data tasks such
+as unregistering services, removing annotations that do not need to be
+persisted.
+
+_Example `onModeExit` hook implementation_
+
+```js
+export default {
+ id: 'myExampleExtension',
+
+ onModeExit({ servicesManager, commandsManager }) {
+ myCacheService.purge();
+ },
+};
+```
diff --git a/platform/docs/docs/platform/extensions/modules/_category_.json b/platform/docs/docs/platform/extensions/modules/_category_.json
new file mode 100644
index 000000000..c131ccdd7
--- /dev/null
+++ b/platform/docs/docs/platform/extensions/modules/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Modules",
+ "position": 3
+}
diff --git a/docs/latest/extensions/modules/commands.md b/platform/docs/docs/platform/extensions/modules/commands.md
similarity index 95%
rename from docs/latest/extensions/modules/commands.md
rename to platform/docs/docs/platform/extensions/modules/commands.md
index b90040c98..b50787327 100644
--- a/docs/latest/extensions/modules/commands.md
+++ b/platform/docs/docs/platform/extensions/modules/commands.md
@@ -1,14 +1,10 @@
+---
+sidebar_position: 2
+sidebar_label: Commands
+---
# Module: Commands
-
-- [Module: Commands](#module-commands)
- - [Overview](#overview)
- - [Command Definitions](#command-definitions)
- - [Command Behavior](#command-behavior)
- - [`CommandsManager` Public API](#commandsmanager-public-api)
- - [Contexts](#contexts)
-
## Overview
`CommandsModule` includes list of arbitrary functions. These may activate tools, communicate with a server, open a modal, etc.
The significant difference between `OHIF-v3` and `OHIF-v2` is that in `v3` a `mode` defines
diff --git a/docs/latest/extensions/modules/contextModule.md b/platform/docs/docs/platform/extensions/modules/contextModule.md
similarity index 91%
rename from docs/latest/extensions/modules/contextModule.md
rename to platform/docs/docs/platform/extensions/modules/contextModule.md
index 4dcfce360..35de381a3 100644
--- a/docs/latest/extensions/modules/contextModule.md
+++ b/platform/docs/docs/platform/extensions/modules/contextModule.md
@@ -1,9 +1,9 @@
+---
+sidebar_position: 9
+sidebar_label: Context
+---
# Module: Context
-- [Module: Context](#module-context)
- - [Overview](#overview)
-
-
## Overview
This new module type allows you to connect components via a shared context. You can create a context that two components, e.g. a viewport and a panel can use to synchronize and communicate. An extensive example of this can be seen in the longitudinal mode’s custom extensions.
diff --git a/docs/latest/extensions/modules/data-source.md b/platform/docs/docs/platform/extensions/modules/data-source.md
similarity index 95%
rename from docs/latest/extensions/modules/data-source.md
rename to platform/docs/docs/platform/extensions/modules/data-source.md
index 861a64d44..01439d9cd 100644
--- a/docs/latest/extensions/modules/data-source.md
+++ b/platform/docs/docs/platform/extensions/modules/data-source.md
@@ -1,7 +1,10 @@
+---
+sidebar_position: 3
+sidebar_label: Data Source
+---
# Module: Data Source
-
## Overview
The internal data structure of OHIF’s metadata follows naturalized DICOM JSON, A format pioneered by `dcmjs`. In short DICOM metadata headers with DICOM Keywords instead of tags and sequences as arrays, for easy development and clear code.
@@ -23,9 +26,6 @@ const getDataSourcesModule = () => [
];
```
-
-
-
Default extension provides two main data sources that are commonly used: `dicomweb` and `dicomjson`
```js
@@ -57,9 +57,7 @@ You need to make sure, you implement the following functions for the data source
-```js
-// platform/core/src/DataSources/IWebApiDataSource.js
-
+```js title="platform/core/src/DataSources/IWebApiDataSource.js"
function create({
query,
retrieve,
diff --git a/docs/latest/extensions/modules/hpModule.md b/platform/docs/docs/platform/extensions/modules/hpModule.md
similarity index 88%
rename from docs/latest/extensions/modules/hpModule.md
rename to platform/docs/docs/platform/extensions/modules/hpModule.md
index f0ed28c8f..649d6644e 100644
--- a/docs/latest/extensions/modules/hpModule.md
+++ b/platform/docs/docs/platform/extensions/modules/hpModule.md
@@ -1,10 +1,16 @@
-Module: Hanging Protocol
+---
+sidebar_position: 8
+sidebar_label: Hanging Protocol
+---
+# Module: Hanging Protocol
## Overview
`hangingProtocolModule` provides the protocols for hanging the displaySets in the viewer.
This module can be as simple as loading a list of pre-defined protocols, or it can be more complex
and `fetch` the protocols from a server.
+You can read more about hanging protocols in HangingProtocolService.
+
```js
const deafultProtocol = {
id: 'defaultProtocol',
diff --git a/docs/latest/extensions/modules/layout-template.md b/platform/docs/docs/platform/extensions/modules/layout-template.md
similarity index 85%
rename from docs/latest/extensions/modules/layout-template.md
rename to platform/docs/docs/platform/extensions/modules/layout-template.md
index eb053beeb..7184ae952 100644
--- a/docs/latest/extensions/modules/layout-template.md
+++ b/platform/docs/docs/platform/extensions/modules/layout-template.md
@@ -1,10 +1,9 @@
+---
+sidebar_position: 7
+sidebar_label: Layout Template
+---
# Module: Layout Template
-- [Module: Layout Template](#module-layout-template)
- - [Overview](#overview)
- - [Overview Video](#overview-video)
-
-
## Overview
`LayoutTemplates` are a new concept in v3 that modes use to control the layout of a route.
A layout template is a React component that is given a set of managers that define apis to access toolbar state, commands, and hotkeys, as well as props defined by the layout template.
@@ -34,8 +33,7 @@ LayoutTemplate leverages extensionManager to grab typed extension module entries
A simplified code for `Default extention`'s layout template is:
-```jsx
-// extensions/default/src/ViewerLayout/index.jsx
+```jsx title="extensions/default/src/ViewerLayout/index.jsx"
import React from 'react'
import { SidePanel } from '@ohif/ui'
@@ -133,4 +131,6 @@ function ViewerLayout({
## Overview Video
-
+
+
+
diff --git a/docs/latest/extensions/modules/panel.md b/platform/docs/docs/platform/extensions/modules/panel.md
similarity index 60%
rename from docs/latest/extensions/modules/panel.md
rename to platform/docs/docs/platform/extensions/modules/panel.md
index b23b6a8f0..a1282c2c0 100644
--- a/docs/latest/extensions/modules/panel.md
+++ b/platform/docs/docs/platform/extensions/modules/panel.md
@@ -1,30 +1,33 @@
+---
+sidebar_position: 6
+sidebar_label: Panel
+---
+
# Module: Panel
## Overview
-UI that is intended to be displayed within a panel. The default LayoutTemplate has panels on the left and right sides, however one could make a template with panels at the top or bottom and make extensions with panels intended for such slots.
+The default LayoutTemplate has panels on the left and right sides, however one
+could make a template with panels at the top or bottom and make extensions with
+panels intended for such slots.
An extension can register a Panel Module by defining a `getPanelModule` method.
The panel module provides the ability to define `menuOptions` and `components`
that can be used by the consuming application. `components` are React Components
that can be displayed in the consuming application's "Panel" Component.
+
-
-
-The `menuOptions`'s `target` key points to a registered `components`'s `id`. A
+The `menuOptions`'s `target` key, points to a registered `components`'s `id`. A
`defaultContext` is applied to all `menuOption`s; however, each `menuOption` can
-optional provide it's own `context` value.
+optionally provide it's own `context` value.
The `getPanelModule` receives an object containing the `ExtensionManager`'s
associated `ServicesManager` and `CommandsManager`.
-
-
-```js
+```jsx
import PanelMeasurementTable from './PanelMeasurementTable.js';
-
function getPanelModule({
commandsManager,
extensionManager,
@@ -52,35 +55,33 @@ function getPanelModule({
}
```
-
-
-
## Consuming Panels Inside Modes
-As explained earlier, extensions make the functionalities and components available and
-`modes` utilize them to build an app. So, as seen above, we are not actually defining
-which side the panel should be opened. Our extension is providing the component with
-its.
-New: You can easily add multiple panels to the left/right side of the viewer using the mode
-configuration. As seen below, the `leftPanels` and `rightPanels` accept an `Array` of
-the `IDs`.
+As explained earlier, extensions make the functionalities and components
+available and `modes` utilize them to build an app. So, as seen above, we are
+not actually defining which side the panel should be opened. Our extension is
+providing the component with its.
+
+New: You can easily add multiple panels to the left/right side of the viewer
+using the mode configuration. As seen below, the `leftPanels` and `rightPanels`
+accept an `Array` of the `IDs`.
```js
export default function mode({ modeConfiguration }) {
return {
- id: "viewer",
+ id: 'viewer',
routes: [
{
- path: "longitudinal",
+ path: 'longitudinal',
layoutTemplate: ({ location, servicesManager }) => {
return {
id,
props: {
leftPanels: [
- "org.ohif.measurement-tracking.panelModule.seriesList",
+ 'org.ohif.measurement-tracking.panelModule.seriesList',
],
rightPanels: [
- "org.ohif.measurement-tracking.panelModule.trackedMeasurements",
+ 'org.ohif.measurement-tracking.panelModule.trackedMeasurements',
],
viewports,
},
@@ -89,13 +90,11 @@ export default function mode({ modeConfiguration }) {
},
],
extensions: [
- "org.ohif.default",
- "org.ohif.cornerstone",
- "org.ohif.measurement-tracking",
- "org.ohif.dicom-sr",
+ 'org.ohif.default',
+ 'org.ohif.cornerstone',
+ 'org.ohif.measurement-tracking',
+ 'org.ohif.dicom-sr',
],
};
}
-
-
```
diff --git a/docs/latest/extensions/modules/sop-class-handler.md b/platform/docs/docs/platform/extensions/modules/sop-class-handler.md
similarity index 98%
rename from docs/latest/extensions/modules/sop-class-handler.md
rename to platform/docs/docs/platform/extensions/modules/sop-class-handler.md
index 57f2f487a..812bf03fb 100644
--- a/docs/latest/extensions/modules/sop-class-handler.md
+++ b/platform/docs/docs/platform/extensions/modules/sop-class-handler.md
@@ -1,6 +1,9 @@
+---
+sidebar_position: 4
+sidebar_label: SOP Class Handler
+---
# Module: SOP Class Handler
-
## Overview
This module defines how a specific DICOM SOP class should be processed to make a displaySet, something that can be hung in a viewport. An extension can register a [SOP Class][sop-class-link] Handler Module by defining a `getSopClassHandlerModule` method. The [SOP Class][sop-class-link].
diff --git a/docs/latest/extensions/modules/toolbar.md b/platform/docs/docs/platform/extensions/modules/toolbar.md
similarity index 67%
rename from docs/latest/extensions/modules/toolbar.md
rename to platform/docs/docs/platform/extensions/modules/toolbar.md
index 95da9acb6..ed0e1061c 100644
--- a/docs/latest/extensions/modules/toolbar.md
+++ b/platform/docs/docs/platform/extensions/modules/toolbar.md
@@ -1,30 +1,23 @@
+---
+sidebar_position: 1
+sidebar_label: Toolbar
+---
+
# Module: Toolbar
An extension can register a Toolbar Module by defining a `getToolbarModule`
-method. `OHIF-v3`'s `default` extension (`"ohif.org.default"`) provides 5 main toolbar button types:
-
-- [Module: Toolbar](#module-toolbar)
- - [Example Toolbar Module](#example-toolbar-module)
- - [Toolbar buttons consumed in modes](#toolbar-buttons-consumed-in-modes)
- - [Button Definitions](#button-definitions)
- - [Nested Buttons](#nested-buttons)
- - [Layout Template](#layout-template)
- - [Custom Button](#custom-button)
- - [Custom tool](#custom-tool)
-
-
-
-
-
+method. `OHIF-v3`'s `default` extension (`"ohif.org.default"`) provides 5 main
+toolbar button types:
+
## Example Toolbar Module
-The Toolbar Module should return an array of `objects`. There are currently a few different variations of definitions,
-each one is detailed further down.
+
+The Toolbar Module should return an array of `objects`. There are currently a
+few different variations of definitions, each one is detailed further down.
```js
export default function getToolbarModule({ commandsManager, servicesManager }) {
-
return [
{
name: 'ohif.divider',
@@ -50,17 +43,17 @@ export default function getToolbarModule({ commandsManager, servicesManager }) {
name: 'ohif.layoutSelector',
defaultComponent: ToolbarLayoutSelector,
clickHandler: (evt, clickedBtn, btnSectionName) => {},
- }
- ]
+ },
+ ];
}
```
-
## Toolbar buttons consumed in modes
-Below we can see a simplified version of the `longitudinal` mode that shows how
-a mode can add buttons to the toolbar by calling `ToolBarService.addButtons(toolbarButtons)`.
-`toolbarButtons` is an array of `toolDefinitions` which we will learn next.
+Below we can see a simplified version of the `longitudinal` mode that shows how
+a mode can add buttons to the toolbar by calling
+`ToolBarService.addButtons(toolbarButtons)`. `toolbarButtons` is an array of
+`toolDefinitions` which we will learn next.
```js
export default function mode({ modeConfiguration }) {
@@ -78,7 +71,9 @@ export default function mode({ modeConfiguration }) {
{
path: 'longitudinal',
layoutTemplate: ({ location, servicesManager }) => {
- return {/* */};
+ return {
+ /* */
+ };
},
},
],
@@ -90,17 +85,13 @@ export default function mode({ modeConfiguration }) {
],
};
}
-
```
-
-
-
## Button Definitions
The simplest toolbarButtons definition has the following properties:
-
+
```js
{
@@ -115,44 +106,38 @@ The simplest toolbarButtons definition has the following properties:
},
```
-
-
-| property | description | values |
-| ---------------- | ----------------------------------------------------------------- | ----------------------------------------- |
-| `id` | Unique string identifier for the definition | \* |
-| `label` | User/display friendly to show in UI | \* |
-| `icon` | A string name for an icon supported by the consuming application. | \* |
-| `type` | Used to determine the button's behaviour | "tool", "toggle", "action" |
+| property | description | values |
+| ---------------- | ----------------------------------------------------------------- | ------------------------------------------- |
+| `id` | Unique string identifier for the definition | \* |
+| `label` | User/display friendly to show in UI | \* |
+| `icon` | A string name for an icon supported by the consuming application. | \* |
+| `type` | Used to determine the button's behaviour | "tool", "toggle", "action" |
| `commandName` | (optional) The command to run when the button is used. | Any command registered by a `CommandModule` |
-| `commandOptions` | (optional) Options to pass the target `commandName` | \* |
-
+| `commandOptions` | (optional) Options to pass the target `commandName` | \* |
There are three main types of toolbar buttons:
-- `tool`: buttons that enable a tool by running the `setToolActive` command with the `commandOptions`
+- `tool`: buttons that enable a tool by running the `setToolActive` command with
+ the `commandOptions`
- `toggle`: buttons that acts as a toggle: e.g., linking viewports
-- `action`: buttons that executes an action: e.g., capture button to save screenshot
-
-
-
-
-
+- `action`: buttons that executes an action: e.g., capture button to save
+ screenshot
## Nested Buttons
-You can use the `ohif.splitButton` type to build a button with extra tools in the dropdown.
+
+You can use the `ohif.splitButton` type to build a button with extra tools in
+the dropdown.
- First you need to give your `primary` tool definition to the split button
- the `secondary` properties can be a simple arrow down (`chevron-down` icon)
- For adding the extra tools add them to the `items` list.
-You can see below how `longitudinal` mode is using the available toolbarModule to create
-`MeasurementTools` nested button
+You can see below how `longitudinal` mode is using the available toolbarModule
+to create `MeasurementTools` nested button
-
-
-```js
-// modes/longitudinal/src/toolbarButtons.js
+
+```js title="modes/longitudinal/src/toolbarButtons.js"
{
id: 'MeasurementTools',
type: 'ohif.splitButton',
@@ -210,13 +195,18 @@ You can see below how `longitudinal` mode is using the available toolbarModule t
}
```
-
+
+
+
## Layout Template
-Layout selector button and logic is also provided by the OHIF-v3 `default` extension.
-To use it, you can just add the following definition to the list of `toolDefinitions`
-
+Layout selector button and logic is also provided by the OHIF-v3 `default`
+extension. To use it, you can just add the following definition to the list of
+`toolDefinitions`
+
+
+
```js
{
id: 'Layout',
@@ -224,34 +214,33 @@ To use it, you can just add the following definition to the list of `toolDefinit
}
```
-
-
+
+
+
## Custom Button
-You can also create your own extension, and add your new custom tool appearance (e.g., split horizantlly instead of vertically for split tool).
-Simply add `getToolbarModule` to your extension, and pass your tool react component to its
-`defaultComponent` property in the returned object.
-You can use `@ohif/ui` components such as `IconButton, Icon, Tooltip, ToolbarButton` to
-build your own component.
+You can also create your own extension, and add your new custom tool appearance
+(e.g., split horizantlly instead of vertically for split tool). Simply add
+`getToolbarModule` to your extension, and pass your tool react component to its
+`defaultComponent` property in the returned object. You can use `@ohif/ui`
+components such as `IconButton, Icon, Tooltip, ToolbarButton` to build your own
+component.
```js
-import myToolComponent from './myToolComponent'
-
+import myToolComponent from './myToolComponent';
export default function getToolbarModule({ commandsManager, servicesManager }) {
-
return [
{
name: 'new-tool-type',
defaultComponent: myToolComponent,
clickHandler: () => {},
},
- ]
+ ];
}
```
-
-
## Custom tool
- I want to create a new tool
+
+**I want to create a new tool**
diff --git a/docs/latest/extensions/modules/viewport.md b/platform/docs/docs/platform/extensions/modules/viewport.md
similarity index 77%
rename from docs/latest/extensions/modules/viewport.md
rename to platform/docs/docs/platform/extensions/modules/viewport.md
index a6d7c9d82..a4a2460ef 100644
--- a/docs/latest/extensions/modules/viewport.md
+++ b/platform/docs/docs/platform/extensions/modules/viewport.md
@@ -1,8 +1,14 @@
+---
+sidebar_position: 5
+sidebar_label: Viewport
+---
+
# Module: Viewport
-
## Overview
-Viewports consume a displaySet and display/allow the user to interact with data. An extension can register a Viewport Module by defining a `getViewportModule`
+
+Viewports consume a displaySet and display/allow the user to interact with data.
+An extension can register a Viewport Module by defining a `getViewportModule`
method that returns a React component. Currently, we use viewport components to
add support for:
@@ -13,12 +19,11 @@ add support for:
- Whole Slide Microscopy Viewing (whole slide ext.)
- etc.
+The general pattern is that a mode can define which `Viewport` to use for which
+specific `SOPClassHandlerUID`, so if you want to fork just a single Viewport
+component for a specialized mode, this is possible.
-
-The general pattern is that a mode can define which `Viewport` to use for which specific
-`SOPClassHandlerUID`, so if you want to fork just a single Viewport component for a specialized mode, this is possible.
-
-```JSX
+```jsx
// displaySet, viewportIndex, dataSource
const getViewportModule = () => {
const wrappedViewport = props => {
@@ -36,15 +41,12 @@ const getViewportModule = () => {
};
```
-
## Example Viewport Component
-A simplified version of the tracked CornerstoneViewport is shown below, which creates
-a cornerstone viewport and and action bar on top of it.
+A simplified version of the tracked CornerstoneViewport is shown below, which
+creates a cornerstone viewport and and action bar on top of it.
-
-
-```JSX
+```jsx
function TrackedCornerstoneViewport({
children,
dataSource,
@@ -57,15 +59,15 @@ function TrackedCornerstoneViewport({
const renderViewport = () => {
const { component: Component } = extensionManager.getModuleEntry(
'org.ohif.cornerstone.viewportModule.cornerstone'
- )
+ );
return (
- )
- }
+ );
+ };
return (
<>
@@ -74,13 +76,12 @@ function TrackedCornerstoneViewport({
{renderViewport()}
>
- )
+ );
}
-
```
+
-
### `@ohif/viewer`
Viewport components are managed by the `ViewportGrid` Component. Which Viewport
@@ -90,6 +91,6 @@ component is used depends on:
- The Layout Configuration
- Registered SopClassHandlers
+
-
An example of three cornerstone Viewports
diff --git a/docs/latest/viewer/internationalization.md b/platform/docs/docs/platform/internationalization.md
similarity index 63%
rename from docs/latest/viewer/internationalization.md
rename to platform/docs/docs/platform/internationalization.md
index 9c41713b5..5ac05416e 100644
--- a/docs/latest/viewer/internationalization.md
+++ b/platform/docs/docs/platform/internationalization.md
@@ -1,30 +1,31 @@
+---
+sidebar_position: 4
+sidebar_label: Internationalization
+---
+
# Viewer: Internationalization
OHIF supports internationalization using [i18next](https://www.i18next.com/)
through the npm package [@ohif/i18n](https://www.npmjs.com/package/@ohif/i18n),
where is the main instance of i18n containing several languages and tools.
-
-
-
Our translation management is powered by Locize through their generous support of open source.
-
## How to change language for the viewer?
-You can take a look into user manuals to see how to change the viewer's language.
-In summary you can change the language:
+
+You can take a look into user manuals to see how to change the viewer's
+language. In summary you can change the language:
- In the preference modals
- Using the language query in the URL: `lng=Test-LNG`
-
-
## Installing
```bash
@@ -73,25 +74,22 @@ This section will introduce you to [react-i18next](https://react.i18next.com/)
basics and show how to implement the [t](https://www.i18next.com/overview/api#t)
function easily.
-
#### Using Hooks
+
You can use `useTranslation` hooks that is provided by `react-i18next`
-
-You can read more about this [here](https://react.i18next.com/latest/usetranslation-hook).
-
+You can read more about this
+[here](https://react.i18next.com/latest/usetranslation-hook).
```js
import React from 'react';
import { useTranslation } from 'react-i18next';
-
function MyComponent() {
const { t } = useTranslation();
return
{t('my translated text')}
;
}
-
```
### Using outside of OHIF viewer
@@ -105,7 +103,7 @@ all.
But, if you need to use it completely outside of OHIF viewer, you can set the
I18nextProvider this way:
-```js
+```jsx
import i18n from '@ohif/i18n';
import { I18nextProvider } from 'react-i18next';
import App from './App';
@@ -135,7 +133,7 @@ console.log(T('$t(Common:Play) my translated text'));
---
-# Main Concepts While Translating
+## Main Concepts While Translating
## Namespaces
@@ -144,7 +142,7 @@ semantically or by use. Each `.json` file inside `@ohif/i18n` npm package
becomes a new namespace automatically.
- Buttons: All buttons translations
-- CineDialog: Translations for the toll tips inside the Cine Player Dialog
+- CineDialog: Translations for the tool tips inside the Cine Player Dialog
- Common: all common jargons that can be reused like `t('$t(common:image)')`
- Header: translations related to OHIF's Header Top Bar
- MeasurementTable - Translations for the `@ohif/ui` Measurement Table
@@ -281,14 +279,14 @@ You can also set them manually, one by one, using this
---
-
-
## Test Language
-We have created a test language that its translations can be seen in the locales folder. You can copy paste the folder and its `.json` namespaces and add your custom
-language translations.
-> If you apply the test-LNG you can see all the elements get appended with 'Test {}'.
-> For instance `Study list` becomes `Test Study list`.
+We have created a test language that its translations can be seen in the locales
+folder. You can copy paste the folder and its `.json` namespaces and add your
+custom language translations.
+
+> If you apply the test-LNG you can see all the elements get appended with 'Test
+> {}'. For instance `Study list` becomes `Test Study list`.
## Language Detections
@@ -326,7 +324,73 @@ Run the project as following to get full debug information:
REACT_APP_I18N_DEBUG=true yarn run dev
```
-### Contributing with new languages
+## Contributing with new languages
-Contributions of any kind are welcome! Please check the
-[instructions](../development/contributing.md).
+We have integrated `i18next` into the OHIF Viewer and hooked it up with Locize
+for translation management. Now we need your help to get the app translated into
+as many languages as possible, and ensure that we haven't missed pieces of the
+app that need translation. Locize has graciously offered to provide us with free
+usage of their product.
+
+Once each crowd-sourcing project is completed, we can approve it and merge the
+changes into the main project. At that point, the language will be immediately
+available on https://viewer.ohif.org/ for testing, and can be used in any OHIF
+project. We will support usage through both the Locize CDN and by copying the
+language directly into the `@ohif/i18n` package, so that end users can serve the
+content from their own domains.
+
+Here are a couple examples:
+
+Spanish:
+https://viewer.ohif.org/viewer/1.2.840.113619.2.5.1762583153.215519.978957063.78?lng=es
+
+Chinese:
+https://viewer.ohif.org/viewer/1.2.840.113619.2.5.1762583153.215519.978957063.78?lng=zh
+
+Portugese:
+https://viewer.ohif.org/viewer/1.2.840.113619.2.5.1762583153.215519.978957063.78?lng=pt-BR
+
+Here are some links you can use to sign up to help translate. All you have to do
+is sign up, translate the strings, and click Save. On our side, we have a
+dashboard to see how many strings are translated and by whom.
+
+This is a pretty random set of languages, so please post below if you'd like a
+new language link to be added:
+
+Languages:
+
+[French](https://www.locize.io/register?invitation=Nj8jRPaFKYwtIfNZ6Y5GVOJOpeiXNAdVuSiOg9ceaiveP6uF6y1wVXM9lgfKoYZX)
+
+[German](https://www.locize.io/register?invitation=gChNiVi66YINTPpbKESVAVYPapwg3DkpvMSSomLTvVqBJTXrdmPvxi0WZYHER11q)
+
+[Dutch](https://www.locize.io/register?invitation=2PGe7I184aN0cazM4GXMhzeLtGTf9Zen5uyOEFhHQ8vYkfKHkgR0mJ8dwbNlIeCG)
+
+[Turkish](https://www.locize.io/register?invitation=NOMIXsfneqPbFDqjce5wI7Z6p2swXSjc0rHOH4KLcM6qXSNA4LGyJaLxS7nqWAe3)
+
+[Chinese](https://www.locize.io/register?invitation=lrcUbt7DvV4aJmQeEA4SMAj5xNWr3rltOcaZW1cFc6eod0nvzSPFU4V383tDHGGn)
+
+[Japanese](https://www.locize.io/register?invitation=AaRq2S22o5FsxArwgVuw1gZcQjoe2ffyxarqlAXOpN7JnR2sf2mfamc5qV6LG1Mn)
+
+[Arabic](https://www.locize.io/register?invitation=BiqI6fOm1sC84N3YJLbImXmaOCk8Hc3TMGpXg7NH2R0b0OKuPCp9wlCHLoqMRpfQ)
+
+[Hindi](https://www.locize.io/register?invitation=ph7JmOGTV95DF3EFaI1kvK5Hx98dV9w2wj9h9UhUCWnkBNAwWEdWMcyjnF94zkWb)
+
+[Malay](https://www.locize.io/register?invitation=HsV9F5mKZyeUZYrC3XFRzNI2l0EsIh6hK0MUIKP8IYZA3GxuzfgkvWBLCFwCpDik)
+
+[Russian](https://www.locize.io/register?invitation=da4V9Q8DVO3M1FIlvfT50ZiS8NDNgvC0dE5hHUEAp47FXy6pLXmf1cp2lgLBfLmb)
+
+[Swedish](https://www.locize.io/register?invitation=uR4kzBZC1vhJe6jyMwYXgGPj84QDMulQRlt2s6rONU6ljUh5dgwuUyhJEtZ4REA3)
+
+[Italian](https://www.locize.io/register?invitation=viAS1NC5q342OxtuIv3JFX9DJ3KoR4SmGoElkBlRMphsDKt4hy9bW8JfBjHlfnd7)
+
+[Spanish](https://www.locize.io/register?invitation=ZikXW3KI4w4eo5Cf6L1aQMWaR69XAQ0a9Va3NGorH7mAPvEPXp8w8NLkPNLs5nG8)
+
+[Ukrainian](https://www.locize.io/register?invitation=TY0s6onqH3Asl05Bh1qB44SNSABL2pTYoturwxAmcNKRnzBZFK7bGfn7kVi23Vpg)
+
+[Vietnamese](https://www.locize.io/register?invitation=eqfHDm0vaqxGfQ5TGt6SeV0dx9b2dCp1RrMRdIRavqzOCOAfD3IElzUsyIT689cK)
+
+[Portugese-Brazil](https://www.locize.io/register?invitation=Qc5Dq449xbblQqLTpWeMfsyFiu3gACcgpj0EIucQjjs9Ph9pzPLpq3MnZupF9t6N)
+
+Don't see your language in the above list? Add a request
+[here](https://github.com/OHIF/Viewers/issues/618) so that we can create the
+language for your translation contribution.
diff --git a/platform/docs/docs/platform/managers/_category_.json b/platform/docs/docs/platform/managers/_category_.json
new file mode 100644
index 000000000..309407792
--- /dev/null
+++ b/platform/docs/docs/platform/managers/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Managers",
+ "position": 11
+}
diff --git a/docs/latest/managers/commands.md b/platform/docs/docs/platform/managers/commands.md
similarity index 97%
rename from docs/latest/managers/commands.md
rename to platform/docs/docs/platform/managers/commands.md
index 488fbc715..fab666dac 100644
--- a/docs/latest/managers/commands.md
+++ b/platform/docs/docs/platform/managers/commands.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 4
+sidebar_label: Commands Manager
+---
# Commands Manager
## Overview
@@ -70,9 +74,7 @@ These methods are used internally to help determine which commands are currently
valid, and how to provide them with any state they may need at the time they are
called.
-```js
-// platform/viewer/src/appInit.js
-
+```js title="platform/viewer/src/appInit.js"
const commandsManagerConfig = {
getAppState: () => {},
/** Used by commands to determine active context */
@@ -167,7 +169,6 @@ use `runCommand(commandName, options = {}, contextName)`.
```js
-
// Run a command, it will run all the `speak` commands in all contexts
commandsManager.runCommand('speak', { command: 'hello' });
diff --git a/docs/latest/managers/extension.md b/platform/docs/docs/platform/managers/extension.md
similarity index 96%
rename from docs/latest/managers/extension.md
rename to platform/docs/docs/platform/managers/extension.md
index cab349c51..8851ffc10 100644
--- a/docs/latest/managers/extension.md
+++ b/platform/docs/docs/platform/managers/extension.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 2
+sidebar_label: Extension Manager
+---
# Extension Manager
## Overview
diff --git a/docs/latest/managers/hotkeys.md b/platform/docs/docs/platform/managers/hotkeys.md
similarity index 97%
rename from docs/latest/managers/hotkeys.md
rename to platform/docs/docs/platform/managers/hotkeys.md
index 0ac4e9994..c5b1a985c 100644
--- a/docs/latest/managers/hotkeys.md
+++ b/platform/docs/docs/platform/managers/hotkeys.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 5
+sidebar_label: Hotkeys Manager
+---
# Hotkeys Managers
## Overview
diff --git a/docs/latest/managers/_managers.md b/platform/docs/docs/platform/managers/index.md
similarity index 64%
rename from docs/latest/managers/_managers.md
rename to platform/docs/docs/platform/managers/index.md
index 3719ffdf3..c2f4a30d8 100644
--- a/docs/latest/managers/_managers.md
+++ b/platform/docs/docs/platform/managers/index.md
@@ -1,3 +1,16 @@
+---
+sidebar_position: 1
+sidebar_label: Introduction
+---
+# Managers
+
+## Overview
+
+
+`OHIF` uses `Managers` to accomplish various purposes such as registering new services, dependency injection, and aggregating and exposing `extension` features.
+
+`OHIF-v3` provides the following managers which we will discuss in depth.
+
@@ -46,7 +59,20 @@
For keyboard keys assignment to commands
-
-
+
+
+
+
+
+
+
+
+
+[core-services]: https://github.com/OHIF/Viewers/tree/master/platform/core/src/services
+[services-manager]: https://github.com/OHIF/Viewers/blob/master/platform/core/src/services/ServicesManager.js
+[cross-cutting-concerns]: https://en.wikipedia.org/wiki/Cross-cutting_concern
+
diff --git a/docs/latest/managers/service.md b/platform/docs/docs/platform/managers/service.md
similarity index 92%
rename from docs/latest/managers/service.md
rename to platform/docs/docs/platform/managers/service.md
index 0e4dd71be..d60ec83e1 100644
--- a/docs/latest/managers/service.md
+++ b/platform/docs/docs/platform/managers/service.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+sidebar_label: Service Manager
+---
# Services Manager
## Overview
@@ -39,9 +43,7 @@ export default class ServicesManager {
## Default Registered Services
By default, `OHIF-v3` registers the following services in the `appInit`.
-```js
-// platform/viewer/src/appInit.js
-
+```js title="platform/viewer/src/appInit.js"
servicesManager.registerServices([
UINotificationService,
UIModalService,
@@ -64,9 +66,7 @@ find out that services need to be exported as an object with `name` and `create`
For instance, `ToolbarService` is exported as:
-```js
-// platform/core/src/services/ToolBarService/index.js
-
+```js title="platform/core/src/services/ToolBarService/index.js"
import ToolBarService from './ToolBarService';
export default {
@@ -112,9 +112,7 @@ function PanelMeasurementTableTracking({ servicesManager }) {
## Registering Custom Services
You might need to write you own custom service in an extension. `preRegistration` hook inside your extension is the place for registering your custom service.
-```js
-// extensions/customExtension/src/index.js
-
+```js title="extensions/customExtension/src/index.js"
import WrappedBackEndService from './services/backEndService'
export default {
@@ -129,8 +127,7 @@ export default {
and the logic for your service shall be
-```js
-// extensions/customExtension/src/services/backEndService/index.js
+```js title="extensions/customExtension/src/services/backEndService/index.js"
import backEndService from './backEndService';
export default function WrappedBackEndService(serviceManager) {
diff --git a/platform/docs/docs/platform/modes/_category_.json b/platform/docs/docs/platform/modes/_category_.json
new file mode 100644
index 000000000..80702b9e5
--- /dev/null
+++ b/platform/docs/docs/platform/modes/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Modes",
+ "position": 10
+}
diff --git a/platform/docs/docs/platform/modes/index.md b/platform/docs/docs/platform/modes/index.md
new file mode 100644
index 000000000..28a3e710b
--- /dev/null
+++ b/platform/docs/docs/platform/modes/index.md
@@ -0,0 +1,445 @@
+---
+sidebar_position: 1
+sidebar_label: Introduction
+---
+
+# Modes
+
+## Overview
+
+A mode can be thought of as a viewer app configured to perform a specific task,
+such as tracking measurements over time, 3D segmentation, a guided radiological
+workflow, etc. Addition of modes enables _application_ with many _applications_
+as each mode become a mini _app configuration_ behind the scene.
+
+Upon initialization the viewer will consume extensions and modes and build up
+the route desired, these can then be accessed via the study list, or directly
+via url parameters.
+
+
+
+OHIF-v3 architecture can be seen in the following:
+
+
+
+> Note: Templates are now a part of “extensions” Routes are configured by modes
+> and/or app
+
+As mentioned, modes are tied to a specific route in the viewer, and multiple
+modes/routes can be present within a single application. This allows for
+tremendously more flexibility than before you can now:
+
+- Simultaneously host multiple viewers with for different use cases from within
+ the same app deploy.
+- Make radiological viewers for specific purposes/workflows, e.g.:
+ - Tracking the size of lesions over time.
+ - PET/CT fusion workflows.
+ - Guided review workflows optimized for a specific clinical trial.
+- Still host one single feature-rich viewer if you desire.
+
+## Anatomy
+
+A mode configuration has a `route` name which is dynamically transformed into a
+viewer route on initialization of the application. Modes that are available to a
+study will appear in the study list.
+
+
+
+The mode configuration specifies which `extensions` the mode requires, which
+`LayoutTemplate` to use, and what props to pass to the template. For the default
+template this defines which `side panels` will be available, as well as what
+`viewports` and which `displaySets` they may hang.
+
+Mode's config is actually a function that return a config object with certain
+properties, the high-level view of this config object is:
+
+```js title="modes/example/src/index.js"
+export default function mode() {
+ return {
+ id: '',
+ displayName: '',
+ onModeEnter: () => {},
+ onModeExit: () => {},
+ validationTags: {},
+ isValidMode: () => {},
+ routes: [
+ {
+ path: '',
+ init: () => {},
+ layoutTemplate: () => {},
+ },
+ ],
+ extensions: [],
+ hangingProtocols: [],
+ sopClassHandlers: [],
+ hotkeys: [],
+ };
+}
+```
+
+
+
+
+
Property
+
Description
+
+
+
+
+
+ id
+
+
unique mode id used to refer to the mode
+
+
+
+ displayName
+
+
actual name of the mode being displayed for each study in the study summary panel
+
+### Consuming Extensions
+
+As mentioned in the [Extensions](../extensions/index.md) section, in `OHIF-v3`
+developers write their extensions to create re-usable functionalities that later
+can be used by `modes`. Now, it is time to describe how the registered
+extensions will get utilized for a workflow mode via its `id`.
+
+To use a module element you can use the
+`${extensionId}.${moduleType}.${element.name}` schema. For instance, if a mode
+requires the left panel with name of `AIPanel` that is added by the
+`myAIExtension` via the following `getPanelModule` code, it should address it as
+`myAIExtension.panelModule.AIPanel` inside the mode configuration file. In the
+background `OHIF` will handle grabbing the correct panel via `ExtensionManager`.
+
+```js title="extensions/myAIExtension/getPanelModule.js"
+import PanelAI from './PanelAI.js';
+
+function getPanelModule({
+ commandsManager,
+ extensionManager,
+ servicesManager,
+}) {
+ const wrappedAIPanel = () => {
+ return (
+
+ );
+ };
+
+ return [
+ {
+ name: 'AIPanel',
+ iconName: 'list-bullets',
+ iconLabel: '',
+ label: 'AI Panel',
+ isDisabled: studies => {}, // optional
+ component: wrappedAIPanel,
+ },
+ ];
+}
+```
+
+Now, let's look at `longitudinal` mode which consumes various functionalities
+from different extensions. Note that, you don't need to have
+`org.ohif.extensionName`, this is a pattern we chose to name our
+[OHIF-maintained](../extensions/index.md#ohif-maintained-extensions) extensions,
+you can simply have `extensionName` as the `id` for yours and refer to it inside
+your modes.
+
+```js
+export default function mode({ modeConfiguration }) {
+ return {
+ /*
+ ...
+ */
+ routes: [
+ {
+ /*
+ ...
+ */
+ layoutTemplate: ({ location, servicesManager }) => {
+ return {
+ id: ohif.layout,
+ props: {
+ leftPanels: [
+ 'org.ohif.measurement-tracking.panelModule.seriesList',
+ ],
+ rightPanels: [
+ 'org.ohif.measurement-tracking.panelModule.trackedMeasurements',
+ ],
+ viewports: [
+ {
+ namespace:
+ 'org.ohif.measurement-tracking.viewportModule.cornerstone-tracked',
+ displaySetsToDisplay: [
+ 'org.ohif.default.sopClassHandlerModule.stack',
+ ],
+ },
+ {
+ namespace: 'org.ohif.dicom-sr.viewportModule.dicom-sr',
+ displaySetsToDisplay: [
+ 'org.ohif.dicom-sr.sopClassHandlerModule.dicom-sr',
+ ],
+ },
+ ],
+ },
+ };
+ },
+ },
+ ],
+ extensions: [
+ 'org.ohif.default',
+ 'org.ohif.cornerstone',
+ 'org.ohif.measurement-tracking',
+ 'org.ohif.dicom-sr',
+ ],
+ hangingProtocols: ['org.ohif.default.hangingProtocolModule.petCT'],
+ sopClassHandlers: [
+ 'org.ohif.default.sopClassHandlerModule.stack',
+ 'org.ohif.dicom-sr.sopClassHandlerModule.dicom-sr',
+ ],
+ /*...*/
+ };
+}
+```
+
+### Routes
+
+routes config is an array of route settings, and the overall look and behavior
+of the viewer at the designated route is defined by the `layoutTemplate` and
+`init` functions for the route. We will learn more about each of the above
+properties inside the [route documentation](./routes.md)
+
+### Extensions
+
+Currently `extensions` property in the mode config is used to add
+_contextModule_ of the mentioned extensions to the list of contexts and provide
+them through out the app. Since extensions are registered by the
+ExtensionManager, modes have access to the them even if they have not been
+referred in the mode config file inside _extensions_ property.
+[Read more about extension registration](../extensions/index.md#registering-an-extension)
+
+```js title="platform/viewer/src/routes/Mode/Mode.jsx"
+const { extensions } = mode;
+
+extensions.forEach(extensionId => {
+ const allRegisteredModuleIds = Object.keys(extensionManager.modulesMap);
+ const moduleIds = allRegisteredModuleIds.filter(id =>
+ id.includes(`${extensionId}.contextModule.`)
+ );
+
+ const modules = moduleIds.map(extensionManager.getModuleEntry);
+ contextModules = contextModules.concat(modules);
+});
+```
+
+### HangingProtocols
+
+Currently, you can pass your defined hanging protocols inside the
+`hangingProtocols` property of the mode's config. This will get used inside the
+`Mode.jsx` to configure the `HangingProtocolService`.
+
+```js title="platform/viewer/src/routes/Mode/Mode.jsx"
+const { hangingProtocols } = mode;
+
+hangingProtocols.forEach(extentionProtocols => {
+ const { protocols } = extensionManager.getModuleEntry(extentionProtocols);
+ HangingProtocolService.addProtocols(protocols);
+});
+```
+
+### SopClassHandlers
+
+Mode's configuration also accepts the `sopClassHandler` modules that have been
+added by the extensions. This information will get used inside the `Mode.jsx` to
+initialize the `DisplaySetService` with the provided SOPClass modules which
+handles creation of the displaySets.
+
+```js title="platform/viewer/src/routes/Mode/Mode.jsx"
+const { sopClassHandlers } = mode;
+
+DisplaySetService.init(extensionManager, sopClassHandlers);
+```
+
+### Hotkeys
+
+`hotkeys` is another property in the configuration of a mode that can be defined
+to add the specific hotkeys to the viewer at all routes.
+
+```js
+// default hotkeys
+import { utils } from '@ohif/ui';
+
+const { hotkeys } = utils;
+
+const myHotkeys = [
+ {
+ commandName: 'setToolActive',
+ commandOptions: { toolName: 'Zoom' },
+ label: 'Zoom',
+ keys: ['z'],
+ isEditable: true,
+ },
+ {
+ commandName: 'scaleUpViewport',
+ label: 'Zoom In',
+ keys: ['+'],
+ isEditable: true,
+ },
+]
+
+export default function mode() {
+ return {
+ id: '',
+ displayName: '',
+ /*
+ ...
+ */
+ hotkeys: [..hotkeys.defaults.hotkeyBindings, ...myHotkeys],
+ }
+}
+```
+
+```js title="platform/viewer/src/routes/Mode/Mode.jsx"
+hotkeysManager.setDefaultHotKeys(hotkeys);
+hotkeysManager.setHotkeys(hotkeys);
+```
+
+## Registration
+
+Upon release modes will also be plugged into the app via configuration, but this
+is still an area which is under development/discussion, and they are currently
+pulled from the `window` in beta.
+
+```js title="modes/longitudinal/src/index.js"
+export default function mode() {
+ return {
+ id: 'viewer',
+ displayName: 'Basic Viewer',
+ onModeEnter: () => {
+ /**...**/
+ },
+ onModeExit: () => {
+ /**...**/
+ },
+ validationTags: {
+ /**...**/
+ },
+ isValidMode: () => {
+ /**...**/
+ },
+ routes: [
+ {
+ path: 'longitudinal',
+ init: () => {
+ /**...**/
+ },
+ layoutTemplate: () => {
+ /**...**/
+ },
+ },
+ ],
+ extensions: [
+ /**...**/
+ ],
+ hangingProtocols: [
+ /**...**/
+ ],
+ sopClassHandlers: [
+ /**...**/
+ ],
+ hotkeys: [
+ /**...**/
+ ],
+ };
+}
+
+window.longitudinalMode = mode({});
+```
+
+and inside `@ohif/viewer` we have:
+
+```js title="platform/viewer/src/appInit.js"
+if (!appConfig.modes.length) {
+ appConfig.modes.push(window.longitudinalMode);
+ // appConfig.modes.push(window.segmentationMode);
+}
+```
diff --git a/docs/latest/modes/lifeCycle.md b/platform/docs/docs/platform/modes/lifecycle.md
similarity index 57%
rename from docs/latest/modes/lifeCycle.md
rename to platform/docs/docs/platform/modes/lifecycle.md
index d56a1e80f..a888990f6 100644
--- a/docs/latest/modes/lifeCycle.md
+++ b/platform/docs/docs/platform/modes/lifecycle.md
@@ -1,21 +1,26 @@
-# Mode: LifeCycle
+---
+sidebar_position: 2
+sidebar_label: Lifecycle Hooks
+---
-
-- [Mode: LifeCycle](#mode-lifecycle)
- - [Overview](#overview)
- - [onModeEnter](#onmodeenter)
- - [onModeExit](#onmodeexit)
+# Modes: Lifecycle Hooks
## Overview
-Currently there are two hooks that are called for modes.
+
+Currently there are two hooks that are called for modes:
+
+- onModeEnter
+- onModeExit
## onModeEnter
-This hook gets run after the defined route has been entered by the mode.
-This hook can be used to initialize the data, services and appearance of the viewer upon the first render.
-For instance, in `longitudinal` mode we are using this hook to initialize the `ToolBarService` and
-set the window level/width tool to be active and add buttons to the toolbar.
+This hook gets run after the defined route has been entered by the mode. This
+hook can be used to initialize the data, services and appearance of the viewer
+upon the first render.
+For instance, in `longitudinal` mode we are using this hook to initialize the
+`ToolBarService` and set the window level/width tool to be active and add
+buttons to the toolbar.
```js
export default function mode() {
@@ -23,19 +28,19 @@ export default function mode() {
id: '',
displayName: '',
onModeEnter: ({ servicesManager, extensionManager }) => {
- const { ToolBarService } = servicesManager.services
+ const { ToolBarService } = servicesManager.services;
const interaction = {
groupId: 'primary',
itemId: 'Wwwc',
interactionType: 'tool',
commandOptions: undefined,
- }
+ };
- ToolBarService.recordInteraction(interaction)
+ ToolBarService.recordInteraction(interaction);
- ToolBarService.init(extensionManager)
- ToolBarService.addButtons(toolbarButtons)
+ ToolBarService.init(extensionManager);
+ ToolBarService.addButtons(toolbarButtons);
ToolBarService.createButtonSection('primary', [
'MeasurementTools',
'Zoom',
@@ -44,22 +49,23 @@ export default function mode() {
'Capture',
'Layout',
'MoreTools',
- ])
+ ]);
},
/*
...
*/
- }
+ };
}
```
## onModeExit
-This hook is called when the viewer navigate away from the route in the url. This is the place
-for cleaning up data, and services by unsubscribing to the events.
+This hook is called when the viewer navigate away from the route in the url.
+This is the place for cleaning up data, and services by unsubscribing to the
+events.
-For instance, it can be used to reset the `ToolbarService` which reset the toggled buttons.
-
+For instance, it can be used to reset the `ToolbarService` which reset the
+toggled buttons.
```js
export default function mode() {
@@ -67,13 +73,13 @@ export default function mode() {
id: '',
displayName: '',
onModeExit: ({ servicesManager, extensionManager }) => {
- // Turn of the toggled states on exit
+ // Turn of the toggled states on exit
const { ToolBarService } = servicesManager.services;
ToolBarService.reset();
},
/*
...
*/
- }
+ };
}
```
diff --git a/docs/latest/modes/routes.md b/platform/docs/docs/platform/modes/routes.md
similarity index 94%
rename from docs/latest/modes/routes.md
rename to platform/docs/docs/platform/modes/routes.md
index 8a140d621..2d1e691b9 100644
--- a/docs/latest/modes/routes.md
+++ b/platform/docs/docs/platform/modes/routes.md
@@ -1,15 +1,9 @@
+---
+sidebar_position: 3
+sidebar_label: Routes
+---
# Mode: Routes
-- [Mode: Routes](#mode-routes)
- - [Overview](#overview)
- - [Route](#route)
- - [Route: path](#route-path)
- - [Route: init](#route-init)
- - [Default init](#default-init)
- - [Writing a custom init](#writing-a-custom-init)
- - [Route: layoutTemplate](#route-layouttemplate)
- - [FAQ](#faq)
-
## Overview
Modes are tied to a specific route in the viewer, and multiple modes/routes can be present within a single application. This makes `routes` config, THE most important part of the mode configuration.
@@ -84,7 +78,7 @@ There are two types of `routes` that are created by the mode.
- Routes with dataSourceName `/${mode.id}/${dataSourceName}`
- Routes without dataSourceName `/${mode.id}`
-Therefore navigating to `http://localhost:3000/viewer/?StudyInstanceUIDs=1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1` will run the app with the layout and functionalities of the `viewer` mode using the `defaultDataSourceName` which is defined in the [App Config](../configuring/index.md)
+Therefore navigating to `http://localhost:3000/viewer/?StudyInstanceUIDs=1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1` will run the app with the layout and functionalities of the `viewer` mode using the `defaultDataSourceName` which is defined in the [App Config](../../configuration/index.md)
You can use the same exact mode using a different registered data source (e.g., `dicomjson`) by navigating to `http://localhost:3000/viewer/dicomjson/?StudyInstanceUIDs=1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1`
@@ -108,7 +102,7 @@ retrieving its instances metadata.
A *simplified* "pseudocode" for the `defaultRouteInit` is:
-```js
+```jsx
async function defaultRouteInit({
servicesManager,
studyInstanceUIDs,
@@ -153,12 +147,12 @@ You can add your custom init function to enhance the default initialization for:
and lots of other modifications.
You just need to make sure, the mode `retrieveSeriesMetadata`, `makeDisplaySets` and `run` the
-HangingProtocols at some point. There are various `events` that you can subscribe to and add your custom logic. point to events
+HangingProtocols at some point. There are various `events` that you can subscribe to and add your custom logic. **point to events**
For instance for jumping to the slice where a measurement is located at the initial render, you need to follow a pattern similar to the following:
-```js
+```jsx
init: async ({
servicesManager,
extensionManager,
@@ -221,7 +215,7 @@ For instance `default extension` provides a layoutTemplate that builds the app u
and viewports. Therefore, the `props` include `leftPanels`, `rightPanels` and `viewports` sections. Note that the `layoutTemplate` defines the properties it is expecting. So, if you write a `layoutTemplate-2` that accepts a footer section, its logic should be written in the extension, and any mode that
is interested in using `layoutTemplate-2` **should** provide the `id` for the footer component.
-What module should the footer be registered?
+**What module should the footer be registered?**
```js
@@ -270,6 +264,7 @@ layoutTemplate: ({ location, servicesManager }) => {
This is where `OHIF-v3` shines! Since the default `layoutTemplate` is written for the viewer part, you can simply add a new `layoutTemplate` and use the component you have written for that route. `Mode` handle showing the correct component for the specified route.
+
```js
export default function mode() {
return {
diff --git a/docs/latest/modes/validity.md b/platform/docs/docs/platform/modes/validity.md
similarity index 89%
rename from docs/latest/modes/validity.md
rename to platform/docs/docs/platform/modes/validity.md
index 4683f613c..44835652a 100644
--- a/docs/latest/modes/validity.md
+++ b/platform/docs/docs/platform/modes/validity.md
@@ -1,8 +1,9 @@
+---
+sidebar_position: 4
+sidebar_label: Validity
+---
# Mode: Validity
-- [Mode: Validity](#mode-validity)
- - [Overview](#overview)
- - [isValidMode](#isvalidmode)
## Overview
There are two mechanism for checking the validity of a mode for a study.
diff --git a/docs/latest/faq/pwa-vs-packaged.md b/platform/docs/docs/platform/pwa-vs-packaged.md
similarity index 91%
rename from docs/latest/faq/pwa-vs-packaged.md
rename to platform/docs/docs/platform/pwa-vs-packaged.md
index a6f001abc..c4a0c6651 100644
--- a/docs/latest/faq/pwa-vs-packaged.md
+++ b/platform/docs/docs/platform/pwa-vs-packaged.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+---
+
# PWA vs Packaged
It's important to know that the OHIF Viewer project provides two different build
@@ -26,7 +30,7 @@ that subsequent requests are from the local file system instead of over the
network.
You can read more about this particular strategy in our
-[Build for Production Deployment Guide](./../deployment/recipes/build-for-production.md)
+[Build for Production Deployment Guide](./../deployment/build-for-production.md)
## Commonjs Bundle (Packaged Script)
diff --git a/docs/v2/faq/scope-of-project.md b/platform/docs/docs/platform/scope-of-project.md
similarity index 98%
rename from docs/v2/faq/scope-of-project.md
rename to platform/docs/docs/platform/scope-of-project.md
index 4229bb38d..91d254450 100644
--- a/docs/v2/faq/scope-of-project.md
+++ b/platform/docs/docs/platform/scope-of-project.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 1
+---
# Scope of Project
The OHIF Viewer is a web based medical imaging viewer. This allows it to be used
diff --git a/platform/docs/docs/platform/services/_category_.json b/platform/docs/docs/platform/services/_category_.json
new file mode 100644
index 000000000..8b57449b2
--- /dev/null
+++ b/platform/docs/docs/platform/services/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Services",
+ "position": 12
+}
diff --git a/docs/latest/services/data/DicomMetadataStore.md b/platform/docs/docs/platform/services/data/DicomMetadataStore.md
similarity index 96%
rename from docs/latest/services/data/DicomMetadataStore.md
rename to platform/docs/docs/platform/services/data/DicomMetadataStore.md
index 1818c065c..957002ea3 100644
--- a/docs/latest/services/data/DicomMetadataStore.md
+++ b/platform/docs/docs/platform/services/data/DicomMetadataStore.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 2
+sidebar_label: DICOM Metadata Store
+---
# DICOM Metadata Store
@@ -62,9 +66,7 @@ stored and in what format and hierarchy. `_model` is a private variable in the s
which holds all the metadata for all studies, series, and instances, and it looks like:
-```js
-// platform/core/src/services/DicomMetadataStore/DicomMetadataStore.js
-
+```js title="platform/core/src/services/DicomMetadataStore/DicomMetadataStore.js"
const _model = {
studies: [
{
@@ -107,5 +109,4 @@ const _model = {
},
],
}
-
```
diff --git a/docs/latest/services/data/DisplaySetService.md b/platform/docs/docs/platform/services/data/DisplaySetService.md
similarity index 93%
rename from docs/latest/services/data/DisplaySetService.md
rename to platform/docs/docs/platform/services/data/DisplaySetService.md
index 2645cb60e..f6c053cb6 100644
--- a/docs/latest/services/data/DisplaySetService.md
+++ b/platform/docs/docs/platform/services/data/DisplaySetService.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+sidebar_label: DisplaySet Service
+---
# DisplaySet Service
@@ -7,9 +11,7 @@
> Based on the instanceMetadata's `SOPClassHandlerId`, the correct module from the registered extensions is found by `OHIF` and its `getDisplaySetsFromSeries` runs to create a DisplaySet for the Series.
-```js
-// platform/core/src/services/DisplaySetService/DisplaySetService.js
-
+```js title="platform/core/src/services/DisplaySetService/DisplaySetService.js"
init(extensionManager, SOPClassHandlerIds) {
this.extensionManager = extensionManager;
this.SOPClassHandlerIds = SOPClassHandlerIds;
@@ -19,9 +21,7 @@ init(extensionManager, SOPClassHandlerIds) {
in `Mode.jsx`
-```js
-// platform/viewer/src/routes/Mode/Mode.jsx
-
+```js title="platform/viewer/src/routes/Mode/Mode.jsx"
export default function ModeRoute(/** ... **/) {
/** ... **/
const { DisplaySetService } = servicesManager.services
diff --git a/docs/latest/services/data/HangingProtocolService.md b/platform/docs/docs/platform/services/data/HangingProtocolService.md
similarity index 99%
rename from docs/latest/services/data/HangingProtocolService.md
rename to platform/docs/docs/platform/services/data/HangingProtocolService.md
index aa6f683db..6132a0ed3 100644
--- a/docs/latest/services/data/HangingProtocolService.md
+++ b/platform/docs/docs/platform/services/data/HangingProtocolService.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 4
+sidebar_label: Hanging Protocol Service
+---
# Hanging Protocol Service
## Overview
diff --git a/docs/latest/services/data/MeasurementService.md b/platform/docs/docs/platform/services/data/MeasurementService.md
similarity index 56%
rename from docs/latest/services/data/MeasurementService.md
rename to platform/docs/docs/platform/services/data/MeasurementService.md
index 65bb7c6a8..74605bce1 100644
--- a/docs/latest/services/data/MeasurementService.md
+++ b/platform/docs/docs/platform/services/data/MeasurementService.md
@@ -1,24 +1,27 @@
+---
+sidebar_position: 6
+sidebar_label: Measurement Service
+---
+
# Measurement Service
-
## Overview
-`MeasurementService` handles the internal measurement representation inside `OHIF` platform.
-Developers can add their custom `sources` with `mappers` to enable adding measurements inside OHIF.
-Currently, we are maintaining `CornerstoneTools` annotations and corresponding mappers can be found
-inside the `cornerstone` extension. However, `MeasurementService` can be configured to work with any
-custom tools given that its `mappers` is added to the `MeasurementService`.
-We can see the overall architecture of the `MeasurementService` below:
+`MeasurementService` handles the internal measurement representation inside
+`OHIF` platform. Developers can add their custom `sources` with `mappers` to
+enable adding measurements inside OHIF. Currently, we are maintaining
+`CornerstoneTools` annotations and corresponding mappers can be found inside the
+`cornerstone` extension. However, `MeasurementService` can be configured to work
+with any custom tools given that its `mappers` is added to the
+`MeasurementService`. We can see the overall architecture of the
+`MeasurementService` below:
-
-
-
+
## Events
+
There are seven events that get publish in `MeasurementService`:
-
-
| Event | Description |
| --------------------- | ------------------------------------------------------ |
| MEASUREMENT_UPDATED | Fires when a measurement is updated |
@@ -28,62 +31,66 @@ There are seven events that get publish in `MeasurementService`:
| MEASUREMENTS_CLEARED | Fires when all measurements are deleted |
| JUMP_TO_MEASUREMENT | Fires when a measurement is requested to be jump to |
-
-
## API
- `getMeasurements`: returns array of measurements
-- `getMeasurement(id)`: returns the corresponding measurement based on the provided Id.
+- `getMeasurement(id)`: returns the corresponding measurement based on the
+ provided Id.
-- `remove(id, source)`: removes a measurement and broadcasts the `MEASUREMENT_REMOVED` event.
+- `remove(id, source)`: removes a measurement and broadcasts the
+ `MEASUREMENT_REMOVED` event.
-- `clearMeasurements`: removes all measurements and broadcasts `MEASUREMENTS_CLEARED` event.
+- `clearMeasurements`: removes all measurements and broadcasts
+ `MEASUREMENTS_CLEARED` event.
-- `createSource(name, version)`: creates a new measurement source, generates a uid and adds it to the `sources` property of the service.
+- `createSource(name, version)`: creates a new measurement source, generates a
+ uid and adds it to the `sources` property of the service.
-- `addMapping(source, definition, matchingCriteria, toSourceSchema, toMeasurementSchema)`: adds a new measurement matching criteria along with mapping functions.
- We will learn more about [source/mappers below](#source--mappers)
+- `addMapping(source, definition, matchingCriteria, toSourceSchema, toMeasurementSchema)`:
+ adds a new measurement matching criteria along with mapping functions. We will
+ learn more about [source/mappers below](#source--mappers)
- `update`: updates the measurement details and fires `MEASUREMENT_UPDATED`
-- `addRawMeasurement(source,definition,data,toMeasurementSchema,dataSource = {}` : adds a raw measurement into a source so that it may be
- converted to/from annotation in the same way. E.g. import serialized data
- of the same form as the measurement source. Fires `MEASUREMENT_UPDATED` or `MEASUREMENT_ADDED`.
- Note that, `MeasurementService` handles finding the correct mapper upon new measurements; however, `addRawMeasurement` provides more flexibility.
- You can take a look into its usage in `dicom-sr` extension.
-
- - `source`: The measurement source instance.
- - `definition`: The source definition you want to add the measurement to.
- - `data`: The data you wish to add to the source.
- - `toMeasurementSchema`: A function to get the `data` into the same shape as the source definition.
-
-- `jumpToMeasurement(viewportIndex, id)`: calls the listeners who have subscribed to `JUMP_TO_MEASUREMENT`.
-
+- `addRawMeasurement(source,definition,data,toMeasurementSchema,dataSource = {}`
+ : adds a raw measurement into a source so that it may be converted to/from
+ annotation in the same way. E.g. import serialized data of the same form as
+ the measurement source. Fires `MEASUREMENT_UPDATED` or `MEASUREMENT_ADDED`.
+ Note that, `MeasurementService` handles finding the correct mapper upon new
+ measurements; however, `addRawMeasurement` provides more flexibility. You can
+ take a look into its usage in `dicom-sr` extension.
+ - `source`: The measurement source instance.
+ - `definition`: The source definition you want to add the measurement to.
+ - `data`: The data you wish to add to the source.
+ - `toMeasurementSchema`: A function to get the `data` into the same shape as
+ the source definition.
+- `jumpToMeasurement(viewportIndex, id)`: calls the listeners who have
+ subscribed to `JUMP_TO_MEASUREMENT`.
## Source / Mappers
-To create a custom measurement source and relevant mappers for each tool, you can take a look
-at the `init.js` inside the `cornerstone` extension. In which we are registering our
-`CornerstoneTools-v4` measurement source to MeasurementService. Let's take a peek at the
-*simplified* implementation together. To achieve this, for each tool, we need to
-provide three mappers:
-- `matchingCriteria`: criteria used for finding the correct mapper for the drawn tool.
+To create a custom measurement source and relevant mappers for each tool, you
+can take a look at the `init.js` inside the `cornerstone` extension. In which we
+are registering our `CornerstoneTools-v4` measurement source to
+MeasurementService. Let's take a peek at the _simplified_ implementation
+together. To achieve this, for each tool, we need to provide three mappers:
+
+- `matchingCriteria`: criteria used for finding the correct mapper for the drawn
+ tool.
- `toAnnotation`: tbd
-- `toMeasurement`: a function that converts the tool data to OHIF internal representation of measurement data.
-
-
-```js
-// extensions/cornerstone/src/utils/measurementServiceMappings/Length.js
+- `toMeasurement`: a function that converts the tool data to OHIF internal
+ representation of measurement data.
+```js title="extensions/cornerstone/src/utils/measurementServiceMappings/Length.js"
function toMeasurement(
csToolsAnnotation,
DisplaySetService,
getValueTypeFromToolType
) {
- const { element, measurementData } = csToolsAnnotation
+ const { element, measurementData } = csToolsAnnotation;
/** ... **/
@@ -92,12 +99,12 @@ function toMeasurement(
FrameOfReferenceUID,
SeriesInstanceUID,
StudyInstanceUID,
- } = getSOPInstanceAttributes(element)
+ } = getSOPInstanceAttributes(element);
const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(
SOPInstanceUID,
SeriesInstanceUID
- )
+ );
/** ... **/
return {
@@ -113,7 +120,7 @@ function toMeasurement(
length: measurementData.length,
type: getValueTypeFromToolType(tool),
points: getPointsFromHandles(measurementData.handles),
- }
+ };
}
//////////////////////////////////////////
@@ -129,7 +136,7 @@ const Length = {
points: 2,
},
],
-}
+};
const _initMeasurementService = (MeasurementService, DisplaySetService) => {
/** ... **/
@@ -151,6 +158,4 @@ const _initMeasurementService = (MeasurementService, DisplaySetService) => {
/** Other tools **/
return csToolsVer4MeasurementSource;
};
-
-
```
diff --git a/docs/latest/services/data/ToolbarService.md b/platform/docs/docs/platform/services/data/ToolbarService.md
similarity index 75%
rename from docs/latest/services/data/ToolbarService.md
rename to platform/docs/docs/platform/services/data/ToolbarService.md
index 8837e1b7d..e9ab5a945 100644
--- a/docs/latest/services/data/ToolbarService.md
+++ b/platform/docs/docs/platform/services/data/ToolbarService.md
@@ -1,50 +1,55 @@
+---
+sidebar_position: 5
+sidebar_label: Toolbar Service
+---
+
# Toolbar Service
-
## Overview
-`ToolbarService` handles the toolbar section buttons, and what happens when a button is clicked by
-the user.
+`ToolbarService` handles the toolbar section buttons, and what happens when a
+button is clicked by the user.
-
-
+
+
+
## Events
-
| Event | Description |
| ----------------------- | ---------------------------------------------------------------------- |
| TOOL_BAR_MODIFIED | Fires when a button is added/removed to the toolbar |
| TOOL_BAR_STATE_MODIFIED | Fires when an interaction happens and ToolbarService state is modified |
-
-
-
## API
-- `recordInteraction(interaction)`: executes the provided interaction which is an object providing the following properties to the ToolbarService:
+- `recordInteraction(interaction)`: executes the provided interaction which is
+ an object providing the following properties to the ToolbarService:
- - `interactionType`: can be `tool`, `toggle` and `action`. We will discuss more each type below.
+ - `interactionType`: can be `tool`, `toggle` and `action`. We will discuss
+ more each type below.
- `itemId`: tool name
- - `groupId`: the Id for the tool button group; e.g., `Wwwc` which holds presets.
+ - `groupId`: the Id for the tool button group; e.g., `Wwwc` which holds
+ presets.
- `commandName`: if tool has a command attached to run
- `commandOptions`: arguments for the command.
-- `reset`: reset the state of the toolbarService, set the primary tool to be `Wwwc` and unsubscribe tools that have registered their functions.
+- `reset`: reset the state of the toolbarService, set the primary tool to be
+ `Wwwc` and unsubscribe tools that have registered their functions.
-- `addButtons`: add the button definition to the service. [See below for button definition](#button-definitions).
+- `addButtons`: add the button definition to the service.
+ [See below for button definition](#button-definitions).
-- `setButtons`: sets the buttons defined in the service. It overrides all the previous buttons
+- `setButtons`: sets the buttons defined in the service. It overrides all the
+ previous buttons
- `getActiveTools`: returns the active tool + all the toggled-on tools
-
-
## State
-ToolbarService has an internal state that gets updated per tool interaction and tracks the
-active toolId, state of the buttons that have toggled state, and the group buttons and which tool
-in each group is active.
+ToolbarService has an internal state that gets updated per tool interaction and
+tracks the active toolId, state of the buttons that have toggled state, and the
+group buttons and which tool in each group is active.
```js
state = {
@@ -55,20 +60,20 @@ state = {
groups: {
/* track most recent click per group...*/
},
-}
+};
```
-
-
## Interaction type
-There are three main types that a tool can have which is defined in the interaction object.
+
+There are three main types that a tool can have which is defined in the
+interaction object.
- `tool`: setting a tool to be active; e.g., measurement tools
- `toggle`: toggling state of a tool; e.g., viewport link (sync)
-- `action`: performs a registered action outside of the ToolbarService; e.g., capture
-
-A *simplified* implementation of the ToolbarService is:
+- `action`: performs a registered action outside of the ToolbarService; e.g.,
+ capture
+A _simplified_ implementation of the ToolbarService is:
```js
export default class ToolBarService {
@@ -77,24 +82,24 @@ export default class ToolBarService {
/** ... **/
switch (interactionType) {
case 'action': {
- break
+ break;
}
case 'tool': {
- this.state.primaryToolId = itemId
+ this.state.primaryToolId = itemId;
- commandsManager.runCommand('setToolActive', interaction.commandOptions)
- break
+ commandsManager.runCommand('setToolActive', interaction.commandOptions);
+ break;
}
case 'toggle': {
this.state.toggles[itemId] =
this.state.toggles[itemId] === undefined
? true
- : !this.state.toggles[itemId]
- interaction.commandOptions.toggledState = this.state.toggles[itemId]
- break
+ : !this.state.toggles[itemId];
+ interaction.commandOptions.toggledState = this.state.toggles[itemId];
+ break;
}
default:
- throw new Error(`Invalid interaction type: ${interactionType}`)
+ throw new Error(`Invalid interaction type: ${interactionType}`);
}
/** ... **/
}
@@ -102,13 +107,11 @@ export default class ToolBarService {
}
```
-
-
## Button Definitions
The simplest toolbarButtons definition has the following properties:
-
+
```js
{
@@ -123,44 +126,38 @@ The simplest toolbarButtons definition has the following properties:
},
```
-
-
-| property | description | values |
-| ---------------- | ----------------------------------------------------------------- | ----------------------------------------- |
-| `id` | Unique string identifier for the definition | \* |
-| `label` | User/display friendly to show in UI | \* |
-| `icon` | A string name for an icon supported by the consuming application. | \* |
-| `type` | Used to determine the button's behaviour | "tool", "toggle", "action" |
+| property | description | values |
+| ---------------- | ----------------------------------------------------------------- | ------------------------------------------- |
+| `id` | Unique string identifier for the definition | \* |
+| `label` | User/display friendly to show in UI | \* |
+| `icon` | A string name for an icon supported by the consuming application. | \* |
+| `type` | Used to determine the button's behaviour | "tool", "toggle", "action" |
| `commandName` | (optional) The command to run when the button is used. | Any command registered by a `CommandModule` |
-| `commandOptions` | (optional) Options to pass the target `commandName` | \* |
-
+| `commandOptions` | (optional) Options to pass the target `commandName` | \* |
There are three main types of toolbar buttons:
-- `tool`: buttons that enable a tool by running the `setToolActive` command with the `commandOptions`
+- `tool`: buttons that enable a tool by running the `setToolActive` command with
+ the `commandOptions`
- `toggle`: buttons that acts as a toggle: e.g., linking viewports
-- `action`: buttons that executes an action: e.g., capture button to save screenshot
-
-
-
-
-
+- `action`: buttons that executes an action: e.g., capture button to save
+ screenshot
## Nested Buttons
-You can use the `ohif.splitButton` type to build a button with extra tools in the dropdown.
+
+You can use the `ohif.splitButton` type to build a button with extra tools in
+the dropdown.
- First you need to give your `primary` tool definition to the split button
- the `secondary` properties can be a simple arrow down (`chevron-down` icon)
- For adding the extra tools add them to the `items` list.
-You can see below how `longitudinal` mode is using the available toolbarModule to create
-`MeasurementTools` nested button
+You can see below how `longitudinal` mode is using the available toolbarModule
+to create `MeasurementTools` nested button
-
-
-```js
-// modes/longitudinal/src/toolbarButtons.js
+
+```js title="modes/longitudinal/src/toolbarButtons.js"
{
id: 'MeasurementTools',
type: 'ohif.splitButton',
diff --git a/platform/docs/docs/platform/services/data/_category_.json b/platform/docs/docs/platform/services/data/_category_.json
new file mode 100644
index 000000000..984ac9a42
--- /dev/null
+++ b/platform/docs/docs/platform/services/data/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Data Services",
+ "position": 2
+}
diff --git a/docs/latest/services/data/index.md b/platform/docs/docs/platform/services/data/index.md
similarity index 63%
rename from docs/latest/services/data/index.md
rename to platform/docs/docs/platform/services/data/index.md
index c49e2edc2..69a88c453 100644
--- a/docs/latest/services/data/index.md
+++ b/platform/docs/docs/platform/services/data/index.md
@@ -1,14 +1,16 @@
-# Services (default)
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
+# Overview
+Data services are the first category of services which deal with handling non-ui
+related state Each services have their own internal state which they handle.
-## Overview
-Data services are the first category of services which deal with handling non-ui related state
-Each services have their own internal state which they handle.
-
-
-> We have replaced the *redux* store. Instead we have introduced various services and a pub/sub pattern to subscribe and run, which makes the `OHIF-v3` architecture nice and clean.
-
+> We have replaced the _redux_ store. Instead we have introduced various
+> services and a pub/sub pattern to subscribe and run, which makes the `OHIF-v3`
+> architecture nice and clean.
We maintain the following non-ui Services:
@@ -18,19 +20,17 @@ We maintain the following non-ui Services:
- [Toolbar Service](../data/ToolbarService.md)
- [Measurement Service](../data/MeasurementService.md)
-
-
-
## Service Architecture
-
+
+> We have explained services and how to create a custom service in the
+> [`ServiceManager`](../../managers/service.md) section of the docs
-> We have explained services and how to create a custom service in the [`ServiceManager`](../../managers/service.md) section of the docs
-
-To recap: The simplest service return a new object that has a `name` property, and `Create` method which instantiate the service class. The "Factory
-Function" that creates the service is provided with the implementation (this is
-slightly different for UI Services).
+To recap: The simplest service return a new object that has a `name` property,
+and `Create` method which instantiate the service class. The "Factory Function"
+that creates the service is provided with the implementation (this is slightly
+different for UI Services).
```js
// extensions/customExtension/src/services/backEndService/index.js
@@ -50,5 +50,4 @@ A service, once created, can be registered with the `ServicesManager` to make it
accessible to extensions. Similarly, the application code can access named
services from the `ServicesManager`.
-
[Read more of how to design a new custom service and register it](../../managers/service.md)
diff --git a/docs/latest/services/_services.md b/platform/docs/docs/platform/services/index.md
similarity index 73%
rename from docs/latest/services/_services.md
rename to platform/docs/docs/platform/services/index.md
index dacfa85b2..93cfd0866 100644
--- a/docs/latest/services/_services.md
+++ b/platform/docs/docs/platform/services/index.md
@@ -1,3 +1,31 @@
+---
+sidebar_position: 1
+sidebar_label: Introduction
+---
+# Services
+
+
+## Overview
+Services are "concern-specific" code modules that can be consumed across layers. Services provide
+a set of operations, often tied to some shared state, and are made available to
+through out the app via the `ServicesManager`. Services are particularly well suited to
+address [cross-cutting concerns][cross-cutting-concerns].
+
+Each service should be:
+
+- self-contained
+- able to fail and/or be removed without breaking the application
+- completely interchangeable with another module implementing the same interface
+
+
+> In `OHIF-v3` we have added multiple non-UI services and have introduced **pub/sub** pattern to reduce coupling between layers.
+>
+> [Read more about Pub/Sub](./pubsub.md)
+
+
+## Services
+The following services is available in the `OHIF-v3`.
+
@@ -130,3 +158,15 @@
+
+
+
+
+
+
+[core-services]: https://github.com/OHIF/Viewers/tree/master/platform/core/src/services
+[services-manager]: https://github.com/OHIF/Viewers/blob/master/platform/core/src/services/ServicesManager.js
+[cross-cutting-concerns]: https://en.wikipedia.org/wiki/Cross-cutting_concern
+
diff --git a/docs/latest/services/pubsub.md b/platform/docs/docs/platform/services/pubsub.md
similarity index 96%
rename from docs/latest/services/pubsub.md
rename to platform/docs/docs/platform/services/pubsub.md
index 7cf6331e1..e81b1ece2 100644
--- a/docs/latest/services/pubsub.md
+++ b/platform/docs/docs/platform/services/pubsub.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 4
+sidebar_label: Pub Sub
+---
# Pub sub
## Overview
@@ -64,8 +68,7 @@ You need to be careful if you are adding custom subscriptions to the app. Each s
Below, we can see `simplified` `Mode.jsx` and the corresponding `useEffect` where the unsubscription functions are executed upon destruction.
-```js
-// platform/viewer/src/routes/Mode/Mode.jsx
+```js title="platform/viewer/src/routes/Mode/Mode.jsx"
export default function ModeRoute(/**..**/) {
/**...**/
useEffect(
diff --git a/docs/latest/services/ui/ViewportGridService.md b/platform/docs/docs/platform/services/ui/ViewportGridService.md
similarity index 80%
rename from docs/latest/services/ui/ViewportGridService.md
rename to platform/docs/docs/platform/services/ui/ViewportGridService.md
index af6991299..06e048a2f 100644
--- a/docs/latest/services/ui/ViewportGridService.md
+++ b/platform/docs/docs/platform/services/ui/ViewportGridService.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 6
+sidebar_label: Viewport Grid Service
+---
# Viewport Grid Service
@@ -6,8 +10,6 @@ This is a new UI service, that handles the grid layout of the viewer.
-
-
## Interface
diff --git a/platform/docs/docs/platform/services/ui/_category_.json b/platform/docs/docs/platform/services/ui/_category_.json
new file mode 100644
index 000000000..9c012134e
--- /dev/null
+++ b/platform/docs/docs/platform/services/ui/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "UI Services",
+ "position": 3
+}
diff --git a/docs/latest/services/ui/index.md b/platform/docs/docs/platform/services/ui/index.md
similarity index 77%
rename from docs/latest/services/ui/index.md
rename to platform/docs/docs/platform/services/ui/index.md
index 13bbe4e6a..63ffea903 100644
--- a/docs/latest/services/ui/index.md
+++ b/platform/docs/docs/platform/services/ui/index.md
@@ -1,8 +1,9 @@
-# UI Services
-
-
-## Overview
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
+# Overview
-
-
A typical web application will have components and state for common UI like
modals, notifications, dialogs, etc. A UI service makes it possible to leverage
these components from an extension.
@@ -23,17 +22,17 @@ We maintain the following UI Services:
- [UI Modal Service](ui-modal-service.md)
- [UI Dialog Service](ui-dialog-service.md)
- [UI Viewport Dialog Service](ui-viewport-dialog-service.md)
-- [Cine Service](cine.md)
+- Cine Service
- [Viewport Grid Service](ViewportGridService.md)
-
-
-
+
+
+
-
## Providers for UI services
-There are several context providers that wraps the application routes. This
-makes the context values exposed in the app, and service's `setImplementation` can get run to override the implementation of the service.
-```js
-// platform/viewer/src/App.jsx
+**There are several context providers that wraps the application routes. This
+makes the context values exposed in the app, and service's `setImplementation`
+can get run to override the implementation of the service.**
+```js title="platform/viewer/src/App.jsx"
function App({ config, defaultExtensions }) {
/**...**/
/**...**/
@@ -80,7 +78,7 @@ function App({ config, defaultExtensions }) {
/**...**/
- )
+ );
}
```
@@ -88,45 +86,42 @@ function App({ config, defaultExtensions }) {
For instance `UIModalService` has the following Public API:
-```js
-// platform/core/src/services/UIModalService/index.js
-
+```js title="platform/core/src/services/UIModalService/index.js"
const publicAPI = {
name,
hide: _hide,
show: _show,
setServiceImplementation,
-}
+};
function setServiceImplementation({
hide: hideImplementation,
show: showImplementation,
}) {
/** ... **/
- serviceImplementation._hide = hideImplementation
- serviceImplementation._show = showImplementation
+ serviceImplementation._hide = hideImplementation;
+ serviceImplementation._show = showImplementation;
/** ... **/
}
export default {
name: 'UIModalService',
create: ({ configuration = {} }) => {
- return publicAPI
+ return publicAPI;
},
-}
+};
```
-`UIModalService` implementation can be set (override) in its context provider. For instance in `ModalProvider` we have:
+`UIModalService` implementation can be set (override) in its context provider.
+For instance in `ModalProvider` we have:
-```js
-// platform/ui/src/contextProviders/ModalProvider.jsx
+```js title="platform/ui/src/contextProviders/ModalProvider.jsx"
+import { Modal } from '@ohif/ui';
-import { Modal } from '@ohif/ui'
+const ModalContext = createContext(null);
+const { Provider } = ModalContext;
-const ModalContext = createContext(null)
-const { Provider } = ModalContext
-
-export const useModal = () => useContext(ModalContext)
+export const useModal = () => useContext(ModalContext);
const ModalProvider = ({ children, modal: Modal, service }) => {
const DEFAULT_OPTIONS = {
@@ -137,20 +132,21 @@ const ModalProvider = ({ children, modal: Modal, service }) => {
closeButton: true,
title: null,
customClassName: '',
- }
+ };
- const show = useCallback(
- (props) => setOptions({ ...options, ...props }),
- [options]
- )
+ const show = useCallback(props => setOptions({ ...options, ...props }), [
+ options,
+ ]);
- const hide = useCallback(() => setOptions(DEFAULT_OPTIONS), [DEFAULT_OPTIONS])
+ const hide = useCallback(() => setOptions(DEFAULT_OPTIONS), [
+ DEFAULT_OPTIONS,
+ ]);
useEffect(() => {
if (service) {
- service.setServiceImplementation({ hide, show })
+ service.setServiceImplementation({ hide, show });
}
- }, [hide, service, show])
+ }, [hide, service, show]);
const {
content: ModalContent,
@@ -160,7 +156,7 @@ const ModalProvider = ({ children, modal: Modal, service }) => {
customClassName,
shouldCloseOnEsc,
closeButton,
- } = options
+ } = options;
return (
@@ -178,23 +174,23 @@ const ModalProvider = ({ children, modal: Modal, service }) => {
)}
{children}
- )
-}
+ );
+};
-export default ModalProvider
+export default ModalProvider;
-export const ModalConsumer = ModalContext.Consumer
+export const ModalConsumer = ModalContext.Consumer;
```
-Therefore, anywhere in the app that we have access to react context we can use it by calling the `useModal` from `@ohif/ui`. As a matter of fact, we are utilizing the modal for the preference window which shows the hotkeys after clicking on the gear button on the right side of the header.
+Therefore, anywhere in the app that we have access to react context we can use
+it by calling the `useModal` from `@ohif/ui`. As a matter of fact, we are
+utilizing the modal for the preference window which shows the hotkeys after
+clicking on the gear button on the right side of the header.
A `simplified` code for our worklist is:
-
-```js
-// platform/viewer/src/routes/WorkList/WorkList.jsx
-
-import { useModal, Header } from '@ohif/ui'
+```js title="platform/viewer/src/routes/WorkList/WorkList.jsx"
+import { useModal, Header } from '@ohif/ui';
function WorkList({
history,
@@ -204,7 +200,7 @@ function WorkList({
dataSource,
hotkeysManager,
}) {
- const { show, hide } = useModal()
+ const { show, hide } = useModal();
/** ... **/
@@ -222,23 +218,24 @@ function WorkList({
title: t('UserPreferencesModal:User Preferences'),
content: UserPreferences,
contentProps: {
- hotkeyDefaults:
- hotkeysManager.getValidHotkeyDefinitions(hotkeyDefaults),
+ hotkeyDefaults: hotkeysManager.getValidHotkeyDefinitions(
+ hotkeyDefaults
+ ),
hotkeyDefinitions,
onCancel: hide,
currentLanguage: currentLanguage(),
availableLanguages,
defaultLanguage,
- onSubmit: (state) => {
- i18n.changeLanguage(state.language.value)
- hotkeysManager.setHotkeys(state.hotkeyDefinitions)
- hide()
+ onSubmit: state => {
+ i18n.changeLanguage(state.language.value);
+ hotkeysManager.setHotkeys(state.hotkeyDefinitions);
+ hide();
},
onReset: () => hotkeysManager.restoreDefaultBindings(),
},
}),
},
- ]
+ ];
/** ... **/
return (
@@ -246,12 +243,10 @@ function WorkList({
/** ... **/
- )
+ );
}
```
-
-
diff --git a/docs/latest/services/ui/ui-dialog-service.md b/platform/docs/docs/platform/services/ui/ui-dialog-service.md
similarity index 96%
rename from docs/latest/services/ui/ui-dialog-service.md
rename to platform/docs/docs/platform/services/ui/ui-dialog-service.md
index 2cc000e2c..152841ae6 100644
--- a/docs/latest/services/ui/ui-dialog-service.md
+++ b/platform/docs/docs/platform/services/ui/ui-dialog-service.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 4
+sidebar_label: UI Dialog Service
+---
# UI Dialog Service
Dialogs have similar characteristics to that of Modals, but often with a
diff --git a/docs/latest/services/ui/ui-modal-service.md b/platform/docs/docs/platform/services/ui/ui-modal-service.md
similarity index 79%
rename from docs/latest/services/ui/ui-modal-service.md
rename to platform/docs/docs/platform/services/ui/ui-modal-service.md
index e6c208d3e..cb36d7e6c 100644
--- a/docs/latest/services/ui/ui-modal-service.md
+++ b/platform/docs/docs/platform/services/ui/ui-modal-service.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+sidebar_label: UI Modal Service
+---
# UI Modal Service
Modals have similar characteristics to that of Dialogs, but are often larger,
@@ -11,7 +15,10 @@ be centered, and not draggable. They're commonly used when:
If you're curious about the DOs and DON'Ts of dialogs and modals, check out this
article: ["Best Practices for Modals / Overlays / Dialog Windows"][ux-article]
-
+
+
+
+
## Interface
diff --git a/docs/latest/services/ui/ui-notification-service.md b/platform/docs/docs/platform/services/ui/ui-notification-service.md
similarity index 81%
rename from docs/latest/services/ui/ui-notification-service.md
rename to platform/docs/docs/platform/services/ui/ui-notification-service.md
index a806e3c7c..961859434 100644
--- a/docs/latest/services/ui/ui-notification-service.md
+++ b/platform/docs/docs/platform/services/ui/ui-notification-service.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 2
+sidebar_label: UI Notification Service
+---
# UI Notification Service
Notifications can be annoying and disruptive. They can also deliver timely
@@ -12,7 +16,13 @@ guidance on when and how to use them:
If you're curious about the DOs and DON'Ts of notifications, check out this
article: ["How To Design Notifications For Better UX"][ux-article]
-
+
+
+
+
+
+
+
## Interface
For a more detailed look on the options and return values each of these methods
diff --git a/docs/latest/services/ui/ui-viewport-dialog-service.md b/platform/docs/docs/platform/services/ui/ui-viewport-dialog-service.md
similarity index 79%
rename from docs/latest/services/ui/ui-viewport-dialog-service.md
rename to platform/docs/docs/platform/services/ui/ui-viewport-dialog-service.md
index fa63326d9..737042845 100644
--- a/docs/latest/services/ui/ui-viewport-dialog-service.md
+++ b/platform/docs/docs/platform/services/ui/ui-viewport-dialog-service.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 5
+sidebar_label: UI Viewport Dialog Service
+---
+
# UI Viewport Dialog Service
## Overview
@@ -15,8 +20,9 @@ article: ["Best Practices for Modals / Overlays / Dialog Windows"][ux-article]
-
-
+
+
+
## Interface
diff --git a/docs/latest/viewer/themeing.md b/platform/docs/docs/platform/themeing.md
similarity index 70%
rename from docs/latest/viewer/themeing.md
rename to platform/docs/docs/platform/themeing.md
index abe20ac4e..48a881c20 100644
--- a/docs/latest/viewer/themeing.md
+++ b/platform/docs/docs/platform/themeing.md
@@ -1,20 +1,23 @@
+---
+sidebar_position: 2
+sidebar_label: Theming
+---
+
# Viewer: Theming
-
-`OHIF-v3` has introduced the [`LayoutTemplateModule`](../extensions/modules/layout-template.md) which enables addition of custom layouts. You can easily design your custom components inside an extension and consume it via the layoutTemplate module you write.
-
-
-
+`OHIF-v3` has introduced the
+[`LayoutTemplateModule`](./extensions/modules/layout-template.md) which enables
+addition of custom layouts. You can easily design your custom components inside
+an extension and consume it via the layoutTemplate module you write.
## Tailwind CSS
-[Tailwind CSS](https://tailwindcss.com/) is a utility-first CSS framework for creating custom user interfaces.
-
-
-Below you can see a compiled version of the tailwind configs.
-Each section can be edited accordingly. For instance screen size break points, primary
-and secondary colors, etc.
+[Tailwind CSS](https://tailwindcss.com/) is a utility-first CSS framework for
+creating custom user interfaces.
+Below you can see a compiled version of the tailwind configs. Each section can
+be edited accordingly. For instance screen size break points, primary and
+secondary colors, etc.
```js
module.exports = {
@@ -75,13 +78,11 @@ module.exports = {
},
},
},
-}
+};
```
-
You can also use the color variable like before. For instance:
-
```js
primary: {
default: ‘var(--default-color)‘,
@@ -92,19 +93,22 @@ primary: {
}
```
-
## White Labeling
-A white-label product is a product or service produced by one company (the producer) that other companies (the marketers) rebrand to make it appear as if they had made it - [Wikipedia: White-Label Product](https://en.wikipedia.org/wiki/White-label_product)
+A white-label product is a product or service produced by one company (the
+producer) that other companies (the marketers) rebrand to make it appear as if
+they had made it -
+[Wikipedia: White-Label Product](https://en.wikipedia.org/wiki/White-label_product)
-Current white-labeling options are limited.
-We expose the ability to replace the "Logo" section of the application with a custom "Logo" component. You can do this by adding a whiteLabeling key to your configuration file.
+Current white-labeling options are limited. We expose the ability to replace the
+"Logo" section of the application with a custom "Logo" component. You can do
+this by adding a whiteLabeling key to your configuration file.
```js
window.config = {
/** .. **/
whiteLabeling: {
- createLogoComponentFn: function (React) {
+ createLogoComponentFn: function(React) {
return React.createElement(
'a',
{
@@ -114,24 +118,22 @@ window.config = {
href: 'http://radicalimaging.com',
},
React.createElement('h5', {}, 'RADICAL IMAGING')
- )
+ );
},
},
/** .. **/
-}
+};
```
> You can simply use the stylings from tailwind CSS in the whiteLabeling
-
In addition to text, you can also add your custom logo
-
```js
window.config = {
/** .. **/
whiteLabeling: {
- createLogoComponentFn: function (React) {
+ createLogoComponentFn: function(React) {
return React.createElement(
'a',
{
@@ -144,20 +146,17 @@ window.config = {
src: './customLogo.svg',
// className: 'w-8 h-8',
})
- )
+ );
},
},
/** .. **/
-}
+};
```
The output will look like
-

-
-
diff --git a/platform/docs/docs/user-guide/_category_.json b/platform/docs/docs/user-guide/_category_.json
new file mode 100644
index 000000000..68ea78e78
--- /dev/null
+++ b/platform/docs/docs/user-guide/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "User Guide",
+ "position": 2
+}
diff --git a/platform/docs/docs/user-guide/index.md b/platform/docs/docs/user-guide/index.md
new file mode 100644
index 000000000..af897213e
--- /dev/null
+++ b/platform/docs/docs/user-guide/index.md
@@ -0,0 +1,83 @@
+---
+sidebar_position: 2
+sidebar_label: Study List
+---
+
+# Study List
+
+## Overview
+
+The first page you will see when the viewer is loaded is the `Study List`. In
+this page you can explore all the studies that are stored on the configured
+server for the `OHIF Viewer`.
+
+
+
+## Sorting
+
+When the Study List is opened, the application queries the PACS for 101 studies
+by default. If there are greater than 100 studies returned, the default sort for
+the study list is dictated by the image archive that hosts these studies for the
+viewer and study list sorting will be disabled. If there are less than or equal
+to 100 studies returned, they will be sorted by study date (most recent to
+oldest) and study list sorting will be enabled. Whenever a query returns greater
+than 100 studies, use filters to narrow results below 100 studies to enable
+Study List sorting.
+
+## Filters
+
+There are certain filters that can be used to limit the study list to the
+desired criteria.
+
+- Patient Name: Searches between patients names
+- MRN: Searches between patients Medical Record Number
+- Study Data: Filters the date of the acquisition
+- Description: Searches between study descriptions
+- Modality: Filters the modalities
+- Accession: Searches between patients accession number
+
+An example of using study list filter is shown below:
+
+
+
+Below the study list are pagination options for 25, 50, or 100 studies per page.
+
+
+
+## Study Summary
+
+Click on a study to expand the study summary panel.
+
+
+
+A summary of series available in the study is shown, which contains the series
+description, series number, modality of the series, instances in the series, and
+buttons to launch viewer modes to display the study.
+
+## Study Specific Modes
+
+All available modes are seen in the study expanded view. Modes can be enabled or
+disabled for a study based on the modalities contained within the study.
+
+In the screenshot below, there are two modes shown for the selected study
+
+- Basic Viewer: Default mode that enables rendering and measurement tracking
+
+- PET/CT Fusion: Mode for visualizing the PET CT study in a 3x3 format.
+
+Based on the mode configurations (e.g., available modalities), PET/CT mode is
+disabled for studies that do not contain PET AND CT images.
+
+
+
+
+
+The previous screenshot shows a study containing PET and CT images and both
+Basic Viewer and PET/CT Mode are available.
+
+## View Study
+
+The `Basic Viewer` mode is available for all studies by default. Click on the
+mode button to launch the viewer.
+
+
diff --git a/platform/docs/docs/user-guide/viewer/Language.md b/platform/docs/docs/user-guide/viewer/Language.md
new file mode 100644
index 000000000..9032ecc5f
--- /dev/null
+++ b/platform/docs/docs/user-guide/viewer/Language.md
@@ -0,0 +1,22 @@
+---
+sidebar_position: 8
+---
+
+# Language
+
+OHIF supports internationalization capabilities and setting the general language
+of the Viewer.
+
+It should be noted that we don't have complete translations for all the components
+and all the languages; however, you can easily add the key value translation pairs
+following developer guides.
+
+Summary of language changing usage can be seen below:
+
+
+
+## Overview Video
+
+
+
+
diff --git a/platform/docs/docs/user-guide/viewer/_category_.json b/platform/docs/docs/user-guide/viewer/_category_.json
new file mode 100644
index 000000000..417861dba
--- /dev/null
+++ b/platform/docs/docs/user-guide/viewer/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Basic Viewer",
+ "position": 2
+}
diff --git a/docs/latest/userManuals/viewer/Hotkeys/hotkeys.md b/platform/docs/docs/user-guide/viewer/hotkeys.md
similarity index 54%
rename from docs/latest/userManuals/viewer/Hotkeys/hotkeys.md
rename to platform/docs/docs/user-guide/viewer/hotkeys.md
index c68a9d155..0ad345e70 100644
--- a/docs/latest/userManuals/viewer/Hotkeys/hotkeys.md
+++ b/platform/docs/docs/user-guide/viewer/hotkeys.md
@@ -1,10 +1,14 @@
+---
+sidebar_position: 7
+---
+
# Hotkeys
To open the hotkey assignment panel, you can click on the Preferences gear on the
top right side of the viewer.
-
+
Below, you can see the default hotkeys key bindings:
-
+
diff --git a/docs/latest/userManuals/viewer/index.md b/platform/docs/docs/user-guide/viewer/index.md
similarity index 76%
rename from docs/latest/userManuals/viewer/index.md
rename to platform/docs/docs/user-guide/viewer/index.md
index c7f20d8df..4e674a359 100644
--- a/docs/latest/userManuals/viewer/index.md
+++ b/platform/docs/docs/user-guide/viewer/index.md
@@ -1,10 +1,7 @@
-# Viewer
-- [Viewer](./index.md)
- - [Overview](./index.md#overview)
- - [Study Panel](./studyPanel/study-panel.md)
- - [Measurement Panel](./measurementPanel/measurement-panel.md)
- - [Toolbar](./toolbar/toolbar.md)
- - [HotKeys](./hotkeys/hotkeys.md)
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
# Overview
diff --git a/platform/docs/docs/user-guide/viewer/measurement-panel.md b/platform/docs/docs/user-guide/viewer/measurement-panel.md
new file mode 100644
index 000000000..3e0488d4f
--- /dev/null
+++ b/platform/docs/docs/user-guide/viewer/measurement-panel.md
@@ -0,0 +1,74 @@
+---
+sidebar_position: 3
+---
+
+# Measurement Panel
+
+## Introduction
+In `Basic Viewer` mode, the right panel is the `Measurement Panel`. The Measurement Panel can be expanded or hidden by clicking on the arrow to the left of `Measurements`.
+
+Select a measurement tool and mark an image to initiate measurement tracking. A pop up will ask if you want to track measurements for the series on which the annotation was drawn.
+
+
+
+If you select `Yes`, the series becomes a `tracked series`, and the current drawn measurement and next measurements will get shown up on the measurement panel on the right.
+
+
+
+
+If you select `No`, the measurement becomes temporary. The next annotation made will repeat the measurement tracking prompt.
+
+If you select `No, do not ask again`, all annotations made on the study will be temporary.
+
+
+## Labeling Measurements
+You can edit the measurement name by hovering over the measurement and selecting the edit icon. You can also label or relabel a measurement by right-clicking on it in the viewport.
+
+
+
+
+
+
+Result:
+
+
+
+
+## Deleting a Measurement
+A measurement can be deleting by dragging it outside the image in the viewport or by right-clicking on the measurement in the viewport and selecting 'Delete'.
+
+
+## Jumping to a Measurement
+Measurement navigation inside the top viewport can be used to move to previous and next measurement.
+
+
+
+If a series containing a measurement is currently being displayed in a viewport, you can jump to display the measurement in the viewport by clicking on it in the Measurement Panel.
+
+## Export Measurements
+
+You can export the measurements by clicking on the `Export`. A CSV file will get downloaded to your local computer containing the drawn measurements.
+
+
+
+
+
+If you have set up your DICOM server to be able to store instances from the viewer, then you are able to create a report by clicking on the `Create Report`.
+This will create a DICOM Structured Report (SR) from the measurements and push it
+to the server.
+
+For instance, running the Viewer on a local DCM4CHEE:
+
+
+
+
+
+
+
+## Overview Video
+An overview of measurement drawing and exporting can be seen below:
+
+
+
+
+
diff --git a/platform/docs/docs/user-guide/viewer/measurement-tracking.md b/platform/docs/docs/user-guide/viewer/measurement-tracking.md
new file mode 100644
index 000000000..d1df1dd8f
--- /dev/null
+++ b/platform/docs/docs/user-guide/viewer/measurement-tracking.md
@@ -0,0 +1,124 @@
+---
+sidebar_position: 4
+---
+
+# Measurement Tracking
+
+## Introduction
+OHIF-V3's `Basic Viewer` implements a `Measurement Tracking` workflow. Measurement
+tracking allows you to:
+
+- Draw annotations and have them shown in the measurement panel
+- Create a report from the tracked measurement and export them as DICOM SR
+- Use already exported DICOM SR to re-hydrate the measurements in the viewer
+
+
+## Status Icon
+Each viewport has a left icon indicating whether the series within the viewport
+contains:
+
+- tracked measurement OR
+- untracked measurement OR
+- Structured Report OR
+- Locked (uneditable) Structured Report
+
+In the following, we will discuss each category.
+
+### Tracked vs Untracked Measurements
+
+`OHIF-v3` implements a workflow for measurement tracking that can be seen below.
+
+
+
+In summary, when you create an annotation, a prompt will be shown whether to start tracking or not. If you start the tracking, the annotation style will change to a solid line, and annotation details get displayed on the measurement panel.
+On the other hand, if you decline the tracking pormpt, the measurement will be considered "temporary," and annotation style remains as a dashed line and not shown on the right panel, and cannot be exported.
+
+
+Below, you can see different icons that appear for a tracked vs. untracked series in
+`OHIF-v3`.
+
+
+
+
+
+#### Overview video for starting the tracking for measurements:
+
+
+
+
+
+
+
+
+
+#### Overview video for not starting tracking for measurements:
+
+
+
+
+
+
+
+### Reading and Writing DICOM SR
+
+`OHIF-v3` provides full support for reading, writing and mapping the DICOM Structured
+Report (SR) to interactable `Cornerstone Tools`. When you load an already exported
+DICOM SR into the viewer, you will be prompted whether to track the measurements
+for the series or not.
+
+
+
+If you click Yes, DICOM SR measurements gets re-hydrated into the viewer and
+the series become a tracked series. However, If you say no and later decide to say track the measurements, you can always click on the SR button that will prompt you
+with the same message again.
+
+
+
+The full workflow for saving measurements to SR and loading SR into the viewer is shown below.
+
+
+
+
+
+#### Overview video for loading DICOM SR and making a tracked sereis:
+
+
+
+
+
+
+
+
+#### Overview video for loading DICOM SR and not making a tracked series:
+
+
+
+
+
+
+
+
+
+
+
+
+### Loading DICOM SR into an Already Tracked Series
+
+If you have an already tracked series and try to load a DICOM SR measurements,
+you will be shown the following lock icon. This means that, you can review the
+DICOM SR measurement, manipulate image and draw "temporary" measurements; however,
+you cannot edit the DICOM SR measurement.
+
+
+
+
+
+
+
+#### Overview video for loading DICOM SR inside an already tracked sereis:
+
+
+
+
+
+
diff --git a/platform/docs/docs/user-guide/viewer/study-panel.md b/platform/docs/docs/user-guide/viewer/study-panel.md
new file mode 100644
index 000000000..1b5190ffa
--- /dev/null
+++ b/platform/docs/docs/user-guide/viewer/study-panel.md
@@ -0,0 +1,32 @@
+---
+sidebar_position: 2
+---
+
+# Study Panel
+
+In `Basic Viewer` mode, the left panel includes Studies related to the current
+patient. You can see three main type of studies below
+
+- Primary: The opened study from the study list. This study is always expanded
+ by default.
+- Recent: All studies for the patient that contain study dates within 1 year of
+ the primary study
+- All: All studies available for the patient contained within the source
+ repository
+
+The `Study Panel` displays the measurement tracking status of each series within
+a study. As you can see in the first picture, the dashed circle on the left side
+of each series demonstrates whether the series is being tracked for measurement
+or not.
+
+
+
+
+
+Studies can be expanded or collapsed by clicking on the study information in the
+Study Panel. If a series is being tracking within a study, the Measurement Panel
+will display this information while the study is collapsed.
+
+
+
+
diff --git a/platform/docs/docs/user-guide/viewer/toolbar.md b/platform/docs/docs/user-guide/viewer/toolbar.md
new file mode 100644
index 000000000..b6e5ca1ad
--- /dev/null
+++ b/platform/docs/docs/user-guide/viewer/toolbar.md
@@ -0,0 +1,84 @@
+---
+sidebar_position: 6
+---
+
+
+# Toolbar
+
+The four main components of the toolbar are:
+
+- Navigation back to the [Study List](../index.md)
+- Logo and white labelling
+- [Tools](#tools)
+- [Preferences](#preferences)
+
+
+
+
+## Tools
+This section displays all the available tools inside the mode.
+## Measurement tools
+The basic viewer comes with the following default measurement tools:
+
+- Length Tool: Calculates the linear distance between two points in *mm*
+- Bidirectional Tool: Creates a measurement of longest diameter (LD) and longest perpendicular diameter (LPD) in *mm*
+- Annotation: Used to create a qualitative marker with a freetext label
+- Ellipse: Measures an ellipical area in *mm2* and Hounsfield Units (HU)
+
+When a measurement tool is selected from the toolbar, it becomes the `active` tool. Use the caret to expand the measurement tools and select another tool.
+
+
+
+
+
+## Window/Level
+The `Window/Level` tool enables manipulating the window level and window width of the rendered image. Click on the tool to enable freeform adjustment, then click and drag on the viewport to freely adjust the window/level.
+
+Click on the caret to expand the tool and choose from predefined W/L settings for common imaging scenarios.
+
+
+
+
+
+## Pan and Zoom
+With the Zoom tool selected, click and drag the cursor on an image to adjust the zoom. The magnification level is displayed in the viewport.
+
+With the Pan tool selected, click and drag the cursor on an image to adjust the image position.
+
+## Image Capture
+Click on the Camera icon to download a high quality image capture using common image formats (png, jpg)
+
+
+
+In the opened modal, the filename, image's width and height, and filetype and can be configured before downloading the image to your local computer.
+
+
+
+
+
+## Layout Selector
+Please see the `Viewport` section for details.
+
+
+## More Tools Menu
+- Reset View: Resets all image manipulation such as position, zoom, and W/L
+- Rotate Right: Flips the image 90 degrees clockwise
+- Flip Horizontally: Flips the image 180 degrees horizontally
+- Stack Scroll: Links all viewports containing images to scroll together
+- Magnify: Click on an image to magnify a particular area of interest
+- Invert: Inverts the colorscale
+- Cine: Toggles the Cine player control in the currently selected viewport. Click the `x` on the Cine player or click the tool again to toggle off.
+- Angle: Measures an adjustable angle on an image
+
+- Rectangle: Measures a rectangular area in mm^2 and HU
+
+When a tool is selected from the `More Tools` menu, it becomes the active tool until it is replaced by clicking on a different tool in the More Tools menu or main toolbar.
+
+
+## Overview Video
+An overview of tool usage can been seen below:
+
+
+
+
+
diff --git a/docs/latest/userManuals/viewer/Viewport/viewport.md b/platform/docs/docs/user-guide/viewer/viewport.md
similarity index 60%
rename from docs/latest/userManuals/viewer/Viewport/viewport.md
rename to platform/docs/docs/user-guide/viewer/viewport.md
index d3164a172..47175e61c 100644
--- a/docs/latest/userManuals/viewer/Viewport/viewport.md
+++ b/platform/docs/docs/user-guide/viewer/viewport.md
@@ -1,9 +1,13 @@
+---
+sidebar_position: 5
+---
+
# Viewport
Image visualization happens at the viewport which contains canvas or canvases that
renders series.
-
+
By default you can modify:
@@ -13,22 +17,23 @@ By default you can modify:
- Pan: middle click dragging
-
-# Changing Series for display
+## Changing Series for display
To change the displayed series, you can drag and drop the desired series from the left panel. Start, by dragging the thumbnail of the series, and drop it on the viewport.
-
-# Changing Layout
+## Changing Layout
If you click on the layout icon on the toolbar, you can use the layout selector UI. After changing the layout, you can select studies for each new viewport by dragging and dropping in to the viewport.
After changing the layout from 1x1, you will see each viewport gets tagged by a letter,
which matches its series section in the study list.
-
+
+
-# Overview video
+## Overview Video
An overview of viewport layout change, and manipulation can be seen below:
-
+
+
+
diff --git a/platform/docs/docusaurus.config.js b/platform/docs/docusaurus.config.js
new file mode 100644
index 000000000..cbc79e3ef
--- /dev/null
+++ b/platform/docs/docusaurus.config.js
@@ -0,0 +1,427 @@
+/**
+ * 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');
+const versions = require('./versions.json');
+
+// This probably only makes sense for the beta phase, temporary
+function getNextBetaVersionName() {
+ const expectedPrefix = '';
+
+ const lastReleasedVersion = versions[0];
+ if (!lastReleasedVersion.includes(expectedPrefix)) {
+ throw new Error(
+ 'this code is only meant to be used during the 2.0 beta phase.'
+ );
+ }
+ const version = parseInt(lastReleasedVersion.replace(expectedPrefix, ''), 10);
+ return `${expectedPrefix}${version + 1}`;
+}
+
+const allDocHomesPaths = [
+ '/docs/',
+ '/docs/next/',
+ ...versions.slice(1).map(version => `/docs/${version}/`),
+];
+
+const isDev = process.env.NODE_ENV === 'development';
+
+const isDeployPreview =
+ process.env.NETLIFY && process.env.CONTEXT === 'deploy-preview';
+
+const baseUrl = process.env.BASE_URL || '/';
+const isBootstrapPreset = process.env.DOCUSAURUS_PRESET === 'bootstrap';
+
+// Special deployment for staging locales until they get enough translations
+// https://app.netlify.com/sites/docusaurus-i18n-staging
+// https://docusaurus-i18n-staging.netlify.app/
+const isI18nStaging = process.env.I18N_STAGING === 'true';
+
+// const isVersioningDisabled = !!process.env.DISABLE_VERSIONING || isI18nStaging;
+
+/** @type {import('@docusaurus/types').DocusaurusConfig} */
+(module.exports = {
+ title: 'OHIF',
+ tagline: 'Open-source web-based medical imaging viewer',
+ organizationName: 'Open Health Imaging Foundation',
+ projectName: 'OHIF',
+ baseUrl,
+ baseUrlIssueBanner: true,
+ url: 'https://ohif.org',
+ i18n: {
+ defaultLocale: 'en',
+ locales: isDeployPreview
+ ? // Deploy preview: keep it fast!
+ ['en']
+ : isI18nStaging
+ ? // Staging locales: https://docusaurus-i18n-staging.netlify.app/
+ ['en']
+ : // Production locales
+ ['en'],
+ },
+ onBrokenLinks: 'warn',
+ onBrokenMarkdownLinks: 'warn',
+ favicon: 'img/favicon.ico',
+ // customFields: {
+ // description:
+ // 'An optimized site generator in React. Docusaurus helps you to move fast and write content. Build documentation websites, blogs, marketing pages, and more.',
+ // },
+ themes: ['@docusaurus/theme-live-codeblock'],
+ plugins: [
+ path.resolve(__dirname, './pluginOHIFWebpackConfig.js'),
+ 'plugin-image-zoom', // 3rd party plugin for image click to pop
+ [
+ '@docusaurus/plugin-client-redirects',
+ {
+ fromExtensions: ['html'],
+ redirects: [
+ {
+ // we need this for https://cloud.google.com/healthcare/docs/how-tos/dicom-viewers
+ to: '/deployment/recipes/google-cloud-healthcare',
+ from: [
+ '/connecting-to-image-archives/google-cloud-healthcare',
+ '/connecting-to-image-archives/google-cloud-healthcare.html',
+ ],
+ },
+ ],
+ // createRedirects: function(path) {
+ // // redirect to /docs from /docs/introduction,
+ // // as introduction has been made the home doc
+ // // if (allDocHomesPaths.includes(path)) {
+ // // return [`${path}/introduction`];
+ // // }
+ // if (path.includes("/connecting-to-image-archives/google-cloud-healthcare")) {
+ // return ["/deployment/recipes/google-cloud-healthcare"]
+ // }
+ // },
+ // redirects: [
+ // {
+ // from: ['/'],
+ // to: '/docs',
+ // },
+ // {
+ // from: ['/docs/support', '/docs/next/support'],
+ // to: '/community/support',
+ // },
+ // {
+ // from: ['/docs/team', '/docs/next/team'],
+ // to: '/community/team',
+ // },
+ // {
+ // from: ['/docs/resources', '/docs/next/resources'],
+ // to: '/community/resources',
+ // },
+ // ],
+ },
+ ],
+ [
+ '@docusaurus/plugin-ideal-image',
+ {
+ quality: 70,
+ max: 1030, // max resized image's size.
+ min: 640, // min resized image's size. if original is lower, use that size.
+ steps: 2, // the max number of images generated between min and max (inclusive)
+ },
+ ],
+ // [
+ // '@docusaurus/plugin-pwa',
+ // {
+ // debug: isDeployPreview,
+ // offlineModeActivationStrategies: [
+ // 'appInstalled',
+ // 'standalone',
+ // 'queryString',
+ // ],
+ // // swRegister: false,
+ // // swCustom: path.resolve(__dirname, 'src/sw.js'),
+ // pwaHead: [
+ // {
+ // tagName: 'link',
+ // rel: 'icon',
+ // href: 'img/docusaurus.png',
+ // },
+ // {
+ // tagName: 'link',
+ // rel: 'manifest',
+ // href: `${baseUrl}manifest.json`,
+ // },
+ // {
+ // tagName: 'meta',
+ // name: 'theme-color',
+ // content: 'rgb(37, 194, 160)',
+ // },
+ // {
+ // tagName: 'meta',
+ // name: 'apple-mobile-web-app-capable',
+ // content: 'yes',
+ // },
+ // {
+ // tagName: 'meta',
+ // name: 'apple-mobile-web-app-status-bar-style',
+ // content: '#000',
+ // },
+ // {
+ // tagName: 'link',
+ // rel: 'apple-touch-icon',
+ // href: 'img/docusaurus.png',
+ // },
+ // {
+ // tagName: 'link',
+ // rel: 'mask-icon',
+ // href: 'img/docusaurus.svg',
+ // color: 'rgb(62, 204, 94)',
+ // },
+ // {
+ // tagName: 'meta',
+ // name: 'msapplication-TileImage',
+ // content: 'img/docusaurus.png',
+ // },
+ // {
+ // tagName: 'meta',
+ // name: 'msapplication-TileColor',
+ // content: '#000',
+ // },
+ // ],
+ // },
+ // ],
+ [
+ 'docusaurus-plugin-react-docgen',
+ {
+ // pass in a single string or an array of strings
+ //id: 'docgen-button',
+ src: ['../ui/src/components/**/*.jsx'],
+ global: true,
+ /*route: {
+ path: '/docs/api',
+ component: require.resolve('./ComponentDocPage.jsx'),
+ exact: true,
+ },*/
+ },
+ ],
+ ],
+ presets: [
+ [
+ isBootstrapPreset
+ ? '@docusaurus/preset-bootstrap'
+ : '@docusaurus/preset-classic',
+ {
+ debug: true, // force debug plugin usage
+ docs: {
+ routeBasePath: '/',
+ path: 'docs',
+ sidebarPath: require.resolve('./sidebars.js'),
+ editUrl: ({ locale, docPath }) => {
+ if (locale !== 'en') {
+ return `https://crowdin.com/project/docusaurus-v2/${locale}`;
+ }
+ // We want users to submit doc updates to the upstream/next version!
+ // Otherwise we risk losing the update on the next release.
+ const nextVersionDocsDirPath = 'docs';
+ return `https://github.com/OHIF/Viewers/edit/master/website/${nextVersionDocsDirPath}/${docPath}`;
+ },
+ showLastUpdateAuthor: true,
+ showLastUpdateTime: true,
+ // remarkPlugins: [
+ // [require('@docusaurus/remark-plugin-npm2yarn'), { sync: true }],
+ // ],
+ // disableVersioning: isVersioningDisabled,
+ // lastVersion: 'current',
+ // onlyIncludeVersions:
+ // !isVersioningDisabled && (isDev || isDeployPreview)
+ // ? ['current', ...versions.slice(0, 2)]
+ // : undefined,
+ // versions: {
+ // current: {
+ // // label: `${getNextBetaVersionName()} 🚧`,
+ // // label: `2.0 🎉`,
+ // label: `2.0`,
+ // // path: `2.0`,
+ // },
+ // },
+ },
+ theme: {
+ customCss: [require.resolve('./src/css/custom.css')],
+ },
+ },
+ ],
+ ],
+ themeConfig: {
+ liveCodeBlock: {
+ playgroundPosition: 'bottom',
+ },
+ hideableSidebar: false,
+ colorMode: {
+ defaultMode: 'dark',
+ disableSwitch: false,
+ // respectPrefersColorScheme: true,
+ },
+ // announcementBar: {
+ // id: 'v1-new-domain',
+ // content:
+ // '➡️ Docusaurus v1 documentation has moved to v1.docusaurus.io! 🔄',
+ // },
+ /*
+ announcementBar: {
+ id: 'supportus',
+ content:
+ '⭐️ If you like Docusaurus, give it a star on GitHub! ⭐️',
+ },
+ */
+ prism: {
+ theme: require('prism-react-renderer/themes/github'),
+ darkTheme: require('prism-react-renderer/themes/dracula'),
+ },
+ image: 'img/docusaurus-soc.png',
+ // metadatas: [{name: 'twitter:card', content: 'summary'}],
+ // gtag: {
+ // trackingID: 'UA-110573590-2',
+ // },
+ // algolia: {
+ // apiKey: '47ecd3b21be71c5822571b9f59e52544',
+ // indexName: 'docusaurus-2',
+ // contextualSearch: true,
+ // },
+ navbar: {
+ hideOnScroll: false,
+ logo: {
+ alt: 'OHIF Logo',
+ src: 'img/ohif-logo-light.svg',
+ srcDark: 'img/ohif-logo.svg',
+ },
+ items: [
+ {
+ to: 'https://ohif.org/get-started',
+ label: 'Get Started',
+ target: '_self',
+ position: 'left',
+ },
+ {
+ to: 'https://ohif.org/examples',
+ label: 'Examples',
+ target: '_self',
+ position: 'left',
+ },
+ {
+ position: 'left',
+ to: '/',
+ activeBaseRegex: '^(/next/|/)$',
+ docId: 'Introduction',
+ label: 'Docs',
+ },
+ {
+ to: 'https://ohif.org/community',
+ label: 'Community',
+ target: '_self',
+ position: 'left',
+ },
+ {
+ to: 'next/help',
+ activeBaseRegex: '(^/help$)|(/next/help)',
+ label: 'Help',
+ position: 'right',
+ },
+ // { to: 'https://react.ohif.org/', label: 'UI Component Library', position: 'left' },
+ // {to: 'showcase', label: 'Showcase', position: 'left'},
+ // right
+ {
+ type: 'docsVersionDropdown',
+ position: 'right',
+ dropdownActiveClassDisabled: true,
+ },
+ {
+ type: 'localeDropdown',
+ position: 'right',
+ dropdownItemsAfter: [
+ {
+ to: 'next/viewer/internationalization',
+ label: 'Help Us Translate',
+ },
+ ],
+ },
+ {
+ to: 'https://github.com/OHIF/Viewers',
+ position: 'right',
+ className: 'header-github-link',
+ 'aria-label': 'GitHub Repository',
+ },
+ ],
+ },
+ footer: {
+ style: 'dark',
+ links: [
+ {
+ title: ' ',
+ items: [
+ {
+ html: `
+
+
+
+ `,
+ },
+ ],
+ },
+ {
+ title: 'Learn',
+ items: [
+ {
+ label: 'Introduction',
+ to: '/',
+ },
+ {
+ label: 'Installation',
+ to: 'development/getting-started',
+ },
+ ],
+ },
+ {
+ title: 'Community',
+ items: [
+ {
+ label: 'Discussion board',
+ to: 'https://community.ohif.org/',
+ },
+ {
+ label: 'Help',
+ to: '/help',
+ },
+ ],
+ },
+ {
+ title: 'More',
+ items: [
+ {
+ label: 'Donate',
+ to: 'https://google.com/',
+ },
+ {
+ label: 'GitHub',
+ to: 'https://github.com/OHIF/Viewers',
+ },
+ {
+ label: 'Twitter',
+ to: 'https://twitter.com/OHIFviewer',
+ },
+ // {
+ // html: `
+ //
+ //
+ //
+ // `,
+ // },
+ ],
+ },
+ ],
+ // logo: {
+ // alt: 'OHIF ',
+ // src: 'img/ohif-logo.svg',
+ // href: 'https://ohif.org',
+ // },
+ copyright: `OHIF is open source software released under the MIT license.`,
+ },
+ },
+});
diff --git a/platform/docs/netlify.toml b/platform/docs/netlify.toml
new file mode 100644
index 000000000..20dc48f58
--- /dev/null
+++ b/platform/docs/netlify.toml
@@ -0,0 +1,38 @@
+# Netlify Config
+#
+# TOML Reference:
+# https://www.netlify.com/docs/netlify-toml-reference/
+#
+# We use Netlify for deploy previews and for publishing docs (gh-pages branch).
+# https://viewer.ohif.org is created using a different process that is
+# managed by CircleCI and deployed to our Google Hosting
+#
+
+#[build]
+# ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF"
+
+# NODE_VERSION in root `.nvmrc` takes priority
+# YARN_FLAGS: https://www.netlify.com/docs/build-gotchas/#yarn
+[build.environment]
+ # If 'production', `yarn install` does not install devDependencies
+ NODE_ENV = "development"
+ NODE_VERSION = "12.13.0"
+ YARN_VERSION = "1.22.0"
+ RUBY_VERSION = "2.6.2"
+ YARN_FLAGS = "--no-ignore-optional --pure-lockfile"
+ NETLIFY_USE_YARN = "true"
+
+[[headers]]
+ # Define which paths this specific [[headers]] block will cover.
+ for = "/*"
+
+ [headers.values]
+ X-Frame-Options = "DENY"
+ X-XSS-Protection = "1; mode=block"
+
+ # Multi-key header rules are expressed with multi-line strings.
+ cache-control = '''
+ max-age=0,
+ no-cache,
+ no-store,
+ must-revalidate'''
diff --git a/platform/docs/package.json b/platform/docs/package.json
new file mode 100644
index 000000000..f78b6cf58
--- /dev/null
+++ b/platform/docs/package.json
@@ -0,0 +1,70 @@
+{
+ "name": "ohif-docs",
+ "version": "0.0.0",
+ "private": true,
+ "workspaces": {
+ "nohoist": [
+ "@docusaurus/core/**",
+ "@docusaurus/core",
+ "@docusaurus/preset-classic",
+ "@docusaurus/preset-classic/**",
+ "**/react-router-dom",
+ "**/react-router"
+ ]
+ },
+ "scripts": {
+ "docusaurus": "docusaurus",
+ "start": "docusaurus start --port 8001",
+ "docs": "docusaurus start --port 8001",
+ "build": "docusaurus build",
+ "swizzle": "docusaurus swizzle",
+ "deploy": "docusaurus deploy",
+ "clear": "docusaurus clear",
+ "serve": "docusaurus serve",
+ "write-translations": "docusaurus write-translations",
+ "write-heading-ids": "docusaurus write-heading-ids"
+ },
+ "dependencies": {
+ "@docusaurus/core": "2.0.0-beta.3",
+ "@docusaurus/plugin-client-redirects": "2.0.0-beta.3",
+ "@docusaurus/plugin-ideal-image": "2.0.0-beta.3",
+ "@docusaurus/plugin-pwa": "2.0.0-beta.3",
+ "@docusaurus/preset-classic": "2.0.0-beta.3",
+ "@docusaurus/remark-plugin-npm2yarn": "2.0.0-beta.3",
+ "@docusaurus/theme-live-codeblock": "2.0.0-beta.3",
+ "@mdx-js/react": "^1.6.21",
+ "@ohif/ui": "^2.0.0",
+ "@svgr/webpack": "^5.5.0",
+ "classnames": "^2.3.1",
+ "clsx": "^1.1.1",
+ "file-loader": "^6.2.0",
+ "plugin-image-zoom": "ataft/plugin-image-zoom",
+ "url-loader": "^4.1.1"
+ },
+ "peerDependencies": {
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2"
+ },
+ "browserslist": {
+ "production": [
+ ">0.5%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ "devDependencies": {
+ "capitalize": "^2.0.3",
+ "docusaurus-plugin-react-docgen": "^0.0.2",
+ "lodash.get": "^4.4.2",
+ "postcss-import": "^14.0.2",
+ "postcss-preset-env": "^6.7.0",
+ "react-docgen": "^5.4.0",
+ "react-tooltip": "^4.2.21",
+ "tailwindcss": "^2.2.4"
+ }
+}
diff --git a/platform/docs/pluginOHIFWebpackConfig.js b/platform/docs/pluginOHIFWebpackConfig.js
new file mode 100644
index 000000000..e1ec7ae4c
--- /dev/null
+++ b/platform/docs/pluginOHIFWebpackConfig.js
@@ -0,0 +1,38 @@
+module.exports = function(context, options) {
+ return {
+ name: 'plugin-ohif-webpack-config',
+ configureWebpack(config, isServer, utils) {
+ return {
+ resolve: {
+ fallback: {
+ fs: false,
+ path: false,
+ },
+ },
+ module: {
+ rules: [
+ {
+ test: /\.m?jsx?$/,
+ resolve: {
+ fullySpecified: false,
+ },
+ },
+ ],
+ },
+ };
+ },
+ /*configurePostCss(postcssOptions) {
+ postcssOptions.plugins.push(
+ require('postcss-import'),
+ require('tailwindcss'),
+ require('postcss-preset-env')({
+ autoprefixer: {
+ flexbox: 'no-2009',
+ },
+ stage: 4,
+ })
+ );
+ return postcssOptions;
+ },*/
+ };
+};
diff --git a/platform/docs/sidebars.js b/platform/docs/sidebars.js
new file mode 100644
index 000000000..981a73cd7
--- /dev/null
+++ b/platform/docs/sidebars.js
@@ -0,0 +1,26 @@
+/**
+ * Creating a sidebar enables you to:
+ - create an ordered group of docs
+ - render a sidebar for each doc of that group
+ - provide next/previous navigation
+
+ The sidebars can be generated from the filesystem, or explicitly defined here.
+
+ Create as many sidebars as you want.
+ */
+
+module.exports = {
+ // By default, Docusaurus generates a sidebar from the docs folder structure
+ tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
+
+ // But you can create a sidebar manually
+ /*
+ tutorialSidebar: [
+ {
+ type: 'category',
+ label: 'Tutorial',
+ items: ['hello'],
+ },
+ ],
+ */
+};
diff --git a/platform/docs/src/components/ComponentPropsTable.jsx b/platform/docs/src/components/ComponentPropsTable.jsx
new file mode 100644
index 000000000..db3c934ec
--- /dev/null
+++ b/platform/docs/src/components/ComponentPropsTable.jsx
@@ -0,0 +1,24 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { usePluginData } from '@docusaurus/useGlobalData';
+import { PropsTable } from '../react-docgen-props-table/PropsTable'
+
+export function ComponentPropsTable({ componentName }) {
+ if (!componentName) {
+ return null;
+ }
+
+ const data = usePluginData('docusaurus-plugin-react-docgen')
+ const componentDocGenData = data[componentName.toLowerCase()]
+ if (!componentDocGenData) {
+ return null;
+ }
+
+ return (
+
+ )
+}
+
+ComponentPropsTable.PropTypes = {
+ componentName: PropTypes.string.required
+}
diff --git a/platform/docs/src/components/HomepageFeatures.js b/platform/docs/src/components/HomepageFeatures.js
new file mode 100644
index 000000000..16f820b10
--- /dev/null
+++ b/platform/docs/src/components/HomepageFeatures.js
@@ -0,0 +1,64 @@
+import React from 'react';
+import clsx from 'clsx';
+import styles from './HomepageFeatures.module.css';
+
+const FeatureList = [
+ {
+ title: 'Easy to Use',
+ Svg: require('../../static/img/undraw_docusaurus_mountain.svg').default,
+ description: (
+ <>
+ Docusaurus was designed from the ground up to be easily installed and
+ used to get your website up and running quickly.
+ >
+ ),
+ },
+ {
+ title: 'Focus on What Matters',
+ Svg: require('../../static/img/undraw_docusaurus_tree.svg').default,
+ description: (
+ <>
+ Docusaurus lets you focus on your docs, and we'll do the chores. Go
+ ahead and move your docs into the docs directory.
+ >
+ ),
+ },
+ {
+ title: 'Powered by React',
+ Svg: require('../../static/img/undraw_docusaurus_react.svg').default,
+ description: (
+ <>
+ Extend or customize your website layout by reusing React. Docusaurus can
+ be extended while reusing the same header and footer.
+ >
+ ),
+ },
+];
+
+function Feature({Svg, title, description}) {
+ return (
+
-
+```
Files/Folder will become like the image above:
-
+
-3. Open a terminal inside DCM4CHE folder, and run the following command:
+1. Open a terminal inside DCM4CHE folder, and run the following command:
sudo snap install docker
Expected result:
-
+
4. Still inside the DCM4CHE folder, run the following command:
@@ -227,7 +226,7 @@ sudo docker-compose -p dcm4chee up -d
Expected result:
-
+
1. The following commands can be used to control DCM4CHE:
@@ -239,19 +238,19 @@ Stop and delete all 3 containers: docker-compose -p dcm4chee down
2. Now it is necessary to import some DICOM studies to DCM4CHE. Before importing these studies, you will need to download them. To do so, access the address [http://34.224.187.57:3000/studylist](http://34.224.187.57:3000/studylist), right click one or more studies, and select the option Export:
-
+
3. Confirm the study export on the modal window that will appear:
-
+
4. The study(ies) export will begin. You can follow the exporting progress:
-
+
5. After the exporting progress, the study(ies) will be downloaded in a file called "studies.zip". Create a folder named “Studies” on your Home folder, and extract this and any other studies you download in this folder:
-
+
6. Open the terminal, go to the DCM4CHE folder, and run the following command in order to send the studies to DCM4CHE:
@@ -259,15 +258,15 @@ docker run -v ~/Studies/:/tmp --rm --network=dcm4chee_default dcm4che/dcm4che-to
Expected result:
-
+
7. Now, go to your browser and access the URL [http://localhost:8080/dcm4chee-arc/ui2/](http://localhost:8080/dcm4chee-arc/ui2/). Once opened, click on the refresh icon on the most right:
-
+
8. The studies received by DCM4CHE will be shown:
-
+
9. Open the terminal, go to your Home folder, and run the following command in order to clone viewers repository to your local:
@@ -275,7 +274,7 @@ git clone https://github.com/OHIF/Viewers.git
Expected result:
-
+
10. Then, enter the Viewers folder, and run the following command in order to make sure that you are in master branch:
@@ -283,7 +282,7 @@ git checkout master
Expected result:
-
+
11. Now go to OHIFViewer folder and run the following command:
@@ -291,7 +290,7 @@ meteor npm install
Expected result:
-
+
12. Still on the OHIFViewer folder, run the following command:
@@ -299,15 +298,15 @@ Expected result:
Expected result:
-
+
13. Now, go to your browser and access the URL [http://localhost:3000](http://localhost:3000). Once opened, change the Study Date filter to start on the year 2000:
-
+
14. The imported studies will be show. Double click a study to open it:
-
+
## Meteor
@@ -323,7 +322,7 @@ curl https://install.meteor.com/ | sh
Expected result:
-
+
## Starting OHIF Viewer after system restart
@@ -343,53 +342,4 @@ docker-compose -p dcm4chee start
./bin/dcm4cheeDICOMWeb.sh
-6. Access the address [http://localhost:3000](http://localhost:3000)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+6. Access the address [http://localhost:3000](http://localhost:3000)
diff --git a/docs/v1/standalone-viewer/usage.md b/platform/docs/versioned_docs/version-1.0/OHIF-Viewer/usage.md
similarity index 98%
rename from docs/v1/standalone-viewer/usage.md
rename to platform/docs/versioned_docs/version-1.0/OHIF-Viewer/usage.md
index fbd99edb7..cf5932ff9 100644
--- a/docs/v1/standalone-viewer/usage.md
+++ b/platform/docs/versioned_docs/version-1.0/OHIF-Viewer/usage.md
@@ -1,3 +1,7 @@
+---
+title: Standalone Viewer
+---
+
# Standalone Viewer
## Quick Start
diff --git a/docs/v1/README.md b/platform/docs/versioned_docs/version-1.0/README.md
similarity index 88%
rename from docs/v1/README.md
rename to platform/docs/versioned_docs/version-1.0/README.md
index 3b74123f6..5f1b77c65 100644
--- a/docs/v1/README.md
+++ b/platform/docs/versioned_docs/version-1.0/README.md
@@ -1,6 +1,11 @@
-##### Looking for your Deploy Preview? - Deploy Preview for Viewer
+---
+id: Introduction
+slug: /
+sidebar_position: 1
+---
+
+##### Looking for your Deploy Preview? - Deploy Preview for Viewer
-# Introduction
The [Open Health Imaging Foundation](https://www.ohif.org) is developing an open source framework for constructing web-based medical imaging applications. The application framework is built using modern HTML / CSS / JavaScript and uses [Cornerstone](https://cornerstonejs.org/) at its core to display and manipulate medical images. It is built with Meteor, a Node.js-based full-stack JavaScript platform.
@@ -8,18 +13,18 @@ This documentation concerns the OHIF framework itself and its three example appl
## The **OHIF Viewer**: A general purpose DICOM Viewer ([demo](http://viewer.ohif.org/))
-
+
The Open Health Imaging Foundation intends to provide a simple general purpose DICOM Viewer which can be easily extended for specific uses. The primary purpose of the OHIF Viewer is to serve as a testing ground for the underlying packages and the [Cornerstone](https://cornerstonejs.org/) family of libraries.
## **Lesion Tracker**: An oncology-focused imaging application ([demo](http://lesiontracker.ohif.org/))
-
+
The Lesion Tracker is designed to facilitate quantitative assessments of tumour burden over time. It is similar in scope to the ePAD Imaging Platform (https://epad.stanford.edu/), developed at Stanford Medicine.
## Study List & DICOM Connectivity
-
+
The solution provides a study list and other resources for connecting to PACS and other Image Archives through standard communication approaches (DICOM Web, DICOM Messages).
diff --git a/docs/v1/assets/img/LesionTracker/LT_Assessment_Progress.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Assessment_Progress.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Assessment_Progress.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Assessment_Progress.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Association_Dialog.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Association_Dialog.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Association_Dialog.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Association_Dialog.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Audit_Trails.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Audit_Trails.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Audit_Trails.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Audit_Trails.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_CINE.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_CINE.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_CINE.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_CINE.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Change_Password.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Change_Password.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Change_Password.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Change_Password.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_CompareMode.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_CompareMode.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_CompareMode.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_CompareMode.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Comparison.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Comparison.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Comparison.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Comparison.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Configuration_Menu.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Configuration_Menu.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Configuration_Menu.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Configuration_Menu.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Conformance_Check.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Conformance_Check.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Conformance_Check.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Conformance_Check.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Download.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Download.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Download.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Download.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Ellipse.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Ellipse.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Ellipse.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Ellipse.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_FlipH.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_FlipH.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_FlipH.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_FlipH.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_FlipV.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_FlipV.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_FlipV.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_FlipV.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Forgot_Password.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Forgot_Password.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Forgot_Password.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Forgot_Password.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Generate_Report.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Generate_Report.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Generate_Report.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Generate_Report.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_HUD_Panel.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_HUD_Panel.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_HUD_Panel.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_HUD_Panel.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Image_Viewer.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Image_Viewer.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Image_Viewer.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Image_Viewer.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_After_Prerequisites.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_After_Prerequisites.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_After_Prerequisites.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_After_Prerequisites.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Desktop_Shortcuts.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Desktop_Shortcuts.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Desktop_Shortcuts.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Desktop_Shortcuts.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Final.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Final.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Final.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Final.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Finish.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Finish.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Finish.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Finish.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Initial.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Initial.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Initial.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Initial.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Launch_Installation.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Launch_Installation.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Launch_Installation.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Launch_Installation.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Launch_Uninstall.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Launch_Uninstall.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Launch_Uninstall.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Launch_Uninstall.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_License_Aggrement.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_License_Aggrement.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_License_Aggrement.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_License_Aggrement.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Prerequisites.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Prerequisites.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Prerequisites.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Prerequisites.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Select_Location.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Select_Location.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Select_Location.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Select_Location.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Services.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Services.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Services.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Services.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Successful.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Successful.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Successful.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Successful.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Installer_Uninstall.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Uninstall.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Installer_Uninstall.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Installer_Uninstall.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Invert.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Invert.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Invert.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Invert.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Key_Timepoints.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Key_Timepoints.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Key_Timepoints.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Key_Timepoints.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Keyboard_Shortcuts.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Keyboard_Shortcuts.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Keyboard_Shortcuts.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Keyboard_Shortcuts.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Login.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Login.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Login.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Login.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Logout.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Logout.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Logout.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Logout.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Magnify.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Magnify.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Magnify.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Magnify.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Measurements.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Measurements.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Measurements.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Measurements.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Need_Account.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Need_Account.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Need_Account.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Need_Account.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_NonTarget_Select_Location.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_NonTarget_Select_Location.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_NonTarget_Select_Location.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_NonTarget_Select_Location.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_NonTarget_Tool.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_NonTarget_Tool.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_NonTarget_Tool.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_NonTarget_Tool.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Patient.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Patient.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Patient.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Patient.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Study.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Study.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Study.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Delete_Select_Study.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Orthanc_Delete_Study.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Delete_Study.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Orthanc_Delete_Study.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Delete_Study.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Orthanc_Drag_and_Drop.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Drag_and_Drop.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Orthanc_Drag_and_Drop.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Drag_and_Drop.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Orthanc_Start_Upload.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Start_Upload.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Orthanc_Start_Upload.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Start_Upload.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Orthanc_Upload.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Upload.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Orthanc_Upload.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Upload.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Orthanc_Upload_Result.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Upload_Result.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Orthanc_Upload_Result.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Orthanc_Upload_Result.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Pan.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Pan.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Pan.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Pan.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Quick_Switch_Tool.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Quick_Switch_Tool.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Quick_Switch_Tool.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Quick_Switch_Tool.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Remove_Associate.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Remove_Associate.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Remove_Associate.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Remove_Associate.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Report_PDF.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Report_PDF.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Report_PDF.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Report_PDF.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Reset.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Reset.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Reset.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Reset.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Response_Criteria.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Response_Criteria.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Response_Criteria.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Response_Criteria.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Rotate_Right.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Rotate_Right.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Rotate_Right.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Rotate_Right.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Save1.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Save1.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Save1.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Save1.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Save2.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Save2.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Save2.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Save2.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Scroll.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Scroll.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Scroll.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Scroll.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Select_Associate.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Select_Associate.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Select_Associate.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Select_Associate.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Server_Info.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Server_Info.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Server_Info.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Server_Info.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_StackScroll_Multiple.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_StackScroll_Multiple.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_StackScroll_Multiple.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_StackScroll_Multiple.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_StackScroll_Single.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_StackScroll_Single.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_StackScroll_Single.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_StackScroll_Single.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Studies_Panel.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Studies_Panel.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Studies_Panel.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Studies_Panel.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_StudyList.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_StudyList.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_StudyList.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_StudyList.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Target.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Target.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Target_CR.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_CR.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Target_CR.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_CR.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Target_Delete.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_Delete.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Target_Delete.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_Delete.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Target_Label.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_Label.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Target_Label.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_Label.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Target_Rename.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_Rename.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Target_Rename.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_Rename.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Target_UN.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_UN.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Target_UN.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Target_UN.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Temp_Tool.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Temp_Tool.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Temp_Tool.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Temp_Tool.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Themes.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Themes.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Themes.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Themes.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_View_Lesion.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_View_Lesion.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_View_Lesion.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_View_Lesion.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_View_Series_Details.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_View_Series_Details.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_View_Series_Details.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_View_Series_Details.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_View_Study.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_View_Study.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_View_Study.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_View_Study.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Viewer.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Viewer.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Viewer.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Viewer.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_WL.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_WL.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_WL.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_WL.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_WL_Presets.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_WL_Presets.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_WL_Presets.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_WL_Presets.png
diff --git a/docs/v1/assets/img/LesionTracker/LT_Zoom.png b/platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Zoom.png
similarity index 100%
rename from docs/v1/assets/img/LesionTracker/LT_Zoom.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/LesionTracker/LT_Zoom.png
diff --git a/docs/v1/assets/img/lesionTracker.png b/platform/docs/versioned_docs/version-1.0/assets/img/lesionTracker.png
similarity index 100%
rename from docs/v1/assets/img/lesionTracker.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/lesionTracker.png
diff --git a/docs/v1/assets/img/viewer.png b/platform/docs/versioned_docs/version-1.0/assets/img/viewer.png
similarity index 100%
rename from docs/v1/assets/img/viewer.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/viewer.png
diff --git a/docs/v1/assets/img/worklist.png b/platform/docs/versioned_docs/version-1.0/assets/img/worklist.png
similarity index 100%
rename from docs/v1/assets/img/worklist.png
rename to platform/docs/versioned_docs/version-1.0/assets/img/worklist.png
diff --git a/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/_category_.json b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/_category_.json
new file mode 100644
index 000000000..5192fa6ac
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Connecting to ImageArchives",
+ "position": 3
+}
diff --git a/docs/v1/connecting-to-image-archives/dcm4chee-with-docker.md b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dcm4chee-with-docker.md
similarity index 52%
rename from docs/v1/connecting-to-image-archives/dcm4chee-with-docker.md
rename to platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dcm4chee-with-docker.md
index 64f5fb65b..70b529c41 100644
--- a/docs/v1/connecting-to-image-archives/dcm4chee-with-docker.md
+++ b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dcm4chee-with-docker.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 4
+---
# DCM4CHEE with Docker
1. Install Docker (https://www.docker.com/)
@@ -18,24 +21,24 @@
3. Run the OHIF Viewer or Lesion Tracker using the dcm4cheeDIMSE.json configuration file
-````bash
-cd OHIFViewer
-PACKAGE_DIRS="../Packages" meteor --settings ../config/dcm4cheeDIMSE.json
-````
+ ````bash
+ cd OHIFViewer
+ PACKAGE_DIRS="../Packages" meteor --settings ../config/dcm4cheeDIMSE.json
+ ````
## Web Service URLs from DCM4CHEE:
Original source here: https://github.com/dcm4che/dcm4chee-arc-light/wiki/Running-on-Docker#web-service-urls
-> - Archive UI: - if secured, login with
+ - Archive UI: - if secured, login with
-> Username | Password | Role
-> --- | --- | ---
-> `user` | `user` | `user`
-> `admin` | `admin` | `user` + `admin`
-> - Keycloak Administration Console: , login with Username: `admin`, Password: `admin`.
-> - Wildfly Administration Console: , login with Username: `admin`, Password: `admin`.
-> - Kibana UI:
-> - DICOM QIDO-RS Base URL:
-> - DICOM STOW-RS Base URL:
-> - DICOM WADO-RS Base URL:
-> - DICOM WADO-URI:
+ Username | Password | Role
+ --- | --- | ---
+ `user` | `user` | `user`
+ `admin` | `admin` | `user` + `admin`
+ - Keycloak Administration Console: , login with Username: `admin`, Password: `admin`.
+ - Wildfly Administration Console: , login with Username: `admin`, Password: `admin`.
+ - Kibana UI:
+ - DICOM QIDO-RS Base URL:
+ - DICOM STOW-RS Base URL:
+ - DICOM WADO-RS Base URL:
+ - DICOM WADO-URI:
diff --git a/docs/v1/connecting-to-image-archives/dicomweb.md b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dicomweb.md
similarity index 91%
rename from docs/v1/connecting-to-image-archives/dicomweb.md
rename to platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dicomweb.md
index a2c2ec201..1166b2b43 100644
--- a/docs/v1/connecting-to-image-archives/dicomweb.md
+++ b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dicomweb.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 2
+---
# DICOM Web
[DICOMWeb](https://en.wikipedia.org/wiki/DICOMweb) refers to RESTful DICOM Services and is a recently standardized set of guidelines for exchanging medical images and imaging metadata over the internet. Not all archives fully support it yet, but it is gaining wider adoption.
diff --git a/docs/v1/connecting-to-image-archives/dimse.md b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dimse.md
similarity index 94%
rename from docs/v1/connecting-to-image-archives/dimse.md
rename to platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dimse.md
index 478bc1a5d..22c5a1d70 100644
--- a/docs/v1/connecting-to-image-archives/dimse.md
+++ b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/dimse.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 3
+---
# DICOM Message Service Element
DIMSE Stands for [DICOM Message Service Element](http://dicom.nema.org/medical/dicom/current/output/chtml/part07/chapter_7.html) and is the standard method through which DICOM archives communicate. We support this messaging standard for the retrieval of study, series, and instance metadata because it is widely support. For certain PACS systems, it also (currently) provides faster query results than DICOMWeb.
diff --git a/docs/v1/connecting-to-image-archives/google-cloud-healthcare.md b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/google-cloud-healthcare.md
similarity index 98%
rename from docs/v1/connecting-to-image-archives/google-cloud-healthcare.md
rename to platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/google-cloud-healthcare.md
index 1ed4e98cd..da60a8cfb 100644
--- a/docs/v1/connecting-to-image-archives/google-cloud-healthcare.md
+++ b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/google-cloud-healthcare.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 6
+---
# Google Cloud Healthcare
> The [Google Cloud Healthcare API](https://cloud.google.com/healthcare/) is a powerful option for storing medical imaging data in the cloud.
@@ -43,7 +46,7 @@ METEOR_PACKAGE_DIRS="../Packages" meteor --settings ../config/oidc-googleCloud.j
## Running via Docker
-OHIF is also providing a Docker container which can connect to Google Cloud Healthcare with a Client ID which is provided at runtime. This is a very simple method to get up and running. Internally, the container is running [Nginx](https://nginx.org/) to serve the [Standalone Viewer](../standalone-viewer/usage.md).
+OHIF is also providing a Docker container which can connect to Google Cloud Healthcare with a Client ID which is provided at runtime. This is a very simple method to get up and running. Internally, the container is running [Nginx](https://nginx.org/) to serve the [Standalone Viewer](../OHIF-Viewer/usage.md).
1. Install Docker (https://www.docker.com/)
1. Run the Docker container, providing a Client ID as an environment variable. Client IDs look like `xyz.apps.googleusercontent.com`.
diff --git a/docs/v1/connecting-to-image-archives/options.md b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/options.md
similarity index 93%
rename from docs/v1/connecting-to-image-archives/options.md
rename to platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/options.md
index 638e547dd..e9c29971b 100644
--- a/docs/v1/connecting-to-image-archives/options.md
+++ b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/options.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 1
+---
# Connecting to Image Archives
We support DIMSE and DICOMWeb. Which one to use is up to you and depends on your PACS system. DICOMWeb requires no setup on the PACS-side whatsoever, whereas DIMSE may require you to add the 'OHIFDCM' aeTitle to the known DICOM Modalities of your Archive. This is the case for Orthanc, for example (See https://github.com/OHIF/Viewers/wiki/Orthanc-with-DIMSE).
diff --git a/docs/v1/connecting-to-image-archives/orthanc-with-docker.md b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/orthanc-with-docker.md
similarity index 97%
rename from docs/v1/connecting-to-image-archives/orthanc-with-docker.md
rename to platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/orthanc-with-docker.md
index 0cd40fca1..07f9d2dea 100644
--- a/docs/v1/connecting-to-image-archives/orthanc-with-docker.md
+++ b/platform/docs/versioned_docs/version-1.0/connecting-to-image-archives/orthanc-with-docker.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 5
+---
# Orthanc with Docker
Depending on whether or not you want uploaded studies to persist in Orthanc after Docker has been closed, there are two different methods for starting the Docker image:
diff --git a/docs/v1/contributing.md b/platform/docs/versioned_docs/version-1.0/contributing.md
similarity index 97%
rename from docs/v1/contributing.md
rename to platform/docs/versioned_docs/version-1.0/contributing.md
index 02509c0f4..6b9cc181f 100644
--- a/docs/v1/contributing.md
+++ b/platform/docs/versioned_docs/version-1.0/contributing.md
@@ -1,3 +1,7 @@
+---
+id: contributing
+sidebar_position: 2
+---
# Contributing
### I would like to contribute code - how do I do this?
diff --git a/platform/docs/versioned_docs/version-1.0/data/_category_.json b/platform/docs/versioned_docs/version-1.0/data/_category_.json
new file mode 100644
index 000000000..f216db497
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/data/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Data Organization",
+ "position": 4
+}
diff --git a/docs/v1/data/data-hierarchy.md b/platform/docs/versioned_docs/version-1.0/data/data-hierarchy.md
similarity index 100%
rename from docs/v1/data/data-hierarchy.md
rename to platform/docs/versioned_docs/version-1.0/data/data-hierarchy.md
diff --git a/docs/v1/data/image-viewport.md b/platform/docs/versioned_docs/version-1.0/data/image-viewport.md
similarity index 100%
rename from docs/v1/data/image-viewport.md
rename to platform/docs/versioned_docs/version-1.0/data/image-viewport.md
diff --git a/docs/v1/data/measurements-and-annotations.md b/platform/docs/versioned_docs/version-1.0/data/measurements-and-annotations.md
similarity index 100%
rename from docs/v1/data/measurements-and-annotations.md
rename to platform/docs/versioned_docs/version-1.0/data/measurements-and-annotations.md
diff --git a/docs/v1/data/tool-management.md b/platform/docs/versioned_docs/version-1.0/data/tool-management.md
similarity index 100%
rename from docs/v1/data/tool-management.md
rename to platform/docs/versioned_docs/version-1.0/data/tool-management.md
diff --git a/platform/docs/versioned_docs/version-1.0/deployment/_category_.json b/platform/docs/versioned_docs/version-1.0/deployment/_category_.json
new file mode 100644
index 000000000..0b0fa4cc8
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/deployment/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Deployment",
+ "position": 7
+}
diff --git a/docs/v1/deployment/building-for-production.md b/platform/docs/versioned_docs/version-1.0/deployment/building-for-production.md
similarity index 100%
rename from docs/v1/deployment/building-for-production.md
rename to platform/docs/versioned_docs/version-1.0/deployment/building-for-production.md
diff --git a/docs/v1/deployment/security.md b/platform/docs/versioned_docs/version-1.0/deployment/security.md
similarity index 100%
rename from docs/v1/deployment/security.md
rename to platform/docs/versioned_docs/version-1.0/deployment/security.md
diff --git a/platform/docs/versioned_docs/version-1.0/essentials/_category_.json b/platform/docs/versioned_docs/version-1.0/essentials/_category_.json
new file mode 100644
index 000000000..fd00c612d
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/essentials/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Essentials",
+ "position": 2
+}
diff --git a/docs/v1/essentials/architecture.md b/platform/docs/versioned_docs/version-1.0/essentials/architecture.md
similarity index 98%
rename from docs/v1/essentials/architecture.md
rename to platform/docs/versioned_docs/version-1.0/essentials/architecture.md
index 5d6864465..c4a58d1bf 100644
--- a/docs/v1/essentials/architecture.md
+++ b/platform/docs/versioned_docs/version-1.0/essentials/architecture.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 2
+---
# Architecture
## Meteor
diff --git a/docs/v1/essentials/configuration.md b/platform/docs/versioned_docs/version-1.0/essentials/configuration.md
similarity index 97%
rename from docs/v1/essentials/configuration.md
rename to platform/docs/versioned_docs/version-1.0/essentials/configuration.md
index de5f00eb6..e44d91fe3 100644
--- a/docs/v1/essentials/configuration.md
+++ b/platform/docs/versioned_docs/version-1.0/essentials/configuration.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 3
+---
# Configurations
There are a few pre-defined settings files that you can find in [config](https://github.com/OHIF/Viewers/tree/master/config) folder. These are Meteor files and all settings can be accessed as showed on [Meteor Website](https://docs.meteor.com/api/core.html#Meteor-settings). UI settings are also available as OHIF.uiSettings. See the [schema](https://github.com/OHIF/Viewers/blob/131d64854cb2eceff056a15ccb12c34b9e2baaa7/Packages/ohif-servers/both/schema/servers.js) for more information.
diff --git a/docs/v1/essentials/installation.md b/platform/docs/versioned_docs/version-1.0/essentials/installation.md
similarity index 67%
rename from docs/v1/essentials/installation.md
rename to platform/docs/versioned_docs/version-1.0/essentials/installation.md
index 028ead7ed..2423c793a 100644
--- a/docs/v1/essentials/installation.md
+++ b/platform/docs/versioned_docs/version-1.0/essentials/installation.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 1
+---
# Installation
## Getting the Code
@@ -18,13 +21,19 @@ or [Download the latest Master as a ZIP File](https://github.com/OHIF/Viewers/ar
#### Open Source DICOM Image Archive Options
-Archive | Installation
--------------------------------------------|
-[DCM4CHEE Archive 5.x](https://github.com/dcm4che/dcm4chee-arc-light) | [Installation with Docker](https://github.com/dcm4che/dcm4chee-arc-light/wiki/Running-on-Docker)
-[Orthanc](https://www.orthanc-server.com/) | [Installation with Docker](http://book.orthanc-server.com/users/docker.html)
-[DICOMcloud](https://github.com/DICOMcloud/DICOMcloud) (**DICOM Web only**)| [Installation](https://github.com/DICOMcloud/DICOMcloud#running-the-code)
-[OsiriX](http://www.osirix-viewer.com/) (**Mac OSX only**) |
-[Horos](https://www.horosproject.org/) (**Mac OSX only**) |
+
+
+| Archive | Installation |
+| ----------- | ----------- |
+| [DCM4CHEE Archive 5.x](https://github.com/dcm4che/dcm4chee-arc-light) | [Installation with Docker](https://github.com/dcm4che/dcm4chee-arc-light/wiki/Running-on-Docker) |
+| [Orthanc](https://www.orthanc-server.com/) | [Installation with Docker](http://book.orthanc-server.com/users/docker.html) |
+| [DICOMcloud](https://github.com/DICOMcloud/DICOMcloud) (**DICOM Web only**) | [Installation](https://github.com/DICOMcloud/DICOMcloud#running-the-code) |
+| [OsiriX](http://www.osirix-viewer.com/) (**Mac OSX only**) | Text |
+| [Horos](https://www.horosproject.org/) (**Mac OSX only**) | Text |
+
+
+
+
*Feel free to make a Pull Request if you want to add to this list.*
@@ -55,4 +64,4 @@ Archive | Installation
#### Troubleshooting
* If you receive a *"No Studies Found"* message and do not see your studies, try changing the Study Date filters to a wider range.
-* If you see any errors in your server console, check the [Troubleshooting](../troubleshooting.md) page for more in depth advice.
+* If you see any errors in your server console, check the Troubleshooting page for more in depth advice.
diff --git a/docs/v1/essentials/meteor-packages.md b/platform/docs/versioned_docs/version-1.0/essentials/meteor-packages.md
similarity index 100%
rename from docs/v1/essentials/meteor-packages.md
rename to platform/docs/versioned_docs/version-1.0/essentials/meteor-packages.md
diff --git a/platform/docs/versioned_docs/version-1.0/essentials/troubleshooting.md b/platform/docs/versioned_docs/version-1.0/essentials/troubleshooting.md
new file mode 100644
index 000000000..ca2e47f5f
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/essentials/troubleshooting.md
@@ -0,0 +1,25 @@
+---
+sidebar_position: 4
+---
+# Troubleshooting
+
+## Common Problems
+
+| Problem | Most Common Reasons |
+| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Can't retrieve Study List over DICOMWeb | 1. QIDO root URL is incorrect 2. DICOM Web is not enabled on PACS |
+| Can't retrieve Study List over DIMSE | 1. PACS is not configured to allow connections from OHIF Meteor Server |
+| Can't retrieve images | 1. WADO Root URL is incorrect 2. DICOM Web is not enabled on PACS 3. HTTP Basic Authentication username and password are incorrect or not provided. |
+
+
+
+## Debugging Steps
+### Can't retrieve Study List over DICOMWeb
+
+1. Check that you can query your PACS using an alternative DICOM Web client (e.g. cURL, or a Web Browser). If you cannot, then your PACS is configured incorrectly. Refer to the documentation of the image archive.
+2.
+
+
+### Can't retrieve Study List over DIMSE
+
+### Can't retrieve images
diff --git a/platform/docs/versioned_docs/version-1.0/example-applications/_category_.json b/platform/docs/versioned_docs/version-1.0/example-applications/_category_.json
new file mode 100644
index 000000000..c845acf43
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/example-applications/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Example Applications",
+ "position": 9
+}
diff --git a/docs/v1/example-applications/lesion-tracker.md b/platform/docs/versioned_docs/version-1.0/example-applications/lesion-tracker.md
similarity index 100%
rename from docs/v1/example-applications/lesion-tracker.md
rename to platform/docs/versioned_docs/version-1.0/example-applications/lesion-tracker.md
diff --git a/docs/v1/example-applications/ohif-viewer.md b/platform/docs/versioned_docs/version-1.0/example-applications/ohif-viewer.md
similarity index 100%
rename from docs/v1/example-applications/ohif-viewer.md
rename to platform/docs/versioned_docs/version-1.0/example-applications/ohif-viewer.md
diff --git a/docs/v1/example-applications/standalone-viewer.md b/platform/docs/versioned_docs/version-1.0/example-applications/standalone-viewer.md
similarity index 100%
rename from docs/v1/example-applications/standalone-viewer.md
rename to platform/docs/versioned_docs/version-1.0/example-applications/standalone-viewer.md
diff --git a/platform/docs/versioned_docs/version-1.0/faq/_category_.json b/platform/docs/versioned_docs/version-1.0/faq/_category_.json
new file mode 100644
index 000000000..0fa10da5c
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/faq/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "FAQ",
+ "position": 12
+}
diff --git a/docs/v1/faq/general.md b/platform/docs/versioned_docs/version-1.0/faq/general.md
similarity index 98%
rename from docs/v1/faq/general.md
rename to platform/docs/versioned_docs/version-1.0/faq/general.md
index ed96d465d..4ce911fd6 100644
--- a/docs/v1/faq/general.md
+++ b/platform/docs/versioned_docs/version-1.0/faq/general.md
@@ -1,4 +1,4 @@
-# Frequently Asked Questions - General
+# General
### How do I file a bug?
@@ -41,7 +41,7 @@ to communicate this to the community. If your requested feature is on the
roadmap, then it will most likely be built at some point. If it is not, you are
welcome to build it yourself and [contribute it](../contributing.md). If you
have resources and would like to fund the development of a feature, please
-[contact us](http://www.ohif.org).
+[contact us](https://www.ohif.org).
### Who should I contact about Academic Collaborations?
diff --git a/docs/v1/faq/technical.md b/platform/docs/versioned_docs/version-1.0/faq/technical.md
similarity index 95%
rename from docs/v1/faq/technical.md
rename to platform/docs/versioned_docs/version-1.0/faq/technical.md
index c6bd24333..2c5f5e815 100644
--- a/docs/v1/faq/technical.md
+++ b/platform/docs/versioned_docs/version-1.0/faq/technical.md
@@ -1,4 +1,4 @@
-# Frequently Asked Questions - Technical
+# Technical
## Why is your framework built with Meteor?
At the time of project conception, Meteor was a simple way to begin using bleeding edge web technologies without putting significant effort into configuration and build processes. Although Meteor does have some drawbacks, it remains a simple all-in-one solution.
diff --git a/platform/docs/versioned_docs/version-1.0/layout/_category_.json b/platform/docs/versioned_docs/version-1.0/layout/_category_.json
new file mode 100644
index 000000000..1da2602ba
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/layout/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Viewport Layout",
+ "position": 5
+}
diff --git a/docs/v1/layout/hanging-protocols.md b/platform/docs/versioned_docs/version-1.0/layout/hanging-protocols.md
similarity index 100%
rename from docs/v1/layout/hanging-protocols.md
rename to platform/docs/versioned_docs/version-1.0/layout/hanging-protocols.md
diff --git a/docs/v1/layout/layout-management.md b/platform/docs/versioned_docs/version-1.0/layout/layout-management.md
similarity index 100%
rename from docs/v1/layout/layout-management.md
rename to platform/docs/versioned_docs/version-1.0/layout/layout-management.md
diff --git a/platform/docs/versioned_docs/version-1.0/lesion-tracker/_category_.json b/platform/docs/versioned_docs/version-1.0/lesion-tracker/_category_.json
new file mode 100644
index 000000000..1f5374a5c
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Lesion Tracker",
+ "position": 11
+}
diff --git a/docs/v1/lesion-tracker/audit-trail.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/audit-trail.md
similarity index 85%
rename from docs/v1/lesion-tracker/audit-trail.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/audit-trail.md
index 0e5ec3cb2..09726ddaa 100644
--- a/docs/v1/lesion-tracker/audit-trail.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/audit-trail.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - Audit Trail
+---
+sidebar_position: 9
+---
+# Audit Trail
1. To view Audit Trails, select **View Audit Log** on the Configuration menu.
2. To filter audit logs for a column or multiple columns, type or select in the
diff --git a/docs/v1/lesion-tracker/installation-on-windows.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/installation-on-windows.md
similarity index 98%
rename from docs/v1/lesion-tracker/installation-on-windows.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/installation-on-windows.md
index 29b639e21..349184fa6 100644
--- a/docs/v1/lesion-tracker/installation-on-windows.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/installation-on-windows.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - Installation on Windows
+---
+sidebar_position: 2
+---
+# Installation on Windows
On Windows, the easiest way to install LesionTracker is using the provided Windows Installer. You can download the latest version of LesionTracker installer from [OHIF](ohif.org)
## Install
diff --git a/docs/v1/lesion-tracker/manage-studies-in-orthanc.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/manage-studies-in-orthanc.md
similarity index 96%
rename from docs/v1/lesion-tracker/manage-studies-in-orthanc.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/manage-studies-in-orthanc.md
index b712a2875..2bc8f01fe 100644
--- a/docs/v1/lesion-tracker/manage-studies-in-orthanc.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/manage-studies-in-orthanc.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - Manage Studies in Orthanc
+---
+sidebar_position: 3
+---
+# Manage Studies in Orthanc
Orthanc is an open-source, simple and powerful standalone DICOM server which eases DICOM scripting and data management for clinical routine and medical research. LesionTracker installer installs Orthanc as a service and runs automatically in the background. Orthanc serves a web interface, Orthanc Explorer, and it can be accessed through http://localhost:8042 in your web browser or the Orthanc Server shortcut which is created by LesionTracker installer and loads http://localhost:8042 in your default browser.
## Upload a study into Orthanc using Orthanc Explorer
diff --git a/docs/v1/lesion-tracker/server-management.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/server-management.md
similarity index 83%
rename from docs/v1/lesion-tracker/server-management.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/server-management.md
index 438719b04..1389a6afb 100644
--- a/docs/v1/lesion-tracker/server-management.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/server-management.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - Server Management
+---
+sidebar_position: 8
+---
+# Server Management
LesionTracker supports configuration of multiple servers and allows to switch between them. To configure the servers, click **Server Information** on the Configuration Menu.
diff --git a/docs/v1/lesion-tracker/study-and-timepoint-management.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/study-and-timepoint-management.md
similarity index 97%
rename from docs/v1/lesion-tracker/study-and-timepoint-management.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/study-and-timepoint-management.md
index 1130fef98..5a0edc457 100644
--- a/docs/v1/lesion-tracker/study-and-timepoint-management.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/study-and-timepoint-management.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - Study and Timepoint Management
+---
+sidebar_position: 5
+---
+# Study and Timepoint Management

diff --git a/docs/v1/lesion-tracker/user-accounts.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/user-accounts.md
similarity index 96%
rename from docs/v1/lesion-tracker/user-accounts.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/user-accounts.md
index 7378eccb9..94bcd16b4 100644
--- a/docs/v1/lesion-tracker/user-accounts.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/user-accounts.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - User Accounts
+---
+sidebar_position: 4
+---
+# User Accounts
## Sign In
diff --git a/docs/v1/lesion-tracker/user-preferences.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/user-preferences.md
similarity index 95%
rename from docs/v1/lesion-tracker/user-preferences.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/user-preferences.md
index 45cf8433c..bce9dd661 100644
--- a/docs/v1/lesion-tracker/user-preferences.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/user-preferences.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - User Preferences
+---
+sidebar_position: 7
+---
+# User Preferences
To view User Preferences dialog, select **Preferences** on the Configuration menu. User Preferences dialog includes a couple of tabs:

diff --git a/docs/v1/lesion-tracker/using-the-viewer.md b/platform/docs/versioned_docs/version-1.0/lesion-tracker/using-the-viewer.md
similarity index 99%
rename from docs/v1/lesion-tracker/using-the-viewer.md
rename to platform/docs/versioned_docs/version-1.0/lesion-tracker/using-the-viewer.md
index 1f4056c25..d24414527 100644
--- a/docs/v1/lesion-tracker/using-the-viewer.md
+++ b/platform/docs/versioned_docs/version-1.0/lesion-tracker/using-the-viewer.md
@@ -1,4 +1,7 @@
-# Lesion Tracker - Using the Viewer
+---
+sidebar_position: 6
+---
+# Using the Viewer
After you double-click a study, the Lesion Tracking imaging application will be launched. The basic patient and study data is displayed in the Image Viewer.
diff --git a/platform/docs/versioned_docs/version-1.0/packages/_category_.json b/platform/docs/versioned_docs/version-1.0/packages/_category_.json
new file mode 100644
index 000000000..55e5c9e73
--- /dev/null
+++ b/platform/docs/versioned_docs/version-1.0/packages/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Packages",
+ "position": 6
+}
diff --git a/docs/v1/packages/measurements.md b/platform/docs/versioned_docs/version-1.0/packages/measurements.md
similarity index 100%
rename from docs/v1/packages/measurements.md
rename to platform/docs/versioned_docs/version-1.0/packages/measurements.md
diff --git a/docs/v2/architecture/index.md b/platform/docs/versioned_docs/version-2.0/Architecture.md
similarity index 88%
rename from docs/v2/architecture/index.md
rename to platform/docs/versioned_docs/version-2.0/Architecture.md
index 1491faea5..8b0dcbcb1 100644
--- a/docs/v2/architecture/index.md
+++ b/platform/docs/versioned_docs/version-2.0/Architecture.md
@@ -1,3 +1,8 @@
+---
+sidebar_position: 5
+title: Architecture
+---
+
# Architecture
Looking to extend your instance of the OHIF Viewer? Want learn how to reuse _a
@@ -10,13 +15,7 @@ allows our code to be used in more ways, it also increases complexity. Below, we
aim to demistify that complexity by providing insight into how our Viewer is
architected, and the role each of it's dependent libraries plays.
-- [Overview](#overview)
-- [Business Logic](#business-logic)
-- [Component Library](#react-component-library)
-- [Extensions & Configuration](#extensions--configuration)
-- [Common Questions](#common-questions)
-## Overview
The [OHIF Medical Image Viewing Platform][viewers-project] is maintained as a
[`monorepo`][monorepo]. This means that this repository, instead of containing a
@@ -53,9 +52,8 @@ The `extensions` directory contains many packages that can be registered with
`@ohif/core`'s `ExtensionManager` to expand an application's supported features
and functionality.
-
-
-
architecture diagram
+
+
This diagram is a conceptual illustration of how the Viewer is architected.
@@ -78,7 +76,7 @@ features common to Web-based medical imaging viewers. For example:
- Hanging Protocols
- Managing a study's measurements
- Managing a study's DICOM metadata
-- [A flexible pattern for extensions](../extensions/index.md)
+- [A flexible pattern for extensions](./extensions/index.md)
- And many others
It does this while remaining decoupled from any particular view library or
@@ -112,16 +110,16 @@ the viewer. Some common use cases include:
- Adding surgical templating tools and reports
- and many others
-We expose common integration points via [extensions](../extensions/index.md) to
+We expose common integration points via [extensions](./extensions/index.md) to
make this possible. The viewer and many of our own extensions also offer
[configuration][configuration]. For a list of extensions maintained by OHIF,
-[check out this helpful table](../extensions/index.md#maintained-extensions).
+[check out this helpful table](./extensions/index.md#maintained-extensions).
If you find yourself thinking "I wish the Viewer could do X", and you can't
accomplish it with an extension today, create a GitHub issue! We're actively
looking for ways to improve our extensibility ^\_^
-[Click here to read more about extensions!](../extensions/index.md)
+[Click here to read more about extensions!](./extensions/index.md)
## Common Questions
@@ -146,8 +144,8 @@ you would need to recreate.
[viewers-project]: https://github.com/OHIF/Viewers
[viewer-npm]: https://www.npmjs.com/package/@ohif/viewer
[pwa]: https://developers.google.com/web/progressive-web-apps/
-[configuration]: ../configuring/index.md
-[extensions]: ../extensions/index.md
+[configuration]: ./configuring/index.md
+[extensions]: ./extensions/index.md
[core-github]: https://github.com/OHIF/viewers/platform/core
[ui-github]: https://github.com/OHIF/Viewers/tree/master/platform/ui
diff --git a/docs/v2/README.md b/platform/docs/versioned_docs/version-2.0/README.md
similarity index 69%
rename from docs/v2/README.md
rename to platform/docs/versioned_docs/version-2.0/README.md
index a47453d61..14e4553fa 100644
--- a/docs/v2/README.md
+++ b/platform/docs/versioned_docs/version-2.0/README.md
@@ -1,4 +1,10 @@
-
+
+
+
> ATTENTION! You are looking at the docs for the `React` version of the OHIF
> Viewer. If you're looking for the `Meteor` version's documentation (now
-> deprecated), select it's version from the dropdown box in the top left corner
+> deprecated), select it's version from the dropdown box in the top right corner
> of this page.
-# Introduction
-
The [Open Health Imaging Foundation][ohif-org] (OHIF) Viewer is an open source,
web-based, medical imaging viewer. It can be configured to connect to Image
Archives that support [DicomWeb][dicom-web], and offers support for mapping to
proprietary API formats. OHIF maintained extensions add support for viewing,
annotating, and reporting on DICOM images in 2D (slices) and 3D (volumes).
-
+
-
The OHIF Viewer: A general purpose DICOM Viewer (Live Demo)
+
The OHIF Viewer: A general purpose DICOM Viewer (Live Demo)
The Open Health Imaging Foundation intends to provide a simple general purpose
DICOM Viewer which can be easily extended for specific uses. If you find
@@ -48,7 +68,7 @@ Check out these helpful links:
-->
-[ohif-org]: http://www.ohif.org
+[ohif-org]: https://www.ohif.org
[dicom-web]: https://en.wikipedia.org/wiki/DICOMweb
[gh-issues]: https://github.com/OHIF/Viewers/issues
diff --git a/docs/v2/assets/designs/architecture-diagram b/platform/docs/versioned_docs/version-2.0/assets/designs/architecture-diagram
similarity index 100%
rename from docs/v2/assets/designs/architecture-diagram
rename to platform/docs/versioned_docs/version-2.0/assets/designs/architecture-diagram
diff --git a/docs/v2/assets/designs/canny-full.fig b/platform/docs/versioned_docs/version-2.0/assets/designs/canny-full.fig
similarity index 100%
rename from docs/v2/assets/designs/canny-full.fig
rename to platform/docs/versioned_docs/version-2.0/assets/designs/canny-full.fig
diff --git a/docs/v2/assets/designs/cloud.svg b/platform/docs/versioned_docs/version-2.0/assets/designs/cloud.svg
similarity index 100%
rename from docs/v2/assets/designs/cloud.svg
rename to platform/docs/versioned_docs/version-2.0/assets/designs/cloud.svg
diff --git a/docs/v2/assets/designs/embedded-viewer-diagram b/platform/docs/versioned_docs/version-2.0/assets/designs/embedded-viewer-diagram
similarity index 100%
rename from docs/v2/assets/designs/embedded-viewer-diagram
rename to platform/docs/versioned_docs/version-2.0/assets/designs/embedded-viewer-diagram
diff --git a/docs/v2/assets/designs/nginx-image-archive.fig b/platform/docs/versioned_docs/version-2.0/assets/designs/nginx-image-archive.fig
similarity index 100%
rename from docs/v2/assets/designs/nginx-image-archive.fig
rename to platform/docs/versioned_docs/version-2.0/assets/designs/nginx-image-archive.fig
diff --git a/docs/v2/assets/designs/npm-logo-red.svg b/platform/docs/versioned_docs/version-2.0/assets/designs/npm-logo-red.svg
similarity index 100%
rename from docs/v2/assets/designs/npm-logo-red.svg
rename to platform/docs/versioned_docs/version-2.0/assets/designs/npm-logo-red.svg
diff --git a/docs/v2/assets/designs/scope-of-project.fig b/platform/docs/versioned_docs/version-2.0/assets/designs/scope-of-project.fig
similarity index 100%
rename from docs/v2/assets/designs/scope-of-project.fig
rename to platform/docs/versioned_docs/version-2.0/assets/designs/scope-of-project.fig
diff --git a/docs/v2/assets/designs/user-access-control-request-flow.fig b/platform/docs/versioned_docs/version-2.0/assets/designs/user-access-control-request-flow.fig
similarity index 100%
rename from docs/v2/assets/designs/user-access-control-request-flow.fig
rename to platform/docs/versioned_docs/version-2.0/assets/designs/user-access-control-request-flow.fig
diff --git a/docs/v2/assets/img/WORKFLOW_DEPLOY.png b/platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_DEPLOY.png
similarity index 100%
rename from docs/v2/assets/img/WORKFLOW_DEPLOY.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_DEPLOY.png
diff --git a/docs/v2/assets/img/WORKFLOW_PR_CHECKS.png b/platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_PR_CHECKS.png
similarity index 100%
rename from docs/v2/assets/img/WORKFLOW_PR_CHECKS.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_PR_CHECKS.png
diff --git a/docs/v2/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png b/platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png
similarity index 100%
rename from docs/v2/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_PR_OPTIONAL_DOCKER_PUBLISH.png
diff --git a/docs/v2/assets/img/WORKFLOW_RELEASE.png b/platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_RELEASE.png
similarity index 100%
rename from docs/v2/assets/img/WORKFLOW_RELEASE.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/WORKFLOW_RELEASE.png
diff --git a/docs/v2/assets/img/architecture-diagram.png b/platform/docs/versioned_docs/version-2.0/assets/img/architecture-diagram.png
similarity index 100%
rename from docs/v2/assets/img/architecture-diagram.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/architecture-diagram.png
diff --git a/docs/v2/assets/img/cornerstone-tools-link.gif b/platform/docs/versioned_docs/version-2.0/assets/img/cornerstone-tools-link.gif
similarity index 100%
rename from docs/v2/assets/img/cornerstone-tools-link.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/cornerstone-tools-link.gif
diff --git a/docs/v2/assets/img/dialog-example.gif b/platform/docs/versioned_docs/version-2.0/assets/img/dialog-example.gif
similarity index 100%
rename from docs/v2/assets/img/dialog-example.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/dialog-example.gif
diff --git a/docs/v2/assets/img/embedded-viewer-diagram.png b/platform/docs/versioned_docs/version-2.0/assets/img/embedded-viewer-diagram.png
similarity index 100%
rename from docs/v2/assets/img/embedded-viewer-diagram.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/embedded-viewer-diagram.png
diff --git a/docs/v2/assets/img/extensions-diagram.png b/platform/docs/versioned_docs/version-2.0/assets/img/extensions-diagram.png
similarity index 100%
rename from docs/v2/assets/img/extensions-diagram.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/extensions-diagram.png
diff --git a/docs/v2/assets/img/extensions-panel.gif b/platform/docs/versioned_docs/version-2.0/assets/img/extensions-panel.gif
similarity index 100%
rename from docs/v2/assets/img/extensions-panel.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/extensions-panel.gif
diff --git a/docs/v2/assets/img/extensions-toolbar-nested.gif b/platform/docs/versioned_docs/version-2.0/assets/img/extensions-toolbar-nested.gif
similarity index 100%
rename from docs/v2/assets/img/extensions-toolbar-nested.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/extensions-toolbar-nested.gif
diff --git a/docs/v2/assets/img/extensions-toolbar.gif b/platform/docs/versioned_docs/version-2.0/assets/img/extensions-toolbar.gif
similarity index 100%
rename from docs/v2/assets/img/extensions-toolbar.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/extensions-toolbar.gif
diff --git a/docs/v2/assets/img/extensions-viewport.png b/platform/docs/versioned_docs/version-2.0/assets/img/extensions-viewport.png
similarity index 100%
rename from docs/v2/assets/img/extensions-viewport.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/extensions-viewport.png
diff --git a/docs/v2/assets/img/homePage.png b/platform/docs/versioned_docs/version-2.0/assets/img/homePage.png
similarity index 100%
rename from docs/v2/assets/img/homePage.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/homePage.png
diff --git a/docs/v2/assets/img/jwt-explained.png b/platform/docs/versioned_docs/version-2.0/assets/img/jwt-explained.png
similarity index 100%
rename from docs/v2/assets/img/jwt-explained.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/jwt-explained.png
diff --git a/docs/v2/assets/img/keycloak-default-theme.png b/platform/docs/versioned_docs/version-2.0/assets/img/keycloak-default-theme.png
similarity index 100%
rename from docs/v2/assets/img/keycloak-default-theme.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/keycloak-default-theme.png
diff --git a/docs/v2/assets/img/keycloak-ohif-theme.png b/platform/docs/versioned_docs/version-2.0/assets/img/keycloak-ohif-theme.png
similarity index 100%
rename from docs/v2/assets/img/keycloak-ohif-theme.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/keycloak-ohif-theme.png
diff --git a/docs/v2/assets/img/lesionTracker.png b/platform/docs/versioned_docs/version-2.0/assets/img/lesionTracker.png
similarity index 100%
rename from docs/v2/assets/img/lesionTracker.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/lesionTracker.png
diff --git a/docs/v2/assets/img/locizeSponsor.svg b/platform/docs/versioned_docs/version-2.0/assets/img/locizeSponsor.svg
similarity index 100%
rename from docs/v2/assets/img/locizeSponsor.svg
rename to platform/docs/versioned_docs/version-2.0/assets/img/locizeSponsor.svg
diff --git a/docs/v2/assets/img/modal-example.gif b/platform/docs/versioned_docs/version-2.0/assets/img/modal-example.gif
similarity index 100%
rename from docs/v2/assets/img/modal-example.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/modal-example.gif
diff --git a/docs/v2/assets/img/netlify-drop.gif b/platform/docs/versioned_docs/version-2.0/assets/img/netlify-drop.gif
similarity index 100%
rename from docs/v2/assets/img/netlify-drop.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/netlify-drop.gif
diff --git a/docs/v2/assets/img/nginx-image-archive.png b/platform/docs/versioned_docs/version-2.0/assets/img/nginx-image-archive.png
similarity index 100%
rename from docs/v2/assets/img/nginx-image-archive.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/nginx-image-archive.png
diff --git a/docs/v2/assets/img/notification-example.gif b/platform/docs/versioned_docs/version-2.0/assets/img/notification-example.gif
similarity index 100%
rename from docs/v2/assets/img/notification-example.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/notification-example.gif
diff --git a/docs/v2/assets/img/open-graph.png b/platform/docs/versioned_docs/version-2.0/assets/img/open-graph.png
similarity index 100%
rename from docs/v2/assets/img/open-graph.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/open-graph.png
diff --git a/docs/v2/assets/img/scope-of-project.png b/platform/docs/versioned_docs/version-2.0/assets/img/scope-of-project.png
similarity index 100%
rename from docs/v2/assets/img/scope-of-project.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/scope-of-project.png
diff --git a/docs/v2/assets/img/services.png b/platform/docs/versioned_docs/version-2.0/assets/img/services.png
similarity index 100%
rename from docs/v2/assets/img/services.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/services.png
diff --git a/docs/v2/assets/img/surge-deploy.gif b/platform/docs/versioned_docs/version-2.0/assets/img/surge-deploy.gif
similarity index 100%
rename from docs/v2/assets/img/surge-deploy.gif
rename to platform/docs/versioned_docs/version-2.0/assets/img/surge-deploy.gif
diff --git a/docs/v2/assets/img/ui-services.png b/platform/docs/versioned_docs/version-2.0/assets/img/ui-services.png
similarity index 100%
rename from docs/v2/assets/img/ui-services.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/ui-services.png
diff --git a/docs/v2/assets/img/user-access-control-request-flow.png b/platform/docs/versioned_docs/version-2.0/assets/img/user-access-control-request-flow.png
similarity index 100%
rename from docs/v2/assets/img/user-access-control-request-flow.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/user-access-control-request-flow.png
diff --git a/docs/v2/assets/img/viewer.png b/platform/docs/versioned_docs/version-2.0/assets/img/viewer.png
similarity index 100%
rename from docs/v2/assets/img/viewer.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/viewer.png
diff --git a/docs/v2/assets/img/worklist.png b/platform/docs/versioned_docs/version-2.0/assets/img/worklist.png
similarity index 100%
rename from docs/v2/assets/img/worklist.png
rename to platform/docs/versioned_docs/version-2.0/assets/img/worklist.png
diff --git a/platform/docs/versioned_docs/version-2.0/configuring/_category_.json b/platform/docs/versioned_docs/version-2.0/configuring/_category_.json
new file mode 100644
index 000000000..eef358871
--- /dev/null
+++ b/platform/docs/versioned_docs/version-2.0/configuring/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Configuring",
+ "position": 4
+}
diff --git a/docs/v2/configuring/data-source.md b/platform/docs/versioned_docs/version-2.0/configuring/data-source.md
similarity index 98%
rename from docs/v2/configuring/data-source.md
rename to platform/docs/versioned_docs/version-2.0/configuring/data-source.md
index 1f9cbbb5b..cc932255f 100644
--- a/docs/v2/configuring/data-source.md
+++ b/platform/docs/versioned_docs/version-2.0/configuring/data-source.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 2
+---
# Data Source
After following the steps outlined in
@@ -107,11 +110,10 @@ to `Orthanc`. This allows us to bypass CORS issues that normally occur when
requesting resources that live at a different domain.
The `APP_CONFIG` value tells our app which file to load on to `window.config`.
-By default, our app uses the file at
-`/platform/viewer/public/config/default.js`. Here is what that
+Here is what that
configuration looks like:
-```js
+```js title="/platform/viewer/public/config/default.js"
window.config = {
routerBasename: '/',
servers: {
diff --git a/docs/v2/configuring/index.md b/platform/docs/versioned_docs/version-2.0/configuring/index.md
similarity index 95%
rename from docs/v2/configuring/index.md
rename to platform/docs/versioned_docs/version-2.0/configuring/index.md
index 73b65e4a8..3d602fa40 100644
--- a/docs/v2/configuring/index.md
+++ b/platform/docs/versioned_docs/version-2.0/configuring/index.md
@@ -1,15 +1,14 @@
+---
+sidebar_position: 1
+---
+
# Configuration
> This step assumes you have an imaging archive. If you need assistance setting
> one up, check out the [`Data Source` Guide](./data-source.md) or a deployment
> recipe that contains an open Image Archive
-- [Overview](#overview)
- - [Configuration Files](#configuration-files)
- - [Environment Variables](#environment-variables)
-- [How do I configure my project?](#how-do-i-configure-my-project)
-## Overview
### Configuration Files
@@ -45,9 +44,8 @@ alternative data source (or even specify different default hotkeys).
The simplest way is to update the existing default config:
-_/platform/viewer/public/config/default.js_
-```js
+```js title="/platform/viewer/public/config/default.js"
window.config = {
routerBasename: '/',
servers: {
diff --git a/platform/docs/versioned_docs/version-2.0/deployment/_category_.json b/platform/docs/versioned_docs/version-2.0/deployment/_category_.json
new file mode 100644
index 000000000..88be8d879
--- /dev/null
+++ b/platform/docs/versioned_docs/version-2.0/deployment/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Deployment",
+ "position": 8
+}
diff --git a/docs/v2/deployment/index.md b/platform/docs/versioned_docs/version-2.0/deployment/index.md
similarity index 99%
rename from docs/v2/deployment/index.md
rename to platform/docs/versioned_docs/version-2.0/deployment/index.md
index 8959fac7d..995a48077 100644
--- a/docs/v2/deployment/index.md
+++ b/platform/docs/versioned_docs/version-2.0/deployment/index.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
# Deployment
The OHIF Viewer can be embedded in other web applications via it's [packaged
@@ -7,7 +11,6 @@ either case, you will need to configure your instance of the Viewer so that it
can connect to your data source (the database or PACS that provides the data
your Viewer will display).
-## Overview
Our goal is to make deployment as simple and painless as possible; however,
there is an inherent amount of complexity in configuring and deploying web
@@ -26,7 +29,8 @@ include tags.
- Read more about it here: [Embedded Viewer](./recipes/embedded-viewer.md)
- And check out our [live demo on CodeSandbox][code-sandbox]
-{% include "./_embedded-viewer-diagram.md" %}
+
+
### Stand-alone Viewer
@@ -144,7 +148,7 @@ The returned JSON object must contain a single root object with a 'studies' arra
*Sample JSON format:*
-```JSON
+```json
{
"studies": [
{
diff --git a/platform/docs/versioned_docs/version-2.0/deployment/recipes/_category_.json b/platform/docs/versioned_docs/version-2.0/deployment/recipes/_category_.json
new file mode 100644
index 000000000..5b36cc15d
--- /dev/null
+++ b/platform/docs/versioned_docs/version-2.0/deployment/recipes/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Recipes",
+ "position": 2
+}
diff --git a/docs/v2/deployment/recipes/build-for-production.md b/platform/docs/versioned_docs/version-2.0/deployment/recipes/build-for-production.md
similarity index 98%
rename from docs/v2/deployment/recipes/build-for-production.md
rename to platform/docs/versioned_docs/version-2.0/deployment/recipes/build-for-production.md
index 5328a7963..7ba3bb64b 100644
--- a/docs/v2/deployment/recipes/build-for-production.md
+++ b/platform/docs/versioned_docs/version-2.0/deployment/recipes/build-for-production.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 2
+---
# Build for Production
> If you've already followed the
@@ -33,7 +36,7 @@ _From .zip:_
Open your terminal, and navigate to the directory containing the source files.
Next run these commands:
-```js
+```bash
// If you haven't already, enable yarn workspaces
yarn config set workspaces-experimental true
@@ -100,7 +103,7 @@ A quick way to test your build output locally is to spin up a small webserver.
You can do this by running the following commands in the `dist/` output
directory:
-```js
+```bash
// Install http-server as a globally available package
yarn global add http-server
diff --git a/docs/v2/deployment/recipes/embedded-viewer.md b/platform/docs/versioned_docs/version-2.0/deployment/recipes/embedded-viewer.md
similarity index 98%
rename from docs/v2/deployment/recipes/embedded-viewer.md
rename to platform/docs/versioned_docs/version-2.0/deployment/recipes/embedded-viewer.md
index 86aea531b..b3a125659 100644
--- a/docs/v2/deployment/recipes/embedded-viewer.md
+++ b/platform/docs/versioned_docs/version-2.0/deployment/recipes/embedded-viewer.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 1
+---
# Embedded Viewer
The quickest and easiest way to get the OHIF Viewer up and running is to embed
@@ -5,7 +8,12 @@ it into an existing web application. It allows us to forego a "build step", and
add a powerful medical imaging viewer to an existing web page using only a few
include tags. Here's how it works:
-{% include "./../_embedded-viewer-diagram.md" %}
+
+
+
+
+
+
1. Create a new web page or template that includes the following external
dependencies:
@@ -127,7 +135,7 @@ globally defined styles/scripts.
> react-dom and react conflicts. What can we do?
If you are installing OHIF viewer inside another react app, you may use `installViewer` as follows:
-```
+```jsx
import { installViewer } from '@ohif/viewer'
const ohifViewerConfig = window.config // or set it here
diff --git a/docs/v2/connecting-to-image-archives/google-cloud-healthcare.md b/platform/docs/versioned_docs/version-2.0/deployment/recipes/google-cloud-healthcare.md
similarity index 99%
rename from docs/v2/connecting-to-image-archives/google-cloud-healthcare.md
rename to platform/docs/versioned_docs/version-2.0/deployment/recipes/google-cloud-healthcare.md
index 6fce2746b..a7055881c 100644
--- a/docs/v2/connecting-to-image-archives/google-cloud-healthcare.md
+++ b/platform/docs/versioned_docs/version-2.0/deployment/recipes/google-cloud-healthcare.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 6
+---
+
# Google Cloud Healthcare
> The [Google Cloud Healthcare API](https://cloud.google.com/healthcare/) is a
diff --git a/docs/v2/deployment/recipes/nginx--image-archive.md b/platform/docs/versioned_docs/version-2.0/deployment/recipes/nginx--image-archive.md
similarity index 99%
rename from docs/v2/deployment/recipes/nginx--image-archive.md
rename to platform/docs/versioned_docs/version-2.0/deployment/recipes/nginx--image-archive.md
index e445607cf..eddb0ddea 100644
--- a/docs/v2/deployment/recipes/nginx--image-archive.md
+++ b/platform/docs/versioned_docs/version-2.0/deployment/recipes/nginx--image-archive.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 4
+---
# Nginx + Image Archive
> DISCLAIMER! We make no claims or guarantees of this approach's security. If in
@@ -58,7 +61,8 @@ CORS][understanding-cors]
This setup allows us to create a setup similar to the one pictured below:
-{% include "./../_nginx-image-archive-diagram.md" %}
+
+
- All web requests are routed through `nginx` on our `OpenResty` image
- `/pacs` is a reverse proxy for `orthanc`'s `DICOM Web` endpoints
diff --git a/docs/v2/deployment/recipes/static-assets.md b/platform/docs/versioned_docs/version-2.0/deployment/recipes/static-assets.md
similarity index 92%
rename from docs/v2/deployment/recipes/static-assets.md
rename to platform/docs/versioned_docs/version-2.0/deployment/recipes/static-assets.md
index 4e5712f78..de217f4c0 100644
--- a/docs/v2/deployment/recipes/static-assets.md
+++ b/platform/docs/versioned_docs/version-2.0/deployment/recipes/static-assets.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+sidebar_label: Assets
+---
# Deploy Static Assets
> WARNING! All of these solutions stand-up a publicly accessible web viewer. Do
@@ -25,9 +29,16 @@ _Easy_
_Advanced_
-- [AWS S3 + Cloudfront](#aws-s3--cloudfront)
-- [GCP + Cloudflare](#gcp--cloudflare)
-- [Azure](#azure)
+- [Deploy Static Assets](#deploy-static-assets)
+ - [Drag-n-drop](#drag-n-drop)
+ - [Netlify: Drop](#netlify-drop)
+ - [Easy](#easy)
+ - [Surge.sh](#surgesh)
+ - [GitHub Pages](#github-pages)
+ - [Advanced](#advanced)
+ - [AWS S3 + Cloudfront](#aws-s3--cloudfront)
+ - [GCP + Cloudflare](#gcp--cloudflare)
+ - [Azure](#azure)
## Drag-n-drop
diff --git a/docs/v2/deployment/recipes/user-account-control.md b/platform/docs/versioned_docs/version-2.0/deployment/recipes/user-account-control.md
similarity index 99%
rename from docs/v2/deployment/recipes/user-account-control.md
rename to platform/docs/versioned_docs/version-2.0/deployment/recipes/user-account-control.md
index 44eee3030..ea5757df5 100644
--- a/docs/v2/deployment/recipes/user-account-control.md
+++ b/platform/docs/versioned_docs/version-2.0/deployment/recipes/user-account-control.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 5
+---
# User Account Control
> DISCLAIMER! We make no claims or guarantees of this approach's security. If in
@@ -32,7 +35,9 @@ applications and services with little to no code. We improve upon our
This setup allows us to create a setup similar to the one pictured below:
-{% include "./../_user-account-control-flow-diagram.md" %}
+
+
+
- All web requests are routed through `nginx` on our `OpenResty` image
- `/pacs` is a reverse proxy for `orthanc`'s `DICOM Web` endpoints
diff --git a/platform/docs/versioned_docs/version-2.0/development/_category_.json b/platform/docs/versioned_docs/version-2.0/development/_category_.json
new file mode 100644
index 000000000..3f6ccc7e8
--- /dev/null
+++ b/platform/docs/versioned_docs/version-2.0/development/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Development",
+ "position": 3
+}
diff --git a/docs/v2/development/continous-integration.md b/platform/docs/versioned_docs/version-2.0/development/continous-integration.md
similarity index 90%
rename from docs/v2/development/continous-integration.md
rename to platform/docs/versioned_docs/version-2.0/development/continous-integration.md
index cfc9a09a0..fd3bbb45e 100644
--- a/docs/v2/development/continous-integration.md
+++ b/platform/docs/versioned_docs/version-2.0/development/continous-integration.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+title: Continous Integration
+---
# Continous Integration (CI)
This repository uses `CircleCI` and `Netlify` for continous integration.
@@ -25,12 +29,15 @@ The PR_CHECKS workflow (Pull Request Checks) runs our automated unit and
end-to-end tests for every code check-in. These tests must all pass before code
can be merged to our `master` branch.
-
+
+
+
+
### Workflow: PR_OPTIONAL_DOCKER_PUBLISH
@@ -38,12 +45,16 @@ The PR_OPTIONAL_DOCKER_PUBLISH workflow allows for "manual approval" to publish
the pull request as a tagged docker image. This is helpful when changes need to
be tested with the Google Adapter before merging to `master`.
-
+
+
+
+
+
> NOTE: This workflow will fail unless it's for a branch on our `upstream`
> repository. If you need this functionality, but the branch is from a fork,
@@ -56,12 +67,14 @@ It uses the Netlify CLI to deploy assets created as part of the repository's PWA
Build process (`yarn run build`). The workflow allows for "Manual Approval" to
promote the build to `STAGING` and `PRODUCTION` environments.
-
+
+
+
+
### HOTFIX
diff --git a/docs/v2/development/contributing.md b/platform/docs/versioned_docs/version-2.0/development/contributing.md
similarity index 90%
rename from docs/v2/development/contributing.md
rename to platform/docs/versioned_docs/version-2.0/development/contributing.md
index 6e7128501..53f687e20 100644
--- a/docs/v2/development/contributing.md
+++ b/platform/docs/versioned_docs/version-2.0/development/contributing.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 2
+title: Contributing
+---
# Contributing
## How can I help?
@@ -7,8 +11,8 @@ like to discuss the changes you intend to make to clarify where or how they
should be implemented, please don't hesitate to create a new issue. At a
minimum, you may want to read the following documentation:
-- [Getting Started](/development/getting-started.md)
-- [Architecture](/architecture/index.md)
+- [Getting Started](./getting-started.md)
+- [Architecture](../Architecture.md)
Pull requests that are:
@@ -34,8 +38,7 @@ dependencies:
On your local file system:
-```bash
-# code/my-projects/
+```bash title="/my-projects/"
.
├── cornerstonejs/cornerstone-tools
└── ohif/viewers
@@ -55,12 +58,10 @@ On your local file system:
As you make changed to `cornerstone-tools`, and it's output is rebuilt, you
should see the following behavior:
-
+
+
+
+
If you wish to stop using your local package, run the following commands in the
`ohif/viewers` repository root:
@@ -72,8 +73,7 @@ If you wish to stop using your local package, run the following commands in the
On your local file system:
-```bash
-# code/my-projects/
+```bash title="/my-projects/"
.
├── ohif/react-vtkjs-viewport
└── ohif/viewers
diff --git a/docs/v2/development/getting-started.md b/platform/docs/versioned_docs/version-2.0/development/getting-started.md
similarity index 87%
rename from docs/v2/development/getting-started.md
rename to platform/docs/versioned_docs/version-2.0/development/getting-started.md
index 1015281f3..0474ef1f0 100644
--- a/docs/v2/development/getting-started.md
+++ b/platform/docs/versioned_docs/version-2.0/development/getting-started.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 1
+title: Getting Started
+---
# Getting Started
## Setup
@@ -69,10 +73,12 @@ You should see the following output:
-
-
- Our app, hosted by the development server
-
+
+
+
+
+
+
### Building for Production
diff --git a/docs/v2/development/testing.md b/platform/docs/versioned_docs/version-2.0/development/testing.md
similarity index 99%
rename from docs/v2/development/testing.md
rename to platform/docs/versioned_docs/version-2.0/development/testing.md
index 396a10104..4ca92dcbd 100644
--- a/docs/v2/development/testing.md
+++ b/platform/docs/versioned_docs/version-2.0/development/testing.md
@@ -1,4 +1,8 @@
-# Contributing: Tests
+---
+sidebar_position: 4
+title: Testing
+---
+# Tests
> Testing is an opinionated topic. Here is a rough overview of our testing
> philosiphy. See something you want to discuss or think should be changed? Open
diff --git a/platform/docs/versioned_docs/version-2.0/extensions/_category_.json b/platform/docs/versioned_docs/version-2.0/extensions/_category_.json
new file mode 100644
index 000000000..51dd48da0
--- /dev/null
+++ b/platform/docs/versioned_docs/version-2.0/extensions/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Extensions",
+ "position": 6
+}
diff --git a/docs/v2/extensions/index.md b/platform/docs/versioned_docs/version-2.0/extensions/index.md
similarity index 72%
rename from docs/v2/extensions/index.md
rename to platform/docs/versioned_docs/version-2.0/extensions/index.md
index de0659b36..0f4c12221 100644
--- a/docs/v2/extensions/index.md
+++ b/platform/docs/versioned_docs/version-2.0/extensions/index.md
@@ -1,29 +1,25 @@
-# Extensions
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
+# Overview
-- [Overview](#overview)
-- [Concepts](#concepts)
- - [Extension Skeleton](#extension-skeleton)
- - [Registering an Extension](#registering-an-extension)
- - [Lifecylce Hooks](#lifecycle-hooks)
- - [Modules](#modules)
- - [Contexts](#contexts)
-- [Consuming Extensions](#consuming-extensions)
- - [Extension Manager](#extensionmanager)
-- [Maintained Extensions](#maintained-extensions)
-## Overview
We use extensions to help us isolate and package groups of related features.
Extensions provide functionality, ui components, and new behaviors. Ideally,
they're built in a way that allows them to extend entirely different
implementations of the `@ohif/viewer` project.
-
+
+
+
+
The `@ohif/viewer`'s application level configuration gives us the ability to add
and configure extensions. When the application starts, extensions are registered
@@ -144,7 +140,7 @@ differently.
| [Toolbar](./modules/toolbar.md) | Adds buttons or custom components to the toolbar | Toolbar button, nested buttons, custom |
| [Viewport](./modules/viewport.md) | Adds a component responsible for rendering a "DisplaySet" | ``, `` |
-Tbl. Module types with abridged descriptions and examples. Each module links to a dedicated documentation page.
+Tbl. Module types with abridged descriptions and examples. Each module links to a dedicated documentation page.
### Contexts
@@ -227,7 +223,75 @@ A small number of powerful extensions for popular use cases are maintained by
OHIF. They're co-located in the [`OHIF/Viewers`][viewers-repo] repository, in
the top level [`extensions/`][ext-source] directory.
-{% include "./_maintained-extensions-table.md" %}
+
+ A viewport powered by cornerstone.js. Adds support for 2D DICOM rendering and manipulation, as well as support for the tools features in cornerstone-tools. Also adds "CINE Dialog" to the Toolbar.
+
+
+
## Example
diff --git a/docs/v2/services/index.md b/platform/docs/versioned_docs/version-2.0/services/index.md
similarity index 89%
rename from docs/v2/services/index.md
rename to platform/docs/versioned_docs/version-2.0/services/index.md
index aeda69c85..52960a8ea 100644
--- a/docs/v2/services/index.md
+++ b/platform/docs/versioned_docs/version-2.0/services/index.md
@@ -1,11 +1,9 @@
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
# Services Overview
-- [Overview](#overview)
-- [Kinds of Services](#kinds-of-services)
- - [Services (default)](#services-default)
- - [UI Services](#ui-services)
-- [Related Patterns](#related-patterns)
-
## Overview
Services are a beefier version of [commands][commands]. They provide a set of
@@ -31,7 +29,7 @@ them different below:
Services are a work in progress. As we are still in the progress of creating a
non-ui maintained service, this usage may change.
-[You can read more about default services: here](./default/index.md)
+[You can read more about default services: here](./default.md)
### UI Services
diff --git a/platform/docs/versioned_docs/version-2.0/services/ui/_category_.json b/platform/docs/versioned_docs/version-2.0/services/ui/_category_.json
new file mode 100644
index 000000000..9c012134e
--- /dev/null
+++ b/platform/docs/versioned_docs/version-2.0/services/ui/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "UI Services",
+ "position": 3
+}
diff --git a/docs/v2/services/ui/index.md b/platform/docs/versioned_docs/version-2.0/services/ui/index.md
similarity index 86%
rename from docs/v2/services/ui/index.md
rename to platform/docs/versioned_docs/version-2.0/services/ui/index.md
index 3de1aa4e1..84e34d3d8 100644
--- a/docs/v2/services/ui/index.md
+++ b/platform/docs/versioned_docs/version-2.0/services/ui/index.md
@@ -1,22 +1,24 @@
+---
+sidebar_position: 1
+sidebar_label: Overview
+---
# UI Services
-- [Overview](#overview)
-- [Example](#example)
-- [Tips & Tricks](#tips--tricks)
-- [Maintained Services](#maintained-services)
-
-## Overview
-
A typical web application will have components and state for common UI like
modals, notifications, dialogs, etc. A UI service makes it possible to leverage
these components from an extension.
-
+
+
+
+
+
+
In `@ohif/core`, we have a collection of service factories. We select one we
would like our application to support, create an instance of it, and pass that
@@ -63,12 +65,15 @@ if (UINotificationService) {
}
```
-
+
+
+
+GIF showing successful call of UINotificationService from an extension.
## Tips & Tricks
diff --git a/docs/v2/services/ui/ui-dialog-service.md b/platform/docs/versioned_docs/version-2.0/services/ui/ui-dialog-service.md
similarity index 93%
rename from docs/v2/services/ui/ui-dialog-service.md
rename to platform/docs/versioned_docs/version-2.0/services/ui/ui-dialog-service.md
index 441845ce5..f25d69b41 100644
--- a/docs/v2/services/ui/ui-dialog-service.md
+++ b/platform/docs/versioned_docs/version-2.0/services/ui/ui-dialog-service.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 2
+---
# UI Dialog Service
Dialogs have similar characteristics to that of Modals, but often with a
@@ -10,13 +13,14 @@ streamlined focus. They can be helpful when:
If you're curious about the DOs and DON'Ts of dialogs and modals, check out this
article: ["Best Practices for Modals / Overlays / Dialog Windows"][ux-article]
-
+
+
## Interface
For a more detailed look on the options and return values each of these methods
diff --git a/docs/v2/services/ui/ui-modal-service.md b/platform/docs/versioned_docs/version-2.0/services/ui/ui-modal-service.md
similarity index 93%
rename from docs/v2/services/ui/ui-modal-service.md
rename to platform/docs/versioned_docs/version-2.0/services/ui/ui-modal-service.md
index 89819da81..8c6dd05b9 100644
--- a/docs/v2/services/ui/ui-modal-service.md
+++ b/platform/docs/versioned_docs/version-2.0/services/ui/ui-modal-service.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 3
+---
# UI Modal Service
Modals have similar characteristics to that of Dialogs, but are often larger,
@@ -11,12 +14,14 @@ be centered, and not draggable. They're commonly used when:
If you're curious about the DOs and DON'Ts of dialogs and modals, check out this
article: ["Best Practices for Modals / Overlays / Dialog Windows"][ux-article]
-
+
+
+
## Interface
diff --git a/docs/v2/services/ui/ui-notification-service.md b/platform/docs/versioned_docs/version-2.0/services/ui/ui-notification-service.md
similarity index 93%
rename from docs/v2/services/ui/ui-notification-service.md
rename to platform/docs/versioned_docs/version-2.0/services/ui/ui-notification-service.md
index bc49f5bef..8b1f00d82 100644
--- a/docs/v2/services/ui/ui-notification-service.md
+++ b/platform/docs/versioned_docs/version-2.0/services/ui/ui-notification-service.md
@@ -1,3 +1,6 @@
+---
+sidebar_position: 4
+---
# UI Notification Service
Notifications can be annoying and disruptive. They can also deliver timely
@@ -12,13 +15,14 @@ guidance on when and how to use them:
If you're curious about the DOs and DON'Ts of notifications, check out this
article: ["How To Design Notifications For Better UX"][ux-article]
-
+
+
## Interface
For a more detailed look on the options and return values each of these methods
diff --git a/platform/docs/versioned_docs/version-2.0/viewer/_category_.json b/platform/docs/versioned_docs/version-2.0/viewer/_category_.json
new file mode 100644
index 000000000..d08a9f53b
--- /dev/null
+++ b/platform/docs/versioned_docs/version-2.0/viewer/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "Viewer",
+ "position": 5
+}
diff --git a/docs/v2/viewer/configuration.md b/platform/docs/versioned_docs/version-2.0/viewer/configuration.md
similarity index 91%
rename from docs/v2/viewer/configuration.md
rename to platform/docs/versioned_docs/version-2.0/viewer/configuration.md
index 838e5f5a4..443e9c477 100644
--- a/docs/v2/viewer/configuration.md
+++ b/platform/docs/versioned_docs/version-2.0/viewer/configuration.md
@@ -1,5 +1,16 @@
+---
+sidebar_position: 1
+sidebar_label: Configuration
+---
+
# Viewer: Configuration
+The OHIF Viewer Platform strives to be highly configurable and extensible. This
+makes it easier for our community members to keep their "secret sauce" private,
+and incentivises contributions back to the platform. The `@ohif/viewer` project
+of the platform is the lynchpin that combines everything to create our
+application.
+
We maintain a number of common viewer application configurations at
[`/platform/viewer/public/configs`][config-dir]. How these values are
passed to the viewer depend on how it's deployed, but the two most common paths
diff --git a/docs/v2/viewer/environment-variables.md b/platform/docs/versioned_docs/version-2.0/viewer/environment-variables.md
similarity index 90%
rename from docs/v2/viewer/environment-variables.md
rename to platform/docs/versioned_docs/version-2.0/viewer/environment-variables.md
index ce18f9849..4fd2691a4 100644
--- a/docs/v2/viewer/environment-variables.md
+++ b/platform/docs/versioned_docs/version-2.0/viewer/environment-variables.md
@@ -1,3 +1,7 @@
+---
+sidebar_position: 3
+sidebar_label: Environment Variables
+---
# Environment Variables
There are a number of environment variables we use at build time to influence the output application's behavior.
diff --git a/docs/v2/viewer/internationalization.md b/platform/docs/versioned_docs/version-2.0/viewer/internationalization.md
similarity index 91%
rename from docs/v2/viewer/internationalization.md
rename to platform/docs/versioned_docs/version-2.0/viewer/internationalization.md
index 8b75ac9fd..6087b0557 100644
--- a/docs/v2/viewer/internationalization.md
+++ b/platform/docs/versioned_docs/version-2.0/viewer/internationalization.md
@@ -1,18 +1,27 @@
+---
+sidebar_position: 4
+sidebar_label: Internationalization
+---
# Viewer: Internationalization
OHIF supports internationalization using [i18next](https://www.i18next.com/)
through the npm package [@ohif/i18n](https://www.npmjs.com/package/@ohif/i18n),
where is the main instance of i18n containing several languages and tools.
-
+
+
+
+
Our translation management is powered by
+ Locize
+ through their generous support of open source.
- );
- }}
-
-
-## Properties
-
-
diff --git a/platform/ui/src/components/DateRange/DateRange.mdx b/platform/ui/src/components/DateRange/DateRange.mdx
deleted file mode 100644
index f4fd66350..000000000
--- a/platform/ui/src/components/DateRange/DateRange.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
----
-name: Date Range
-menu: Form
-route: components/date-range
----
-
-import { useState } from 'react';
-import { Playground, Props } from 'docz';
-import { DateRange } from '../';
-
-# Date Range
-
-Date Range is used to select a range of dates.
-
-## Import
-
-```javascript
-import { DateRange } from '@ohif/ui';
-```
-
-## Date Range
-
-
- {() => {
- const [dates, setDates] = useState({
- startDate: null,
- endDate: null,
- });
- return (
-
-
- setDates({ startDate, endDate })
- }
- />
-
- );
- }}
-
-
-## Properties
-
-
diff --git a/platform/ui/src/components/Dropdown/Dropdown.mdx b/platform/ui/src/components/Dropdown/Dropdown.mdx
deleted file mode 100644
index be4cfe0c4..000000000
--- a/platform/ui/src/components/Dropdown/Dropdown.mdx
+++ /dev/null
@@ -1,68 +0,0 @@
----
-name: Dropdown
-menu: General
-route: components/dropdown
----
-
-import { Playground, Props } from 'docz';
-import { Dropdown, IconButton, Icon } from '../';
-
-# Dropdown
-
-This component is used when there are more than a few options to choose from. By
-hovering or clicking on the trigger, a dropdown menu will appear, which allows
-you to choose an option and execute the relevant action.
-
-## Import
-
-```javascript
-import { Dropdown } from '@ohif/ui';
-```
-
-
- {() => {
- const handleClick = () => {
- alert("Clicked");
- }
- return (
-
-
-
-
-
-
-
-
-
-
- );
- }}
-
-
-## Properties
-
-
diff --git a/platform/ui/src/components/ErrorBoundary/ErrorBoundary.mdx b/platform/ui/src/components/ErrorBoundary/ErrorBoundary.mdx
deleted file mode 100644
index f3136d1cb..000000000
--- a/platform/ui/src/components/ErrorBoundary/ErrorBoundary.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-name: Error Boundary
-menu: Data Display
-route: components/errorBoundary
----
-
-import { Playground, Props } from 'docz';
-import { ErrorBoundary } from '../';
-
-# Error Boundary
-
-This component can be used to display a message or handle unhandled errors.
-
-## Import
-
-```javascript
-import { ErrorBoundary } from '@ohif/ui';
-```
-
-## Basic usage
-
-
-
- );
- }}
-
-
-## Properties
-
-
diff --git a/platform/ui/src/components/Table/Table.mdx b/platform/ui/src/components/Table/Table.mdx
deleted file mode 100644
index dc38ffe11..000000000
--- a/platform/ui/src/components/Table/Table.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
----
-name: Table
-menu: Data Display
-route: components/table
----
-
-import { Playground, Props, Link } from 'docz';
-import { Table, TableHead, TableBody, TableRow, TableCell } from '../';
-
-# Table
-
-Tables display sets of data.
-
-_The Table component and its components in the tree are built using divs._
-
-## Import
-
-Check the given example below to see how to import each component to create a
-table.
-
-```javascript
-import { Table, TableBody, TableCell, TableHead, TableRow } from '@ohif/ui';
-```
-
-## Basic usage
-
-
-
- );
- }}
-
-
-## Properties
-
-
diff --git a/platform/ui/src/components/TooltipClipboard/TooltipClipboard.mdx b/platform/ui/src/components/TooltipClipboard/TooltipClipboard.mdx
deleted file mode 100644
index a3a8fa0c8..000000000
--- a/platform/ui/src/components/TooltipClipboard/TooltipClipboard.mdx
+++ /dev/null
@@ -1,30 +0,0 @@
----
-name: TooltipClipboard
-menu: Data Display
-route: components/tooltipClipboard
----
-
-import { Playground, Props } from 'docz';
-import { TooltipClipboard } from '../';
-
-# Tooltip Clipboard
-
-Tooltips display informative content when users hover over, focus on, or tap an
-element.
-
-## Import
-
-```javascript
-import { TooltipClipboard } from '@ohif/ui';
-```
-
-
-
- Text to be copied
-
- ); }}
-
-
-## Properties
-
-
diff --git a/platform/ui/src/components/Typography/Typography.mdx b/platform/ui/src/components/Typography/Typography.mdx
deleted file mode 100644
index 8ea3ccad1..000000000
--- a/platform/ui/src/components/Typography/Typography.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-name: Typography
-menu: General
-route: components/typography
----
-
-import { Playground, Props } from 'docz';
-import { Typography } from '../';
-
-# Typography
-
-Use typography to display text using the available props for customizing your
-content.
-
-## Import
-
-```javascript
-import { Typography } from '@ohif/ui';
-```
-
-## Basic usage
-
-
-
-
- h1. The five boxing wizards jump quickly.
-
-
- h2. The five boxing wizards jump quickly.
-
-
- h3. The five boxing wizards jump quickly.
-
-
- h4. The five boxing wizards jump quickly.
-
-
- h5. The five boxing wizards jump quickly.
-
-
- h6. The five boxing wizards jump quickly.
-
-
- subtitle. The five boxing wizards jump quickly.
-
-
- body. The five boxing wizards jump quickly.
-
-
-
-
-## Changing the HTML element
-
-There are different semantic elements to be used in the Typography component.
-You can use the prop `component` to associate the component to be rendered with
-a semantic element. The style of a Typography is independent of the semantic
-element.
-
-
-
@ohif/viewer is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.
+
@ohif/viewer is a zero-footprint medical image viewer provided by the Open Health Imaging Foundation (OHIF). It is a configurable and extensible progressive web application with out-of-the-box support for image archives which support DICOMweb.