@equinor/esv-intersection 3.0.9 → 3.0.11

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 (155) hide show
  1. package/dist/control/ExtendedCurveInterpolator.d.ts +0 -1
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.ts +0 -1
  5. package/dist/index.mjs +2188 -2087
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/index.umd.js +2 -2
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/interfaces.d.ts +1 -3
  10. package/dist/utils/arc-length.d.ts +0 -1
  11. package/dist/utils/binary-search.d.ts +0 -1
  12. package/dist/utils/root-finder.d.ts +1 -2
  13. package/package.json +25 -25
  14. package/src/components/axis.ts +23 -30
  15. package/src/control/ExtendedCurveInterpolator.ts +7 -7
  16. package/src/control/IntersectionReferenceSystem.ts +33 -41
  17. package/src/control/LayerManager.ts +33 -31
  18. package/src/control/MainController.ts +5 -7
  19. package/src/control/ZoomPanHandler.ts +50 -45
  20. package/src/control/interfaces.ts +3 -3
  21. package/src/control/overlay.ts +42 -35
  22. package/src/datautils/colortable.ts +4 -4
  23. package/src/datautils/findsample.ts +8 -7
  24. package/src/datautils/picks.ts +13 -13
  25. package/src/datautils/schematicShapeGenerator.ts +47 -17
  26. package/src/datautils/seismicimage.ts +12 -13
  27. package/src/datautils/surfacedata.ts +27 -26
  28. package/src/datautils/trajectory.ts +34 -32
  29. package/src/interfaces.ts +1 -1
  30. package/src/layers/CalloutCanvasLayer.ts +55 -58
  31. package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +23 -20
  32. package/src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts +9 -10
  33. package/src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts +13 -13
  34. package/src/layers/GeomodelCanvasLayer.ts +43 -36
  35. package/src/layers/GeomodelLabelsLayer.ts +99 -96
  36. package/src/layers/GeomodelLayerV2.ts +11 -11
  37. package/src/layers/GridLayer.ts +25 -21
  38. package/src/layers/ImageCanvasLayer.ts +17 -11
  39. package/src/layers/ReferenceLineLayer.ts +53 -45
  40. package/src/layers/SchematicLayer.ts +78 -75
  41. package/src/layers/WellborePathLayer.ts +48 -46
  42. package/src/layers/base/CanvasLayer.ts +18 -18
  43. package/src/layers/base/HTMLLayer.ts +5 -5
  44. package/src/layers/base/Layer.ts +18 -18
  45. package/src/layers/base/PixiLayer.ts +24 -20
  46. package/src/layers/base/SVGLayer.ts +5 -5
  47. package/src/utils/arc-length.ts +3 -10
  48. package/src/utils/binary-search.ts +2 -2
  49. package/src/utils/color.ts +9 -5
  50. package/src/utils/root-finder.ts +4 -4
  51. package/src/utils/text.ts +5 -5
  52. package/src/utils/vectorUtils.ts +13 -6
  53. package/src/vendor/pixi-dashed-line/index.ts +3 -2
  54. package/dist/components/axis.d.ts +0 -48
  55. package/dist/components/axis.d.ts.map +0 -1
  56. package/dist/components/index.d.ts +0 -2
  57. package/dist/components/index.d.ts.map +0 -1
  58. package/dist/constants.d.ts +0 -12
  59. package/dist/constants.d.ts.map +0 -1
  60. package/dist/control/ExtendedCurveInterpolator.d.ts.map +0 -1
  61. package/dist/control/IntersectionReferenceSystem.d.ts +0 -97
  62. package/dist/control/IntersectionReferenceSystem.d.ts.map +0 -1
  63. package/dist/control/LayerManager.d.ts +0 -77
  64. package/dist/control/LayerManager.d.ts.map +0 -1
  65. package/dist/control/MainController.d.ts +0 -155
  66. package/dist/control/MainController.d.ts.map +0 -1
  67. package/dist/control/ZoomPanHandler.d.ts +0 -159
  68. package/dist/control/ZoomPanHandler.d.ts.map +0 -1
  69. package/dist/control/index.d.ts +0 -6
  70. package/dist/control/index.d.ts.map +0 -1
  71. package/dist/control/interfaces.d.ts +0 -38
  72. package/dist/control/interfaces.d.ts.map +0 -1
  73. package/dist/control/overlay.d.ts +0 -21
  74. package/dist/control/overlay.d.ts.map +0 -1
  75. package/dist/datautils/colortable.d.ts +0 -2
  76. package/dist/datautils/colortable.d.ts.map +0 -1
  77. package/dist/datautils/findsample.d.ts +0 -3
  78. package/dist/datautils/findsample.d.ts.map +0 -1
  79. package/dist/datautils/index.d.ts +0 -7
  80. package/dist/datautils/index.d.ts.map +0 -1
  81. package/dist/datautils/interfaces.d.ts +0 -64
  82. package/dist/datautils/interfaces.d.ts.map +0 -1
  83. package/dist/datautils/picks.d.ts +0 -75
  84. package/dist/datautils/picks.d.ts.map +0 -1
  85. package/dist/datautils/schematicShapeGenerator.d.ts +0 -60
  86. package/dist/datautils/schematicShapeGenerator.d.ts.map +0 -1
  87. package/dist/datautils/seismicimage.d.ts +0 -46
  88. package/dist/datautils/seismicimage.d.ts.map +0 -1
  89. package/dist/datautils/surfacedata.d.ts +0 -11
  90. package/dist/datautils/surfacedata.d.ts.map +0 -1
  91. package/dist/datautils/trajectory.d.ts +0 -15
  92. package/dist/datautils/trajectory.d.ts.map +0 -1
  93. package/dist/index.d.ts.map +0 -1
  94. package/dist/interfaces.d.ts.map +0 -1
  95. package/dist/layers/CalloutCanvasLayer.d.ts +0 -61
  96. package/dist/layers/CalloutCanvasLayer.d.ts.map +0 -1
  97. package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts +0 -22
  98. package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts.map +0 -1
  99. package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts +0 -24
  100. package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts.map +0 -1
  101. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts +0 -21
  102. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts.map +0 -1
  103. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts +0 -27
  104. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts.map +0 -1
  105. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts +0 -18
  106. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts.map +0 -1
  107. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts +0 -25
  108. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts.map +0 -1
  109. package/dist/layers/GeomodelCanvasLayer.d.ts +0 -29
  110. package/dist/layers/GeomodelCanvasLayer.d.ts.map +0 -1
  111. package/dist/layers/GeomodelLabelsLayer.d.ts +0 -50
  112. package/dist/layers/GeomodelLabelsLayer.d.ts.map +0 -1
  113. package/dist/layers/GeomodelLayerV2.d.ts +0 -13
  114. package/dist/layers/GeomodelLayerV2.d.ts.map +0 -1
  115. package/dist/layers/GridLayer.d.ts +0 -30
  116. package/dist/layers/GridLayer.d.ts.map +0 -1
  117. package/dist/layers/ImageCanvasLayer.d.ts +0 -21
  118. package/dist/layers/ImageCanvasLayer.d.ts.map +0 -1
  119. package/dist/layers/ReferenceLineLayer.d.ts +0 -30
  120. package/dist/layers/ReferenceLineLayer.d.ts.map +0 -1
  121. package/dist/layers/SchematicLayer.d.ts +0 -114
  122. package/dist/layers/SchematicLayer.d.ts.map +0 -1
  123. package/dist/layers/SeismicCanvasLayer.d.ts +0 -19
  124. package/dist/layers/SeismicCanvasLayer.d.ts.map +0 -1
  125. package/dist/layers/WellborePathLayer.d.ts +0 -18
  126. package/dist/layers/WellborePathLayer.d.ts.map +0 -1
  127. package/dist/layers/base/CanvasLayer.d.ts +0 -20
  128. package/dist/layers/base/CanvasLayer.d.ts.map +0 -1
  129. package/dist/layers/base/HTMLLayer.d.ts +0 -14
  130. package/dist/layers/base/HTMLLayer.d.ts.map +0 -1
  131. package/dist/layers/base/Layer.d.ts +0 -70
  132. package/dist/layers/base/Layer.d.ts.map +0 -1
  133. package/dist/layers/base/PixiLayer.d.ts +0 -33
  134. package/dist/layers/base/PixiLayer.d.ts.map +0 -1
  135. package/dist/layers/base/SVGLayer.d.ts +0 -14
  136. package/dist/layers/base/SVGLayer.d.ts.map +0 -1
  137. package/dist/layers/base/index.d.ts +0 -6
  138. package/dist/layers/base/index.d.ts.map +0 -1
  139. package/dist/layers/index.d.ts +0 -17
  140. package/dist/layers/index.d.ts.map +0 -1
  141. package/dist/layers/schematicInterfaces.d.ts +0 -210
  142. package/dist/layers/schematicInterfaces.d.ts.map +0 -1
  143. package/dist/utils/arc-length.d.ts.map +0 -1
  144. package/dist/utils/binary-search.d.ts.map +0 -1
  145. package/dist/utils/color.d.ts +0 -6
  146. package/dist/utils/color.d.ts.map +0 -1
  147. package/dist/utils/index.d.ts +0 -2
  148. package/dist/utils/index.d.ts.map +0 -1
  149. package/dist/utils/root-finder.d.ts.map +0 -1
  150. package/dist/utils/text.d.ts +0 -15
  151. package/dist/utils/text.d.ts.map +0 -1
  152. package/dist/utils/vectorUtils.d.ts +0 -16
  153. package/dist/utils/vectorUtils.d.ts.map +0 -1
  154. package/dist/vendor/pixi-dashed-line/index.d.ts +0 -57
  155. package/dist/vendor/pixi-dashed-line/index.d.ts.map +0 -1
