@equinor/esv-intersection 3.0.8 → 3.0.10

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 (107) hide show
  1. package/dist/components/axis.d.ts +1 -2
  2. package/dist/components/axis.d.ts.map +1 -1
  3. package/dist/control/ExtendedCurveInterpolator.d.ts.map +1 -1
  4. package/dist/control/IntersectionReferenceSystem.d.ts +2 -6
  5. package/dist/control/IntersectionReferenceSystem.d.ts.map +1 -1
  6. package/dist/control/LayerManager.d.ts +2 -2
  7. package/dist/control/LayerManager.d.ts.map +1 -1
  8. package/dist/control/MainController.d.ts +3 -3
  9. package/dist/control/MainController.d.ts.map +1 -1
  10. package/dist/control/ZoomPanHandler.d.ts +5 -4
  11. package/dist/control/ZoomPanHandler.d.ts.map +1 -1
  12. package/dist/control/interfaces.d.ts +3 -4
  13. package/dist/control/interfaces.d.ts.map +1 -1
  14. package/dist/control/overlay.d.ts +3 -3
  15. package/dist/control/overlay.d.ts.map +1 -1
  16. package/dist/datautils/colortable.d.ts +1 -1
  17. package/dist/datautils/colortable.d.ts.map +1 -1
  18. package/dist/datautils/findsample.d.ts.map +1 -1
  19. package/dist/datautils/schematicShapeGenerator.d.ts +3 -3
  20. package/dist/datautils/schematicShapeGenerator.d.ts.map +1 -1
  21. package/dist/datautils/seismicimage.d.ts.map +1 -1
  22. package/dist/datautils/trajectory.d.ts +1 -1
  23. package/dist/datautils/trajectory.d.ts.map +1 -1
  24. package/dist/index.cjs +2 -2
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.mjs +1373 -1272
  27. package/dist/index.mjs.map +1 -1
  28. package/dist/index.umd.js +2 -2
  29. package/dist/index.umd.js.map +1 -1
  30. package/dist/interfaces.d.ts +1 -2
  31. package/dist/interfaces.d.ts.map +1 -1
  32. package/dist/layers/CalloutCanvasLayer.d.ts +2 -2
  33. package/dist/layers/CalloutCanvasLayer.d.ts.map +1 -1
  34. package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts.map +1 -1
  35. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts.map +1 -1
  36. package/dist/layers/GeomodelCanvasLayer.d.ts +1 -1
  37. package/dist/layers/GeomodelCanvasLayer.d.ts.map +1 -1
  38. package/dist/layers/GeomodelLabelsLayer.d.ts +4 -4
  39. package/dist/layers/GeomodelLabelsLayer.d.ts.map +1 -1
  40. package/dist/layers/GeomodelLayerV2.d.ts.map +1 -1
  41. package/dist/layers/GridLayer.d.ts.map +1 -1
  42. package/dist/layers/ImageCanvasLayer.d.ts +1 -1
  43. package/dist/layers/ImageCanvasLayer.d.ts.map +1 -1
  44. package/dist/layers/ReferenceLineLayer.d.ts +1 -2
  45. package/dist/layers/ReferenceLineLayer.d.ts.map +1 -1
  46. package/dist/layers/SchematicLayer.d.ts.map +1 -1
  47. package/dist/layers/WellborePathLayer.d.ts +1 -1
  48. package/dist/layers/WellborePathLayer.d.ts.map +1 -1
  49. package/dist/layers/base/CanvasLayer.d.ts +3 -3
  50. package/dist/layers/base/CanvasLayer.d.ts.map +1 -1
  51. package/dist/layers/base/HTMLLayer.d.ts +1 -1
  52. package/dist/layers/base/HTMLLayer.d.ts.map +1 -1
  53. package/dist/layers/base/Layer.d.ts +10 -10
  54. package/dist/layers/base/Layer.d.ts.map +1 -1
  55. package/dist/layers/base/PixiLayer.d.ts +4 -4
  56. package/dist/layers/base/PixiLayer.d.ts.map +1 -1
  57. package/dist/layers/base/SVGLayer.d.ts +1 -1
  58. package/dist/layers/base/SVGLayer.d.ts.map +1 -1
  59. package/dist/utils/arc-length.d.ts.map +1 -1
  60. package/dist/utils/color.d.ts.map +1 -1
  61. package/dist/utils/root-finder.d.ts +1 -1
  62. package/dist/utils/root-finder.d.ts.map +1 -1
  63. package/dist/utils/text.d.ts +2 -2
  64. package/dist/utils/text.d.ts.map +1 -1
  65. package/dist/utils/vectorUtils.d.ts.map +1 -1
  66. package/dist/vendor/pixi-dashed-line/index.d.ts.map +1 -1
  67. package/package.json +11 -11
  68. package/src/components/axis.ts +23 -30
  69. package/src/control/ExtendedCurveInterpolator.ts +7 -7
  70. package/src/control/IntersectionReferenceSystem.ts +33 -41
  71. package/src/control/LayerManager.ts +33 -31
  72. package/src/control/MainController.ts +5 -7
  73. package/src/control/ZoomPanHandler.ts +50 -45
  74. package/src/control/interfaces.ts +3 -3
  75. package/src/control/overlay.ts +20 -16
  76. package/src/datautils/colortable.ts +4 -4
  77. package/src/datautils/findsample.ts +8 -7
  78. package/src/datautils/picks.ts +13 -13
  79. package/src/datautils/schematicShapeGenerator.ts +47 -17
  80. package/src/datautils/seismicimage.ts +12 -13
  81. package/src/datautils/surfacedata.ts +27 -26
  82. package/src/datautils/trajectory.ts +34 -32
  83. package/src/interfaces.ts +1 -1
  84. package/src/layers/CalloutCanvasLayer.ts +55 -58
  85. package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +23 -20
  86. package/src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts +9 -10
  87. package/src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts +13 -13
  88. package/src/layers/GeomodelCanvasLayer.ts +43 -36
  89. package/src/layers/GeomodelLabelsLayer.ts +99 -96
  90. package/src/layers/GeomodelLayerV2.ts +11 -11
  91. package/src/layers/GridLayer.ts +25 -21
  92. package/src/layers/ImageCanvasLayer.ts +17 -11
  93. package/src/layers/ReferenceLineLayer.ts +53 -45
  94. package/src/layers/SchematicLayer.ts +78 -75
  95. package/src/layers/WellborePathLayer.ts +48 -46
  96. package/src/layers/base/CanvasLayer.ts +18 -18
  97. package/src/layers/base/HTMLLayer.ts +5 -5
  98. package/src/layers/base/Layer.ts +18 -18
  99. package/src/layers/base/PixiLayer.ts +24 -20
  100. package/src/layers/base/SVGLayer.ts +5 -5
  101. package/src/utils/arc-length.ts +3 -10
  102. package/src/utils/binary-search.ts +2 -2
  103. package/src/utils/color.ts +9 -5
  104. package/src/utils/root-finder.ts +4 -4
  105. package/src/utils/text.ts +5 -5
  106. package/src/utils/vectorUtils.ts +13 -6
  107. package/src/vendor/pixi-dashed-line/index.ts +3 -2
