Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/workflows/deploy-to-github-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ on:
pull_request:
branches: [master]

concurrency:
group: deploy-gh-pages
cancel-in-progress: true

jobs:
deploy-to-github-pages:
name: "Deploy to GitHub Pages"
Expand All @@ -25,6 +29,6 @@ jobs:
- name: Build and deploy to GitHub Pages
run: |
git remote set-url origin https://git:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git
bun run deploy -- -u "github-actions-bot <support+actions@github.com>"
bun run deploy -- -u "github-actions-bot <support+actions@github.com>" -f
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,15 @@ Please refer to the [AppConfig.d.ts](src/AppConfig.d.ts) file for configuration

The configuration can be changed at build-time using the `REACT_APP_CONFIG` environment variable.

#### Runtime Server Selection

When `enableServerSelection` is enabled in config, users can switch the active DICOMweb server at runtime via the header.

- **Full URLs**: Paste the complete server URL (e.g. `https://healthcare.googleapis.com/v1/projects/.../dicomWeb`).
- **Path-only (GCP Healthcare)**: Paste a GCP DICOM store path without the domain (e.g. `/projects/my-project/locations/us-central1/datasets/my-dataset/dicomStores/my-store/dicomWeb`). The app prepends `https://healthcare.googleapis.com/v1` automatically.

Authorization is re-applied when switching servers, so a page reload is not needed after changing the active server.

### Handling Mixed Content and HTTPS