@@ -12,7 +12,7 @@ import { HORIZONTAL_AXIS_MARGIN, VERTICAL_AXIS_MARGIN } from '../constants';
12
12
  * API for controlling data and layers
13
13
  */
14
14
  export class Controller {
15
- private _referenceSystem: IntersectionReferenceSystem;
15
+ private _referenceSystem: IntersectionReferenceSystem | undefined;
16
16
 
17
17
  private layerManager: LayerManager;
18
18
  private _overlay: Overlay<Controller>;
@@ -69,7 +69,7 @@ export class Controller {
69
69
  * Clears data from all mounted layers
70
70
  * @param includeReferenceSystem - (optional) if true also removes reference system, default is true
71
71
  */
72
- clearAllData(includeReferenceSystem: boolean = true): Controller {
72
+ clearAllData(includeReferenceSystem = true): Controller {
73
73
  this.layerManager.clearAllData(includeReferenceSystem);
74
74
  return this;
75
75
  }
@@ -106,7 +106,7 @@ export class Controller {
106
106
  * Find first layer with given id, returns undefined if none are found
107
107
  * @param layerId string id
108
108
  */
109
- getLayer(layerId: string): Layer<unknown> {
109
+ getLayer(layerId: string): Layer<unknown> | undefined {
110
110
  return this.layerManager.getLayer(layerId);
111
111
  }
112
112
 
@@ -259,8 +259,6 @@ export class Controller {
259
259
  this.layerManager.destroy();
260
260
  this._overlay.destroy();
261
261
  this._referenceSystem = undefined;
262
- this.layerManager = undefined;
263
- this._overlay = undefined;
264
262
  return this;
265
263
  }
266
264
 
@@ -278,7 +276,7 @@ export class Controller {
278
276
  return this._overlay;
279
277
  }
280
278
 
281
- get referenceSystem(): IntersectionReferenceSystem {
279
+ get referenceSystem(): IntersectionReferenceSystem | undefined {
282
280
  return this._referenceSystem;
283
281
  }
284
282
 
@@ -286,7 +284,7 @@ export class Controller {
286
284
  return this.layerManager.zoomPanHandler;
287
285
  }
288
286
 
289
- get axis(): Axis {
287
+ get axis(): Axis | undefined {
290
288
  return this.layerManager.axis;
291
289
  }
292
290
 
@@ -12,20 +12,19 @@ export type RescaleFunction = (event: OnRescaleEvent) => void;
12
12
  * Handle zoom and pan for intersection layers
13
13
  */
14
14
  export class ZoomPanHandler {
15
- zoom: ZoomBehavior<Element, unknown> = null;
16
- elm: HTMLElement = null;
17
- container: Selection<HTMLElement, unknown, null, undefined> = null;
18
- onRescale: RescaleFunction = null;
19
- options: ZoomAndPanOptions = null;
15
+ zoom!: ZoomBehavior<HTMLElement, unknown>;
16
+ container: Selection<HTMLElement, unknown, null, undefined>;
17
+ onRescale: RescaleFunction;
18
+ options: ZoomAndPanOptions;
20
19
  xBounds: [number, number] = [0, 1];
21
20
  yBounds: [number, number] = [0, 1];
22
21
  translateBoundsX: [number, number] = [0, 1];
23
22
  translateBoundsY: [number, number] = [0, 1];
24
- scaleX: ScaleLinear<number, number> = null;
25
- scaleY: ScaleLinear<number, number> = null;
26
- _zFactor: number = 1;
27
- _enableTranslateExtent: boolean;
28
- currentTransform: ZoomTransform;
23
+ scaleX: ScaleLinear<number, number>;
24
+ scaleY: ScaleLinear<number, number>;
25
+ _zFactor = 1;
26
+ _enableTranslateExtent = false;
27
+ currentTransform: ZoomTransform | undefined;
29
28
 
30
29
  /**
31
30
  * Constructor
@@ -66,7 +65,7 @@ export class ZoomPanHandler {
66
65
  * @returns width
67
66
  */
68
67
  get width(): number {
69
- return this.scaleX.range()[1];
68
+ return this.scaleX.range()[1] ?? 0;
70
69
  }
71
70
 
72
71
  /**
@@ -74,7 +73,7 @@ export class ZoomPanHandler {
74
73
  * @returns height
75
74
  */
76
75
  get height(): number {
77
- return this.scaleY.range()[1];
76
+ return this.scaleY.range()[1] ?? 0;
78
77
  }
79
78
 
80
79
  /**
@@ -111,8 +110,8 @@ export class ZoomPanHandler {
111
110
  * @returns ratio
112
111
  */
113
112
  get xRatio(): number {
114
- const domain: number[] = this.scaleX.domain();
115
- const ratio: number = Math.abs(this.width / (domain[1] - domain[0]));
113
+ const domain = this.scaleX.domain() as [number, number];
114
+ const ratio = Math.abs(this.width / (domain[1] - domain[0]));
116
115
  return ratio;
117
116
  }
118
117
 
@@ -121,8 +120,8 @@ export class ZoomPanHandler {
121
120
  * @returns ratio
122
121
  */
123
122
  get yRatio(): number {
124
- const domain: number[] = this.scaleY.domain();
125
- const ratio: number = Math.abs(this.height / (domain[1] - domain[0]));
123
+ const domain = this.scaleY.domain() as [number, number];
124
+ const ratio = Math.abs(this.height / (domain[1] - domain[0]));
126
125
  return ratio;
127
126
  }
128
127
 
@@ -183,10 +182,10 @@ export class ZoomPanHandler {
183
182
  updateTranslateExtent(): void {
184
183
  const { width, xSpan, zFactor, enableTranslateExtent, translateBoundsX, translateBoundsY } = this;
185
184
 
186
- let x1: number = -Infinity;
187
- let y1: number = -Infinity;
188
- let x2: number = +Infinity;
189
- let y2: number = +Infinity;
185
+ let x1 = -Infinity;
186
+ let y1 = -Infinity;
187
+ let x2 = +Infinity;
188
+ let y2 = +Infinity;
190
189
 
191
190
  if (enableTranslateExtent) {
192
191
  const ppu: number = width / xSpan;
@@ -237,8 +236,7 @@ export class ZoomPanHandler {
237
236
  * Initialized handler
238
237
  */
239
238
  init(): void {
240
- this.zoom = zoom().scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel]).on('zoom', this.onZoom);
241
-
239
+ this.zoom = zoom<HTMLElement, unknown>().scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel]).on('zoom', this.onZoom);
242
240
  this.container.call(this.zoom);
243
241
  }
244
242
 
@@ -292,19 +290,20 @@ export class ZoomPanHandler {
292
290
  setViewport(cx?: number, cy?: number, displ?: number, duration?: number): void {
293
291
  const { zoom, container, calculateTransform, scaleX, scaleY, isXInverted } = this;
294
292
 
295
- if (isNaN(cx) || isNaN(displ)) {
296
- const xd: number[] = scaleX.domain();
293
+ if (cx == null || displ == null || isNaN(cx) || isNaN(displ)) {
294
+ const xd = scaleX.domain() as [number, number];
297
295
  const dspan: number = xd[1] - xd[0];
298
- if (isNaN(cx)) {
296
+
297
+ if (cx == null || isNaN(cx)) {
299
298
  cx = xd[0] + dspan / 2 || 0;
300
299
  }
301
- if (isNaN(displ)) {
300
+ if (displ == null || isNaN(displ)) {
302
301
  displ = Math.abs(dspan) || 1;
303
302
  }
304
303
  }
305
304
 
306
- if (isNaN(cy)) {
307
- const yd: number[] = scaleY.domain();
305
+ if (cy == null || isNaN(cy)) {
306
+ const yd = scaleY.domain() as [number, number];
308
307
  cy = yd[0] + (yd[1] - yd[0]) / 2 || 0;
309
308
  }
310
309
 
@@ -315,7 +314,7 @@ export class ZoomPanHandler {
315
314
 
316
315
  const t: ZoomTransform = calculateTransform(dx0, dx1, cy);
317
316
 
318
- if (Number.isFinite(duration) && duration > 0) {
317
+ if (duration != null && Number.isFinite(duration) && duration > 0) {
319
318
  zoom.transform(container.transition().duration(duration), t);
320
319
  } else {
321
320
  zoom.transform(container, t);
@@ -346,19 +345,25 @@ export class ZoomPanHandler {
346
345
  * Adjust zoom due to changes in size of target
347
346
  * @param force - force update even if size did not change
348
347
  */
349
- adjustToSize(width?: number | boolean, height?: number, force: boolean = false): void {
348
+ adjustToSize(): void;
349
+ adjustToSize(autoAdjust: boolean): void;
350
+ adjustToSize(width: number, height: number, force: boolean): void;
351
+ adjustToSize(widthOrAutoAdjust?: unknown, height?: number, force = false): void {
350
352
  const { width: oldWidth, height: oldHeight, scaleX, scaleY, recalculateZoomTransform } = this;
351
353
 
352
354
  let w = 0;
353
355
  let h = 0;
354
356
 
355
- if (typeof width === 'undefined' || typeof width === 'boolean') {
356
- const { width: containerWidth, height: containerHeight } = this.container.node().getBoundingClientRect();
357
- w = containerWidth;
358
- h = containerHeight;
359
- } else {
360
- w = width;
357
+ if (typeof widthOrAutoAdjust === 'number' && typeof height === 'number') {
361
358
  h = height;
359
+ w = widthOrAutoAdjust;
360
+ } else {
361
+ const containerEl = this.container.node();
362
+ if (containerEl) {
363
+ const { width: containerWidth, height: containerHeight } = containerEl.getBoundingClientRect();
364
+ w = containerWidth;
365
+ h = containerHeight;
366
+ }
362
367
  }
363
368
 
364
369
  const newWidth: number = Math.max(1, w);
@@ -386,15 +391,15 @@ export class ZoomPanHandler {
386
391
  calculateTransform(dx0: number, dx1: number, dy: number): ZoomTransform {
387
392
  const { scaleX, xSpan, xBounds, yBounds, zFactor, viewportRatio: ratio, isXInverted, isYInverted } = this;
388
393
 
389
- const [rx1, rx2] = scaleX.range();
390
- const displ: number = Math.abs(dx1 - dx0);
391
- const k: number = xSpan / displ;
392
- const unitsPerPixels: number = displ / (rx2 - rx1);
394
+ const [rx1, rx2] = scaleX.range() as [number, number];
395
+ const displ = Math.abs(dx1 - dx0);
396
+ const k = xSpan / displ;
397
+ const unitsPerPixels = displ / (rx2 - rx1);
393
398
 
394
- const dy0: number = dy - (isYInverted ? -displ : displ) / zFactor / ratio / 2;
399
+ const dy0 = dy - (isYInverted ? -displ : displ) / zFactor / ratio / 2;
395
400
 
396
- const tx: number = (xBounds[0] - dx0) / (isXInverted ? -unitsPerPixels : unitsPerPixels);
397
- const ty: number = (yBounds[0] - dy0) / ((isYInverted ? -unitsPerPixels : unitsPerPixels) / zFactor);
401
+ const tx = (xBounds[0] - dx0) / (isXInverted ? -unitsPerPixels : unitsPerPixels);
402
+ const ty = (yBounds[0] - dy0) / ((isYInverted ? -unitsPerPixels : unitsPerPixels) / zFactor);
398
403
 
399
404
  return zoomIdentity.translate(tx, ty).scale(k);
400
405
  }
@@ -405,8 +410,8 @@ export class ZoomPanHandler {
405
410
  recalculateZoomTransform(): void {
406
411
  const { scaleX, scaleY, container, calculateTransform, updateTranslateExtent } = this;
407
412
 
408
- const [dx0, dx1] = scaleX.domain();
409
- const [dy0, dy1] = scaleY.domain();
413
+ const [dx0, dx1] = scaleX.domain() as [number, number];
414
+ const [dy0, dy1] = scaleY.domain() as [number, number];
410
415
 
411
416
  const dy: number = dy0 + (dy1 - dy0) / 2;
412
417
 
@@ -18,8 +18,8 @@ export interface ControllerOptions {
18
18
  }
19
19
 
20
20
  interface OverlayEvent<T> {
21
- target?: Element;
22
- source: Element;
21
+ target: Element | undefined;
22
+ source: Element | undefined;
23
23
  caller: T;
24
24
  }
25
25
 
@@ -33,7 +33,7 @@ export interface OverlayMouseMoveEvent<T> extends OverlayEvent<T> {
33
33
  y: number;
34
34
  }
35
35
 
36
- export interface OverlayMouseExitEvent<T> extends OverlayEvent<T> {}
36
+ export type OverlayMouseExitEvent<T> = OverlayEvent<T>;
37
37
 
38
38
  export interface OverlayCallbacks<T> {
39
39
  onMouseMove?(event: OverlayMouseMoveEvent<T>): void;
@@ -2,8 +2,8 @@ import { select, Selection, pointer, ContainerElement } from 'd3-selection';
2
2
  import { OverlayCallbacks } from './interfaces';
3
3
 
4
4
  export class Overlay<T> {
5
- elm: Selection<Element, unknown, null, undefined>;
6
- source: Element;
5
+ elm: Selection<HTMLDivElement, unknown, null, undefined>;
6
+ source: HTMLDivElement | undefined;
7
7
  elements: { [propName: string]: Element } = {};
8
8
  listeners: { [propName: string]: OverlayCallbacks<T> } = {};
9
9
  enabled = true;
@@ -11,8 +11,7 @@ export class Overlay<T> {
11
11
  constructor(caller: T, container: HTMLElement) {
12
12
  const con = select(container);
13
13
  this.elm = con.append('div').attr('id', 'overlay').style('z-index', '11').style('position', 'absolute');
14
-
15
- this.source = this.elm.node();
14
+ this.source = this.elm.node() ?? undefined;
16
15
 
17
16
  const { elm } = this;
18
17
  elm.on('resize', (event) => {
@@ -24,17 +23,18 @@ export class Overlay<T> {
24
23
  }
25
24
 
26
25
  Object.keys(this.listeners).forEach((key: string) => {
27
- const target = this.elements[key] || null;
26
+ const target = this.elements[key] ?? undefined;
28
27
  const ops = this.listeners[key];
29
28
  if (ops && ops.onResize) {
30
- requestAnimationFrame(() =>
31
- ops.onResize({
32
- target,
33
- source: this.source,
34
- caller,
35
- width,
36
- height,
37
- }),
29
+ requestAnimationFrame(
30
+ () =>
31
+ ops.onResize?.({
32
+ target,
33
+ source: this.source,
34
+ caller,
35
+ width,
36
+ height,
37
+ }),
38
38
  );
39
39
  }
40
40
  });
@@ -47,18 +47,19 @@ export class Overlay<T> {
47
47
 
48
48
  const [mx, my] = pointer(event, this.elm.node() as ContainerElement);
49
49
  Object.keys(this.listeners).forEach((key: string) => {
50
- const target = this.elements[key] || null;
50
+ const target = this.elements[key] ?? undefined;
51
51
  const ops = this.listeners[key];
52
52
 
53
53
  if (ops && ops.onMouseMove) {
54
- requestAnimationFrame(() =>
55
- ops.onMouseMove({
56
- x: mx,
57
- y: my,
58
- target,
59
- source: this.source,
60
- caller,
61
- }),
54
+ requestAnimationFrame(
55
+ () =>
56
+ ops.onMouseMove?.({
57
+ x: mx,
58
+ y: my,
59
+ target,
60
+ source: this.source,
61
+ caller,
62
+ }),
62
63
  );
63
64
  }
64
65
  });
@@ -69,28 +70,34 @@ export class Overlay<T> {
69
70
  return;
70
71
  }
71
72
  Object.keys(this.listeners).forEach((key: string) => {
72
- const target = this.elements[key] || null;
73
+ const target = this.elements[key] || undefined;
73
74
  const ops = this.listeners[key];
74
75
  if (ops && ops.onMouseExit) {
75
- requestAnimationFrame(() =>
76
- ops.onMouseExit({
77
- target,
78
- source: this.source,
79
- caller,
80
- }),
76
+ requestAnimationFrame(
77
+ () =>
78
+ ops.onMouseExit?.({
79
+ target,
80
+ source: this.source,
81
+ caller,
82
+ }),
81
83
  );
82
84
  }
83
85
  });
84
86
  });
85
87
  }
86
88
 
87
- create(key: string, callbacks?: OverlayCallbacks<T>): HTMLElement {
89
+ create(key: string, callbacks?: OverlayCallbacks<T>): HTMLElement | undefined {
88
90
  const newElm = this.elm.append('div').style('position', 'relative').style('pointer-events', 'none').node();
89
- this.elements[key] = newElm;
90
- if (callbacks) {
91
- this.listeners[key] = callbacks;
91
+
92
+ if (newElm != null) {
93
+ this.elements[key] = newElm;
94
+ if (callbacks) {
95
+ this.listeners[key] = callbacks;
96
+ }
97
+ return newElm;
98
+ } else {
99
+ return undefined;
92
100
  }
93
- return newElm;
94
101
  }
95
102
 
96
103
  register(key: string, callbacks: OverlayCallbacks<T>): void {
@@ -111,7 +118,7 @@ export class Overlay<T> {
111
118
  }
112
119
 
113
120
  destroy(): void {
114
- this.source.remove();
121
+ this.source?.remove();
115
122
  }
116
123
  }
117
124
 
@@ -1,13 +1,13 @@
1
1
  import { scaleLinear } from 'd3-scale';
2
2
  import { color } from 'd3-color';
3
3
 
4
- export function createColorTable(colorMap: string[], size: number): number[][] {
4
+ export function createColorTable(colorMap: string[], size: number): [number, number, number][] {
5
5
  const colorDomain = colorMap.map((_v, i) => (i * size) / colorMap.length);
6
6
  const colorScale = scaleLinear<string>().domain(colorDomain).range(colorMap);
7
7
 
8
- const table = Array.from(new Array(size).keys()).map((i) => {
9
- const rgb = color(colorScale(i)).rgb();
10
- return [rgb.r, rgb.g, rgb.b];
8
+ const table = Array.from(new Array(size).keys()).map<[number, number, number]>((i) => {
9
+ const rgb = color(colorScale(i))?.rgb();
10
+ return rgb != null ? [rgb.r, rgb.g, rgb.b] : [0, 0, 0];
11
11
  });
12
12
 
13
13
  return table;
@@ -47,15 +47,16 @@ export function findIndexOfSample(data: number[][], pos: number): number {
47
47
  return index;
48
48
  }
49
49
 
50
- export function findSampleAtPos(data: number[][], pos: number, topLimit: number = null, bottomLimit: number = null): number {
51
- let y: number = null;
50
+ export function findSampleAtPos(data: number[][], pos: number, topLimit = 0, bottomLimit = 0): number {
51
+ let y = 0;
52
52
  const index = findIndexOfSample(data, pos);
53
53
  if (index !== -1) {
54
- const v1 = data[index][1];
55
- const v2 = data[index + 1][1];
56
- if (v2 && v2) {
57
- const x1 = data[index][0];
58
- const x2 = data[index + 1][0];
54
+ const v1 = data[index]?.[1];
55
+ const v2 = data[index + 1]?.[1];
56
+
57
+ if (v1 && v2) {
58
+ const x1 = data[index]?.[0] ?? 0;
59
+ const x2 = data[index + 1]?.[0] ?? 0;
59
60
  const span = x2 - x1;
60
61
  const d = pos - x1;
61
62
  const f = d / span;
@@ -103,7 +103,7 @@ function getFilteredExitPicks(formationPicks: PairedPickAndUnit[]): Annotation[]
103
103
 
104
104
  export const getPicksData = (picksData: { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] }): Annotation[] =>
105
105
  [...getReferencePicks(picksData.nonUnitPicks), ...getEntryPicks(picksData.unitPicks), ...getFilteredExitPicks(picksData.unitPicks)].sort(
106
- (a, b) => a.md - b.md,
106
+ (a, b) => a.md! - b.md!,
107
107
  );
108
108
 
109
109
  /**
@@ -142,7 +142,7 @@ function findGaps(from: number, to: number, arr: { from: number; to: number; itm
142
142
  let d = from;
143
143
  let i = 0;
144
144
  while (d < to && i < arr.length) {
145
- const itm = arr[i];
145
+ const itm = arr[i]!;
146
146
  if (itm.from > d) {
147
147
  gaps.push([d, Math.min(itm.from, to)]);
148
148
  }
@@ -171,13 +171,13 @@ function joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined:
171
171
  const nonUnitPicks: PickWithId[] = [];
172
172
  const joined: PickAndUnit[] = [];
173
173
  picks.forEach((p: Pick) => {
174
- const matches = transformed.filter((u: UnitDto) => p.pickIdentifier.search(new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i')) !== -1);
174
+ const matches = transformed.filter((u: UnitDto) => p.pickIdentifier?.search(new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i')) !== -1);
175
175
  if (matches.length > 0) {
176
176
  matches.forEach((u: UnitDto) =>
177
177
  joined.push({
178
178
  md: p.md,
179
179
  tvd: p.tvd,
180
- identifier: p.pickIdentifier,
180
+ identifier: p.pickIdentifier!,
181
181
  confidence: p.confidence,
182
182
  mdUnit: p.mdUnit,
183
183
  depthReferencePoint: p.depthReferencePoint,
@@ -185,7 +185,7 @@ function joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined:
185
185
  }),
186
186
  );
187
187
  } else {
188
- nonUnitPicks.push({ identifier: p.pickIdentifier, ...p });
188
+ nonUnitPicks.push({ identifier: p.pickIdentifier!, ...p });
189
189
  }
190
190
  });
191
191
 
@@ -206,7 +206,7 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
206
206
  .sort((a: PickAndUnit, b: PickAndUnit) => a.unitName.localeCompare(b.unitName) || a.md - b.md || a.ageTop - b.ageTop);
207
207
 
208
208
  while (sorted.length > 0) {
209
- current = sorted.shift();
209
+ current = sorted.shift()!;
210
210
  const name = current.identifier;
211
211
  let pairWithName: string;
212
212
 
@@ -222,8 +222,8 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
222
222
  continue;
223
223
  }
224
224
 
225
- let top: PickAndUnit;
226
- let base: PickAndUnit;
225
+ let top: PickAndUnit | undefined;
226
+ let base: PickAndUnit | undefined;
227
227
 
228
228
  const pairWith = sorted.find((p: PickAndUnit) => p.identifier === pairWithName);
229
229
  if (!pairWith) {
@@ -233,7 +233,7 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
233
233
  base = joined
234
234
  .filter((d: PickAndUnit) => d.level)
235
235
  .sort((a: PickAndUnit, b: PickAndUnit) => a.md - b.md)
236
- .find((p: PickAndUnit) => p.md > top.md);
236
+ .find((p: PickAndUnit) => p.md > top!.md);
237
237
  if (base) {
238
238
  console.warn(`Using ${base.identifier} as base for ${name}`);
239
239
  } else {
@@ -245,7 +245,7 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
245
245
  top = joined
246
246
  .filter((d: PickAndUnit) => d.level)
247
247
  .sort((a: PickAndUnit, b: PickAndUnit) => b.md - a.md)
248
- .find((p: PickAndUnit) => p.md < base.md);
248
+ .find((p: PickAndUnit) => p.md < base!.md);
249
249
  if (top) {
250
250
  console.warn(`Using ${top.identifier} as top for ${name}`);
251
251
  } else {
@@ -303,10 +303,10 @@ export function transformFormationData(picks: Pick[], stratColumn: Unit[]): { un
303
303
  // given presedence over lower levels for overlapping picks.
304
304
  const unitPicks = [];
305
305
  while (itemstack.length > 0) {
306
- const first = itemstack.pop();
306
+ const first = itemstack.pop()!;
307
307
  const group: PairedPickAndUnit[] = [];
308
- while (itemstack.length > 0 && itemstack[itemstack.length - 1].level > first.level) {
309
- group.push(itemstack.pop());
308
+ while (itemstack.length > 0 && itemstack[itemstack.length - 1]?.level! > first.level) {
309
+ group.push(itemstack.pop()!);
310
310
  }
311
311
  group.reverse();
312
312
  group.push(first);