@@ -29,7 +29,7 @@ export interface WellborepathLayerOptions<T extends [number, number][]> extends
29
29
  }
30
30
 
31
31
  export class WellborepathLayer<T extends [number, number][]> extends SVGLayer<T> {
32
- rescaleEvent: OnRescaleEvent;
32
+ rescaleEvent: OnRescaleEvent | undefined;
33
33
 
34
34
  constructor(id?: string, options?: WellborepathLayerOptions<T>) {
35
35
  super(id, options);
@@ -78,52 +78,54 @@ export class WellborepathLayer<T extends [number, number][]> extends SVGLayer<T>
78
78
  }
79
79
 
80
80
  private renderWellborePath(data: [number, number][]): string {
81
- const { xScale, yScale } = this.rescaleEvent;
82
- const transformedData: [number, number][] = data.map((d) => [xScale(d[0]), yScale(d[1])]);
81
+ if (this.rescaleEvent != null) {
82
+ const { xScale, yScale } = this.rescaleEvent;
83
+ const transformedData: [number, number][] = data.map((d) => [xScale(d[0]), yScale(d[1])]);
83
84
 
84
- // TODO: Might be a good idea to move something like this to a shared function in a base class
85
- let curveFactory;
86
- const { curveType, tension } = this.options as WellborepathLayerOptions<T>;
87
- switch (curveType) {
88
- default:
89
- case 'curveCatmullRom':
90
- curveFactory = curveCatmullRom.alpha(tension || CURVE_CATMULL_ROM_ALPHA);
91
- break;
92
- case 'curveLinear':
93
- curveFactory = curveLinear;
94
- break;
95
- case 'curveBasis':
96
- curveFactory = curveBasis;
97
- break;
98
- case 'curveBasisClosed':
99
- curveFactory = curveBasisClosed;
100
- break;
101
- case 'curveBundle':
102
- curveFactory = curveBundle.beta(tension || CURVE_BUNDLE_BETA);
103
- break;
104
- case 'curveCardinal':
105
- curveFactory = curveCardinal.tension(tension || CURVE_CARDINAL_TENSION);
106
- break;
107
- case 'curveMonotoneX':
108
- curveFactory = curveMonotoneX;
109
- break;
110
- case 'curveMonotoneY':
111
- curveFactory = curveMonotoneY;
112
- break;
113
- case 'curveNatural':
114
- curveFactory = curveNatural;
115
- break;
116
- case 'curveStep':
117
- curveFactory = curveStep;
118
- break;
119
- case 'curveStepAfter':
120
- curveFactory = curveStepAfter;
121
- break;
122
- case 'curveStepBefore':
123
- curveFactory = curveStepBefore;
124
- break;
85
+ // TODO: Might be a good idea to move something like this to a shared function in a base class
86
+ let curveFactory;
87
+ const { curveType, tension } = this.options as WellborepathLayerOptions<T>;
88
+ switch (curveType) {
89
+ default:
90
+ case 'curveCatmullRom':
91
+ curveFactory = curveCatmullRom.alpha(tension || CURVE_CATMULL_ROM_ALPHA);
92
+ break;
93
+ case 'curveLinear':
94
+ curveFactory = curveLinear;
95
+ break;
96
+ case 'curveBasis':
97
+ curveFactory = curveBasis;
98
+ break;
99
+ case 'curveBasisClosed':
100
+ curveFactory = curveBasisClosed;
101
+ break;
102
+ case 'curveBundle':
103
+ curveFactory = curveBundle.beta(tension || CURVE_BUNDLE_BETA);
104
+ break;
105
+ case 'curveCardinal':
106
+ curveFactory = curveCardinal.tension(tension || CURVE_CARDINAL_TENSION);
107
+ break;
108
+ case 'curveMonotoneX':
109
+ curveFactory = curveMonotoneX;
110
+ break;
111
+ case 'curveMonotoneY':
112
+ curveFactory = curveMonotoneY;
113
+ break;
114
+ case 'curveNatural':
115
+ curveFactory = curveNatural;
116
+ break;
117
+ case 'curveStep':
118
+ curveFactory = curveStep;
119
+ break;
120
+ case 'curveStepAfter':
121
+ curveFactory = curveStepAfter;
122
+ break;
123
+ case 'curveStepBefore':
124
+ curveFactory = curveStepBefore;
125
+ break;
126
+ }
127
+ return line().curve(curveFactory)(transformedData) ?? '';
125
128
  }
126
-
127
- return line().curve(curveFactory)(transformedData);
129
+ return '';
128
130
  }
129
131
  }
@@ -3,9 +3,9 @@ import { OnMountEvent, OnUpdateEvent, OnResizeEvent, OnRescaleEvent } from '../.
3
3
  import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
4
4
 
5
5
  export abstract class CanvasLayer<T> extends Layer<T> {
6
- ctx: CanvasRenderingContext2D;
7
- elm: HTMLElement;
8
- canvas: HTMLCanvasElement;
6
+ ctx: CanvasRenderingContext2D | undefined;
7
+ elm: HTMLElement | undefined;
8
+ canvas: HTMLCanvasElement | undefined;
9
9
 
10
10
  onOpacityChanged(_opacity: number): void {
11
11
  if (this.canvas) {
@@ -36,7 +36,7 @@ export abstract class CanvasLayer<T> extends Layer<T> {
36
36
  const isVisible = visible || this.isVisible;
37
37
  const visibility = isVisible ? 'visible' : 'hidden';
38
38
  const interactive = this.interactive ? 'auto' : 'none';
39
- this.canvas.setAttribute(
39
+ this.canvas?.setAttribute(
40
40
  'style',
41
41
  `position:absolute;pointer-events:${interactive};z-index:${this.order};opacity:${this.opacity};visibility:${visibility}`,
42
42
  );
@@ -45,8 +45,8 @@ export abstract class CanvasLayer<T> extends Layer<T> {
45
45
  override onMount(event: OnMountEvent): void {
46
46
  super.onMount(event);
47
47
  const { elm } = event;
48
- const width = event.width || parseInt(elm.getAttribute('width'), 10) || DEFAULT_LAYER_WIDTH;
49
- const height = event.height || parseInt(elm.getAttribute('height'), 10) || DEFAULT_LAYER_HEIGHT;
48
+ const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;
49
+ const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;
50
50
  this.elm = elm;
51
51
  let canvas: HTMLCanvasElement;
52
52
  if (!this.canvas) {
@@ -59,21 +59,21 @@ export abstract class CanvasLayer<T> extends Layer<T> {
59
59
  this.canvas.setAttribute('height', `${height}px`);
60
60
  this.canvas.setAttribute('class', 'canvas-layer');
61
61
  this.updateStyle();
62
- this.ctx = this.canvas.getContext('2d');
62
+ this.ctx = this.canvas.getContext('2d') ?? undefined;
63
63
  }
64
64
 
65
65
  override onUnmount(): void {
66
66
  super.onUnmount();
67
- this.canvas.remove();
68
- this.canvas = null;
67
+ this.canvas?.remove();
68
+ this.canvas = undefined;
69
69
  }
70
70
 
71
71
  override onResize(event: OnResizeEvent): void {
72
72
  const { ctx } = this;
73
73
  const { width, height } = event;
74
74
 
75
- ctx.canvas.setAttribute('width', `${width}px`);
76
- ctx.canvas.setAttribute('height', `${height}px`);
75
+ ctx?.canvas.setAttribute('width', `${width}px`);
76
+ ctx?.canvas.setAttribute('height', `${height}px`);
77
77
  }
78
78
 
79
79
  override onUpdate(event: OnUpdateEvent<T>): void {
@@ -81,22 +81,22 @@ export abstract class CanvasLayer<T> extends Layer<T> {
81
81
  }
82
82
 
83
83
  resetTransform(): void {
84
- this.ctx.resetTransform();
84
+ this.ctx?.resetTransform();
85
85
  }
86
86
 
87
87
  setTransform(event: OnRescaleEvent): void {
88
88
  this.resetTransform();
89
89
  const flippedX = event.xBounds[0] > event.xBounds[1];
90
90
  const flippedY = event.yBounds[0] > event.yBounds[1];
91
- this.ctx.translate(event.xScale(0), event.yScale(0));
92
- this.ctx.scale(event.xRatio * (flippedX ? -1 : 1), event.yRatio * (flippedY ? -1 : 1));
91
+ this.ctx?.translate(event.xScale(0), event.yScale(0));
92
+ this.ctx?.scale(event.xRatio * (flippedX ? -1 : 1), event.yRatio * (flippedY ? -1 : 1));
93
93
  }
94
94
 
95
95
  clearCanvas(): void {
96
96
  const { ctx, canvas } = this;
97
- ctx.save();
98
- ctx.resetTransform();
99
- ctx.clearRect(0, 0, canvas.width, canvas.height);
100
- ctx.restore();
97
+ ctx?.save();
98
+ ctx?.resetTransform();
99
+ ctx?.clearRect(0, 0, canvas?.width ?? 0, canvas?.height ?? 0);
100
+ ctx?.restore();
101
101
  }
102
102
  }
@@ -4,13 +4,13 @@ import { OnMountEvent, OnResizeEvent } from '../../interfaces';
4
4
  import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
5
5
 
6
6
  export abstract class HTMLLayer<T> extends Layer<T> {
7
- elm: Selection<HTMLElement, unknown, null, undefined>;
7
+ elm: Selection<HTMLDivElement, unknown, null, undefined> | undefined;
8
8
 
9
9
  override onMount(event: OnMountEvent): void {
10
10
  super.onMount(event);
11
11
  const { elm } = event;
12
- const width = event.width || parseInt(elm.getAttribute('width'), 10) || DEFAULT_LAYER_WIDTH;
13
- const height = event.height || parseInt(elm.getAttribute('height'), 10) || DEFAULT_LAYER_HEIGHT;
12
+ const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;
13
+ const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;
14
14
 
15
15
  if (!this.elm) {
16
16
  this.elm = select(elm).append('div');
@@ -30,8 +30,8 @@ export abstract class HTMLLayer<T> extends Layer<T> {
30
30
 
31
31
  override onUnmount(): void {
32
32
  super.onUnmount();
33
- this.elm.remove();
34
- this.elm = null;
33
+ this.elm?.remove();
34
+ this.elm = undefined;
35
35
  }
36
36
 
37
37
  override onResize(event: OnResizeEvent): void {
@@ -26,12 +26,12 @@ export abstract class Layer<T> {
26
26
  private _order: number;
27
27
  protected _options: LayerOptions<T>;
28
28
  private loading: boolean;
29
- private _element?: HTMLElement;
29
+ private _element: HTMLElement | undefined;
30
30
  private _opacity: number;
31
- private _referenceSystem?: IntersectionReferenceSystem = null;
32
- private _data?: T;
31
+ private _referenceSystem: IntersectionReferenceSystem | undefined;
32
+ private _data: T | undefined;
33
33
  private _visible: boolean;
34
- private _interactive: boolean = false;
34
+ private _interactive = false;
35
35
 
36
36
  constructor(id?: string, options?: LayerOptions<T>) {
37
37
  this._id = id || `layer-${Math.floor(Math.random() * 1000)}`;
@@ -41,7 +41,7 @@ export abstract class Layer<T> {
41
41
  ...opts,
42
42
  };
43
43
  this.loading = false;
44
- this._element = null;
44
+ this._element = undefined;
45
45
  this._opacity = opts.layerOpacity || 1;
46
46
  this._visible = true;
47
47
  this._interactive = opts.interactive || false;
@@ -49,7 +49,7 @@ export abstract class Layer<T> {
49
49
  if (options && options.data) {
50
50
  this.setData(options.data);
51
51
  }
52
- this._referenceSystem = options && options.referenceSystem;
52
+ this._referenceSystem = options?.referenceSystem;
53
53
 
54
54
  this.onMount = this.onMount.bind(this);
55
55
  this.onUnmount = this.onUnmount.bind(this);
@@ -65,7 +65,7 @@ export abstract class Layer<T> {
65
65
  return this._id;
66
66
  }
67
67
 
68
- get element(): HTMLElement {
68
+ get element(): HTMLElement | undefined {
69
69
  return this._element;
70
70
  }
71
71
 
@@ -112,19 +112,19 @@ export abstract class Layer<T> {
112
112
  return this._interactive;
113
113
  }
114
114
 
115
- get referenceSystem(): IntersectionReferenceSystem {
115
+ get referenceSystem(): IntersectionReferenceSystem | undefined {
116
116
  return this._referenceSystem;
117
117
  }
118
118
 
119
- set referenceSystem(referenceSystem: IntersectionReferenceSystem) {
119
+ set referenceSystem(referenceSystem: IntersectionReferenceSystem | undefined) {
120
120
  this._referenceSystem = referenceSystem;
121
121
  }
122
122
 
123
- get data(): T {
123
+ get data(): T | undefined {
124
124
  return this.getData();
125
125
  }
126
126
 
127
- set data(data: T) {
127
+ set data(data: T | undefined) {
128
128
  this.setData(data);
129
129
  }
130
130
 
@@ -132,14 +132,14 @@ export abstract class Layer<T> {
132
132
  return this._visible;
133
133
  }
134
134
 
135
- getData(): T {
135
+ getData(): T | undefined {
136
136
  return this._data;
137
137
  }
138
138
 
139
- setData(data: T): void {
139
+ setData(data: T | undefined): void {
140
140
  this._data = data;
141
141
  // should not be called when there is no visual element to work with
142
- if (this.element) {
142
+ if (this.element && data != null) {
143
143
  this.onUpdate({ data });
144
144
  }
145
145
  }
@@ -148,10 +148,10 @@ export abstract class Layer<T> {
148
148
  * Clears data and (optionally) the reference system
149
149
  * @param includeReferenceSystem - (optional) if true also removes reference system, default is true
150
150
  */
151
- clearData(includeReferenceSystem: boolean = true): void {
152
- this._data = null;
151
+ clearData(includeReferenceSystem = true): void {
152
+ this._data = undefined;
153
153
  if (includeReferenceSystem) {
154
- this.referenceSystem = null;
154
+ this.referenceSystem = undefined;
155
155
  }
156
156
  this.onUpdate({});
157
157
  }
@@ -168,7 +168,7 @@ export abstract class Layer<T> {
168
168
  }
169
169
 
170
170
  onUnmount(event?: OnUnmountEvent): void {
171
- if (this._options.onUnmount) {
171
+ if (this._options.onUnmount && event != null) {
172
172
  this._options.onUnmount(event, this);
173
173
  }
174
174
  }
@@ -9,9 +9,9 @@ import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
9
9
  // The plugin we are trying to avoid:
10
10
  // https://github.com/pixijs/pixijs/blob/dev/packages/ticker/src/TickerPlugin.ts
11
11
  export class PixiRenderApplication {
12
- stage: Container;
12
+ stage: Container | undefined;
13
13
 
14
- renderer: IRenderer<HTMLCanvasElement>;
14
+ renderer: IRenderer<HTMLCanvasElement> | undefined;
15
15
 
16
16
  constructor(pixiRenderOptions?: IRendererOptionsAuto) {
17
17
  const options = {
@@ -29,15 +29,15 @@ export class PixiRenderApplication {
29
29
  }
30
30
 
31
31
  destroy() {
32
- this.stage.destroy({
32
+ this.stage?.destroy({
33
33
  children: true,
34
34
  texture: true,
35
35
  baseTexture: true,
36
36
  });
37
- this.stage = null;
37
+ this.stage = undefined;
38
38
 
39
39
  // Get renderType and clContext before we destroy the renderer
40
- const renderType = this.renderer.type;
40
+ const renderType = this.renderer?.type;
41
41
  const glContext = this.renderer instanceof Renderer ? this.renderer?.gl : undefined;
42
42
 
43
43
  /**
@@ -50,21 +50,23 @@ export class PixiRenderApplication {
50
50
  glContext?.getExtension('WEBGL_lose_context')?.loseContext();
51
51
  }
52
52
 
53
- this.renderer.destroy(true);
54
- this.renderer = null;
53
+ this.renderer?.destroy(true);
54
+ this.renderer = undefined;
55
55
  }
56
56
 
57
57
  get view() {
58
- return this.renderer.view;
58
+ return this.renderer?.view;
59
59
  }
60
60
 
61
61
  render() {
62
- this.renderer.render(this.stage);
62
+ if (this.stage != null) {
63
+ this.renderer?.render(this.stage);
64
+ }
63
65
  }
64
66
  }
65
67
 
66
68
  export abstract class PixiLayer<T> extends Layer<T> {
67
- private pixiViewContainer: HTMLElement;
69
+ private pixiViewContainer: HTMLElement | undefined;
68
70
  private ctx: PixiRenderApplication;
69
71
  private container: Container;
70
72
 
@@ -74,7 +76,7 @@ export abstract class PixiLayer<T> extends Layer<T> {
74
76
  this.ctx = ctx;
75
77
 
76
78
  this.container = new Container();
77
- this.ctx.stage.addChild(this.container);
79
+ this.ctx.stage?.addChild(this.container);
78
80
  }
79
81
 
80
82
  render(): void {
@@ -95,16 +97,18 @@ export abstract class PixiLayer<T> extends Layer<T> {
95
97
  override onMount(event: OnMountEvent) {
96
98
  super.onMount(event);
97
99
 
98
- this.pixiViewContainer = this.element.querySelector('#webgl-layer');
100
+ this.pixiViewContainer = this.element?.querySelector('#webgl-layer') ?? undefined;
99
101
 
100
102
  if (!this.pixiViewContainer) {
101
103
  this.pixiViewContainer = document.createElement('div');
102
104
  this.pixiViewContainer.setAttribute('id', `${this.id}`);
103
105
  this.pixiViewContainer.setAttribute('class', 'webgl-layer');
104
106
 
105
- this.pixiViewContainer.appendChild(this.ctx.view);
107
+ if (this.ctx.view != null) {
108
+ this.pixiViewContainer.appendChild(this.ctx.view);
109
+ }
106
110
 
107
- this.element.appendChild(this.pixiViewContainer);
111
+ this.element?.appendChild(this.pixiViewContainer);
108
112
 
109
113
  this.updateStyle();
110
114
  }
@@ -114,15 +118,15 @@ export abstract class PixiLayer<T> extends Layer<T> {
114
118
  super.onUnmount(event);
115
119
 
116
120
  this.clearLayer();
117
- this.ctx.stage.removeChild(this.container);
121
+ this.ctx.stage?.removeChild(this.container);
118
122
  this.container.destroy();
119
- this.pixiViewContainer.remove();
123
+ this.pixiViewContainer?.remove();
120
124
  this.pixiViewContainer = undefined;
121
125
  }
122
126
 
123
127
  override onResize(event: OnResizeEvent): void {
124
128
  super.onResize(event);
125
- this.ctx.renderer.resize(event.width, event.height);
129
+ this.ctx.renderer?.resize(event.width, event.height);
126
130
  }
127
131
 
128
132
  override onRescale(event: OnRescaleEvent): void {
@@ -156,7 +160,7 @@ export abstract class PixiLayer<T> extends Layer<T> {
156
160
  .map((pair) => pair.join(':'))
157
161
  .join(';');
158
162
 
159
- this.pixiViewContainer.setAttribute('style', styles);
163
+ this.pixiViewContainer?.setAttribute('style', styles);
160
164
  }
161
165
 
162
166
  override setVisibility(visible: boolean, layerId?: string): void {
@@ -184,7 +188,7 @@ export abstract class PixiLayer<T> extends Layer<T> {
184
188
  }
185
189
  }
186
190
 
187
- renderType(): RENDERER_TYPE {
188
- return this.ctx.renderer.type;
191
+ renderType(): RENDERER_TYPE | undefined {
192
+ return this.ctx.renderer?.type;
189
193
  }
190
194
  }
@@ -4,13 +4,13 @@ import { OnMountEvent, OnResizeEvent } from '../../interfaces';
4
4
  import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
5
5
 
6
6
  export abstract class SVGLayer<T> extends Layer<T> {
7
- elm: Selection<SVGElement, unknown, null, undefined>;
7
+ elm: Selection<SVGSVGElement, unknown, null, undefined> | undefined;
8
8
 
9
9
  override onMount(event: OnMountEvent): void {
10
10
  super.onMount(event);
11
11
  const { elm } = event;
12
- const width = event.width || parseInt(elm.getAttribute('width'), 10) || DEFAULT_LAYER_WIDTH;
13
- const height = event.height || parseInt(elm.getAttribute('height'), 10) || DEFAULT_LAYER_HEIGHT;
12
+ const width = event.width || parseInt(elm.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;
13
+ const height = event.height || parseInt(elm.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;
14
14
  if (!this.elm) {
15
15
  this.elm = select(elm).append('svg');
16
16
  this.elm.attr('id', `${this.id}`);
@@ -23,8 +23,8 @@ export abstract class SVGLayer<T> extends Layer<T> {
23
23
 
24
24
  override onUnmount(): void {
25
25
  super.onUnmount();
26
- this.elm.remove();
27
- this.elm = null;
26
+ this.elm?.remove();
27
+ this.elm = undefined;
28
28
  }
29
29
 
30
30
  override onResize(event: OnResizeEvent): void {
@@ -16,15 +16,8 @@ export class ArcLength {
16
16
  * @param {Number} minDepth Min recursive depth before accepting solution
17
17
  * @param {Number} maxDepth Max recursive depth
18
18
  */
19
- static bisect(
20
- func: fx,
21
- minLimit: number = 0,
22
- maxLimit: number = 1,
23
- tolerance: number = 0.005,
24
- minDepth: number = 4,
25
- maxDepth: number = 10,
26
- ): number {
27
- const calcRec = (a: number, b: number, aVal: number[], bVal: number[], span: number, tolerance: number, depth: number = 0): number => {
19
+ static bisect(func: fx, minLimit = 0, maxLimit = 1, tolerance = 0.005, minDepth = 4, maxDepth = 10): number {
20
+ const calcRec = (a: number, b: number, aVal: number[], bVal: number[], span: number, tolerance: number, depth = 0): number => {
28
21
  const mid = (a + b) / 2;
29
22
  const midVal = func(mid) as number[];
30
23
  const spanA = Vector2.distance(aVal, midVal);
@@ -51,7 +44,7 @@ export class ArcLength {
51
44
  * @param {Number} maxLimit Max limit
52
45
  * @param {Number} segments Number of segments
53
46
  */
54
- static trapezoid(func: fx, minLimit: number = 0, maxLimit: number = 1, segments: number = 1000): number {
47
+ static trapezoid(func: fx, minLimit = 0, maxLimit = 1, segments = 1000): number {
55
48
  let length = 0;
56
49
  let lastPos = func(minLimit) as number[];
57
50
  const step = (maxLimit - minLimit) / (segments - 1);
@@ -11,10 +11,10 @@ export class BinarySearch {
11
11
  while (i > il && i < ih) {
12
12
  const v = values[i];
13
13
  const v1 = values[i + 1];
14
- if (v <= searchValue && v1 >= searchValue) {
14
+ if (v != null && v1 != null && v <= searchValue && v1 >= searchValue) {
15
15
  return i;
16
16
  }
17
- if (searchValue < v) {
17
+ if (v != null && searchValue < v) {
18
18
  ih = i;
19
19
  } else {
20
20
  il = i;
@@ -1,4 +1,4 @@
1
- import { color, Color } from 'd3-color';
1
+ import { color } from 'd3-color';
2
2
 
3
3
  const RADIX_SIXTEEN = 16;
4
4
  const HEX_STRING_LENGTH = 6;
@@ -6,10 +6,14 @@ const HEX_STRING_LENGTH = 6;
6
6
  * Convert color string to number
7
7
  */
8
8
  export function convertColor(colorStr: string): number {
9
- const c: Color = color(colorStr);
10
- const d: string = c.formatHex();
11
- const n: number = parseInt(d.replace('#', '0x'));
12
- return n;
9
+ const c = color(colorStr);
10
+ if (c != null) {
11
+ const d: string = c?.formatHex();
12
+ const n: number = parseInt(d.replace('#', '0x'));
13
+ return n;
14
+ } else {
15
+ throw Error(`Could not format string ${colorStr} to hex code.`);
16
+ }
13
17
  }
14
18
 
15
19
  export function colorToCSSColor(color: number | string): string {
@@ -15,7 +15,7 @@ export class RootFinder {
15
15
  * @param {Number} minLimit Min limit of result
16
16
  * @param {Number} maxLimit Max limit of result
17
17
  */
18
- static newton(func: fx, precision: number = 0.01, maxIterations: number = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
18
+ static newton(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number | undefined {
19
19
  const h = 0.0001;
20
20
  let t = start;
21
21
  for (let i = 0; i < maxIterations; i++) {
@@ -26,7 +26,7 @@ export class RootFinder {
26
26
  const d = (func(t + h) - v) / h;
27
27
  t = t - v / d;
28
28
  }
29
- return null;
29
+ return undefined;
30
30
  }
31
31
 
32
32
  /**
@@ -38,7 +38,7 @@ export class RootFinder {
38
38
  * @param {Number} minLimit Min limit of result
39
39
  * @param {Number} maxLimit Max limit of result
40
40
  */
41
- static bisect(func: fx, precision: number = 0.01, maxIterations: number = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
41
+ static bisect(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
42
42
  let tl = minLimit;
43
43
  let th = maxLimit;
44
44
  let t = start;
@@ -68,7 +68,7 @@ export class RootFinder {
68
68
  * @param {Number} minLimit Min limit of result
69
69
  * @param {Number} maxLimit Max limit of result
70
70
  */
71
- static findRoot(func: fx, precision: number = 0.01, maxIterations: number = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
71
+ static findRoot(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
72
72
  let t = RootFinder.newton(func, precision, maxIterations, start);
73
73
  if (t == null) {
74
74
  t = RootFinder.bisect(func, precision, maxIterations, start, minLimit, maxLimit);
package/src/utils/text.ts CHANGED
@@ -7,7 +7,7 @@ const DEFAULT_HORIZONTAL_PADDING = 4;
7
7
  const DEFAULT_VERTICAL_PADDING = 2;
8
8
 
9
9
  export function pixelsPerUnit(x: ScaleLinear<number, number>): number {
10
- const [min] = x.domain();
10
+ const [min] = x.domain() as [number, number];
11
11
  return Math.abs(x(min + 1));
12
12
  }
13
13
 
@@ -42,14 +42,14 @@ export function isOverlapping(
42
42
  return true;
43
43
  }
44
44
 
45
- export function getOverlap(r1: BoundingBox, r2: BoundingBox): { dx: number; dy: number } {
45
+ export function getOverlap(r1: BoundingBox, r2: BoundingBox): { dx: number; dy: number } | undefined {
46
46
  const r1x2 = r1.x + r1.width;
47
47
  const r2x2 = r2.x + r2.width;
48
48
  const r1y2 = r1.y + r1.height;
49
49
  const r2y2 = r2.y + r2.height;
50
50
 
51
51
  if (r2.x > r1x2 || r2.y > r1y2 || r2x2 < r1.x || r2y2 < r1.y) {
52
- return null;
52
+ return undefined;
53
53
  }
54
54
 
55
55
  const dx = Math.max(0, Math.min(r1.x + r1.width, r2.x + r2.width) - Math.max(r1.x, r2.x));
@@ -67,14 +67,14 @@ export function getOverlapOffset(
67
67
  r2: BoundingBox,
68
68
  horizontalPadding = DEFAULT_HORIZONTAL_PADDING,
69
69
  verticalPadding = DEFAULT_VERTICAL_PADDING,
70
- ): { dx: number; dy: number } {
70
+ ): { dx: number; dy: number } | undefined {
71
71
  const r1x2 = r1.x + r1.width;
72
72
  const r2x2 = r2.x + r2.width;
73
73
  const r1y2 = r1.y + r1.height;
74
74
  const r2y2 = r2.y + r2.height;
75
75
 
76
76
  if (r2.x - horizontalPadding > r1x2 || r2.y - verticalPadding > r1y2 || r2x2 + horizontalPadding < r1.x || r2y2 + verticalPadding < r1.y) {
77
- return null;
77
+ return undefined;
78
78
  }
79
79
 
80
80
  const dx = r1.x + r1.width - r2.x + horizontalPadding;