Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
335 commits
Select commit Hold shift + click to select a range
54d9ea3
chore(version): Update package versions to 3.13.0-beta.38 [skip ci]
ohif-bot Mar 12, 2026
fe1ecfe
fix(window level): The window level value is not displayed by default…
jbocce Mar 13, 2026
d0bab78
chore(version): Update package versions to 3.13.0-beta.39 [skip ci]
ohif-bot Mar 13, 2026
d8d376e
fix(security): Bump flattened version to address CVE-2026-32141. (#5897)
jbocce Mar 13, 2026
40a472a
chore(version): Update package versions to 3.13.0-beta.40 [skip ci]
ohif-bot Mar 13, 2026
7a38903
fix(sr-hydration): enable hydration and arrow navigation for 3D SR me…
GhadeerAlbattarni Mar 16, 2026
15ef4c2
chore(version): Update package versions to 3.13.0-beta.41 [skip ci]
ohif-bot Mar 16, 2026
1df671e
feat: Add combined build (#5895)
wayfarer3130 Mar 17, 2026
69d8ad6
chore(version): Update package versions to 3.13.0-beta.42 [skip ci]
ohif-bot Mar 17, 2026
1d4802c
fix(SR): Added support for spline and live wire SR items. (#5870)
jbocce Mar 17, 2026
87eeefd
chore(version): Update package versions to 3.13.0-beta.43 [skip ci]
ohif-bot Mar 17, 2026
fe762b6
chore(tests): contour segment interactions e2e tests - rename and tog…
diattamo Mar 27, 2026
9718ecc
chore(version): Update package versions to 3.13.0-beta.44 [skip ci]
ohif-bot Mar 27, 2026
d7dd12a
chore(refactor): use public appConfig getter instead of private _appC…
pedrokohler Mar 27, 2026
485f0d7
chore(version): Update package versions to 3.13.0-beta.45 [skip ci]
ohif-bot Mar 27, 2026
2a728b2
refactor(tests): update viewport page object usage to async and updat…
GhadeerAlbattarni Mar 27, 2026
efac34d
chore(version): Update package versions to 3.13.0-beta.46 [skip ci]
ohif-bot Mar 27, 2026
e66fb5a
fix: prevent black viewport when navigating series with client-create…
GhadeerAlbattarni Mar 28, 2026
f999f3e
chore(version): Update package versions to 3.13.0-beta.47 [skip ci]
ohif-bot Mar 28, 2026
7929f08
fix(measurement): Restore viewport interactivity when deleting in-pro…
GhadeerAlbattarni Apr 1, 2026
a875d7d
chore(version): Update package versions to 3.13.0-beta.48 [skip ci]
ohif-bot Apr 1, 2026
b9029ef
fix(segmentation): restrict overlay segmentation menu to same frame o…
GhadeerAlbattarni Apr 2, 2026
d670fb1
chore(version): Update package versions to 3.13.0-beta.49 [skip ci]
ohif-bot Apr 2, 2026
5358a39
fix(security): update dependencies to fix security vulnerabilities (#…
jbocce Apr 2, 2026
d7ab507
chore(version): Update package versions to 3.13.0-beta.50 [skip ci]
ohif-bot Apr 2, 2026
84ddf78
fix(security): Update yarn.lock that was missed in PR #5936. (#5940)
jbocce Apr 3, 2026
fdf26aa
chore(version): Update package versions to 3.13.0-beta.51 [skip ci]
ohif-bot Apr 3, 2026
91a8715
feat(component): Adds SmartScrollbar to ui-next - OHIF-2558 (#5924)
dan-rukas Apr 6, 2026
68b10d3
fix(defaultRouteInit): pass sorted display sets to hanging protocol f…
pedrokohler Apr 6, 2026
74e656b
chore(version): Update package versions to 3.13.0-beta.52 [skip ci]
ohif-bot Apr 6, 2026
0e933c2
revert: rename DisplaySet.frameOfReferenceUID back to FrameOfReferenc…
GhadeerAlbattarni Apr 6, 2026
6cbad4f
chore(version): Update package versions to 3.13.0-beta.53 [skip ci]
ohif-bot Apr 6, 2026
d219171
fix(cornerstone): read FrameOfReferenceUID from display set in viewpo…
GhadeerAlbattarni Apr 8, 2026
0ddf32e
chore(version): Update package versions to 3.13.0-beta.54 [skip ci]
ohif-bot Apr 8, 2026
961eea1
fix: ignore auth in git (#5955)
sedghi Apr 10, 2026
66c8e0c
chore(version): Update package versions to 3.13.0-beta.55 [skip ci]
ohif-bot Apr 10, 2026
f6bbd5c
fix: A couple of changes to enable cs3d integration build (#5944)
wayfarer3130 Apr 10, 2026
3069d33
chore(version): Update package versions to 3.13.0-beta.56 [skip ci]
ohif-bot Apr 10, 2026
f5a66b9
fix: Enhance multiframe instance handling and improve instance valida…
sedghi Apr 13, 2026
6e4ef68
chore(version): Update package versions to 3.13.0-beta.57 [skip ci]
ohif-bot Apr 13, 2026
760adc5
Reformat in HP MPR (#5717)
wayfarer3130 Apr 14, 2026
31727c0
chore(version): Update package versions to 3.13.0-beta.58 [skip ci]
ohif-bot Apr 14, 2026
cc5dc20
fix: Use newer ONNX version and load without errors (#5854)
wayfarer3130 Apr 15, 2026
792f78e
chore: update Cornerstone3D to v4.21.7 (#5964)
GhadeerAlbattarni Apr 16, 2026
51e6b35
chore(version): Update package versions to 3.13.0-beta.59 [skip ci]
ohif-bot Apr 16, 2026
eede569
fix(configuration): Harden dynamic datasource URL trust boundaries an…
jbocce Apr 21, 2026
8a2fee4
chore(version): Update package versions to 3.13.0-beta.60 [skip ci]
ohif-bot Apr 21, 2026
8fc0dc1
feat(slice scrollbar): Integrate ViewportSliceProgressScrollbar with …
jbocce Apr 23, 2026
7008029
chore(version): Update package versions to 3.13.0-beta.61 [skip ci]
ohif-bot Apr 23, 2026
1fc97fe
fix(security): Patch protobufjs for CVE-2026-41242. (#5974)
jbocce Apr 23, 2026
5ba8339
chore(version): Update package versions to 3.13.0-beta.62 [skip ci]
ohif-bot Apr 23, 2026
f3cca21
fix(security): refine dynamic config URL trust policy and document tr…
jbocce Apr 27, 2026
c9c4f11
chore(version): Update package versions to 3.13.0-beta.63 [skip ci]
ohif-bot Apr 27, 2026
f8ccf9f
fix(seg): prevent segmentations from spreading to all viewports befor…
GhadeerAlbattarni Apr 27, 2026
0386003
chore(version): Update package versions to 3.13.0-beta.64 [skip ci]
ohif-bot Apr 27, 2026
62620af
test( zoomIn-tool): verify horizontal flip is preserved in magnified …
GhadeerAlbattarni Apr 29, 2026
90abd00
chore(version): Update package versions to 3.13.0-beta.65 [skip ci]
ohif-bot Apr 29, 2026
468e573
fix(config url): Hardening fetch options. (#5985)
jbocce Apr 29, 2026
e6816f6
chore(version): Update package versions to 3.13.0-beta.66 [skip ci]
ohif-bot Apr 29, 2026
691e267
feat(ui-next): Adds toggle state for ToolButton and Crosshair example…
dan-rukas Apr 30, 2026
5bccf0a
chore(version): Update package versions to 3.13.0-beta.67 [skip ci]
ohif-bot Apr 30, 2026
979d619
fix(ToolGroupService): Centralize tool binding persistence and provid…
jbocce May 5, 2026
d792bf7
chore(version): Update package versions to 3.13.0-beta.68 [skip ci]
ohif-bot May 5, 2026
5e624f1
fix(security): Patch axios security vulnerabilities. (#5998)
jbocce May 6, 2026
fbea158
chore(version): Update package versions to 3.13.0-beta.69 [skip ci]
ohif-bot May 6, 2026
9cf3149
test(e2e): replace waitForVolumeLoad with viewport render waits (#6000)
GhadeerAlbattarni May 7, 2026
13305de
chore(version): Update package versions to 3.13.0-beta.70 [skip ci]
ohif-bot May 7, 2026
37e19f7
fix: remove waitForVolumeLoad from main toolbar page object (#6004)
GhadeerAlbattarni May 7, 2026
8cd8ccc
chore(version): Update package versions to 3.13.0-beta.71 [skip ci]
ohif-bot May 7, 2026
397aa4d
fix(measurement-tracking): restore tracked state on undo after Delete…
GhadeerAlbattarni May 12, 2026
b058ec7
chore(version): Update package versions to 3.13.0-beta.72 [skip ci]
ohif-bot May 12, 2026
f231eff
feat(llm): add instructions md file for claude and other LLM tools (#…
IbrahimCSAE May 13, 2026
01b5c86
chore(version): Update package versions to 3.13.0-beta.73 [skip ci]
ohif-bot May 13, 2026
55b46f3
fix(security): Update various dependencies to fix security vulnerabil…
jbocce May 15, 2026
cb0cbe7
chore(version): Update package versions to 3.13.0-beta.74 [skip ci]
ohif-bot May 15, 2026
fe16e80
test(e2e): update Playwright screenshots and add better tests and ass…
jbocce May 18, 2026
8e8f574
chore(version): Update package versions to 3.13.0-beta.75 [skip ci]
ohif-bot May 18, 2026
77cd939
test(segmentation): add e2e test for deleting segmentation on second …
GhadeerAlbattarni May 19, 2026
64fa240
chore(version): Update package versions to 3.13.0-beta.76 [skip ci]
ohif-bot May 19, 2026
527cfb0
fix(segmentation): remove thresholdRange label in double-range tool s…
GhadeerAlbattarni May 19, 2026
6f92234
chore(version): Update package versions to 3.13.0-beta.77 [skip ci]
ohif-bot May 19, 2026
27af682
fix(measurements): read displayName in SplineROI and PlanarFreehandRO…
GhadeerAlbattarni May 19, 2026
1e91285
chore(version): Update package versions to 3.13.0-beta.78 [skip ci]
ohif-bot May 19, 2026
95251ab
fix(seg): prevent viewport orientation change when loading SEG in man…
GhadeerAlbattarni May 19, 2026
ef8bb55
chore(version): Update package versions to 3.13.0-beta.79 [skip ci]
ohif-bot May 19, 2026
09093b3
Update to use beta 5.0 of CS3D (#5904)
wayfarer3130 May 20, 2026
d186749
chore(version): Update package versions to 3.13.0-beta.80 [skip ci]
ohif-bot May 20, 2026
2258c79
feat(tests): Add tests for duplicating contour segments (#6002)
diattamo May 21, 2026
becd208
chore(version): Update package versions to 3.13.0-beta.81 [skip ci]
ohif-bot May 21, 2026
5762095
test(contour): add test for RT contour position after viewport maximi…
GhadeerAlbattarni May 22, 2026
9a2d2c3
chore(version): Update package versions to 3.13.0-beta.82 [skip ci]
ohif-bot May 22, 2026
0c1ca6b
fix(segmentation): restore navigation for duplicated contour segments…
GhadeerAlbattarni May 26, 2026
5ea22fc
chore(version): Update package versions to 3.13.0-beta.83 [skip ci]
ohif-bot May 26, 2026
bdcafc1
fix(security): Add tmp as a resolution to fix security vulnerability.…
jbocce May 27, 2026
9e7a358
chore(version): Update package versions to 3.13.0-beta.84 [skip ci]
ohif-bot May 27, 2026
daae4c1
feat(WorkList): New Study List (WorkList based on ui-next); old study…
jbocce May 28, 2026
550dec7
chore(version): Update package versions to 3.13.0-beta.85 [skip ci]
ohif-bot May 28, 2026
ff3e855
chore: Fix netlify deploy. (#6047)
jbocce May 28, 2026
1aaae12
chore(version): Update package versions to 3.13.0-beta.86 [skip ci]
ohif-bot May 28, 2026
9396e01
chore: Fix netlify deploy by updating various @babel dependencies. (#…
jbocce May 29, 2026
0885468
chore(version): Update package versions to 3.13.0-beta.87 [skip ci]
ohif-bot May 29, 2026
99c6154
fix(security): Patch axios vulnerabilities. (#6063)
jbocce Jun 5, 2026
a27f779
chore(version): Update package versions to 3.13.0-beta.88 [skip ci]
ohif-bot Jun 5, 2026
6dd150d
fix: ohif tests to run with cornerstone 3d 5.0 (#6043)
sedghi Jun 10, 2026
571c2b4
chore(version): Update package versions to 3.13.0-beta.89 [skip ci]
ohif-bot Jun 10, 2026
f1cc2ee
feat: Update to use pnpm (#6031)
wayfarer3130 Jun 12, 2026
a64fceb
chore(version): Update package versions to 3.13.0-beta.90 [skip ci]
ohif-bot Jun 12, 2026
e391e6d
fix: Fix the deployment to viewer-dev caused by missing .npmrc (#6076)
wayfarer3130 Jun 13, 2026
a219822
chore(version): Update package versions to 3.13.0-beta.91 [skip ci]
ohif-bot Jun 13, 2026
5cb2fb4
fix: pnpm deploy bugs for docs and viewer-dev (#6077)
wayfarer3130 Jun 13, 2026
da9fd90
chore(version): Update package versions to 3.13.0-beta.92 [skip ci]
ohif-bot Jun 13, 2026
256b834
fix(docs): remove stray tool-call tags breaking the MDX build (#6081)
wayfarer3130 Jun 16, 2026
780d172
chore(version): Update package versions to 3.13.0-beta.93 [skip ci]
ohif-bot Jun 16, 2026
6acbbc0
fix(security): Update dependencies to fix security vulnerabilities. (…
jbocce Jun 17, 2026
6e2d53f
chore(version): Update package versions to 3.13.0-beta.94 [skip ci]
ohif-bot Jun 17, 2026
0dd6571
chore(testing): Setup new self-hosted test runner (#6067)
jbocce Jun 18, 2026
ffd7884
chore(version): Update package versions to 3.13.0-beta.95 [skip ci]
ohif-bot Jun 18, 2026
17e12d5
fix: pnpm related dependency bugs - nothing funcitonal (#6094)
wayfarer3130 Jun 19, 2026
57d03fc
chore(version): Update package versions to 3.13.0-beta.96 [skip ci]
ohif-bot Jun 19, 2026
b59eb30
fix: Release deploy of docs (#6095)
wayfarer3130 Jun 19, 2026
419366b
chore(version): Update package versions to 3.13.0-beta.97 [skip ci]
ohif-bot Jun 19, 2026
5955151
test(contour): contour color change coverage (#6042)
diattamo Jun 20, 2026
ada2da3
test(contour): contour interactions delete segment (#6069)
diattamo Jun 20, 2026
fc994fe
chore(version): Update package versions to 3.13.0-beta.98 [skip ci]
ohif-bot Jun 20, 2026
b9cde49
feat(testing): OHIF Test Agent Skills (#5993)
diattamo Jun 20, 2026
1f6670c
chore(version): Update package versions to 3.13.0-beta.99 [skip ci]
ohif-bot Jun 20, 2026
b24f039
test(contour): Add the ContourSegmentToggleLock.spec.ts test file to …
diattamo Jun 23, 2026
7548829
chore(version): Update package versions to 3.13.0-beta.100 [skip ci]
ohif-bot Jun 23, 2026
c205965
chore(testing): Flock lock for playwright tests; Pin node version for…
jbocce Jun 23, 2026
20632f9
chore(version): Update package versions to 3.13.0-beta.101 [skip ci]
ohif-bot Jun 23, 2026
79cb235
chore(testing): Playwright tests for contour segmentation create, upd…
diattamo Jun 24, 2026
8f6947b
chore(version): Update package versions to 3.13.0-beta.102 [skip ci]
ohif-bot Jun 24, 2026
95200ec
test(segmentation): switch getSegmentCount to expect(rows).toHaveCoun…
diattamo Jun 24, 2026
589d6a1
chore(version): Update package versions to 3.13.0-beta.103 [skip ci]
ohif-bot Jun 24, 2026
ee165b4
Fix: Segmentation Hide All fails when switching from 2D to 3D fourUp …
nithin-trenser Jun 24, 2026
b7c8b86
chore(version): Update package versions to 3.13.0-beta.104 [skip ci]
ohif-bot Jun 24, 2026
661ecb5
fix(hotkeyBindings): consolidate Escape hotkey behavior for contour d…
jbocce Jun 26, 2026
e1bc625
chore(version): Update package versions to 3.13.0-beta.105 [skip ci]
ohif-bot Jun 26, 2026
03b180f
fix(colors): Replace hardcoded colors with theme tokens (#6040)
dan-rukas Jun 29, 2026
ac45a94
docs(site): add ui-next component documentation and upgrade Docusauru…
dan-rukas Jun 29, 2026
0fcebe0
chore(version): Update package versions to 3.13.0-beta.106 [skip ci]
ohif-bot Jun 29, 2026
0dfd321
feat(ui-next): Adds appearance dialog with theme presets and custom t…
dan-rukas Jun 29, 2026
4cdcd34
chore(version): Update package versions to 3.13.0-beta.107 [skip ci]
ohif-bot Jun 29, 2026
71c50db
fix(ci): deploy docs with Netlify CLI monorepo filter (#6115)
sedghi Jun 29, 2026
d4153f1
chore(version): Update package versions to 3.13.0-beta.108 [skip ci]
ohif-bot Jun 29, 2026
aa1ba77
fix(test): stabilize DICOM Tag Browser scrollbar screenshot (#6118)
sedghi Jun 30, 2026
cb6cdaf
chore(version): Update package versions to 3.13.0-beta.109 [skip ci]
ohif-bot Jun 30, 2026
38214f2
fix(wsi): mount WSI/SM viewports via setDisplaySets (#6107)
jbocce Jul 2, 2026
2800f82
chore(version): Update package versions to 3.13.0-beta.110 [skip ci]
ohif-bot Jul 2, 2026
e0f42d4
fix(dicom-pdf): enhance PDF loading with authentication support
sedghi Jul 6, 2026
973631b
chore(version): Update package versions to 3.13.0-beta.111 [skip ci]
ohif-bot Jul 6, 2026
f8546ce
fix: recipe config cleanup, report-only CSP, logout redirect validati…
sedghi Jul 7, 2026
e381d22
chore(version): Update package versions to 3.13.0-beta.112 [skip ci]
ohif-bot Jul 7, 2026
333d73e
fix(security): ignore decompress security vulnerability (#6125)
jbocce Jul 7, 2026
3d9a17b
chore(version): Update package versions to 3.13.0-beta.113 [skip ci]
ohif-bot Jul 7, 2026
3dd5c70
feat: Add customization URL parameter (#5992)
wayfarer3130 Jul 7, 2026
76687cf
chore(version): Update package versions to 3.13.0-beta.114 [skip ci]
ohif-bot Jul 7, 2026
84c7d17
feat: Add extensibility for tmtv and segmentation modes
wayfarer3130 Jul 8, 2026
1b6fa21
Revert "feat: Add extensibility for tmtv and segmentation modes"
wayfarer3130 Jul 8, 2026
b996070
chore(version): Update package versions to 3.13.0-beta.115 [skip ci]
ohif-bot Jul 8, 2026
dbb8b15
feat: Add support for labelmap seg images in any supported tsuid (als…
wayfarer3130 Jul 10, 2026
6b67610
fix: Several new worklist issues (#6130)
wayfarer3130 Jul 10, 2026
f79055f
chore(version): Update package versions to 3.13.0-beta.116 [skip ci]
ohif-bot Jul 10, 2026
b266c0a
feat: Add extensibility for tmtv and segmentation modes (#6128)
wayfarer3130 Jul 10, 2026
75105ce
chore(version): Update package versions to 3.13.0-beta.117 [skip ci]
ohif-bot Jul 10, 2026
9329dd5
test(core): use fake timers in Queue unit tests to stop CI flakes (#6…
sedghi Jul 10, 2026
2c54616
chore(version): Update package versions to 3.13.0-beta.118 [skip ci]
ohif-bot Jul 10, 2026
1eee3e6
fix(MetadataProvider): Correctly assign imageId for multiframe images…
sedghi Jul 10, 2026
6d8a275
chore(version): Update package versions to 3.13.0-beta.119 [skip ci]
ohif-bot Jul 10, 2026
9c76afa
feat(segmentation): replace One Click Segment with ClickSegmentTool (…
sedghi Jul 10, 2026
dc9df56
chore(version): Update package versions to 3.13.0-beta.120 [skip ci]
ohif-bot Jul 10, 2026
43226d9
fix(app): appearance modal provider scope, worklist preview persisten…
sedghi Jul 10, 2026
f0e2f64
chore(version): Update package versions to 3.13.0-beta.121 [skip ci]
ohif-bot Jul 10, 2026
01939e2
test: add E2E test for contour combine intersect and subtract operati…
GhadeerAlbattarni Jul 11, 2026
00bb77d
chore(version): Update package versions to 3.13.0-beta.122 [skip ci]
ohif-bot Jul 11, 2026
3c0e245
feat(next): native Generic Viewport migration (useNextViewports) (#6101)
sedghi Jul 11, 2026
7042122
fix(pt): resolve Philips PET private SUV bulkdata before scaling (#6096)
sedghi Jul 11, 2026
110b293
chore(version): Update package versions to 3.13.0-beta.123 [skip ci]
ohif-bot Jul 11, 2026
3d70db2
ui(ContextMenuViewport): move to ui-next with theme support (#6008)
dan-rukas Jul 13, 2026
03e17d7
fix(ui): clean up remaining legacy ui usage (#6140)
dan-rukas Jul 13, 2026
b880d2a
chore(version): Update package versions to 3.13.0-beta.124 [skip ci]
ohif-bot Jul 13, 2026
125a174
fix(cli): link and unlink extensions/modes with pnpm instead of yarn …
sedghi Jul 14, 2026
f7612cd
chore(version): Update package versions to 3.13.0-beta.125 [skip ci]
ohif-bot Jul 14, 2026
eb05fd3
chore(deps): bump @cornerstonejs to 5.6.1 and @kitware/vtk.js to 36.4…
sedghi Jul 15, 2026
f61fd45
chore(version): Update package versions to 3.13.0-beta.126 [skip ci]
ohif-bot Jul 15, 2026
a543fb9
fix(onboarding): use shepherd.js 15 to fix tour positioning crash (#6…
sedghi Jul 15, 2026
c05663a
chore(version): Update package versions to 3.13.0-beta.127 [skip ci]
ohif-bot Jul 15, 2026
7b0aff4
fix(dynamic-volume): restore kinetic analysis and segment stats on 4D…
sedghi Jul 15, 2026
4075ca9
chore(version): Update package versions to 3.13.0-beta.128 [skip ci]
ohif-bot Jul 15, 2026
fab2e62
fix(deps): pin websocket-driver to 0.7.5 (#6156)
sedghi Jul 17, 2026
31c9e1a
chore(version): Update package versions to 3.13.0-beta.129 [skip ci]
ohif-bot Jul 17, 2026
f0c8274
fix(cornerstone): bump cornerstone3D to 5.6.4 for mobile volume rende…
sedghi Jul 17, 2026
df390a2
chore(version): Update package versions to 3.13.0-beta.130 [skip ci]
ohif-bot Jul 17, 2026
7c176d3
fix(crosshairs): keep Crosshairs active alongside brush/zoom/pan in M…
sedghi Jul 17, 2026
baa22b8
chore(version): Update package versions to 3.13.0-beta.131 [skip ci]
ohif-bot Jul 17, 2026
583ef4d
fix(cornerstone): bump cornerstone3D to 5.6.7 (#6161)
sedghi Jul 17, 2026
d485ebb
chore(version): Update package versions to 3.13.0-beta.132 [skip ci]
ohif-bot Jul 17, 2026
9cdea04
fix(worklist): disable supportsFuzzyMatching on staticWado AWS source…
jbocce Jul 17, 2026
5611f97
chore(version): Update package versions to 3.13.0-beta.133 [skip ci]
ohif-bot Jul 17, 2026
c886696
fix(cornerstone): bump cornerstone3D to 5.6.8 (#6165)
sedghi Jul 19, 2026
28550c9
chore(version): Update package versions to 3.13.0-beta.134 [skip ci]
ohif-bot Jul 19, 2026
a26605f
fix(security): update dependencies to patch CVEs (#6169)
jbocce Jul 21, 2026
43f3f45
chore(version): Update package versions to 3.13.0-beta.135 [skip ci]
ohif-bot Jul 21, 2026
fb9d2d8
chore: release 3.13
jbocce Jul 21, 2026
7aec111
chore(version): Update package versions to 3.13.0 [skip ci]
ohif-bot Jul 21, 2026
6f9a114
fix(security): update dependencies to fix security vulnerabilities an…
jbocce Jul 23, 2026
9907b6e
chore(version): Update package versions to 3.13.1 [skip ci]
ohif-bot Jul 23, 2026
a2deb1b
fix(security): update postcss to 8.5.22 and release 3.13.2 (#6180)
jbocce Jul 24, 2026
6446e90
chore(version): Update package versions to 3.13.2 [skip ci]
ohif-bot Jul 24, 2026
cb648df
fix(security): update dependencies to fix brace-expansion security vu…
jbocce Aug 3, 2026
60dbb82
chore(version): Update package versions to 3.13.3 [skip ci]
ohif-bot Aug 3, 2026
35da6d4
fix(security): update dependencies to fix security vulnerabilities an…
jbocce Aug 10, 2026
e1cf19a
chore(version): Update package versions to 3.13.4 [skip ci]
ohif-bot Aug 10, 2026
ec924d8
fix(security): update dependencies to fix security vulnerabilities an…
jbocce Sep 1, 2026
4267d59
chore(version): Update package versions to 3.13.5 [skip ci]
ohif-bot Sep 1, 2026
50730e2
fix(security): Patch browserslist and fast-uri security vulnerabiliti…
jbocce Sep 3, 2026
1c3b334
chore(version): Update package versions to 3.13.6 [skip ci]
ohif-bot Sep 3, 2026
db54670
fix(dicom-pdf): guarantee the type of encapsulated documents and rele…
jbocce Sep 8, 2026
ab78a93
chore(version): Update package versions to 3.13.7 [skip ci]
ohif-bot Sep 8, 2026
469a891
fix(security): update dependencies to address several vulnerabilities…
jbocce Sep 9, 2026
d866f9b
chore(version): Update package versions to 3.13.8 [skip ci]
ohif-bot Sep 9, 2026
e124701
fix(security): update adm-zip version and release OHIF 3.13.9. (#6287)
jbocce Sep 21, 2026
5baeb16
chore(version): Update package versions to 3.13.9 [skip ci]
ohif-bot Sep 21, 2026
c158544
chore(version): bump version to 3.13.10 to release after previously f…
jbocce Sep 22, 2026
f6367c0
chore(version): Update package versions to 3.13.10 [skip ci]
ohif-bot Sep 22, 2026
9f9a9db
chore: merge upstream OHIF v3.13.0
igoroctaviano Sep 28, 2026
b97fe4d
chore: add IDC dependencies and generate pnpm lockfile
igoroctaviano Sep 28, 2026
09d7598
chore: merge v3.13.10 for security fixes
igoroctaviano Sep 28, 2026
bb372d3
chore: update IDC CI/CD scripts for OHIF 3.13 compatibility
igoroctaviano Sep 28, 2026
0ef83db
chore: update IDC code for OHIF 3.13.10 compatibility
igoroctaviano Sep 28, 2026
09a892c
fix(security): Various security patches; new GitHub release workflow;…
jbocce Sep 30, 2026
6f009f2
chore(version): Update package versions to 3.13.11 [skip ci]
ohif-bot Sep 30, 2026
6e552e3
chore(netlify): Fix broken netlify deploy in release/3.13 branch. Rel…
jbocce Oct 1, 2026
e844561
chore(version): Update package versions to 3.13.12 [skip ci]
ohif-bot Oct 1, 2026
00c3351
chore: merge v3.13.12 for security patches and updates
igoroctaviano Oct 3, 2026
0a56b26
fix: Update IDC config and extensions for OHIF 3.13.12 compatibility
igoroctaviano Oct 3, 2026
8ac5c5d
docs: add IDC migration tracking document
igoroctaviano Oct 3, 2026
dcaaf1e
docs: update migration TODO with GCP extension datasource fix
igoroctaviano Oct 3, 2026
db04d9f
docs: update migration TODO with GCP mode fixes
igoroctaviano Oct 3, 2026
8dc555f
chore: update lockfile for local gcp-mode/extension linking
igoroctaviano Oct 3, 2026
5989004
fix: update whiteLabeling to follow OHIF standard
igoroctaviano Oct 3, 2026
3e729c0
fix(MergeDataSource): tag instances from retrieve.series.metadata wit…
igoroctaviano Oct 3, 2026
8de020f
fix(MergeDataSource): improve series-to-datasource routing for merged…
igoroctaviano Oct 3, 2026
20035d7
chore: update configs and migration docs for OHIF 3.13
igoroctaviano Oct 3, 2026
65fc4b9
fix(patches): add VOI LUT function validation patch for Cornerstone core
igoroctaviano Oct 4, 2026
bd91b8b
chore: remove debug logs from MergeDataSource
igoroctaviano Oct 4, 2026
1bbac85
fix(patches): extend VOI LUT validation to all getVOIRangeFromWindowL…
igoroctaviano Oct 4, 2026
c4912ee
fix(patches): align VOI LUT validation with upstream cornerstone3D PR…
igoroctaviano Oct 4, 2026
c0acd97
fix: add missing Cornerstone AI and labelmap-interpolation dependencies
igoroctaviano Oct 4, 2026
6c9ac53
chore: update GCP mode and extension to merged main branches
igoroctaviano Oct 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
346 changes: 346 additions & 0 deletions .agents/skills/ohif-test-agent/SKILL.md

Large diffs are not rendered by default.

54 changes: 54 additions & 0 deletions .agents/skills/ohif-test-agent/assets/spec-template.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import {
checkForScreenshot,
expect,
screenShotPaths,
test,
visitStudy,
waitForViewportRenderCycle,
} from './utils';

test.beforeEach(async ({ page }) => {
// Pick the right UID + mode for your feature (see references/patterns-by-feature.md)
const studyInstanceUID = '1.3.6.1.4.1.25403.345050719074.3824.20170125095438.5';
const mode = 'viewer';
await visitStudy(page, studyInstanceUID, mode, 2000);
});

test.describe('FEATURE NAME', () => {
test('describes the behaviour in one sentence', async ({
page,
viewportPageObject,
mainToolbarPageObject,
rightPanelPageObject,
DOMOverlayPageObject, // capital D on purpose
}) => {
// 1. Arrange β€” select a tool, open a panel, etc.

// 2. Act β€” interact with the viewport.
// Prefer normalized (0–1) coordinates:
// const activeViewport = await viewportPageObject.active;
// await activeViewport.normalizedClickAt([{ x: 0.3, y: 0.3 }, { x: 0.7, y: 0.7 }]);

// For actions that re-render the viewport, gate on the render cycle
// instead of sleeping β€” start the watcher BEFORE the action:
// const cycle = waitForViewportRenderCycle(page);
// await action();
// await cycle;

// 3. Handle prompts (first measurement prompts for tracking; SEG/RT/SR prompts for hydration)
// await DOMOverlayPageObject.viewport.measurementTracking.confirm.click();

// 4. Assert canvas output via visual regression β€” object form, scoped to the
// viewport via a locator (not the full page). normalizedClip is only for
// clipping to a sub-region of that locator.
// await checkForScreenshot({
// page,
// locator: viewportPageObject.grid,
// screenshotPath: screenShotPaths.YOUR_CATEGORY.YOUR_KEY,
// });

// 5. Assert DOM state directly
// const count = await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount();
// expect(count).toBe(1);
});
});
72 changes: 72 additions & 0 deletions .agents/skills/ohif-test-agent/references/failure-triage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Failure triage

Before debugging, classify. Most OHIF test failures are timing or hydration β€” not real regressions.

| Category | Symptom | Fix |
|----------|---------|-----|
| Timing | Element not visible, action timeout | Add / increase the `delay` param of `visitStudy`; for actions that re-render viewports, use `waitForViewportRenderCycle(page)` (started before the action) instead of `waitForTimeout`; wrap the assertion in `expect.toPass({ timeout })` |
| Selector | Element not found | Verify `data-cy` on the target; confirm the panel is open (`toggle()` / `select()` before interacting); check for capital `D` in `DOMOverlayPageObject` when destructuring |
| Hydration | Segmentation/RT/SR not interactive | Ensure the `segmentationHydration.yes.click()` fired; wait for an observable hydrated state such as measurement/segment rows or the target series overlay, then wait for the resulting viewport render |
| Data | Study not found, empty viewport | Confirm the UID is in the canonical list (see [patterns-by-feature.md](patterns-by-feature.md)); confirm the mode supports the feature (segmentation tools aren't in `viewer` mode) |
| Visual drift | Screenshot mismatch but feature works | Have a human review the diff, then regenerate the baseline with `TEST_ENV=true pnpm exec playwright test --update-snapshots`. Do not adjust `maxDiffPixelRatio` or `threshold` to make a failing screenshot pass. |
| Real regression | Feature is actually broken | Report as a bug β€” this is the test doing its job |

## Prefer render-cycle waits over sleeps

If you're tempted to add `await page.waitForTimeout(2000)` after an action, ask whether the action re-rendered the viewport. If it did, use:

```ts
const cycle = waitForViewportRenderCycle(page);
await action();
await cycle;
await check();
```

The watcher must be created **before** the action β€” it waits for `needsRender` first, and that transition is gone by the time the action returns. See the "Wait for renders, don't sleep" section in [SKILL.md](../SKILL.md) and `tests/SEGHydrationFromMPR.spec.ts`.

### When the cycle helper times out at `waitForAnyViewportNeedsRender`

Symptom: the test fails inside `waitForAnyViewportNeedsRender` after 5s, with the action having actually completed in the UI. The action just doesn't transition the viewport through `needsRender` synchronously. Known cases:

- Hanging-protocol changes.
- **RTSTRUCT / contour segmentation hydration confirm.** SEG (labelmap) hydration does fire `needsRender`; contour does not. The fix is to gate on the actual end-state β€” for hydration in `beforeEach`, `await expect(page.getByTestId('data-row')).toHaveCount(N)` is the right wait.

Don't react by raising the cycle's timeout β€” the transition isn't coming. Replace the cycle wrapper with an auto-retrying DOM/SVG assertion, or `expect.toPass({ timeout })` around the assertion block.

An immediate `waitForViewportsRendered(page)` can also return too early when a click dispatches work through an asynchronous state machine: the old viewport is already `rendered` before the new series or annotations are applied. In that case, first wait for the target state (for example, hydrated measurement rows or the expected series overlay), then call `waitForViewportsRendered(page)` to settle that state's render.

## The `toPass` pattern

When an assertion needs to wait for async render / propagation:

```ts
await expect(async () => {
await rightPanelPageObject.labelMapSegmentationPanel.panel.segmentByText('Spleen').click();
await expect(activeViewport.overlayText.bottomRight.instanceNumber).toContainText('17/');
}).toPass({ timeout: 10_000 });
```

`toPass` reruns the assertion block until it succeeds or the timeout expires β€” cleaner than a hand-rolled retry loop and surfaces the last failure reason if it times out.

## Common `DOMOverlayPageObject` mistake

The fixture key is capital-D `DOMOverlayPageObject`, not lowercase. If your destructure is silently `undefined`, check the casing.

## `press` import mistake

`press` is NOT re-exported from `./utils`. `import { press } from './utils'` resolves to `undefined` and fails at runtime. Use:

```ts
import { press } from './utils/keyboardUtils';
await press({ page, key: 'ArrowDown', nTimes: 50 }); // object param, not (page, key)
```

## Visual regression iteration

Screenshots live under `tests/screenshots/chromium/<testFilePath>/`. To accept new output as the baseline:

```sh
TEST_ENV=true pnpm exec playwright test tests/YourSpec.spec.ts --update-snapshots
```

Review the resulting PNGs carefully β€” an agent-accepted baseline that's subtly wrong is worse than a failing test.
120 changes: 120 additions & 0 deletions .agents/skills/ohif-test-agent/references/page-objects.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# OHIF Page Object guide

> This file documents the **stable structural rules** of the page object system. For the current list of methods and properties on any class, **read the source under `tests/pages/`** β€” it is always authoritative, and it evolves as the product does. A static method table in a reference file goes stale the moment someone refactors; the source does not.

## How to discover the API of a page object

1. Find the relevant class in `tests/pages/`. File names match class names.
2. Read it end-to-end once β€” most are under a few hundred lines.
3. Some classes compose sub-objects (e.g. `RightPanelPageObject` holds a measurementsPanel, contourSegmentationPanel, labelMapSegmentationPanel, tmtvPanel, etc.). Those sub-objects usually live in the same file or a sibling under `tests/pages/`.
4. To see how a method is actually used, grep `tests/` or open the seed spec listed in [patterns-by-feature.md](patterns-by-feature.md). Real usage beats a synthesized signature every time.

Do not try to memorize a method surface from this file β€” it intentionally does not list one. It lists only the rules you cannot derive from the source by reading a single file.

---

## Stable rules

### Fixture keys (case-sensitive)

These are injected via `tests/utils/fixture.ts`. Destructure them from the test function's first argument β€” do not `new` them, because the fixture wires sub-objects to the correct `page` and hand-constructed instances skip that wiring.

- `viewportPageObject`
- `mainToolbarPageObject`
- `leftPanelPageObject`
- `rightPanelPageObject`
- `DOMOverlayPageObject` β€” **capital D**. A silent `undefined` destructure is almost always a casing typo here.
- `notFoundStudyPageObject`

If the fixture file is updated and new keys are added, they will show up there first β€” check it if something feels missing.

### Non-fixture page objects

Some page object classes are not fixture-injected. They are reached through an injected fixture:

- `DicomTagBrowserPageObject` β†’ via `DOMOverlayPageObject.dialog.dicomTagBrowser`
- `DataOverlayPageObject` β†’ via `viewportPageObject.getById(viewportId).overlayMenu.dataOverlay`

Both can be constructed manually (`new DataOverlayPageObject(page)`) if a test really needs a fresh instance, but the accessor path is the idiomatic one.

### Viewport wrapper vs. viewport instance

`viewportPageObject` is a **wrapper**. You almost always want a specific viewport out of it first:

- `await viewportPageObject.active` β€” the currently focused viewport
- `viewportPageObject.getAll()` β€” every viewport in the grid
- `viewportPageObject.getNth(i)` β€” zero-indexed
- `viewportPageObject.getById(cornerstoneViewportId)` β€” e.g. `'default'`, `'ctAXIAL'`

The object these return is the one with `normalizedClickAt`, `normalizedDragAt`, `overlayText`, `nthAnnotation`, etc. Reach for the viewport instance first, then call methods on it.

### Panel access order

Every `rightPanelPageObject` sub-panel follows the same three-step idiom: **open the side panel, `.select()` the sub-panel tab, then interact with `.panel.*`**. Skipping either of the first two is the most common cause of "element not found".

```ts
await rightPanelPageObject.toggle();
await rightPanelPageObject.measurementsPanel.select();
const count = await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount();
```

The exact row/action methods vary by panel β€” check the source file for the one you need.

### Layout identifiers are camelCase JS properties

`mainToolbarPageObject.layoutSelection.<layout>.click()` β€” access layouts by camelCase property name (e.g. `threeDFourUp`, `axialPrimary`), not with bracket-escaped DICOM-ish strings like `['3DFourUp']`. This is a convention enforced by how the class exposes its tools.

### Sub-tools auto-open their dropdown

Tools nested inside a toolbar dropdown (measurement tools, more tools, layouts) each expose a `.click()` that opens the parent menu for you. You almost never need to open the menu first. `await mainToolbarPageObject.measurementTools.length.click()` does both the expand and the select.

### When the control you need isn't covered yet β€” create or augment

The page objects here cover what the suite currently exercises. When your test needs a
control that isn't exposed, **extend the page object system rather than dropping a raw
`page.getByTestId(...)` into the spec.** A raw selector in a spec is the clearest tell
that the author didn't read the existing tests β€” it duplicates a locator that should
live in one place and bypasses the fixture wiring.

| What you need | Where it goes | Precedent to copy |
|---|---|---|
| A toolbar button/tool (Zoom, Pan) | a getter on `MainToolbarPageObject` | `crosshairs`, `measurementTools` |
| A menu / prompt / context menu / small dialog | `DOMOverlayPageObject` | `viewport.measurementTracking`, `dialog.input` |
| A large dialog with its own fields (User Preferences) | a **new** page object class reached via `DOMOverlayPageObject` | `DicomTagBrowserPageObject` (`DOMOverlayPageObject.dialog.dicomTagBrowser`) |
| Individual fields/rows in that dialog | methods/sub-objects on the dialog's page object | `DicomTagBrowserPageObject.seriesSelect` |
| Side-panel controls | `LeftPanelPageObject` / `RightPanelPageObject` | existing sub-panels |

Two more expectations:

- **Missing `data-cy`?** Add it to the source component and target it; don't fall back
to `getByRole`/text. `testIdAttribute` is `data-cy`, so `getByTestId('Zoom')` resolves
`[data-cy="Zoom"]`. Mention any attribute you added so it ships in the same PR.
- **Mirror the existing shape.** A new getter should look like its neighbors (return a
locator, or a small object with `.click()` etc.) so the new surface is
indistinguishable from what was already there.

Example β€” a "set the Zoom hotkey" test should make `mainToolbarPageObject.zoom`, an
options-menu accessor on `DOMOverlayPageObject`, and a `userPreferences` dialog page
object (with a per-hotkey field accessor) exist β€” then the spec reads as steps, not
selectors.

---

## Page object map β€” what each class is *for*

This table exists to help you pick the right file to open, not to enumerate methods. Source of truth for any specific method remains the `.ts` file.

| Class | File | Covers |
|-------|------|--------|
| ViewportPageObject | `tests/pages/ViewportPageObject.ts` | Cornerstone viewports β€” clicks, drags, overlays, annotations, crosshairs |
| MainToolbarPageObject | `tests/pages/MainToolbarPageObject.ts` | Top toolbar β€” measurement tools, more tools, layouts, crosshairs, pan |
| LeftPanelPageObject | `tests/pages/LeftPanelPageObject.ts` | Study browser β€” thumbnails, load by modality or description |
| RightPanelPageObject | `tests/pages/RightPanelPageObject.ts` | Side panels β€” measurements, contour seg, labelmap seg, TMTV, microscopy |
| DOMOverlayPageObject | `tests/pages/DOMOverlayPageObject.ts` | DOM overlays β€” dialogs, hydration/tracking prompts, context menus, tag-browser accessor |
| NotFoundStudyPageObject | `tests/pages/NotFoundStudyPageObject.ts` | Study-not-found error page |
| DicomTagBrowserPageObject | `tests/pages/DicomTagBrowserPageObject.ts` | Tag-browser dialog (non-fixture; reach via `DOMOverlayPageObject.dialog`) |
| DataOverlayPageObject | `tests/pages/DataOverlayPageObject.ts` | Data-overlay menu (non-fixture; reach via `viewport.overlayMenu`) |

If the directory adds or renames a file, that diff is your first clue and this table is your second β€” trust the directory.

For live usage, the seed spec in [patterns-by-feature.md](patterns-by-feature.md) shows how a class is actually called; the source file tells you everything else that's on it.
Loading
Loading