When deploying SLIM with HTTPS, you may encounter mixed content scenarios where your PACS/VNA server returns HTTP URLs in its responses. This commonly occurs when:
Expand Down
101 changes: 66 additions & 35 deletions bun.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions bunfig.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[test]
preload = ["./src/test/bun-preload.ts"]
1 change: 1 addition & 0 deletions craco.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module.exports = {
modifyVars: {
'@layout-header-background': '#007ea3',
'@primary-color': '#007ea3',
'@collapse-header-bg': '#e0f2f7',
'@processing-color': '#8cb8c6',
'@success-color': '#3f9c35',
'@warning-color': '#eeaf30',
Expand Down
21 changes: 21 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
## [0.45.4](https://github.com/ImagingDataCommons/slim/compare/v0.45.3...v0.45.4) (2026-05-05)


### Bug Fixes

* Address auto toggle of ann group ([#382](https://github.com/ImagingDataCommons/slim/issues/382)) ([3e01b9e](https://github.com/ImagingDataCommons/slim/commit/3e01b9ed7be20511aab28a25c3bcb5258c845849))

## [0.45.3](https://github.com/ImagingDataCommons/slim/compare/v0.45.2...v0.45.3) (2026-04-14)


### Bug Fixes

* **378/327/377/353:** DICOM tag browser, worklist (including Modalities in Study when QIDO omits it), overlay colormaps, header badge behavior, and test/tooling updates ([#379](https://github.com/ImagingDataCommons/slim/issues/379)) ([a7296e7](https://github.com/ImagingDataCommons/slim/commit/a7296e702002aa0b48c2681b3233aa8ccf018662))

## [0.45.2](https://github.com/ImagingDataCommons/slim/compare/v0.45.1...v0.45.2) (2026-03-11)


### Bug Fixes

* Address runtime server selection for partial url ([#375](https://github.com/ImagingDataCommons/slim/issues/375)) ([5a7ce80](https://github.com/ImagingDataCommons/slim/commit/5a7ce80d9710bc2b7a06c0c30a2a1b8ddd190eba))

## [0.45.1](https://github.com/ImagingDataCommons/slim/compare/v0.45.0...v0.45.1) (2025-12-17)


Expand Down
44 changes: 24 additions & 20 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "slim",
"version": "0.45.1",
"version": "0.45.4",
"private": true,
"author": "ImagingDataCommons",
"packageManager": "bun@latest",
Expand All @@ -16,6 +16,7 @@
"fmt": "biome format --write .",
"format": "biome format --write .",
"test": "biome check . && craco test --watchAll=false",
"test:bun": "bun test",
"predeploy": "REACT_APP_CONFIG=demo PUBLIC_URL='https://imagingdatacommons.github.io/slim/' ./scripts/set-git-env.sh craco build",
"deploy": "gh-pages -d build",
"clean": "rm -rf ./build ./node_modules",
Expand All @@ -36,12 +37,26 @@
"last 1 safari version"
]
},
"dependencies": {
"antd": "^4.22.8",
"classnames": "^2.2.6",
"dcmjs": "^0.35.0",
"detect-browser": "^5.2.1",
"dicom-microscopy-viewer": "^0.48.21",
"dicomweb-client": "0.10.3",
"oidc-client": "^1.11.5",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-error-boundary": "^3.1.4",
"react-icons": "^3.11.0",
"react-router-dom": "^6.3.0",
"retry": "^0.13.1"
},
"devDependencies": {
"ajv": "6.12.6",
"@biomejs/biome": "^2.0.0",
"@babel/preset-env": "^7.15.0",
"@babel/preset-react": "^7.17.12",
"@babel/preset-typescript": "^7.17.12",
"@biomejs/biome": "^2.0.0",
"@craco/craco": "^6.4.0",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/commit-analyzer": "^12.0.0",
Expand All @@ -52,6 +67,7 @@
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^7.1.2",
"@types/d3-dispatch": "3.0.6",
"@types/jest": "^28.1.3",
"@types/lodash": "^4.17.20",
"@types/node": "^14.14.9",
Expand All @@ -60,34 +76,22 @@
"@types/react-router-dom": "^5.3.3",
"@types/retry": "^0.12.1",
"@types/uuid": "^8.3.0",
"antd": "^4.22.8",
"classnames": "^2.2.6",
"ajv": "6.12.6",
"copy-webpack-plugin": "9.1.0",
"craco-less": "^2.0.0",
"dcmjs": "^0.35.0",
"detect-browser": "^5.2.1",
"dicom-microscopy-viewer": "^0.48.18",
"dicomweb-client": "0.10.3",
"eslint": "^8.57.0",
"eslint-plugin-sonarjs": "^0.25.0",
"gh-pages": "^5.0.0",
"oidc-client": "^1.11.5",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-icons": "^3.11.0",
"react-router-dom": "^6.3.0",
"happy-dom": "^20.8.7",
"husky": "^9.1.7",
"react-scripts": "5.0.0",
"react-test-renderer": "^18.2.0",
"retry": "^0.13.1",
"semantic-release": "21.1.2",
"sonarqube-scanner": "^4.3.0",
"typescript": "^4.7.4",
"husky": "^9.1.7"
},
"dependencies": {
"react-error-boundary": "^3.1.4"
"typescript": "^4.7.4"
},
"overrides": {
"@types/d3-dispatch": "3.0.6",
"nth-check": "2.0.1",
"wrap-ansi": "7.0.0",
"make-dir": "3.1.0",
Expand Down
33 changes: 33 additions & 0 deletions src/App.dark.less
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,41 @@
overflow: visible;
}

.ant-collapse-header {
font-weight: 600;
border-top: 1px solid rgba(0, 126, 163, 0.5);
border-bottom: 1px solid rgba(0, 126, 163, 0.5);
}

.ant-collapse-item + .ant-collapse-item .ant-collapse-header {
margin-top: -1px;
}

.ant-menu-submenu-title {
font-size: 'medium';
background-color: rgba(0, 126, 163, 0.25);
font-weight: 600;
border-top: 1px solid rgba(0, 126, 163, 0.5);
border-bottom: 1px solid rgba(0, 126, 163, 0.5);
}

.ant-menu-submenu + .ant-menu-submenu .ant-menu-submenu-title {
margin-top: -1px;
}

/* First section in sidebar has no top border */
.ant-layout-sider .ant-menu-inline > .ant-menu-submenu:first-child > .ant-menu-submenu-title {
border-top: none;
}

/* Settings drawer header border - matches section dividers (darker for contrast) */
.slim-settings-drawer .ant-drawer-header {
border-bottom: 1px solid rgba(0, 126, 163, 0.5);
}

/* Remove gap between submenu header and list content */
.ant-layout-sider .ant-list-item {
padding: 0;
}

.ol-overviewmap-box {
Expand Down
33 changes: 33 additions & 0 deletions src/App.light.less
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,41 @@
overflow: visible;
}

.ant-collapse-header {
font-weight: 600;
border-top: 1px solid rgba(0, 126, 163, 0.3);
border-bottom: 1px solid rgba(0, 126, 163, 0.3);
}

.ant-collapse-item + .ant-collapse-item .ant-collapse-header {
margin-top: -1px;
}

.ant-menu-submenu-title {
font-size: 'medium';
background-color: #e0f2f7;
font-weight: 600;
border-top: 1px solid rgba(0, 126, 163, 0.3);
border-bottom: 1px solid rgba(0, 126, 163, 0.3);
}

.ant-menu-submenu + .ant-menu-submenu .ant-menu-submenu-title {
margin-top: -1px;
}

/* First section in sidebar has no top border */
.ant-layout-sider .ant-menu-inline > .ant-menu-submenu:first-child > .ant-menu-submenu-title {
border-top: none;
}

/* Settings drawer header border - matches section dividers */
.slim-settings-drawer .ant-drawer-header {
border-bottom: 1px solid rgba(0, 126, 163, 0.3);
}

/* Remove gap between submenu header and list content */
.ant-layout-sider .ant-list-item {
padding: 0;
}

.ol-overviewmap-box {
Expand Down
Loading
Loading