@ohif/app 3.9.0-beta.4 → 3.9.0-beta.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/{117.bundle.a80b1511ef4b302fb7cc.js → 117.bundle.1f7b56504d506e7259e3.js} +66 -69
  2. package/dist/{889.bundle.6df37a2db81b97f4a76a.js → 121.bundle.e65afd9bfd1a425d0050.js} +40 -12
  3. package/dist/{998.bundle.f2ba5b6c1aa0caa6d672.js → 129.bundle.0be30c39fe5d8557b083.js} +40 -25
  4. package/dist/{574.bundle.72bd5061ccd504235419.js → 139.bundle.09e5af0a9ae8a285af77.js} +25 -37
  5. package/dist/{989.bundle.bf32dc457ea9abccca09.js → 14.bundle.cfafff5ce33c8fe9e536.js} +5 -5
  6. package/dist/{783.bundle.1f650e1ef1b10d19870f.js → 140.bundle.ebaef33bd84b37213744.js} +2 -2
  7. package/dist/{164.bundle.1da1cadb56951caef1d6.js → 164.bundle.2b23bfbcb23497d7c87a.js} +548 -301
  8. package/dist/{544.bundle.e8227e98860e39636a00.js → 172.bundle.e0ee762bee7496d6491e.js} +16 -30
  9. package/dist/{487.bundle.a517b1d6cd2d82b9a7ea.js → 194.bundle.9044099acbadc4c02d04.js} +5 -5
  10. package/dist/{699.bundle.f62694527f6dfe417f81.js → 211.bundle.318a1dde2daf28c0ca7e.js} +43 -5
  11. package/dist/{776.bundle.91747df457143051f872.js → 218.bundle.e00a7676e115e4bd4f0f.js} +10 -12
  12. package/dist/{236.bundle.4ca7987e1d57f60ec13a.js → 236.bundle.34db90a140e37d34fd71.js} +544 -221
  13. package/dist/{530.bundle.17b9a34fefff133e5379.js → 265.bundle.b32a0cc143efa80ee3cc.js} +8 -12
  14. package/dist/{862.bundle.55dde21bab4c841b6259.js → 323.bundle.955cc8f5eb5c01295118.js} +5 -9
  15. package/dist/{342.bundle.340982440de15f540a89.js → 342.bundle.fcb2038060a062129d34.js} +7 -0
  16. package/dist/{550.bundle.4f728d9ab7a8c7685abd.js → 363.bundle.e7332abbff673d8a79e4.js} +234 -150
  17. package/dist/{806.bundle.50e039eb624382ee1fce.js → 370.bundle.bd9884c274c26a54dfae.js} +101 -18
  18. package/dist/{682.bundle.0909fbf9a76430e4bbc9.js → 382.bundle.3060bce26740a347900b.js} +38 -5
  19. package/dist/{907.bundle.d2c612ec56380e73df89.js → 444.bundle.1a872eddff40579d7c84.js} +4 -4
  20. package/dist/{483.bundle.a353efc5a5dd563c903c.js → 483.bundle.0f1848f6a2cf34829fef.js} +16 -3
  21. package/dist/{35.bundle.0168d78bfad0cb784112.js → 501.bundle.2f703ca4598a3be0d748.js} +950 -348
  22. package/dist/{905.bundle.c1c60224a599e789feb4.js → 552.bundle.61343aead612379fb815.js} +3 -3
  23. package/dist/{981.bundle.cccdc8caaa5a11f4a998.js → 555.bundle.e849661a6879ce530191.js} +14 -13
  24. package/dist/{939.bundle.9d93b2e47c52338747a2.js → 612.bundle.297a033523539e0b47f9.js} +2 -2
  25. package/dist/{295.bundle.9926ff25c6dbf53845b1.js → 675.bundle.c9720f40fd7c7e9b7e54.js} +5 -9
  26. package/dist/{325.bundle.1c54c1689fb4b1955e8c.js → 717.bundle.444382300af90e310557.js} +58 -26
  27. package/dist/{722.bundle.2547630541b670f10d6e.js → 722.bundle.1242e0348afc63ca4f5e.js} +10 -4
  28. package/dist/{121.bundle.b582314ec0024fdf2d15.js → 792.bundle.485ad2f98823a4b3feb1.js} +6 -10
  29. package/dist/{721.bundle.0de8f780088aee87dbd9.js → 799.bundle.1dde0deef2be81924d9d.js} +12 -12
  30. package/dist/{448.bundle.077b4b50ee63487516eb.js → 806.bundle.05f48607cfe443d63fc6.js} +19 -6
  31. package/dist/{297.bundle.194d8985ab974839b5b6.js → 837.bundle.ff9fe44bf863a5bceabc.js} +2 -2
  32. package/dist/{961.bundle.6aea7b3de9e93a9ebab1.js → 853.bundle.72427df14c9e5f55b0d6.js} +4 -4
  33. package/dist/{473.bundle.6cd4be953853f35b29c3.js → 914.bundle.e15be8089bf422ed7b51.js} +512 -274
  34. package/dist/{94.bundle.08683468d52365475d9a.js → 920.bundle.2ce2755d7ba79de478a2.js} +39 -9
  35. package/dist/{390.bundle.5a21388b461ee51db594.js → 944.bundle.260e4bf5a03ad05d11b7.js} +655 -95
  36. package/dist/{243.bundle.391c2805222b849abc2c.js → 989.bundle.50e94f736258c5d8f5b6.js} +4 -4
  37. package/dist/app-config.js +5 -1
  38. package/dist/{app.bundle.9e22e72ec23a08cde379.js → app.bundle.6834e46debda9e53f119.js} +167495 -48675
  39. package/dist/app.bundle.css +5 -4
  40. package/dist/assets/images/action-new-dialog.svg +14 -0
  41. package/dist/assets/images/arrow-down.svg +5 -0
  42. package/dist/assets/images/arrow-left-small.svg +6 -0
  43. package/dist/assets/images/arrow-left.svg +6 -0
  44. package/dist/assets/images/arrow-right-small.svg +6 -0
  45. package/dist/assets/images/arrow-right.svg +6 -0
  46. package/dist/assets/images/calendar.svg +5 -0
  47. package/dist/assets/images/cancel.svg +8 -0
  48. package/dist/assets/images/checkbox-active.svg +9 -0
  49. package/dist/assets/images/checkbox-checked.svg +9 -0
  50. package/dist/assets/images/checkbox-default.svg +3 -0
  51. package/dist/assets/images/checkbox-unchecked.svg +3 -0
  52. package/dist/assets/images/chevron-down.svg +3 -0
  53. package/dist/assets/images/chevron-left.svg +3 -0
  54. package/dist/assets/images/chevron-menu.svg +12 -0
  55. package/dist/assets/images/chevron-next.svg +6 -0
  56. package/dist/assets/images/chevron-prev.svg +6 -0
  57. package/dist/assets/images/chevron-right.svg +3 -0
  58. package/dist/assets/images/circled-checkmark.svg +6 -0
  59. package/dist/assets/images/clipboard.svg +1 -0
  60. package/dist/assets/images/closeIcon.svg +3 -0
  61. package/dist/assets/images/content-next.svg +9 -0
  62. package/dist/assets/images/content-prev.svg +9 -0
  63. package/dist/assets/images/dotted-circle.svg +3 -0
  64. package/dist/assets/images/edit-patient.svg +15 -0
  65. package/dist/assets/images/exclamation.svg +9 -0
  66. package/dist/assets/images/external-link.svg +5 -0
  67. package/dist/assets/images/eye-hidden.svg +8 -0
  68. package/dist/assets/images/eye-visible.svg +6 -0
  69. package/dist/assets/images/focus-frame-target.svg +13 -0
  70. package/dist/assets/images/group-layers.svg +6 -0
  71. package/dist/assets/images/icon-add.svg +15 -0
  72. package/dist/assets/images/icon-alert-small.svg +8 -0
  73. package/dist/assets/images/icon-chevron-patient.svg +12 -0
  74. package/dist/assets/images/icon-clear-field.svg +8 -0
  75. package/dist/assets/images/icon-close.svg +8 -0
  76. package/dist/assets/images/icon-color-lut.svg +23 -0
  77. package/dist/assets/images/icon-delete.svg +17 -0
  78. package/dist/assets/images/icon-disclosure-close.svg +12 -0
  79. package/dist/assets/images/icon-disclosure-open.svg +12 -0
  80. package/dist/assets/images/icon-display-settings.svg +21 -0
  81. package/dist/assets/images/icon-more-menu.svg +17 -0
  82. package/dist/assets/images/icon-mpr-alt.svg +9 -0
  83. package/dist/assets/images/icon-multiple-patients.svg +21 -0
  84. package/dist/assets/images/icon-next-inactive.svg +6 -0
  85. package/dist/assets/images/icon-next.svg +6 -0
  86. package/dist/assets/images/icon-patient.svg +13 -0
  87. package/dist/assets/images/icon-pause.svg +6 -0
  88. package/dist/assets/images/icon-play.svg +6 -0
  89. package/dist/assets/images/icon-prev-inactive.svg +6 -0
  90. package/dist/assets/images/icon-prev.svg +6 -0
  91. package/dist/assets/images/icon-rename.svg +15 -0
  92. package/dist/assets/images/icon-search.svg +9 -0
  93. package/dist/assets/images/icon-settings.svg +13 -0
  94. package/dist/assets/images/icon-status-alert.svg +8 -0
  95. package/dist/assets/images/icon-tool-scissor.svg +17 -0
  96. package/dist/assets/images/icon-toolbar-back.svg +12 -0
  97. package/dist/assets/images/icon-transferring.svg +6 -0
  98. package/dist/assets/images/icon-upload.svg +6 -0
  99. package/dist/assets/images/icons-alert-outline.svg +8 -0
  100. package/dist/assets/images/illustration-investigational-use.svg +20 -0
  101. package/dist/assets/images/info-action.svg +10 -0
  102. package/dist/assets/images/info-link.svg +7 -0
  103. package/dist/assets/images/info.svg +3 -0
  104. package/dist/assets/images/launch-arrow.svg +7 -0
  105. package/dist/assets/images/launch-info.svg +8 -0
  106. package/dist/assets/images/layout-advanced-3d-four-up.svg +13 -0
  107. package/dist/assets/images/layout-advanced-3d-main.svg +12 -0
  108. package/dist/assets/images/layout-advanced-3d-only.svg +9 -0
  109. package/dist/assets/images/layout-advanced-3d-primary.svg +12 -0
  110. package/dist/assets/images/layout-advanced-axial-primary.svg +11 -0
  111. package/dist/assets/images/layout-advanced-mpr.svg +11 -0
  112. package/dist/assets/images/layout-common-1x1.svg +9 -0
  113. package/dist/assets/images/layout-common-1x2.svg +10 -0
  114. package/dist/assets/images/layout-common-2x2.svg +11 -0
  115. package/dist/assets/images/layout-common-2x3.svg +12 -0
  116. package/dist/assets/images/list-bullets.svg +10 -0
  117. package/dist/assets/images/loading-ohif-mark.svg +5 -0
  118. package/dist/assets/images/lock.svg +1 -0
  119. package/dist/assets/images/logo-ohif-small.svg +5 -0
  120. package/dist/assets/images/magnifier.svg +7 -0
  121. package/dist/assets/images/navigation-panel-right-hide.svg +5 -0
  122. package/dist/assets/images/navigation-panel-right-reveal.svg +5 -0
  123. package/dist/assets/images/next-arrow.svg +12 -0
  124. package/dist/assets/images/notifications-error.svg +8 -0
  125. package/dist/assets/images/notifications-info.svg +8 -0
  126. package/dist/assets/images/notifications-success.svg +6 -0
  127. package/dist/assets/images/notifications-warning.svg +8 -0
  128. package/dist/assets/images/notificationwarning-diamond.svg +10 -0
  129. package/dist/assets/images/ohif-logo-color-darkbg.svg +20 -0
  130. package/dist/assets/images/ohif-logo.svg +18 -0
  131. package/dist/assets/images/old-play.svg +9 -0
  132. package/dist/assets/images/old-stop.svg +9 -0
  133. package/dist/assets/images/old-trash.svg +9 -0
  134. package/dist/assets/images/panel-group-more.svg +6 -0
  135. package/dist/assets/images/panel-group-open-close.svg +6 -0
  136. package/dist/assets/images/pencil.svg +4 -0
  137. package/dist/assets/images/power-off.svg +11 -0
  138. package/dist/assets/images/prev-arrow.svg +12 -0
  139. package/dist/assets/images/profile.svg +1 -0
  140. package/dist/assets/images/push-left.svg +5 -0
  141. package/dist/assets/images/push-right.svg +5 -0
  142. package/dist/assets/images/row-add.svg +8 -0
  143. package/dist/assets/images/row-edit.svg +9 -0
  144. package/dist/assets/images/row-hidden.svg +11 -0
  145. package/dist/assets/images/row-lock.svg +7 -0
  146. package/dist/assets/images/row-shown.svg +9 -0
  147. package/dist/assets/images/row-unlock.svg +7 -0
  148. package/dist/assets/images/settings.svg +6 -0
  149. package/dist/assets/images/side-panel-close-left.svg +14 -0
  150. package/dist/assets/images/side-panel-close-right.svg +14 -0
  151. package/dist/assets/images/sorting-active-down.svg +6 -0
  152. package/dist/assets/images/sorting-active-up.svg +6 -0
  153. package/dist/assets/images/sorting.svg +6 -0
  154. package/dist/assets/images/status-alert-warning.svg +9 -0
  155. package/dist/assets/images/status-alert.svg +7 -0
  156. package/dist/assets/images/status-locked.svg +7 -0
  157. package/dist/assets/images/status-tracked.svg +7 -0
  158. package/dist/assets/images/status-untracked.svg +6 -0
  159. package/dist/assets/images/tab-4d.svg +13 -0
  160. package/dist/assets/images/tab-linear.svg +8 -0
  161. package/dist/assets/images/tab-patient-info.svg +7 -0
  162. package/dist/assets/images/tab-roi-threshold.svg +10 -0
  163. package/dist/assets/images/tab-segmentation.svg +11 -0
  164. package/dist/assets/images/tab-studies.svg +13 -0
  165. package/dist/assets/images/tool-3d-rotate.svg +20 -0
  166. package/dist/assets/images/tool-angle.svg +12 -0
  167. package/dist/assets/images/tool-annotate.svg +11 -0
  168. package/dist/assets/images/tool-bidirectional.svg +21 -0
  169. package/dist/assets/images/tool-calibrate.svg +19 -0
  170. package/dist/assets/images/tool-capture.svg +10 -0
  171. package/dist/assets/images/tool-cine.svg +9 -0
  172. package/dist/assets/images/tool-circle.svg +8 -0
  173. package/dist/assets/images/tool-cobb-angle.svg +14 -0
  174. package/dist/assets/images/tool-create-threshold.svg +9 -0
  175. package/dist/assets/images/tool-crosshair.svg +14 -0
  176. package/dist/assets/images/tool-dicom-tag-browser.svg +15 -0
  177. package/dist/assets/images/tool-flip-horizontal.svg +10 -0
  178. package/dist/assets/images/tool-freehand-polygon.svg +37 -0
  179. package/dist/assets/images/tool-freehand-roi.svg +12 -0
  180. package/dist/assets/images/tool-freehand.svg +34 -0
  181. package/dist/assets/images/tool-fusion-color.svg +13 -0
  182. package/dist/assets/images/tool-invert.svg +10 -0
  183. package/dist/assets/images/tool-layout-default.svg +22 -0
  184. package/dist/assets/images/tool-length.svg +16 -0
  185. package/dist/assets/images/tool-magnetic-roi.svg +17 -0
  186. package/dist/assets/images/tool-magnify.svg +7 -0
  187. package/dist/assets/images/tool-measure-elipse.svg +12 -0
  188. package/dist/assets/images/tool-more-menu.svg +6 -0
  189. package/dist/assets/images/tool-move.svg +13 -0
  190. package/dist/assets/images/tool-polygon.svg +3 -0
  191. package/dist/assets/images/tool-quick-magnify.svg +11 -0
  192. package/dist/assets/images/tool-rectangle.svg +12 -0
  193. package/dist/assets/images/tool-reference-lines.svg +13 -0
  194. package/dist/assets/images/tool-reset.svg +9 -0
  195. package/dist/assets/images/tool-rotate-right.svg +12 -0
  196. package/dist/assets/images/tool-seg-brush.svg +9 -0
  197. package/dist/assets/images/tool-seg-eraser.svg +10 -0
  198. package/dist/assets/images/tool-seg-shape.svg +9 -0
  199. package/dist/assets/images/tool-seg-threshold.svg +17 -0
  200. package/dist/assets/images/tool-spline-roi.svg +14 -0
  201. package/dist/assets/images/tool-stack-image-sync.svg +10 -0
  202. package/dist/assets/images/tool-stack-scroll.svg +10 -0
  203. package/dist/assets/images/tool-toggle-dicom-overlay.svg +9 -0
  204. package/dist/assets/images/tool-ultrasound-bidirectional.svg +15 -0
  205. package/dist/assets/images/tool-window-level.svg +9 -0
  206. package/dist/assets/images/tool-window-region.svg +12 -0
  207. package/dist/assets/images/tool-zoom.svg +9 -0
  208. package/dist/assets/images/tracked.svg +6 -0
  209. package/dist/assets/images/ui-arrow-down.svg +3 -0
  210. package/dist/assets/images/ui-arrow-left.svg +3 -0
  211. package/dist/assets/images/ui-arrow-right.svg +3 -0
  212. package/dist/assets/images/ui-arrow-up.svg +3 -0
  213. package/dist/assets/images/unlink.svg +9 -0
  214. package/dist/assets/images/viewport-status-tracked.svg +13 -0
  215. package/dist/assets/images/viewport-window-level.svg +17 -0
  216. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  217. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  218. package/dist/google.js +1 -0
  219. package/dist/{histogram-worker.bundle.829e14ec12c2b41a4323.js → histogram-worker.bundle.6b31e5ed4c4a7a6998f2.js} +2 -2
  220. package/dist/index.html +1 -1
  221. package/dist/{polySeg.bundle.1799686b019040500219.js → polySeg.bundle.df492df5042827938ba4.js} +3 -3
  222. package/dist/{suv-peak-worker.bundle.25f8b85eab9ec06da48d.js → suv-peak-worker.bundle.8f4b505fad3d371489fe.js} +4 -4
  223. package/dist/sw.js +1 -1
  224. package/package.json +26 -23
  225. /package/dist/{998.css → 129.css} +0 -0
  226. /package/dist/{574.css → 139.css} +0 -0
  227. /package/dist/{544.css → 172.css} +0 -0
  228. /package/dist/{550.css → 363.css} +0 -0
  229. /package/dist/{325.css → 404.css} +0 -0
  230. /package/dist/{481.css → 717.css} +0 -0
  231. /package/dist/{726.bundle.c8de818cf1a3ff0cf7d2.js → 726.bundle.90d63d40a19b058034ee.js} +0 -0
  232. /package/dist/{835.bundle.4c0eaa2c1a427ee41817.js → 835.bundle.5d1951da8bbc6afdf3e0.js} +0 -0
  233. /package/dist/{931.bundle.d270a1fda9a2836c3cc5.js → 931.bundle.058f8de4606f27b31f4f.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[390],{
2
+ (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[944],{
3
3
 
4
- /***/ 47390:
4
+ /***/ 16944:
5
5
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6
6
 
7
7
  // ESM COMPAT FLAG
@@ -33,9 +33,9 @@ __webpack_require__.d(utils_namespaceObject, {
33
33
  // EXTERNAL MODULE: ../../../node_modules/dicomweb-client/build/dicomweb-client.es.js
34
34
  var dicomweb_client_es = __webpack_require__(36922);
35
35
  // EXTERNAL MODULE: ../../core/src/index.ts + 72 modules
36
- var src = __webpack_require__(8633);
36
+ var src = __webpack_require__(75186);
37
37
  // EXTERNAL MODULE: ../../core/src/utils/sortStudy.ts
38
- var sortStudy = __webpack_require__(45476);
38
+ var sortStudy = __webpack_require__(75773);
39
39
  ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomWebDataSource/qido.js
40
40
  /**
41
41
  * QIDO - Query based on ID for DICOM Objects
@@ -1135,9 +1135,82 @@ StaticWadoClient.seriesFilterKeys = {
1135
1135
  seriesnumber: '00200011',
1136
1136
  modality: '00080060'
1137
1137
  };
1138
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/utils/getBulkdataValue.js
1139
+ /**
1140
+ * Generates a URL that can be used for direct retrieve of the bulkdata.
1141
+ *
1142
+ * @param {object} config - The configuration object.
1143
+ * @param {object} params - The parameters object.
1144
+ * @param {string} params.tag - The tag name of the URL to retrieve.
1145
+ * @param {string} params.defaultPath - The path for the pixel data URL.
1146
+ * @param {object} params.instance - The instance object that the tag is in.
1147
+ * @param {string} params.defaultType - The mime type of the response.
1148
+ * @param {string} params.singlepart - The type of the part to retrieve.
1149
+ * @param {string} params.fetchPart - Unknown.
1150
+ * @returns {string|Promise<string>} - An absolute URL to the resource, if the absolute URL can be retrieved as singlepart,
1151
+ * or is already retrieved, or a promise to a URL for such use if a BulkDataURI.
1152
+ */
1153
+ const getBulkdataValue = (config, params) => {
1154
+ const {
1155
+ instance,
1156
+ tag = 'PixelData',
1157
+ defaultPath = '/pixeldata',
1158
+ defaultType = 'video/mp4'
1159
+ } = params;
1160
+ const value = instance[tag];
1161
+ const {
1162
+ SeriesInstanceUID,
1163
+ SOPInstanceUID
1164
+ } = instance;
1165
+ const BulkDataURI = value && value.BulkDataURI || `series/${SeriesInstanceUID}/instances/${SOPInstanceUID}${defaultPath}`;
1166
+ const hasQuery = BulkDataURI.indexOf('?') !== -1;
1167
+ const hasAccept = BulkDataURI.indexOf('accept=') !== -1;
1168
+ const acceptUri = BulkDataURI + (hasAccept ? '' : (hasQuery ? '&' : '?') + `accept=${defaultType}`);
1169
+
1170
+ // The DICOMweb standard states that the default is multipart related, and then
1171
+ // separately states that the accept parameter is the URL parameter equivalent of the accept header.
1172
+ return acceptUri;
1173
+ };
1174
+ /* harmony default export */ const utils_getBulkdataValue = (getBulkdataValue);
1175
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/utils/createRenderedRetrieve.js
1176
+ /**
1177
+ * Generates the rendered URL that can be used for direct retrieve of the pixel data binary stream.
1178
+ *
1179
+ * @param {object} config - The configuration object.
1180
+ * @param {string} config.wadoRoot - The root URL for the WADO service.
1181
+ * @param {object} params - The parameters object.
1182
+ * @param {string} params.tag - The tag name of the URL to retrieve.
1183
+ * @param {string} params.defaultPath - The path for the pixel data URL.
1184
+ * @param {object} params.instance - The instance object that the tag is in.
1185
+ * @param {string} params.defaultType - The mime type of the response.
1186
+ * @param {string} params.singlepart - The type of the part to retrieve.
1187
+ * @param {string} params.fetchPart - Unknown parameter.
1188
+ * @param {string} params.url - Unknown parameter.
1189
+ * @returns {string|Promise<string>} - An absolute URL to the binary stream.
1190
+ */
1191
+ const createRenderedRetrieve = (config, params) => {
1192
+ const {
1193
+ wadoRoot
1194
+ } = config;
1195
+ const {
1196
+ instance,
1197
+ tag = 'PixelData'
1198
+ } = params;
1199
+ const {
1200
+ StudyInstanceUID,
1201
+ SeriesInstanceUID,
1202
+ SOPInstanceUID
1203
+ } = instance;
1204
+ if (tag === 'PixelData' || tag === 'EncapsulatedDocument') {
1205
+ return `${wadoRoot}/studies/${StudyInstanceUID}/series/${SeriesInstanceUID}/instances/${SOPInstanceUID}/rendered`;
1206
+ }
1207
+ };
1208
+ /* harmony default export */ const utils_createRenderedRetrieve = (createRenderedRetrieve);
1138
1209
  ;// CONCATENATED MODULE: ../../../extensions/default/src/utils/getDirectURL.js
1139
1210
 
1140
1211
 
1212
+
1213
+
1141
1214
  /**
1142
1215
  * Generates a URL that can be used for direct retrieve of the bulkdata
1143
1216
  *
@@ -1154,13 +1227,11 @@ StaticWadoClient.seriesFilterKeys = {
1154
1227
  */
1155
1228
  const getDirectURL = (config, params) => {
1156
1229
  const {
1157
- wadoRoot,
1158
1230
  singlepart
1159
1231
  } = config;
1160
1232
  const {
1161
1233
  instance,
1162
1234
  tag = 'PixelData',
1163
- defaultPath = '/pixeldata',
1164
1235
  defaultType = 'video/mp4',
1165
1236
  singlepart: fetchPart = 'video',
1166
1237
  url = null
@@ -1169,49 +1240,33 @@ const getDirectURL = (config, params) => {
1169
1240
  return url;
1170
1241
  }
1171
1242
  const value = instance[tag];
1172
- if (!value) {
1173
- return undefined;
1174
- }
1175
- if (value.DirectRetrieveURL) {
1176
- return value.DirectRetrieveURL;
1177
- }
1178
- if (value.InlineBinary) {
1179
- const blob = src.utils.b64toBlob(value.InlineBinary, defaultType);
1180
- value.DirectRetrieveURL = URL.createObjectURL(blob);
1181
- return value.DirectRetrieveURL;
1182
- }
1183
- if (!singlepart || singlepart !== true && singlepart.indexOf(fetchPart) === -1) {
1184
- if (value.retrieveBulkData) {
1185
- // Try the specified retrieve type.
1186
- const options = {
1187
- mediaType: defaultType
1188
- };
1189
- return value.retrieveBulkData(options).then(arr => {
1190
- value.DirectRetrieveURL = URL.createObjectURL(new Blob([arr], {
1191
- type: defaultType
1192
- }));
1193
- return value.DirectRetrieveURL;
1194
- });
1243
+ if (value) {
1244
+ if (value.DirectRetrieveURL) {
1245
+ return value.DirectRetrieveURL;
1246
+ }
1247
+ if (value.InlineBinary) {
1248
+ const blob = src.utils.b64toBlob(value.InlineBinary, defaultType);
1249
+ value.DirectRetrieveURL = URL.createObjectURL(blob);
1250
+ return value.DirectRetrieveURL;
1251
+ }
1252
+ if (!singlepart || singlepart !== true && singlepart.indexOf(fetchPart) === -1) {
1253
+ if (value.retrieveBulkData) {
1254
+ // Try the specified retrieve type.
1255
+ const options = {
1256
+ mediaType: defaultType
1257
+ };
1258
+ return value.retrieveBulkData(options).then(arr => {
1259
+ value.DirectRetrieveURL = URL.createObjectURL(new Blob([arr], {
1260
+ type: defaultType
1261
+ }));
1262
+ return value.DirectRetrieveURL;
1263
+ });
1264
+ }
1265
+ console.warn('Unable to retrieve', tag, 'from', instance);
1266
+ return undefined;
1195
1267
  }
1196
- console.warn('Unable to retrieve', tag, 'from', instance);
1197
- return undefined;
1198
- }
1199
- const {
1200
- StudyInstanceUID,
1201
- SeriesInstanceUID,
1202
- SOPInstanceUID
1203
- } = instance;
1204
- const BulkDataURI = value && value.BulkDataURI || `series/${SeriesInstanceUID}/instances/${SOPInstanceUID}${defaultPath}`;
1205
- const hasQuery = BulkDataURI.indexOf('?') !== -1;
1206
- const hasAccept = BulkDataURI.indexOf('accept=') !== -1;
1207
- const acceptUri = BulkDataURI + (hasAccept ? '' : (hasQuery ? '&' : '?') + `accept=${defaultType}`);
1208
- if (tag === 'PixelData' || tag === 'EncapsulatedDocument') {
1209
- return `${wadoRoot}/studies/${StudyInstanceUID}/series/${SeriesInstanceUID}/instances/${SOPInstanceUID}/rendered`;
1210
1268
  }
1211
-
1212
- // The DICOMweb standard states that the default is multipart related, and then
1213
- // separately states that the accept parameter is the URL parameter equivalent of the accept header.
1214
- return acceptUri;
1269
+ return utils_createRenderedRetrieve(config, params) || utils_getBulkdataValue(config, params);
1215
1270
  };
1216
1271
  /* harmony default export */ const utils_getDirectURL = (getDirectURL);
1217
1272
  ;// CONCATENATED MODULE: ../../../extensions/default/src/DicomWebDataSource/utils/fixBulkDataURI.ts
@@ -2653,10 +2708,10 @@ var react = __webpack_require__(41766);
2653
2708
  // EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
2654
2709
  var prop_types = __webpack_require__(11374);
2655
2710
  var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
2656
- // EXTERNAL MODULE: ../../ui/src/index.js + 785 modules
2657
- var ui_src = __webpack_require__(5085);
2711
+ // EXTERNAL MODULE: ../../ui/src/index.js + 782 modules
2712
+ var ui_src = __webpack_require__(79047);
2658
2713
  // EXTERNAL MODULE: ./state/index.js + 1 modules
2659
- var state = __webpack_require__(15575);
2714
+ var state = __webpack_require__(81883);
2660
2715
  // EXTERNAL MODULE: ../node_modules/react-router-dom/dist/index.js
2661
2716
  var dist = __webpack_require__(37396);
2662
2717
  // EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
@@ -2664,7 +2719,7 @@ var es = __webpack_require__(80619);
2664
2719
  // EXTERNAL MODULE: ../node_modules/react-router/dist/index.js
2665
2720
  var react_router_dist = __webpack_require__(10971);
2666
2721
  // EXTERNAL MODULE: ../../i18n/src/index.js + 150 modules
2667
- var i18n_src = __webpack_require__(912);
2722
+ var i18n_src = __webpack_require__(43608);
2668
2723
  ;// CONCATENATED MODULE: ../../../extensions/default/src/Toolbar/Toolbar.tsx
2669
2724
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2670
2725
 
@@ -2757,8 +2812,8 @@ function ViewerHeader({
2757
2812
  hotkeyDefinitions,
2758
2813
  hotkeyDefaults
2759
2814
  } = hotkeysManager;
2760
- const versionNumber = "3.9.0-beta.4";
2761
- const commitHash = "8fa339f296fd7e844f3879cfd81e47dbff315e66";
2815
+ const versionNumber = "3.9.0-beta.41";
2816
+ const commitHash = "55dcfa1f6994a7036e7e594efb23673382a41915";
2762
2817
  const menuOptions = [{
2763
2818
  title: t('Header:About'),
2764
2819
  icon: 'info',
@@ -4122,13 +4177,13 @@ function getPanelModule({
4122
4177
  }
4123
4178
  /* harmony default export */ const src_getPanelModule = (getPanelModule);
4124
4179
  // EXTERNAL MODULE: ../../core/src/utils/isImage.js
4125
- var isImage = __webpack_require__(8094);
4180
+ var isImage = __webpack_require__(92087);
4126
4181
  // EXTERNAL MODULE: ../../core/src/utils/sopClassDictionary.js
4127
- var sopClassDictionary = __webpack_require__(48085);
4182
+ var sopClassDictionary = __webpack_require__(6342);
4128
4183
  // EXTERNAL MODULE: ../../core/src/classes/ImageSet.ts
4129
- var ImageSet = __webpack_require__(14169);
4184
+ var ImageSet = __webpack_require__(61378);
4130
4185
  // EXTERNAL MODULE: ../../core/src/utils/isDisplaySetReconstructable.js
4131
- var isDisplaySetReconstructable = __webpack_require__(13835);
4186
+ var isDisplaySetReconstructable = __webpack_require__(52378);
4132
4187
  ;// CONCATENATED MODULE: ../../../extensions/default/package.json
4133
4188
  const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-default"}');
4134
4189
  ;// CONCATENATED MODULE: ../../../extensions/default/src/id.js
@@ -4136,7 +4191,7 @@ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"@ohif/extension-
4136
4191
  const id = package_namespaceObject.UU;
4137
4192
 
4138
4193
  // EXTERNAL MODULE: ../../core/src/utils/sortInstancesByPosition.ts
4139
- var sortInstancesByPosition = __webpack_require__(44563);
4194
+ var sortInstancesByPosition = __webpack_require__(7986);
4140
4195
  ;// CONCATENATED MODULE: ../../../extensions/default/src/utils/validations/checkMultiframe.ts
4141
4196
 
4142
4197
 
@@ -4158,7 +4213,7 @@ function checkMultiFrame(multiFrameInstance, messages) {
4158
4213
  }
4159
4214
  }
4160
4215
  // EXTERNAL MODULE: ../../core/src/utils/toNumber.js
4161
- var toNumber = __webpack_require__(58099);
4216
+ var toNumber = __webpack_require__(69508);
4162
4217
  ;// CONCATENATED MODULE: ../../../extensions/default/src/utils/validations/areAllImageDimensionsEqual.ts
4163
4218
 
4164
4219
 
@@ -4853,8 +4908,9 @@ function ToolbarLayoutSelectorWithServices({
4853
4908
  })));
4854
4909
  }
4855
4910
  function LayoutSelector({
4856
- rows,
4857
- columns,
4911
+ rows = 3,
4912
+ columns = 4,
4913
+ onLayoutChange = () => {},
4858
4914
  className,
4859
4915
  onSelection,
4860
4916
  onSelectionPreset,
@@ -4863,6 +4919,7 @@ function LayoutSelector({
4863
4919
  ...rest
4864
4920
  }) {
4865
4921
  const [isOpen, setIsOpen] = (0,react.useState)(false);
4922
+ const dropdownRef = (0,react.useRef)(null);
4866
4923
  const {
4867
4924
  customizationService
4868
4925
  } = servicesManager.services;
@@ -4870,15 +4927,21 @@ function LayoutSelector({
4870
4927
  const advancedPresets = customizationService.get('advancedPresets') || generateAdvancedPresets({
4871
4928
  servicesManager
4872
4929
  });
4873
- const closeOnOutsideClick = () => {
4874
- if (isOpen) {
4930
+ const closeOnOutsideClick = event => {
4931
+ if (isOpen && dropdownRef.current) {
4875
4932
  setIsOpen(false);
4876
4933
  }
4877
4934
  };
4878
4935
  (0,react.useEffect)(() => {
4879
- window.addEventListener('click', closeOnOutsideClick);
4936
+ if (!isOpen) {
4937
+ return;
4938
+ }
4939
+ setTimeout(() => {
4940
+ window.addEventListener('click', closeOnOutsideClick);
4941
+ }, 0);
4880
4942
  return () => {
4881
4943
  window.removeEventListener('click', closeOnOutsideClick);
4944
+ dropdownRef.current = null;
4882
4945
  };
4883
4946
  }, [isOpen]);
4884
4947
  const onInteractionHandler = () => {
@@ -4894,7 +4957,8 @@ function LayoutSelector({
4894
4957
  rounded: rest.rounded,
4895
4958
  disableToolTip: tooltipDisabled,
4896
4959
  dropdownContent: DropdownContent !== null && /*#__PURE__*/react.createElement("div", {
4897
- className: "flex "
4960
+ className: "flex",
4961
+ ref: dropdownRef
4898
4962
  }, /*#__PURE__*/react.createElement("div", {
4899
4963
  className: "bg-secondary-dark flex flex-col gap-2.5 p-2"
4900
4964
  }, /*#__PURE__*/react.createElement("div", {
@@ -4942,11 +5006,6 @@ LayoutSelector.propTypes = {
4942
5006
  onLayoutChange: (prop_types_default()).func,
4943
5007
  servicesManager: (prop_types_default()).object.isRequired
4944
5008
  };
4945
- LayoutSelector.defaultProps = {
4946
- columns: 4,
4947
- rows: 3,
4948
- onLayoutChange: () => {}
4949
- };
4950
5009
  /* harmony default export */ const ToolbarLayoutSelector = (ToolbarLayoutSelectorWithServices);
4951
5010
  ;// CONCATENATED MODULE: ../../../extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx
4952
5011
  function ToolbarSplitButtonWithServices_extends() { ToolbarSplitButtonWithServices_extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ToolbarSplitButtonWithServices_extends.apply(this, arguments); }
@@ -4993,7 +5052,6 @@ function ToolbarSplitButtonWithServices({
4993
5052
  });
4994
5053
  }
4995
5054
  ToolbarSplitButtonWithServices.propTypes = {
4996
- isRadio: (prop_types_default()).bool,
4997
5055
  groupId: (prop_types_default()).string,
4998
5056
  primary: prop_types_default().shape({
4999
5057
  id: (prop_types_default()).string.isRequired,
@@ -5023,10 +5081,6 @@ ToolbarSplitButtonWithServices.propTypes = {
5023
5081
  })
5024
5082
  })
5025
5083
  };
5026
- ToolbarSplitButtonWithServices.defaultProps = {
5027
- isRadio: false,
5028
- isAction: false
5029
- };
5030
5084
  /* harmony default export */ const Toolbar_ToolbarSplitButtonWithServices = (ToolbarSplitButtonWithServices);
5031
5085
  ;// CONCATENATED MODULE: ../../../extensions/default/src/Toolbar/ToolbarButtonGroupWithServices.tsx
5032
5086
 
@@ -5062,7 +5116,7 @@ function ToolbarButtonGroupWithServices({
5062
5116
  return /*#__PURE__*/react.createElement(ui_src/* ButtonGroup */.e2, null, getSplitButtonItems(items));
5063
5117
  }
5064
5118
  /* harmony default export */ const Toolbar_ToolbarButtonGroupWithServices = (ToolbarButtonGroupWithServices);
5065
- ;// CONCATENATED MODULE: ../../../extensions/default/src/components/ProgressDropdownWithService/ProgressDropdownWithService.tsx
5119
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/Components/ProgressDropdownWithService.tsx
5066
5120
 
5067
5121
 
5068
5122
  const workflowStepsToDropdownOptions = (steps = []) => steps.map(step => ({
@@ -5143,9 +5197,6 @@ function ProgressDropdownWithService({
5143
5197
  onChange: handleDropdownChange
5144
5198
  });
5145
5199
  }
5146
- /* harmony default export */ const ProgressDropdownWithService_ProgressDropdownWithService = (ProgressDropdownWithService);
5147
- ;// CONCATENATED MODULE: ../../../extensions/default/src/components/ProgressDropdownWithService/index.js
5148
-
5149
5200
  ;// CONCATENATED MODULE: ../../../extensions/default/src/getToolbarModule.tsx
5150
5201
 
5151
5202
 
@@ -5186,7 +5237,7 @@ function getToolbarModule({
5186
5237
  defaultComponent: Toolbar_ToolbarButtonGroupWithServices
5187
5238
  }, {
5188
5239
  name: 'ohif.progressDropdown',
5189
- defaultComponent: ProgressDropdownWithService_ProgressDropdownWithService
5240
+ defaultComponent: ProgressDropdownWithService
5190
5241
  }, {
5191
5242
  name: 'evaluate.group.promoteToPrimary',
5192
5243
  evaluate: ({
@@ -5384,7 +5435,7 @@ function adaptItem(item, subProps) {
5384
5435
  return newItem;
5385
5436
  }
5386
5437
  // EXTERNAL MODULE: ../../ui/src/components/ContextMenu/ContextMenu.tsx
5387
- var ContextMenu = __webpack_require__(59852);
5438
+ var ContextMenu = __webpack_require__(117);
5388
5439
  // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/index.js
5389
5440
  var dist_esm = __webpack_require__(39371);
5390
5441
  ;// CONCATENATED MODULE: ../../../extensions/default/src/CustomizableContextMenu/ContextMenuController.tsx
@@ -6282,7 +6333,7 @@ const findViewportsByPosition = (state, {
6282
6333
  };
6283
6334
  /* harmony default export */ const src_findViewportsByPosition = (findViewportsByPosition);
6284
6335
  // EXTERNAL MODULE: ./index.js + 35 modules
6285
- var index = __webpack_require__(68870);
6336
+ var index = __webpack_require__(40335);
6286
6337
  ;// CONCATENATED MODULE: ../../../extensions/default/src/commandsModule.ts
6287
6338
 
6288
6339
 
@@ -6847,7 +6898,7 @@ const commandsModule = ({
6847
6898
  };
6848
6899
  };
6849
6900
  /* harmony default export */ const src_commandsModule = (commandsModule);
6850
- ;// CONCATENATED MODULE: ../../../extensions/default/src/hpMNGrid.ts
6901
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/hpMNGrid.ts
6851
6902
  /**
6852
6903
  * This hanging protocol can be activated on the primary mode by directly
6853
6904
  * referencing it in a URL or by directly including it within a mode, e.g.:
@@ -7064,7 +7115,7 @@ const hpMN = {
7064
7115
  numberOfPriorsReferenced: -1
7065
7116
  };
7066
7117
  /* harmony default export */ const hpMNGrid = (hpMN);
7067
- ;// CONCATENATED MODULE: ../../../extensions/default/src/hpCompare.ts
7118
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/hpCompare.ts
7068
7119
  const defaultDisplaySetSelector = {
7069
7120
  studyMatchingRules: [{
7070
7121
  // The priorInstance is a study counter that indicates what position this study is in
@@ -7173,9 +7224,9 @@ const hpMNCompare = {
7173
7224
  protocolMatchingRules: [{
7174
7225
  id: 'Two Studies',
7175
7226
  weight: 1000,
7227
+ // is there a second study or in another work the attribute
7228
+ // studyInstanceUIDsIndex that we get from prior should not be null
7176
7229
  attribute: 'StudyInstanceUID',
7177
- // The 'from' attribute says where to get the 'attribute' value from. In this case
7178
- // prior means the second study in the study list.
7179
7230
  from: 'prior',
7180
7231
  required: true,
7181
7232
  constraint: {
@@ -7231,9 +7282,463 @@ const hpMNCompare = {
7231
7282
  }]
7232
7283
  };
7233
7284
  /* harmony default export */ const hpCompare = (hpMNCompare);
7285
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/mammoDisplaySetSelector.ts
7286
+ const priorStudyMatchingRules = [{
7287
+ // The priorInstance is a study counter that indicates what position this study is in
7288
+ // and the value comes from the options parameter.
7289
+ attribute: 'studyInstanceUIDsIndex',
7290
+ from: 'options',
7291
+ required: true,
7292
+ constraint: {
7293
+ equals: {
7294
+ value: 1
7295
+ }
7296
+ }
7297
+ }];
7298
+ const currentStudyMatchingRules = [{
7299
+ // The priorInstance is a study counter that indicates what position this study is in
7300
+ // and the value comes from the options parameter.
7301
+ attribute: 'studyInstanceUIDsIndex',
7302
+ from: 'options',
7303
+ required: true,
7304
+ constraint: {
7305
+ equals: {
7306
+ value: 0
7307
+ }
7308
+ }
7309
+ }];
7310
+ const LCCSeriesMatchingRules = [{
7311
+ weight: 10,
7312
+ attribute: 'ViewCode',
7313
+ constraint: {
7314
+ contains: 'SCT:399162004'
7315
+ }
7316
+ }, {
7317
+ weight: 5,
7318
+ attribute: 'PatientOrientation',
7319
+ constraint: {
7320
+ contains: 'L'
7321
+ }
7322
+ }, {
7323
+ weight: 20,
7324
+ attribute: 'SeriesDescription',
7325
+ constraint: {
7326
+ contains: 'L CC'
7327
+ }
7328
+ }];
7329
+ const RCCSeriesMatchingRules = [{
7330
+ weight: 10,
7331
+ attribute: 'ViewCode',
7332
+ constraint: {
7333
+ contains: 'SCT:399162004'
7334
+ }
7335
+ }, {
7336
+ weight: 5,
7337
+ attribute: 'PatientOrientation',
7338
+ constraint: {
7339
+ equals: ['P', 'L']
7340
+ }
7341
+ }, {
7342
+ attribute: 'PatientOrientation',
7343
+ constraint: {
7344
+ doesNotEqual: ['A', 'R']
7345
+ },
7346
+ required: true
7347
+ }, {
7348
+ weight: 20,
7349
+ attribute: 'SeriesDescription',
7350
+ constraint: {
7351
+ contains: 'CC'
7352
+ }
7353
+ }];
7354
+ const LMLOSeriesMatchingRules = [{
7355
+ weight: 10,
7356
+ attribute: 'ViewCode',
7357
+ constraint: {
7358
+ contains: 'SCT:399368009'
7359
+ }
7360
+ }, {
7361
+ weight: 0,
7362
+ attribute: 'ViewCode',
7363
+ constraint: {
7364
+ doesNotEqual: 'SCT:399162004'
7365
+ },
7366
+ required: true
7367
+ }, {
7368
+ weight: 5,
7369
+ attribute: 'PatientOrientation',
7370
+ constraint: {
7371
+ equals: ['A', 'R']
7372
+ }
7373
+ }, {
7374
+ weight: 20,
7375
+ attribute: 'SeriesDescription',
7376
+ constraint: {
7377
+ contains: 'L MLO'
7378
+ }
7379
+ }];
7380
+ const RMLOSeriesMatchingRules = [{
7381
+ weight: 10,
7382
+ attribute: 'ViewCode',
7383
+ constraint: {
7384
+ contains: 'SCT:399368009'
7385
+ }
7386
+ }, {
7387
+ attribute: 'ViewCode',
7388
+ constraint: {
7389
+ doesNotEqual: 'SCT:399162004'
7390
+ },
7391
+ required: true
7392
+ }, {
7393
+ attribute: 'PatientOrientation',
7394
+ constraint: {
7395
+ doesNotContain: ['P', 'FL']
7396
+ },
7397
+ required: true
7398
+ }, {
7399
+ weight: 5,
7400
+ attribute: 'PatientOrientation',
7401
+ constraint: {
7402
+ equals: ['P', 'L']
7403
+ }
7404
+ }, {
7405
+ weight: 5,
7406
+ attribute: 'PatientOrientation',
7407
+ constraint: {
7408
+ equals: ['A', 'FR']
7409
+ }
7410
+ }, {
7411
+ weight: 20,
7412
+ attribute: 'SeriesDescription',
7413
+ constraint: {
7414
+ contains: 'R MLO'
7415
+ }
7416
+ }, {
7417
+ attribute: 'SeriesDescription',
7418
+ required: true,
7419
+ constraint: {
7420
+ doesNotContain: 'CC'
7421
+ }
7422
+ }, {
7423
+ attribute: 'SeriesDescription',
7424
+ required: true,
7425
+ constraint: {
7426
+ doesNotEqual: 'L MLO'
7427
+ },
7428
+ required: true
7429
+ }];
7430
+ const RCC = {
7431
+ seriesMatchingRules: RCCSeriesMatchingRules,
7432
+ studyMatchingRules: currentStudyMatchingRules
7433
+ };
7434
+ const RCCPrior = {
7435
+ seriesMatchingRules: RCCSeriesMatchingRules,
7436
+ studyMatchingRules: priorStudyMatchingRules
7437
+ };
7438
+ const LCC = {
7439
+ seriesMatchingRules: LCCSeriesMatchingRules,
7440
+ studyMatchingRules: currentStudyMatchingRules
7441
+ };
7442
+ const LCCPrior = {
7443
+ seriesMatchingRules: LCCSeriesMatchingRules,
7444
+ studyMatchingRules: priorStudyMatchingRules
7445
+ };
7446
+ const RMLO = {
7447
+ seriesMatchingRules: RMLOSeriesMatchingRules,
7448
+ studyMatchingRules: currentStudyMatchingRules
7449
+ };
7450
+ const RMLOPrior = {
7451
+ seriesMatchingRules: RMLOSeriesMatchingRules,
7452
+ studyMatchingRules: priorStudyMatchingRules
7453
+ };
7454
+ const LMLO = {
7455
+ seriesMatchingRules: LMLOSeriesMatchingRules,
7456
+ studyMatchingRules: currentStudyMatchingRules
7457
+ };
7458
+ const LMLOPrior = {
7459
+ seriesMatchingRules: LMLOSeriesMatchingRules,
7460
+ studyMatchingRules: priorStudyMatchingRules
7461
+ };
7462
+
7463
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/hpMammo.ts
7464
+
7465
+ const rightDisplayArea = {
7466
+ storeAsInitialCamera: true,
7467
+ imageArea: [0.8, 0.8],
7468
+ imageCanvasPoint: {
7469
+ imagePoint: [0, 0.5],
7470
+ canvasPoint: [0, 0.5]
7471
+ }
7472
+ };
7473
+ const leftDisplayArea = {
7474
+ storeAsInitialCamera: true,
7475
+ imageArea: [0.8, 0.8],
7476
+ imageCanvasPoint: {
7477
+ imagePoint: [1, 0.5],
7478
+ canvasPoint: [1, 0.5]
7479
+ }
7480
+ };
7481
+ const hpMammography = {
7482
+ id: '@ohif/hpMammo',
7483
+ hasUpdatedPriorsInformation: false,
7484
+ name: 'Mammography Breast Screening',
7485
+ protocolMatchingRules: [{
7486
+ id: 'Mammography',
7487
+ weight: 150,
7488
+ attribute: 'ModalitiesInStudy',
7489
+ constraint: {
7490
+ contains: 'MG'
7491
+ },
7492
+ required: true
7493
+ }, {
7494
+ id: 'numberOfImages',
7495
+ attribute: 'numberOfDisplaySetsWithImages',
7496
+ constraint: {
7497
+ greaterThan: 2
7498
+ },
7499
+ required: true
7500
+ }],
7501
+ toolGroupIds: ['default'],
7502
+ displaySetSelectors: {
7503
+ RCC: RCC,
7504
+ LCC: LCC,
7505
+ RMLO: RMLO,
7506
+ LMLO: LMLO,
7507
+ RCCPrior: RCCPrior,
7508
+ LCCPrior: LCCPrior,
7509
+ RMLOPrior: RMLOPrior,
7510
+ LMLOPrior: LMLOPrior
7511
+ },
7512
+ stages: [{
7513
+ name: 'CC/MLO',
7514
+ viewportStructure: {
7515
+ type: 'grid',
7516
+ layoutType: 'grid',
7517
+ properties: {
7518
+ rows: 2,
7519
+ columns: 2
7520
+ }
7521
+ },
7522
+ viewports: [{
7523
+ viewportOptions: {
7524
+ toolGroupId: 'default',
7525
+ displayArea: leftDisplayArea,
7526
+ // flipHorizontal: true,
7527
+ // rotation: 180,
7528
+ allowUnmatchedView: true
7529
+ },
7530
+ displaySets: [{
7531
+ id: 'RCC'
7532
+ }]
7533
+ }, {
7534
+ viewportOptions: {
7535
+ toolGroupId: 'default',
7536
+ // flipHorizontal: true,
7537
+ displayArea: rightDisplayArea,
7538
+ allowUnmatchedView: true
7539
+ },
7540
+ displaySets: [{
7541
+ id: 'LCC'
7542
+ }]
7543
+ }, {
7544
+ viewportOptions: {
7545
+ toolGroupId: 'default',
7546
+ displayArea: leftDisplayArea,
7547
+ // rotation: 180,
7548
+ // flipHorizontal: true,
7549
+ allowUnmatchedView: true
7550
+ },
7551
+ displaySets: [{
7552
+ id: 'RMLO'
7553
+ }]
7554
+ }, {
7555
+ viewportOptions: {
7556
+ toolGroupId: 'default',
7557
+ displayArea: rightDisplayArea,
7558
+ // flipHorizontal: true,
7559
+ allowUnmatchedView: true
7560
+ },
7561
+ displaySets: [{
7562
+ id: 'LMLO'
7563
+ }]
7564
+ }]
7565
+ },
7566
+ // Compare CC current/prior top/bottom
7567
+ {
7568
+ name: 'CC compare',
7569
+ viewportStructure: {
7570
+ type: 'grid',
7571
+ layoutType: 'grid',
7572
+ properties: {
7573
+ rows: 2,
7574
+ columns: 2
7575
+ }
7576
+ },
7577
+ viewports: [{
7578
+ viewportOptions: {
7579
+ toolGroupId: 'default',
7580
+ displayArea: leftDisplayArea,
7581
+ flipHorizontal: true,
7582
+ rotation: 180
7583
+ },
7584
+ displaySets: [{
7585
+ id: 'RCC'
7586
+ }]
7587
+ }, {
7588
+ viewportOptions: {
7589
+ toolGroupId: 'default',
7590
+ flipHorizontal: true,
7591
+ displayArea: rightDisplayArea
7592
+ },
7593
+ displaySets: [{
7594
+ id: 'LCC'
7595
+ }]
7596
+ }, {
7597
+ viewportOptions: {
7598
+ toolGroupId: 'default',
7599
+ displayArea: leftDisplayArea,
7600
+ flipHorizontal: true
7601
+ },
7602
+ displaySets: [{
7603
+ id: 'RCCPrior'
7604
+ }]
7605
+ }, {
7606
+ viewportOptions: {
7607
+ toolGroupId: 'default',
7608
+ displayArea: rightDisplayArea
7609
+ },
7610
+ displaySets: [{
7611
+ id: 'LCCPrior'
7612
+ }]
7613
+ }]
7614
+ }],
7615
+ // Indicates it is prior aware, but will work with no priors
7616
+ numberOfPriorsReferenced: 0
7617
+ };
7618
+ /* harmony default export */ const hpMammo = (hpMammography);
7619
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/hpScale.ts
7620
+ const displayAreaScale1 = {
7621
+ type: 'SCALE',
7622
+ scale: 1,
7623
+ storeAsInitialCamera: true
7624
+ };
7625
+ const displayAreaScale15 = {
7626
+ ...displayAreaScale1,
7627
+ scale: 15
7628
+ };
7629
+
7630
+ /**
7631
+ * This hanging protocol can be activated on the primary mode by directly
7632
+ * referencing it in a URL or by directly including it within a mode, e.g.:
7633
+ * `&hangingProtocolId=@ohif/mnGrid` added to the viewer URL
7634
+ * It is not included in the viewer mode by default.
7635
+ */
7636
+ const hpScale = {
7637
+ id: '@ohif/hpScale',
7638
+ description: 'Has various hanging protocol grid layouts',
7639
+ name: 'Scale Images',
7640
+ protocolMatchingRules: [{
7641
+ id: 'OneOrMoreSeries',
7642
+ weight: 25,
7643
+ attribute: 'numberOfDisplaySetsWithImages',
7644
+ constraint: {
7645
+ greaterThan: 0
7646
+ }
7647
+ }],
7648
+ toolGroupIds: ['default'],
7649
+ displaySetSelectors: {
7650
+ defaultDisplaySetId: {
7651
+ seriesMatchingRules: [{
7652
+ attribute: 'numImageFrames',
7653
+ constraint: {
7654
+ greaterThan: {
7655
+ value: 0
7656
+ }
7657
+ },
7658
+ required: true
7659
+ },
7660
+ // This display set will select the specified items by preference
7661
+ // It has no affect if nothing is specified in the URL.
7662
+ {
7663
+ attribute: 'isDisplaySetFromUrl',
7664
+ weight: 10,
7665
+ constraint: {
7666
+ equals: true
7667
+ }
7668
+ }]
7669
+ }
7670
+ },
7671
+ defaultViewport: {
7672
+ viewportOptions: {
7673
+ viewportType: 'stack',
7674
+ toolGroupId: 'default',
7675
+ displayArea: displayAreaScale1,
7676
+ allowUnmatchedView: true
7677
+ },
7678
+ displaySets: [{
7679
+ id: 'defaultDisplaySetId',
7680
+ matchedDisplaySetsIndex: -1
7681
+ }]
7682
+ },
7683
+ stages: [
7684
+ // A 1x1 stage - should be automatically activated if there is only 1 viewable instance
7685
+ {
7686
+ name: 'Scale 1:1',
7687
+ stageActivation: {
7688
+ enabled: {
7689
+ minViewportsMatched: 1
7690
+ }
7691
+ },
7692
+ viewportStructure: {
7693
+ layoutType: 'grid',
7694
+ properties: {
7695
+ rows: 1,
7696
+ columns: 1
7697
+ }
7698
+ },
7699
+ viewports: [{
7700
+ viewportOptions: {
7701
+ toolGroupId: 'default',
7702
+ allowUnmatchedView: true,
7703
+ displayArea: displayAreaScale1
7704
+ },
7705
+ displaySets: [{
7706
+ id: 'defaultDisplaySetId'
7707
+ }]
7708
+ }]
7709
+ }, {
7710
+ name: 'Scale 1:15',
7711
+ stageActivation: {
7712
+ enabled: {
7713
+ minViewportsMatched: 1
7714
+ }
7715
+ },
7716
+ viewportStructure: {
7717
+ layoutType: 'grid',
7718
+ properties: {
7719
+ rows: 1,
7720
+ columns: 1
7721
+ }
7722
+ },
7723
+ viewports: [{
7724
+ viewportOptions: {
7725
+ toolGroupId: 'default',
7726
+ allowUnmatchedView: true,
7727
+ displayArea: displayAreaScale15
7728
+ },
7729
+ displaySets: [{
7730
+ id: 'defaultDisplaySetId'
7731
+ }]
7732
+ }]
7733
+ }],
7734
+ numberOfPriorsReferenced: -1
7735
+ };
7736
+ /* harmony default export */ const hangingprotocols_hpScale = (hpScale);
7234
7737
  ;// CONCATENATED MODULE: ../../../extensions/default/src/getHangingProtocolModule.js
7235
7738
 
7236
7739
 
7740
+
7741
+
7237
7742
  const defaultProtocol = {
7238
7743
  id: 'default',
7239
7744
  locked: true,
@@ -7247,9 +7752,6 @@ const defaultProtocol = {
7247
7752
  editableBy: {},
7248
7753
  protocolMatchingRules: [],
7249
7754
  toolGroupIds: ['default'],
7250
- hpInitiationCriteria: {
7251
- minSeriesLoaded: 1
7252
- },
7253
7755
  // -1 would be used to indicate active only, whereas other values are
7254
7756
  // the number of required priors referenced - so 0 means active with
7255
7757
  // 0 or more priors.
@@ -7340,6 +7842,12 @@ function getHangingProtocolModule() {
7340
7842
  {
7341
7843
  name: hpCompare.id,
7342
7844
  protocol: hpCompare
7845
+ }, {
7846
+ name: hpMammo.id,
7847
+ protocol: hpMammo
7848
+ }, {
7849
+ name: hangingprotocols_hpScale.id,
7850
+ protocol: hangingprotocols_hpScale
7343
7851
  }];
7344
7852
  }
7345
7853
  /* harmony default export */ const src_getHangingProtocolModule = (getHangingProtocolModule);
@@ -7834,6 +8342,7 @@ function getCustomizationModule({
7834
8342
  }) {
7835
8343
  return [{
7836
8344
  name: 'helloPage',
8345
+ merge: 'Append',
7837
8346
  value: {
7838
8347
  id: 'customRoutes',
7839
8348
  routes: [{
@@ -7849,6 +8358,7 @@ function getCustomizationModule({
7849
8358
  // Example customization to list a set of datasources
7850
8359
  {
7851
8360
  name: 'datasources',
8361
+ merge: 'Append',
7852
8362
  value: {
7853
8363
  id: 'customRoutes',
7854
8364
  routes: [{
@@ -7958,7 +8468,7 @@ function getCustomizationModule({
7958
8468
  factory: dataSourceName => new GoogleCloudDataSourceConfigurationAPI(dataSourceName, servicesManager, extensionManager)
7959
8469
  }, {
7960
8470
  id: 'progressDropdownWithServiceComponent',
7961
- component: ProgressDropdownWithService_ProgressDropdownWithService
8471
+ component: ProgressDropdownWithService
7962
8472
  }]
7963
8473
  }];
7964
8474
  }
@@ -8020,7 +8530,7 @@ function getPTImageIdInstanceMetadata(imageId) {
8020
8530
  if (!dicomMetaData) {
8021
8531
  throw new Error('dicom metadata are required');
8022
8532
  }
8023
- if (dicomMetaData.SeriesDate === undefined || dicomMetaData.SeriesTime === undefined || dicomMetaData.CorrectedImage === undefined || dicomMetaData.Units === undefined || !dicomMetaData.RadiopharmaceuticalInformationSequence || dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose === undefined || dicomMetaData.DecayCorrection === undefined || dicomMetaData.AcquisitionDate === undefined || dicomMetaData.AcquisitionTime === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime === undefined && dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime === undefined) {
8533
+ if (dicomMetaData.SeriesDate === undefined || dicomMetaData.SeriesTime === undefined || dicomMetaData.CorrectedImage === undefined || dicomMetaData.Units === undefined || !dicomMetaData.RadiopharmaceuticalInformationSequence || dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose === undefined || dicomMetaData.DecayCorrection === undefined || dicomMetaData.AcquisitionDate === undefined || dicomMetaData.AcquisitionTime === undefined || dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime === undefined && dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime === undefined) {
8024
8534
  throw new Error('required metadata are missing');
8025
8535
  }
8026
8536
  if (dicomMetaData.PatientWeight === undefined) {
@@ -8029,10 +8539,10 @@ function getPTImageIdInstanceMetadata(imageId) {
8029
8539
  const instanceMetadata = {
8030
8540
  CorrectedImage: dicomMetaData.CorrectedImage,
8031
8541
  Units: dicomMetaData.Units,
8032
- RadionuclideHalfLife: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife,
8033
- RadionuclideTotalDose: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose,
8034
- RadiopharmaceuticalStartDateTime: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime,
8035
- RadiopharmaceuticalStartTime: dicomMetaData.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime,
8542
+ RadionuclideHalfLife: dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife,
8543
+ RadionuclideTotalDose: dicomMetaData.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose,
8544
+ RadiopharmaceuticalStartDateTime: dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartDateTime,
8545
+ RadiopharmaceuticalStartTime: dicomMetaData.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime,
8036
8546
  DecayCorrection: dicomMetaData.DecayCorrection,
8037
8547
  PatientWeight: dicomMetaData.PatientWeight,
8038
8548
  SeriesDate: dicomMetaData.SeriesDate,
@@ -8079,10 +8589,55 @@ function convertInterfaceDateToString(date) {
8079
8589
  return dateString;
8080
8590
  }
8081
8591
 
8592
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/viewCode.ts
8593
+ /* harmony default export */ const viewCode = (displaySet => {
8594
+ const ViewCodeSequence = displaySet?.images[0]?.ViewCodeSequence[0];
8595
+ if (!ViewCodeSequence) {
8596
+ return undefined;
8597
+ }
8598
+ const {
8599
+ CodingSchemeDesignator,
8600
+ CodeValue
8601
+ } = ViewCodeSequence;
8602
+ if (!CodingSchemeDesignator || !CodeValue) {
8603
+ return undefined;
8604
+ }
8605
+ return `${CodingSchemeDesignator}:${CodeValue}`;
8606
+ });
8607
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/laterality.ts
8608
+ /* harmony default export */ const laterality = (displaySet => {
8609
+ const frameAnatomy = displaySet?.images?.[0]?.SharedFunctionalGroupsSequence?.[0]?.FrameAnatomySequence?.[0];
8610
+ if (!frameAnatomy) {
8611
+ return undefined;
8612
+ }
8613
+ const laterality = frameAnatomy?.FrameLaterality;
8614
+ return laterality;
8615
+ });
8616
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/registerHangingProtocolAttributes.ts
8617
+
8618
+
8619
+ function registerHangingProtocolAttributes({
8620
+ servicesManager
8621
+ }) {
8622
+ const {
8623
+ hangingProtocolService
8624
+ } = servicesManager.services;
8625
+ hangingProtocolService.addCustomAttribute('ViewCode', 'View Code Designator:Value', viewCode);
8626
+ hangingProtocolService.addCustomAttribute('Laterality', 'Laterality of object', laterality);
8627
+ }
8628
+ ;// CONCATENATED MODULE: ../../../extensions/default/src/hangingprotocols/index.ts
8629
+
8630
+
8631
+
8632
+
8633
+
8634
+
8635
+
8082
8636
  ;// CONCATENATED MODULE: ../../../extensions/default/src/init.ts
8083
8637
 
8084
8638
 
8085
8639
 
8640
+
8086
8641
  const init_metadataProvider = src.classes.MetadataProvider;
8087
8642
 
8088
8643
  /**
@@ -8151,6 +8706,11 @@ function init({
8151
8706
  clearOnModeExit: true
8152
8707
  });
8153
8708
 
8709
+ // Adds extra custom attributes for use by hanging protocols
8710
+ registerHangingProtocolAttributes({
8711
+ servicesManager
8712
+ });
8713
+
8154
8714
  // Function to process and subscribe to events for a given set of commands and listeners
8155
8715
  const subscribeToEvents = listeners => {
8156
8716
  Object.entries(listeners).forEach(([event, commands]) => {