@cornerstonejs/tools 1.24.0 → 1.26.0

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 (94) hide show
  1. package/dist/cjs/drawingSvg/drawRedactionRect.d.ts +1 -0
  2. package/dist/cjs/drawingSvg/drawRedactionRect.js +44 -0
  3. package/dist/cjs/drawingSvg/drawRedactionRect.js.map +1 -0
  4. package/dist/cjs/drawingSvg/index.d.ts +2 -1
  5. package/dist/cjs/drawingSvg/index.js +3 -1
  6. package/dist/cjs/drawingSvg/index.js.map +1 -1
  7. package/dist/cjs/eventListeners/touch/touchStartListener.js +0 -8
  8. package/dist/cjs/eventListeners/touch/touchStartListener.js.map +1 -1
  9. package/dist/cjs/index.d.ts +2 -1
  10. package/dist/cjs/index.js +7 -2
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/tools/ZoomTool.js +2 -5
  13. package/dist/cjs/tools/ZoomTool.js.map +1 -1
  14. package/dist/cjs/tools/annotation/VideoRedactionTool.d.ts +46 -0
  15. package/dist/cjs/tools/annotation/VideoRedactionTool.js +492 -0
  16. package/dist/cjs/tools/annotation/VideoRedactionTool.js.map +1 -0
  17. package/dist/cjs/tools/base/AnnotationDisplayTool.d.ts +1 -1
  18. package/dist/cjs/tools/base/AnnotationDisplayTool.js +2 -1
  19. package/dist/cjs/tools/base/AnnotationDisplayTool.js.map +1 -1
  20. package/dist/cjs/tools/base/AnnotationTool.js.map +1 -1
  21. package/dist/cjs/tools/base/BaseTool.js +3 -0
  22. package/dist/cjs/tools/base/BaseTool.js.map +1 -1
  23. package/dist/cjs/types/AnnotationTypes.d.ts +1 -1
  24. package/dist/cjs/types/ToolSpecificAnnotationTypes.d.ts +20 -0
  25. package/dist/cjs/utilities/planar/filterAnnotationsForDisplay.js +6 -0
  26. package/dist/cjs/utilities/planar/filterAnnotationsForDisplay.js.map +1 -1
  27. package/dist/cjs/utilities/scroll.d.ts +1 -1
  28. package/dist/cjs/utilities/scroll.js +3 -0
  29. package/dist/cjs/utilities/scroll.js.map +1 -1
  30. package/dist/cjs/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.d.ts +1 -1
  31. package/dist/cjs/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.js.map +1 -1
  32. package/dist/cjs/utilities/viewportFilters/filterViewportsWithToolEnabled.d.ts +1 -1
  33. package/dist/cjs/utilities/viewportFilters/filterViewportsWithToolEnabled.js.map +1 -1
  34. package/dist/cjs/utilities/voi/colorbar/Colorbar.js +10 -8
  35. package/dist/cjs/utilities/voi/colorbar/Colorbar.js.map +1 -1
  36. package/dist/cjs/utilities/voi/colorbar/ColorbarCanvas.js +3 -0
  37. package/dist/cjs/utilities/voi/colorbar/ColorbarCanvas.js.map +1 -1
  38. package/dist/esm/drawingSvg/drawRedactionRect.d.ts +1 -0
  39. package/dist/esm/drawingSvg/drawRedactionRect.js +38 -0
  40. package/dist/esm/drawingSvg/drawRedactionRect.js.map +1 -0
  41. package/dist/esm/drawingSvg/index.d.ts +2 -1
  42. package/dist/esm/drawingSvg/index.js +2 -1
  43. package/dist/esm/drawingSvg/index.js.map +1 -1
  44. package/dist/esm/eventListeners/touch/touchStartListener.js +0 -8
  45. package/dist/esm/eventListeners/touch/touchStartListener.js.map +1 -1
  46. package/dist/esm/index.d.ts +2 -1
  47. package/dist/esm/index.js +2 -1
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/esm/tools/ZoomTool.js +2 -5
  50. package/dist/esm/tools/ZoomTool.js.map +1 -1
  51. package/dist/esm/tools/annotation/VideoRedactionTool.d.ts +46 -0
  52. package/dist/esm/tools/annotation/VideoRedactionTool.js +464 -0
  53. package/dist/esm/tools/annotation/VideoRedactionTool.js.map +1 -0
  54. package/dist/esm/tools/base/AnnotationDisplayTool.d.ts +1 -1
  55. package/dist/esm/tools/base/AnnotationDisplayTool.js +3 -2
  56. package/dist/esm/tools/base/AnnotationDisplayTool.js.map +1 -1
  57. package/dist/esm/tools/base/AnnotationTool.js.map +1 -1
  58. package/dist/esm/tools/base/BaseTool.js +4 -1
  59. package/dist/esm/tools/base/BaseTool.js.map +1 -1
  60. package/dist/esm/types/AnnotationTypes.d.ts +1 -1
  61. package/dist/esm/types/ToolSpecificAnnotationTypes.d.ts +20 -0
  62. package/dist/esm/utilities/planar/filterAnnotationsForDisplay.js +7 -1
  63. package/dist/esm/utilities/planar/filterAnnotationsForDisplay.js.map +1 -1
  64. package/dist/esm/utilities/scroll.d.ts +1 -1
  65. package/dist/esm/utilities/scroll.js +4 -1
  66. package/dist/esm/utilities/scroll.js.map +1 -1
  67. package/dist/esm/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.d.ts +1 -1
  68. package/dist/esm/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.js.map +1 -1
  69. package/dist/esm/utilities/viewportFilters/filterViewportsWithToolEnabled.d.ts +1 -1
  70. package/dist/esm/utilities/viewportFilters/filterViewportsWithToolEnabled.js.map +1 -1
  71. package/dist/esm/utilities/voi/colorbar/Colorbar.js +10 -8
  72. package/dist/esm/utilities/voi/colorbar/Colorbar.js.map +1 -1
  73. package/dist/esm/utilities/voi/colorbar/ColorbarCanvas.js +3 -0
  74. package/dist/esm/utilities/voi/colorbar/ColorbarCanvas.js.map +1 -1
  75. package/dist/umd/index.js +1 -1
  76. package/dist/umd/index.js.map +1 -1
  77. package/package.json +3 -3
  78. package/src/drawingSvg/drawRedactionRect.ts +62 -0
  79. package/src/drawingSvg/index.ts +2 -0
  80. package/src/eventListeners/touch/touchStartListener.ts +3 -10
  81. package/src/index.ts +3 -0
  82. package/src/tools/ZoomTool.ts +2 -10
  83. package/src/tools/annotation/VideoRedactionTool.ts +788 -0
  84. package/src/tools/base/AnnotationDisplayTool.ts +6 -3
  85. package/src/tools/base/AnnotationTool.ts +1 -1
  86. package/src/tools/base/BaseTool.ts +3 -0
  87. package/src/types/AnnotationTypes.ts +1 -1
  88. package/src/types/ToolSpecificAnnotationTypes.ts +21 -0
  89. package/src/utilities/planar/filterAnnotationsForDisplay.ts +7 -0
  90. package/src/utilities/scroll.ts +4 -1
  91. package/src/utilities/viewportFilters/filterViewportsWithFrameOfReferenceUID.ts +1 -1
  92. package/src/utilities/viewportFilters/filterViewportsWithToolEnabled.ts +1 -1
  93. package/src/utilities/voi/colorbar/Colorbar.ts +10 -11
  94. package/src/utilities/voi/colorbar/ColorbarCanvas.ts +3 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  utilities,
