@ohif/app 3.12.0-beta.99 → 3.12.1

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 (70) hide show
  1. package/dist/{1403.bundle.94a178e2572f1f0b2a2c.js → 1403.bundle.761239eb886a88301851.js} +37 -37
  2. package/dist/{1459.bundle.3785cdd0abf449adebf1.js → 1459.bundle.fcdd0dec6286845179bf.js} +5 -6
  3. package/dist/{147.bundle.205350dc3d21478277b1.js → 147.bundle.47af018b91121924a12c.js} +10 -18
  4. package/dist/{1608.bundle.f855c4bdb7f00eb66fca.js → 1608.bundle.b9abbf4ed6cc2e491dc3.js} +10 -10
  5. package/dist/{1730.bundle.37c569ae3ed057b69840.js → 1730.bundle.51e69967a025226592cd.js} +41 -40
  6. package/dist/{1927.bundle.019331c266d306772371.js → 1927.bundle.be67b3aafe238ca9f191.js} +27 -38
  7. package/dist/{1933.bundle.ab5e8036f6e1c854c965.js → 1933.bundle.e3ba7d4dcbbd75701d8e.js} +19 -17
  8. package/dist/{2018.bundle.469f9ad42597b6b29ff1.js → 2018.bundle.45c44470b4b098aa343f.js} +65 -66
  9. package/dist/{2108.bundle.e84aa8d858d8c4f2413e.js → 2108.bundle.aea8d3b39486dd5ab39e.js} +569 -558
  10. package/dist/{213.bundle.398730bb3ceb1af54413.js → 213.bundle.863ab5d320fc06043a4e.js} +5 -7
  11. package/dist/{3584.bundle.839a16d349815b3f7c97.js → 2199.bundle.974037f21bfd12c4e8af.js} +256 -2236
  12. package/dist/{2424.bundle.be90e7bcf0fd8db68b2f.js → 2424.bundle.b070e83baf101dad2121.js} +5 -7
  13. package/dist/{2516.bundle.1ea0988d309a757bb6da.js → 2516.bundle.f62228e9a800de8d4b31.js} +6 -6
  14. package/dist/{2701.bundle.aca0d4f24a6f2094c3c3.js → 2701.bundle.58a6a580073edbb4cc04.js} +9 -9
  15. package/dist/{2842.bundle.7852a204d3510fca8b27.js → 2816.bundle.838fa4d72921c026083c.js} +1136 -2342
  16. package/dist/{9195.bundle.e2fd5c6b5830c0ee25a8.js → 2851.bundle.70227d013c1937e846be.js} +318 -150
  17. package/dist/{1903.bundle.dc5248f7cb6ba1dc1072.js → 3081.bundle.930757b1a5aa8549e112.js} +752 -466
  18. package/dist/{3343.bundle.f8fe9316b0ff68d087f7.js → 3343.bundle.a4424b8418b8c0c1a9e4.js} +27 -25
  19. package/dist/{3461.bundle.50c752c623f39cf6c457.js → 3461.bundle.ab31c31a5ddc4baa72f7.js} +40 -40
  20. package/dist/{4202.bundle.790706560c6edb303476.js → 4202.bundle.4f76d3a50d6cf819fba0.js} +6 -6
  21. package/dist/{4019.bundle.01f63d5dd5b96ded0c00.js → 4287.bundle.87e14e648f2bce5e4176.js} +372 -567
  22. package/dist/{4775.bundle.d7f0645419f1df8e00b8.js → 4775.bundle.768f00df706f506f3789.js} +57 -51
  23. package/dist/{4819.bundle.ef1151f023b3784bc1be.js → 4819.bundle.6377aba4cf194120e7d4.js} +35 -34
  24. package/dist/{5028.bundle.b3611b7c7422a5c2e723.js → 5028.bundle.3a086ff61ec8dc1da4b1.js} +13 -15
  25. package/dist/{5261.bundle.6e1a017f8f1027557f5b.js → 5261.bundle.2655560097e9250eac44.js} +412 -345
  26. package/dist/{5457.bundle.9f2eb65ad85fcbb75e27.js → 5457.bundle.0063531ed24c06fba48b.js} +16 -23
  27. package/dist/{5462.bundle.a81a691eeef782ab95b9.js → 5462.bundle.d5bb9b3ddc510fea141f.js} +1108 -1030
  28. package/dist/{5485.bundle.71041ca4bc9e6ab57d92.js → 5485.bundle.b523d7015979fc641f7e.js} +17 -32
  29. package/dist/{5491.bundle.2e01dd7ad29e4cc01bc1.js → 5491.bundle.4866d2ecb20dd089e071.js} +54 -51
  30. package/dist/5724.bundle.62ea5c07c7809ab4cd74.js +297 -0
  31. package/dist/5724.css +2 -0
  32. package/dist/{5802.bundle.28ab859d9b48a5b2c31c.js → 5802.bundle.ae4d88742c353de462c2.js} +13 -18
  33. package/dist/{5830.bundle.b073c265c4fcea1afff3.js → 5830.bundle.791019deddd536980a11.js} +3 -3
  34. package/dist/{5858.bundle.d5f4bf849aaeebf5025c.js → 5858.bundle.466e58128de344ab53f3.js} +90 -86
  35. package/dist/{6027.bundle.160bd47ea03784276275.js → 6027.bundle.3cf6c827b4ce9066b426.js} +3 -5
  36. package/dist/{6163.bundle.1f096bdbe3a341c1710d.js → 6163.bundle.ac77880c970e788c9a07.js} +33 -33
  37. package/dist/{5549.bundle.d5def6a3124a3a481b7c.js → 6280.bundle.f22f9955eb906e1d7da8.js} +2475 -1200
  38. package/dist/{3353.bundle.a0f1654c642395bbbbbc.js → 6347.bundle.f8393c20d5159ed41b64.js} +358 -214
  39. package/dist/{6354.bundle.c387737dc09c9cab4ff2.js → 6354.bundle.d8a592b03e9a5b7a66c2.js} +102 -96
  40. package/dist/{6376.bundle.272e755bdcbb5615a44e.js → 6376.bundle.527820a5cb1eece2a8d2.js} +6 -6
  41. package/dist/{5400.bundle.de97508611da1c00d58a.js → 6409.bundle.24edbaa283b7c521b8f7.js} +517 -146
  42. package/dist/6939.bundle.41fbdef87597b5172ec6.js +3 -3
  43. package/dist/7159.bundle.a5991a5d4f0dd8f1c95f.js +3 -3
  44. package/dist/{7190.bundle.d731ae6cf6e933a2c408.js → 7190.bundle.479332d662ffe08d1f92.js} +1462 -955
  45. package/dist/{732.bundle.6978ac30a1e36abf06db.js → 732.bundle.ea6f9d8504e37e01a208.js} +5 -13
  46. package/dist/{7431.bundle.999b2b65d4973bc56218.js → 7431.bundle.b31ebb4a2625e89d864e.js} +38 -32
  47. package/dist/{7639.bundle.e004d734044049fe8fe9.js → 7639.bundle.0147cdd1c23858221b62.js} +27 -25
  48. package/dist/7758.bundle.c8d106364298e7d288f0.js +3 -3
  49. package/dist/{8094.bundle.5c44190a325ac23e3e5c.js → 8094.bundle.148a66619607e37cbf19.js} +3 -4
  50. package/dist/{8305.bundle.ba43ed23edea2bf394b3.js → 8305.bundle.565339762503b9ae4f59.js} +57 -41
  51. package/dist/{85.bundle.a16e254910c60223df19.js → 85.bundle.b2365b2e4c3c6935f453.js} +3 -5
  52. package/dist/{8558.bundle.463ddb34a619cf47493e.js → 8558.bundle.9af6d13a22ddb44ea766.js} +60 -32
  53. package/dist/{8583.bundle.59c239cf891c2e10bf10.js → 8583.bundle.f51188077125da303398.js} +42 -39
  54. package/dist/{5448.bundle.9a36e001169ea3bfeb6c.js → 8665.bundle.dc56c125411422f9f686.js} +3753 -1424
  55. package/dist/{7412.bundle.aec4834a71fc27c4ce06.js → 9205.bundle.2a2f38a4ee23647f5fa4.js} +3413 -1271
  56. package/dist/{9845.bundle.31aec3fe7a5cdc247f4e.js → 9845.bundle.31f3e7e2d28fa6033ee5.js} +22 -14
  57. package/dist/{9862.bundle.3ca0ad5f54db87ccf91e.js → 9862.bundle.73ea2a7703bf1bb96275.js} +8 -6
  58. package/dist/{9927.bundle.f421cd167be94a7109f6.js → 9927.bundle.af31e6ce5cac195607fd.js} +19 -21
  59. package/dist/app-config.js +12 -0
  60. package/dist/{app.bundle.7df5bc1cd812bd602686.js → app.bundle.b2817894afde20b59bdb.js} +67903 -63389
  61. package/dist/app.bundle.css +1 -1
  62. package/dist/{compute.bundle.fdee4a0f193ee2e1b6da.js → compute.bundle.73440405025831e0e072.js} +10 -22
  63. package/dist/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js +3254 -1792
  64. package/dist/dicom-microscopy-viewer/dicomMicroscopyViewer.min.js.map +1 -1
  65. package/dist/{histogram-worker.bundle.d4e40a8018d2698b072e.js → histogram-worker.bundle.5b679ce4142c803c80a4.js} +11 -23
  66. package/dist/index.html +1 -1
  67. package/dist/{interpolation.bundle.1938b79f9d6db363528a.js → interpolation.bundle.7554483d97f6119414f9.js} +14 -26
  68. package/dist/{polySeg.bundle.11f9746cd60c9811a412.js → polySeg.bundle.6373e24bd578ae0d41eb.js} +8 -20
  69. package/dist/sw.js +1 -1
  70. package/package.json +24 -24
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[9845],{
3
3
 
4
- /***/ 69845:
5
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4
+ /***/ 69845
5
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6
6
 
7
7
  // ESM COMPAT FLAG
8
8
  __webpack_require__.r(__webpack_exports__);
@@ -14,8 +14,8 @@ __webpack_require__.d(__webpack_exports__, {
14
14
 
15
15
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
16
16
  var react = __webpack_require__(86326);
17
- // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3073 modules
18
- var src = __webpack_require__(1246);
17
+ // EXTERNAL MODULE: ../../ui-next/src/index.ts + 3075 modules
18
+ var src = __webpack_require__(12517);
19
19
  ;// ../../../extensions/cornerstone-dicom-seg/src/utils/initSEGToolGroup.ts
20
20
  function createSEGToolGroupAndAddTools({
21
21
  commandsManager,
@@ -30,8 +30,8 @@ function createSEGToolGroupAndAddTools({
30
30
  return toolGroupService.createToolGroupAndAddTools(toolGroupId, updatedTools);
31
31
  }
32
32
  /* harmony default export */ const initSEGToolGroup = (createSEGToolGroupAndAddTools);
33
- // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 192 modules
34
- var cornerstone_src = __webpack_require__(71903);
33
+ // EXTERNAL MODULE: ../../../extensions/cornerstone/src/index.tsx + 193 modules
34
+ var cornerstone_src = __webpack_require__(63081);
35
35
  ;// ../../../extensions/cornerstone-dicom-seg/src/utils/promptHydrateSEG.ts
36
36
 
37
37
  function promptHydrateSEG({
@@ -41,7 +41,7 @@ function promptHydrateSEG({
41
41
  preHydrateCallbacks,
42
42
  hydrateCallback
43
43
  }) {
44
- return cornerstone_src.utils.promptHydrationDialog({
44
+ return cornerstone_src/* utils */.Wp.promptHydrationDialog({
45
45
  servicesManager,
46
46
  viewportId,
47
47
  displaySet: segDisplaySet,
@@ -95,7 +95,7 @@ function OHIFCornerstoneSEGViewport(props) {
95
95
  // States
96
96
  const {
97
97
  setPositionPresentation
98
- } = (0,cornerstone_src.usePositionPresentationStore)();
98
+ } = (0,cornerstone_src/* usePositionPresentationStore */.qu)();
99
99
 
100
100
  // Hydration means that the SEG is opened and segments are loaded into the
101
101
  // segmentation panel, and SEG is also rendered on any viewport that is in the
@@ -121,12 +121,20 @@ function OHIFCornerstoneSEGViewport(props) {
121
121
  // In such cases, we attempt to handle this scenario gracefully by
122
122
  // invoking a custom handler. Ideally, if a user tries to launch a series that isn't viewable,
123
123
  // (eg.: we can prompt them with an explanation and provide a link to the full study).
124
+
125
+ // Additional guard: If no customization handler is registered for missing
126
+ // referenced display sets, skip SEG rendering to avoid a viewport crash.
124
127
  if (!referencedDisplaySetInstanceUID) {
125
128
  const missingReferenceDisplaySetHandler = customizationService.getCustomization('missingReferenceDisplaySetHandler');
126
- const {
127
- handled
128
- } = missingReferenceDisplaySetHandler();
129
- if (handled) {
129
+ if (typeof missingReferenceDisplaySetHandler === 'function') {
130
+ const {
131
+ handled
132
+ } = missingReferenceDisplaySetHandler();
133
+ if (handled) {
134
+ return;
135
+ }
136
+ } else {
137
+ console.log("No customization 'missingReferenceDisplaySetHandler' registered. Skipping SEG rendering.");
130
138
  return;
131
139
  }
132
140
  }
@@ -137,7 +145,7 @@ function OHIFCornerstoneSEGViewport(props) {
137
145
  metadata: referencedDisplaySetMetadata
138
146
  };
139
147
  const getCornerstoneViewport = (0,react.useCallback)(() => {
140
- return /*#__PURE__*/react.createElement(cornerstone_src.OHIFCornerstoneViewport, _extends({}, props, {
148
+ return /*#__PURE__*/react.createElement(cornerstone_src/* OHIFCornerstoneViewport */.R9, _extends({}, props, {
141
149
  displaySets: [segDisplaySet],
142
150
  viewportOptions: {
143
151
  viewportType: viewportOptions.viewportType,
@@ -324,6 +332,6 @@ function _getReferencedDisplaySetMetadata(referencedDisplaySet, segDisplaySet) {
324
332
  }
325
333
  /* harmony default export */ const viewports_OHIFCornerstoneSEGViewport = (OHIFCornerstoneSEGViewport);
326
334
 
327
- /***/ })
335
+ /***/ }
328
336
 
329
337
  }]);
@@ -1,18 +1,20 @@
1
1
  "use strict";
2
2
  (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[9862],{
3
3
 
4
- /***/ 49862:
5
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4
+ /***/ 49862
5
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6
6
 
7
7
  __webpack_require__.r(__webpack_exports__);
8
8
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
9
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
10
10
  /* harmony export */ });
11
+ /* unused harmony import specifier */ var React;
12
+ /* unused harmony import specifier */ var ViewportActionArrows;
11
13
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(86326);
12
14
  /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97598);
13
15
  /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
14
- /* harmony import */ var _ohif_ui_next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1246);
15
- /* harmony import */ var _ohif_extension_cornerstone__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(71903);
16
+ /* harmony import */ var _ohif_ui_next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12517);
17
+ /* harmony import */ var _ohif_extension_cornerstone__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63081);
16
18
  /* harmony import */ var _cornerstonejs_tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4667);
17
19
  /* harmony import */ var _getContextModule__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(55844);
18
20
  /* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(15327);
@@ -164,7 +166,7 @@ function TrackedCornerstoneViewport(props) {
164
166
  measurementService.jumpToMeasurement(viewportId, newTrackedMeasurementUID);
165
167
  }, [measurementService, servicesManager, trackedMeasurementUID, trackedMeasurements, viewportId]);
166
168
  const getCornerstoneViewport = () => {
167
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_extension_cornerstone__WEBPACK_IMPORTED_MODULE_3__.OHIFCornerstoneViewport, _extends({}, props, {
169
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ohif_extension_cornerstone__WEBPACK_IMPORTED_MODULE_3__/* .OHIFCornerstoneViewport */ .R9, _extends({}, props, {
168
170
  onElementEnabled: evt => {
169
171
  props.onElementEnabled?.(evt);
170
172
  onElementEnabled(evt);
@@ -237,6 +239,6 @@ const _getArrowsComponent = (isTracked, switchMeasurement, isActiveViewport) =>
237
239
  };
238
240
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TrackedCornerstoneViewport);
239
241
 
240
- /***/ })
242
+ /***/ }
241
243
 
242
244
  }]);
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  (globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[9927],{
3
3
 
4
- /***/ 69927:
5
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4
+ /***/ 69927
5
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6
6
 
7
- // ESM COMPAT FLAG
8
- __webpack_require__.r(__webpack_exports__);
9
7
 
10
8
  // EXPORTS
11
9
  __webpack_require__.d(__webpack_exports__, {
@@ -407,7 +405,7 @@ const toolbarButtons = [{
407
405
  radiusOptionId: 'brush-radius'
408
406
  }],
409
407
  options: [{
410
- name: 'Radius (mm)',
408
+ name: i18next/* default */.A.t('Buttons:Radius (mm)'),
411
409
  id: 'brush-radius',
412
410
  type: 'range',
413
411
  explicitRunOnly: true,
@@ -422,16 +420,16 @@ const toolbarButtons = [{
422
420
  }
423
421
  }
424
422
  }, {
425
- name: 'Shape',
423
+ name: i18next/* default */.A.t('Buttons:Shape'),
426
424
  type: 'radio',
427
425
  id: 'brush-mode',
428
426
  value: 'CircularBrush',
429
427
  values: [{
430
428
  value: 'CircularBrush',
431
- label: 'Circle'
429
+ label: i18next/* default */.A.t('Buttons:Circle')
432
430
  }, {
433
431
  value: 'SphereBrush',
434
- label: 'Sphere'
432
+ label: i18next/* default */.A.t('Buttons:Sphere')
435
433
  }],
436
434
  commands: 'setToolActiveToolbar'
437
435
  }]
@@ -450,7 +448,7 @@ const toolbarButtons = [{
450
448
  radiusOptionId: 'eraser-radius'
451
449
  }],
452
450
  options: [{
453
- name: 'Radius (mm)',
451
+ name: i18next/* default */.A.t('Buttons:Radius (mm)'),
454
452
  id: 'eraser-radius',
455
453
  type: 'range',
456
454
  explicitRunOnly: true,
@@ -465,16 +463,16 @@ const toolbarButtons = [{
465
463
  }
466
464
  }
467
465
  }, {
468
- name: 'Shape',
466
+ name: i18next/* default */.A.t('Buttons:Shape'),
469
467
  type: 'radio',
470
468
  id: 'eraser-mode',
471
469
  value: 'CircularEraser',
472
470
  values: [{
473
471
  value: 'CircularEraser',
474
- label: 'Circle'
472
+ label: i18next/* default */.A.t('Buttons:Circle')
475
473
  }, {
476
474
  value: 'SphereEraser',
477
- label: 'Sphere'
475
+ label: i18next/* default */.A.t('Buttons:Sphere')
478
476
  }],
479
477
  commands: 'setToolActiveToolbar'
480
478
  }]
@@ -493,7 +491,7 @@ const toolbarButtons = [{
493
491
  radiusOptionId: 'threshold-radius'
494
492
  }],
495
493
  options: [{
496
- name: 'Radius (mm)',
494
+ name: i18next/* default */.A.t('Buttons:Radius (mm)'),
497
495
  id: 'threshold-radius',
498
496
  type: 'range',
499
497
  explicitRunOnly: true,
@@ -508,16 +506,16 @@ const toolbarButtons = [{
508
506
  }
509
507
  }
510
508
  }, {
511
- name: 'Threshold',
509
+ name: i18next/* default */.A.t('Buttons:Threshold'),
512
510
  type: 'radio',
513
511
  id: 'dynamic-mode',
514
512
  value: 'ThresholdRange',
515
513
  values: [{
516
514
  value: 'ThresholdDynamic',
517
- label: 'Dynamic'
515
+ label: i18next/* default */.A.t('Buttons:Dynamic')
518
516
  }, {
519
517
  value: 'ThresholdRange',
520
- label: 'Range'
518
+ label: i18next/* default */.A.t('Buttons:Range')
521
519
  }],
522
520
  commands: ({
523
521
  value,
@@ -534,23 +532,23 @@ const toolbarButtons = [{
534
532
  }
535
533
  }
536
534
  }, {
537
- name: 'Shape',
535
+ name: i18next/* default */.A.t('Buttons:Shape'),
538
536
  type: 'radio',
539
537
  id: 'eraser-mode',
540
538
  value: 'ThresholdCircularBrush',
541
539
  values: [{
542
540
  value: 'ThresholdCircularBrush',
543
- label: 'Circle'
541
+ label: i18next/* default */.A.t('Buttons:Circle')
544
542
  }, {
545
543
  value: 'ThresholdSphereBrush',
546
- label: 'Sphere'
544
+ label: i18next/* default */.A.t('Buttons:Sphere')
547
545
  }],
548
546
  condition: ({
549
547
  options
550
548
  }) => options.find(option => option.id === 'dynamic-mode').value === 'ThresholdRange',
551
549
  commands: 'setToolActiveToolbar'
552
550
  }, {
553
- name: 'ThresholdRange',
551
+ name: i18next/* default */.A.t('ROIThresholdConfiguration:ThresholdRange'),
554
552
  type: 'double-range',
555
553
  id: 'threshold-range',
556
554
  min: 0,
@@ -896,6 +894,6 @@ const mode = {
896
894
  };
897
895
  /* harmony default export */ const tmtv_src = (mode);
898
896
 
899
- /***/ })
897
+ /***/ }
900
898
 
901
899
  }]);
@@ -251,6 +251,12 @@ window.config = {
251
251
  configuration: {
252
252
  friendlyName: 'dicomweb delegating proxy',
253
253
  name: 'dicomwebproxy',
254
+ // Security controls for runtime ?url=... datasource loading:
255
+ // In authenticated environments, runtime ?url origins must be allowlisted:
256
+ // dangerouslyAllowedOriginsForAuthenticatedEnvironments: [
257
+ // 'https://config.example.com',
258
+ // 'http://localhost:5000',
259
+ // ],
254
260
  },
255
261
  },
256
262
  {
@@ -259,6 +265,12 @@ window.config = {
259
265
  configuration: {
260
266
  friendlyName: 'dicom json',
261
267
  name: 'json',
268
+ // Security controls for runtime ?url=... datasource loading:
269
+ // In authenticated environments, runtime ?url origins must be allowlisted:
270
+ // dangerouslyAllowedOriginsForAuthenticatedEnvironments: [
271
+ // 'https://config.example.com',
272
+ // 'http://localhost:5000',
273
+ // ],
262
274
  },
263
275
  },
264
276
  {