3
3
  getEnabledElement,
4
- VolumeViewport,
5
4
  StackViewport,
6
5
  cache,
6
+ VideoViewport,
7
7
  } from '@cornerstonejs/core';
8
8
  import type { Types } from '@cornerstonejs/core';
9
9
 
@@ -123,7 +123,7 @@ abstract class AnnotationDisplayTool extends BaseTool {
123
123
  };
124
124
 
125
125
  protected getReferencedImageId(
126
- viewport: Types.IStackViewport | Types.IVolumeViewport,
126
+ viewport: Types.IViewport,
127
127
  worldPos: Types.Point3,
128
128
  viewPlaneNormal: Types.Point3,
129
129
  viewUp: Types.Point3
@@ -132,7 +132,10 @@ abstract class AnnotationDisplayTool extends BaseTool {
132
132
 
133
133
  let referencedImageId;
134
134
 
135
- if (viewport instanceof StackViewport) {
135
+ if (
136
+ viewport instanceof StackViewport ||
137
+ viewport instanceof VideoViewport
138
+ ) {
136
139
  referencedImageId = targetId.split('imageId:')[1];
137
140
  } else {
138
141
  const volumeId = targetId.split('volumeId:')[1];
@@ -219,7 +219,7 @@ abstract class AnnotationTool extends AnnotationDisplayTool {
219
219
  canvasCoords[1] <= canvasBoundingBox.bottomRight[1]
220
220
  ) {
221
221
  data.handles.activeHandleIndex = null;
222
- return textBox;
222
+ return textBox as ToolHandle;
223
223
  }
224
224
  }
225
225
  }
@@ -2,6 +2,7 @@ import {
2
2
  StackViewport,
3
3
  utilities,
4
4
  BaseVolumeViewport,
5
+ VideoViewport,
5
6
  } from '@cornerstonejs/core';
6
7
  import { Types } from '@cornerstonejs/core';
7
8
  import { ToolModes } from '../../enums';
@@ -205,6 +206,8 @@ abstract class BaseTool implements IBaseTool {
205
206
  return `imageId:${viewport.getCurrentImageId()}`;
206
207
  } else if (viewport instanceof BaseVolumeViewport) {
207
208
  return `volumeId:${this.getTargetVolumeId(viewport)}`;
209
+ } else if (viewport instanceof VideoViewport) {
210
+ return '';
208
211
  } else {
209
212
  throw new Error(
210
213
  'getTargetId: viewport must be a StackViewport or VolumeViewport'
@@ -65,7 +65,7 @@ type Annotation = {
65
65
  /** the world location of the text box */
66
66
  worldPosition: Types.Point3;
67
67
  /** text box bounding box information */
68
- worldBoundingBox: {
68
+ worldBoundingBox?: {
69
69
  /** Top left location of the text box in the world space */
70
70
  topLeft: Types.Point3;
71
71
  /** Top right location of the text box in the world space */
@@ -368,3 +368,24 @@ export interface ScaleOverlayAnnotation extends Annotation {
368
368
  viewportId: string;
369
369
  };
370
370
  }
371
+
372
+ export interface VideoRedactionAnnotation extends Annotation {
373
+ metadata: {
374
+ viewPlaneNormal: Types.Point3;
375
+ viewUp: Types.Point3;
376
+ FrameOfReferenceUID: string;
377
+ referencedImageId: string;
378
+ toolName: string;
379
+ };
380
+ data: {
381
+ invalidated: boolean;
382
+ handles: {
383
+ points: Types.Point3[];
384
+ activeHandleIndex: number | null;
385
+ };
386
+ cachedStats: {
387
+ [key: string]: any; // Can be more specific if the structure is known
388
+ };
389
+ active: boolean;
390
+ };
391
+ }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  StackViewport,
3
3
  VolumeViewport,
4
+ VideoViewport,
4
5
  Types,
5
6
  utilities as csUtils,
6
7
  } from '@cornerstonejs/core';
@@ -50,6 +51,12 @@ export default function filterAnnotationsForDisplay(
50
51
  const referenceImageURI = imageId.substring(colonIndex + 1);
51
52
  return referenceImageURI === imageURI;
52
53
  });
54
+ } else if (viewport instanceof VideoViewport) {
55
+ const frameOfReferenceUID: string = viewport.getFrameOfReferenceUID();
56
+
57
+ return annotations.filter((toolData) => {
58
+ return toolData.metadata.FrameOfReferenceUID === frameOfReferenceUID;
59
+ });
53
60
  } else if (viewport instanceof VolumeViewport) {
54
61
  const camera = viewport.getCamera();
55
62
 
@@ -6,6 +6,7 @@ import {
6
6
  EVENTS,
7
7
  utilities as csUtils,
8
8
  getEnabledElement,
9
+ VideoViewport,
9
10
  } from '@cornerstonejs/core';
10
11
  import { ScrollOptions, EventTypes } from '../types';
11
12
 
@@ -19,7 +20,7 @@ import { ScrollOptions, EventTypes } from '../types';
19
20
  * @returns
20
21
  */
21
22
  export default function scroll(
22
- viewport: Types.IStackViewport | Types.IVolumeViewport,
23
+ viewport: Types.IViewport,
23
24
  options: ScrollOptions
24
25
  ): void {
25
26
  // check if viewport is disabled then throw error
@@ -43,6 +44,8 @@ export default function scroll(
43
44
  viewport.scroll(delta, options.debounceLoading, options.loop);
44
45
  } else if (viewport instanceof VolumeViewport) {
45
46
  scrollVolume(viewport, volumeId, delta);
47
+ } else if (viewport instanceof VideoViewport) {
48
+ viewport.scroll(delta);
46
49
  } else {
47
50
  throw new Error(`Not implemented for Viewport Type: ${viewportType}`);
48
51
  }
@@ -10,7 +10,7 @@ import type { Types } from '@cornerstonejs/core';
10
10
  * @returns A filtered array of viewports.
11
11
  */
12
12
  export default function filterViewportsWithFrameOfReferenceUID(
13
- viewports: Array<Types.IStackViewport | Types.IVolumeViewport>,
13
+ viewports: Array<Types.IViewport>,
14
14
  FrameOfReferenceUID: string
15
15
  ): Array<Types.IStackViewport | Types.IVolumeViewport> {
16
16
  const numViewports = viewports.length;
@@ -14,7 +14,7 @@ const { Active, Passive, Enabled } = ToolModes;
14
14
  * @returns A filtered array of viewports.
15
15
  */
16
16
  export default function filterViewportsWithToolEnabled(
17
- viewports: Array<Types.IStackViewport | Types.IVolumeViewport>,
17
+ viewports: Array<Types.IViewport>,
18
18
  toolName: string
19
19
  ): Array<Types.IStackViewport | Types.IVolumeViewport> {
20
20
  const numViewports = viewports.length;
@@ -50,7 +50,7 @@ class Colorbar extends Widget {
50
50
  props.ticks?.position ?? DEFAULTS.RANGE_TEXT_POSITION;
51
51
 
52
52
  this._canvas.appendTo(this.rootElement);
53
- this._ticksBar.appendTo(document.body);
53
+ this._ticksBar.appendTo(this.rootElement);
54
54
 
55
55
  this._addRootElementEventListeners();
56
56
  }
@@ -127,6 +127,8 @@ class Colorbar extends Widget {
127
127
  const rootElement = document.createElement('div');
128
128
 
129
129
  Object.assign(rootElement.style, {
130
+ position: 'relative',
131
+ fontSize: '0',
130
132
  width: '100%',
131
133
  height: '100%',
132
134
  });
@@ -136,6 +138,7 @@ class Colorbar extends Widget {
136
138
 
137
139
  protected onContainerResize() {
138
140
  super.onContainerResize();
141
+ this.updateTicksBar();
139
142
  this._canvas.size = this.containerSize;
140
143
  }
141
144
 
@@ -224,8 +227,6 @@ class Colorbar extends Widget {
224
227
  }
225
228
 
226
229
  const { _ticksBar: ticksBar, _rangeTextPosition: rangeTextPosition } = this;
227
- const { top: containerTop, left: containerLeft } =
228
- this.rootElement.getBoundingClientRect();
229
230
  const isHorizontal = containerWidth >= containerHeight;
230
231
  const width = isHorizontal ? containerWidth : DEFAULTS.TICKS_BAR_SIZE;
231
232
  const height = isHorizontal ? DEFAULTS.TICKS_BAR_SIZE : containerHeight;
@@ -248,19 +249,17 @@ class Colorbar extends Widget {
248
249
  ticksBar.size = { width, height };
249
250
 
250
251
  if (isHorizontal) {
252
+ ticksBarLeft = 0;
251
253
  ticksBarTop =
252
254
  rangeTextPosition === ColorbarRangeTextPosition.Top
253
- ? containerTop - height
254
- : containerTop + containerHeight;
255
-
256
- ticksBarLeft = containerLeft;
255
+ ? -height
256
+ : containerHeight;
257
257
  } else {
258
- ticksBarTop = containerTop;
259
-
258
+ ticksBarTop = 0;
260
259
  ticksBarLeft =
261
260
  rangeTextPosition === ColorbarRangeTextPosition.Left
262
- ? containerLeft - width
263
- : containerLeft + containerWidth;
261
+ ? -width
262
+ : containerWidth;
264
263
  }
265
264
 
266
265
  ticksBar.top = ticksBarTop;
@@ -161,6 +161,9 @@ class ColorbarCanvas {
161
161
  const canvas = document.createElement('canvas');
162
162
 
163
163
  Object.assign(canvas.style, {
164
+ position: 'absolute',
165
+ top: '0',
166
+ left: '0',
164
167
  pointerEvents: 'none',
165
168
  boxSizing: 'border-box',
166
169
  });