@equinor/esv-intersection 4.0.0 → 4.1.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 (79) hide show
  1. package/dist/components/axis.d.ts.map +1 -1
  2. package/dist/control/ExtendedCurveInterpolator.d.ts.map +1 -1
  3. package/dist/control/IntersectionReferenceSystem.d.ts.map +1 -1
  4. package/dist/control/LayerManager.d.ts.map +1 -1
  5. package/dist/control/MainController.d.ts.map +1 -1
  6. package/dist/control/ZoomPanHandler.d.ts.map +1 -1
  7. package/dist/control/overlay.d.ts.map +1 -1
  8. package/dist/datautils/colortable.d.ts.map +1 -1
  9. package/dist/datautils/findsample.d.ts.map +1 -1
  10. package/dist/datautils/picks.d.ts.map +1 -1
  11. package/dist/datautils/schematicShapeGenerator.d.ts +5 -5
  12. package/dist/datautils/schematicShapeGenerator.d.ts.map +1 -1
  13. package/dist/datautils/seismicimage.d.ts.map +1 -1
  14. package/dist/datautils/surfacedata.d.ts.map +1 -1
  15. package/dist/datautils/trajectory.d.ts.map +1 -1
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.mjs +1240 -282
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/index.umd.js.map +1 -1
  20. package/dist/layers/CalloutCanvasLayer.d.ts.map +1 -1
  21. package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts.map +1 -1
  22. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts.map +1 -1
  23. package/dist/layers/GeomodelCanvasLayer.d.ts.map +1 -1
  24. package/dist/layers/GeomodelLabelsLayer.d.ts.map +1 -1
  25. package/dist/layers/GeomodelLayerV2.d.ts.map +1 -1
  26. package/dist/layers/GridLayer.d.ts.map +1 -1
  27. package/dist/layers/ImageCanvasLayer.d.ts.map +1 -1
  28. package/dist/layers/ReferenceLineLayer.d.ts.map +1 -1
  29. package/dist/layers/SchematicLayer.d.ts.map +1 -1
  30. package/dist/layers/WellborePathLayer.d.ts.map +1 -1
  31. package/dist/layers/base/CanvasLayer.d.ts.map +1 -1
  32. package/dist/layers/base/HTMLLayer.d.ts.map +1 -1
  33. package/dist/layers/base/Layer.d.ts.map +1 -1
  34. package/dist/layers/base/PixiLayer.d.ts.map +1 -1
  35. package/dist/layers/base/SVGLayer.d.ts.map +1 -1
  36. package/dist/layers/schematicInterfaces.d.ts.map +1 -1
  37. package/dist/utils/arc-length.d.ts.map +1 -1
  38. package/dist/utils/root-finder.d.ts.map +1 -1
  39. package/dist/utils/text.d.ts.map +1 -1
  40. package/dist/utils/vectorUtils.d.ts.map +1 -1
  41. package/dist/vendor/pixi-dashed-line/index.d.ts.map +1 -1
  42. package/package.json +2 -4
  43. package/src/components/axis.ts +40 -10
  44. package/src/control/ExtendedCurveInterpolator.ts +47 -9
  45. package/src/control/IntersectionReferenceSystem.ts +110 -30
  46. package/src/control/LayerManager.ts +76 -24
  47. package/src/control/MainController.ts +37 -8
  48. package/src/control/ZoomPanHandler.ts +76 -14
  49. package/src/control/overlay.ts +18 -6
  50. package/src/datautils/colortable.ts +7 -2
  51. package/src/datautils/findsample.ts +12 -2
  52. package/src/datautils/picks.ts +66 -18
  53. package/src/datautils/schematicShapeGenerator.ts +570 -146
  54. package/src/datautils/seismicimage.ts +36 -10
  55. package/src/datautils/surfacedata.ts +119 -40
  56. package/src/datautils/trajectory.ts +56 -17
  57. package/src/layers/CalloutCanvasLayer.ts +129 -26
  58. package/src/layers/CustomDisplayObjects/ComplexRope.ts +2 -1
  59. package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +5 -5
  60. package/src/layers/CustomDisplayObjects/UniformTextureStretchRope.ts +6 -2
  61. package/src/layers/GeomodelCanvasLayer.ts +10 -3
  62. package/src/layers/GeomodelLabelsLayer.ts +212 -87
  63. package/src/layers/GeomodelLayerV2.ts +8 -3
  64. package/src/layers/GridLayer.ts +14 -3
  65. package/src/layers/ImageCanvasLayer.ts +17 -3
  66. package/src/layers/ReferenceLineLayer.ts +31 -9
  67. package/src/layers/SchematicLayer.ts +499 -150
  68. package/src/layers/WellborePathLayer.ts +22 -7
  69. package/src/layers/base/CanvasLayer.ts +18 -4
  70. package/src/layers/base/HTMLLayer.ts +11 -3
  71. package/src/layers/base/Layer.ts +10 -2
  72. package/src/layers/base/PixiLayer.ts +27 -7
  73. package/src/layers/base/SVGLayer.ts +13 -3
  74. package/src/layers/schematicInterfaces.ts +16 -6
  75. package/src/utils/arc-length.ts +31 -5
  76. package/src/utils/root-finder.ts +32 -4
  77. package/src/utils/text.ts +34 -7
  78. package/src/utils/vectorUtils.ts +23 -6
  79. package/src/vendor/pixi-dashed-line/index.ts +66 -13
@@ -34,7 +34,10 @@ export class ZoomPanHandler {
34
34
  constructor(
35
35
  elm: HTMLElement,
36
36
  onRescale: RescaleFunction,
37
- options: ZoomAndPanOptions = { maxZoomLevel: DEFAULT_MAX_ZOOM_LEVEL, minZoomLevel: DEFAULT_MIN_ZOOM_LEVEL },
37
+ options: ZoomAndPanOptions = {
38
+ maxZoomLevel: DEFAULT_MAX_ZOOM_LEVEL,
39
+ minZoomLevel: DEFAULT_MIN_ZOOM_LEVEL,
40
+ },
38
41
  ) {
39
42
  this.container = select(elm);
40
43
  this.options = options;
@@ -180,7 +183,14 @@ export class ZoomPanHandler {
180
183
  * Update translate extent (pan limits)
181
184
  */
182
185
  updateTranslateExtent(): void {
183
- const { width, xSpan, zFactor, enableTranslateExtent, translateBoundsX, translateBoundsY } = this;
186
+ const {
187
+ width,
188
+ xSpan,
189
+ zFactor,
190
+ enableTranslateExtent,
191
+ translateBoundsX,
192
+ translateBoundsY,
193
+ } = this;
184
194
 
185
195
  let x1 = -Infinity;
186
196
  let y1 = -Infinity;
@@ -206,7 +216,19 @@ export class ZoomPanHandler {
206
216
  * Create an event object from current state
207
217
  */
208
218
  currentStateAsEvent(): OnRescaleEvent {
209
- const { scaleX, scaleY, xBounds, yBounds, zFactor, viewportRatio, currentTransform, xRatio, yRatio, width, height } = this;
219
+ const {
220
+ scaleX,
221
+ scaleY,
222
+ xBounds,
223
+ yBounds,
224
+ zFactor,
225
+ viewportRatio,
226
+ currentTransform,
227
+ xRatio,
228
+ yRatio,
229
+ width,
230
+ height,
231
+ } = this;
210
232
 
211
233
  return {
212
234
  xScale: scaleX.copy(),
@@ -236,7 +258,9 @@ export class ZoomPanHandler {
236
258
  * Initialized handler
237
259
  */
238
260
  init(): void {
239
- this.zoom = zoom<HTMLElement, unknown>().scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel]).on('zoom', this.onZoom);
261
+ this.zoom = zoom<HTMLElement, unknown>()
262
+ .scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel])
263
+ .on('zoom', this.onZoom);
240
264
  this.container.call(this.zoom);
241
265
  }
242
266
 
@@ -287,8 +311,14 @@ export class ZoomPanHandler {
287
311
  * @param duration - duration of transition
288
312
  * @returns a merge of filter and payload
289
313
  */
290
- setViewport(cx?: number, cy?: number, displ?: number, duration?: number): void {
291
- const { zoom, container, calculateTransform, scaleX, scaleY, isXInverted } = this;
314
+ setViewport(
315
+ cx?: number,
316
+ cy?: number,
317
+ displ?: number,
318
+ duration?: number,
319
+ ): void {
320
+ const { zoom, container, calculateTransform, scaleX, scaleY, isXInverted } =
321
+ this;
292
322
 
293
323
  if (cx == null || displ == null || isNaN(cx) || isNaN(displ)) {
294
324
  const xd = scaleX.domain() as [number, number];
@@ -334,7 +364,10 @@ export class ZoomPanHandler {
334
364
  /**
335
365
  * Set bounds
336
366
  */
337
- setTranslateBounds(xBounds: [number, number], yBounds: [number, number]): void {
367
+ setTranslateBounds(
368
+ xBounds: [number, number],
369
+ yBounds: [number, number],
370
+ ): void {
338
371
  this.translateBoundsX = xBounds;
339
372
  this.translateBoundsY = yBounds;
340
373
 
@@ -348,8 +381,18 @@ export class ZoomPanHandler {
348
381
  adjustToSize(): void;
349
382
  adjustToSize(autoAdjust: boolean): void;
350
383
  adjustToSize(width: number, height: number, force: boolean): void;
351
- adjustToSize(widthOrAutoAdjust?: unknown, height?: number, force = false): void {
352
- const { width: oldWidth, height: oldHeight, scaleX, scaleY, recalculateZoomTransform } = this;
384
+ adjustToSize(
385
+ widthOrAutoAdjust?: unknown,
386
+ height?: number,
387
+ force = false,
388
+ ): void {
389
+ const {
390
+ width: oldWidth,
391
+ height: oldHeight,
392
+ scaleX,
393
+ scaleY,
394
+ recalculateZoomTransform,
395
+ } = this;
353
396
 
354
397
  let w = 0;
355
398
  let h = 0;
@@ -360,7 +403,8 @@ export class ZoomPanHandler {
360
403
  } else {
361
404
  const containerEl = this.container.node();
362
405
  if (containerEl) {
363
- const { width: containerWidth, height: containerHeight } = containerEl.getBoundingClientRect();
406
+ const { width: containerWidth, height: containerHeight } =
407
+ containerEl.getBoundingClientRect();
364
408
  w = containerWidth;
365
409
  h = containerHeight;
366
410
  }
@@ -389,7 +433,16 @@ export class ZoomPanHandler {
389
433
  * @returns New transformation matrix
390
434
  */
391
435
  calculateTransform(dx0: number, dx1: number, dy: number): ZoomTransform {
392
- const { scaleX, xSpan, xBounds, yBounds, zFactor, viewportRatio: ratio, isXInverted, isYInverted } = this;
436
+ const {
437
+ scaleX,
438
+ xSpan,
439
+ xBounds,
440
+ yBounds,
441
+ zFactor,
442
+ viewportRatio: ratio,
443
+ isXInverted,
444
+ isYInverted,
445
+ } = this;
393
446
 
394
447
  const [rx1, rx2] = scaleX.range() as [number, number];
395
448
  const displ = Math.abs(dx1 - dx0);
@@ -398,8 +451,11 @@ export class ZoomPanHandler {
398
451
 
399
452
  const dy0 = dy - (isYInverted ? -displ : displ) / zFactor / ratio / 2;
400
453
 
401
- const tx = (xBounds[0] - dx0) / (isXInverted ? -unitsPerPixels : unitsPerPixels);
402
- const ty = (yBounds[0] - dy0) / ((isYInverted ? -unitsPerPixels : unitsPerPixels) / zFactor);
454
+ const tx =
455
+ (xBounds[0] - dx0) / (isXInverted ? -unitsPerPixels : unitsPerPixels);
456
+ const ty =
457
+ (yBounds[0] - dy0) /
458
+ ((isYInverted ? -unitsPerPixels : unitsPerPixels) / zFactor);
403
459
 
404
460
  return zoomIdentity.translate(tx, ty).scale(k);
405
461
  }
@@ -408,7 +464,13 @@ export class ZoomPanHandler {
408
464
  * Recalcualate the transform
409
465
  */
410
466
  recalculateZoomTransform(): void {
411
- const { scaleX, scaleY, container, calculateTransform, updateTranslateExtent } = this;
467
+ const {
468
+ scaleX,
469
+ scaleY,
470
+ container,
471
+ calculateTransform,
472
+ updateTranslateExtent,
473
+ } = this;
412
474
 
413
475
  const [dx0, dx1] = scaleX.domain() as [number, number];
414
476
  const [dy0, dy1] = scaleY.domain() as [number, number];
@@ -10,11 +10,15 @@ export class Overlay<T> {
10
10
 
11
11
  constructor(caller: T, container: HTMLElement) {
12
12
  const con = select(container);
13
- this.elm = con.append('div').attr('id', 'overlay').style('z-index', '11').style('position', 'absolute');
13
+ this.elm = con
14
+ .append('div')
15
+ .attr('id', 'overlay')
16
+ .style('z-index', '11')
17
+ .style('position', 'absolute');
14
18
  this.source = this.elm.node() ?? undefined;
15
19
 
16
20
  const { elm } = this;
17
- elm.on('resize', (event) => {
21
+ elm.on('resize', event => {
18
22
  const { width, height } = event.detail;
19
23
  elm.style('width', `${width}px`).style('height', `${height}px`);
20
24
 
@@ -39,7 +43,7 @@ export class Overlay<T> {
39
43
  });
40
44
  });
41
45
 
42
- elm.on('mousemove', (event) => {
46
+ elm.on('mousemove', event => {
43
47
  if (!this.enabled) {
44
48
  return;
45
49
  }
@@ -83,8 +87,15 @@ export class Overlay<T> {
83
87
  });
84
88
  }
85
89
 
86
- create(key: string, callbacks?: OverlayCallbacks<T>): HTMLElement | undefined {
87
- const newElm = this.elm.append('div').style('position', 'relative').style('pointer-events', 'none').node();
90
+ create(
91
+ key: string,
92
+ callbacks?: OverlayCallbacks<T>,
93
+ ): HTMLElement | undefined {
94
+ const newElm = this.elm
95
+ .append('div')
96
+ .style('position', 'relative')
97
+ .style('pointer-events', 'none')
98
+ .node();
88
99
 
89
100
  if (newElm != null) {
90
101
  this.elements[key] = newElm;
@@ -119,4 +130,5 @@ export class Overlay<T> {
119
130
  }
120
131
  }
121
132
 
122
- export const overlay = <T>(caller: T, container: HTMLElement): Overlay<T> => new Overlay<T>(caller, container);
133
+ export const overlay = <T>(caller: T, container: HTMLElement): Overlay<T> =>
134
+ new Overlay<T>(caller, container);
@@ -1,11 +1,16 @@
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, number, number][] {
4
+ export function createColorTable(
5
+ colorMap: string[],
6
+ size: number,
7
+ ): [number, number, number][] {
5
8
  const colorDomain = colorMap.map((_v, i) => (i * size) / colorMap.length);
6
9
  const colorScale = scaleLinear<string>().domain(colorDomain).range(colorMap);
7
10
 
8
- const table = Array.from(new Array(size).keys()).map<[number, number, number]>((i) => {
11
+ const table = Array.from(new Array(size).keys()).map<
12
+ [number, number, number]
13
+ >(i => {
9
14
  const rgb = color(colorScale(i))?.rgb();
10
15
  return rgb != null ? [rgb.r, rgb.g, rgb.b] : [0, 0, 0];
11
16
  });
@@ -38,7 +38,12 @@ export function findIndexOfSample(data: number[][], pos: number): number {
38
38
  for (let i = a; i < b; i++) {
39
39
  const v1 = data[i]?.[0];
40
40
  const v2 = data[i + 1]?.[0];
41
- if (v1 != null && v2 != null && Math.min(v1, v2) <= pos && pos <= Math.max(v1, v2)) {
41
+ if (
42
+ v1 != null &&
43
+ v2 != null &&
44
+ Math.min(v1, v2) <= pos &&
45
+ pos <= Math.max(v1, v2)
46
+ ) {
42
47
  index = i;
43
48
  break;
44
49
  }
@@ -47,7 +52,12 @@ export function findIndexOfSample(data: number[][], pos: number): number {
47
52
  return index;
48
53
  }
49
54
 
50
- export function findSampleAtPos(data: number[][], pos: number, topLimit = 0, bottomLimit = 0): number {
55
+ export function findSampleAtPos(
56
+ data: number[][],
57
+ pos: number,
58
+ topLimit = 0,
59
+ bottomLimit = 0,
60
+ ): number {
51
61
  let y = 0;
52
62
  const index = findIndexOfSample(data, pos);
53
63
  if (index !== -1) {
@@ -87,24 +87,43 @@ function getEntryPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {
87
87
  .map((p: PairedPickAndUnit) => mapPick(p.entryPick, 'strat-picks'));
88
88
  }
89
89
 
90
- function getFilteredExitPicks(formationPicks: PairedPickAndUnit[]): Annotation[] {
90
+ function getFilteredExitPicks(
91
+ formationPicks: PairedPickAndUnit[],
92
+ ): Annotation[] {
91
93
  if (!formationPicks) {
92
94
  return [];
93
95
  }
94
96
 
95
97
  return (
96
98
  formationPicks
97
- .filter((d: PairedPickAndUnit) => formationPicks.findIndex((p: PairedPickAndUnit) => Math.abs(p.entryPick.md - d.exitPick.md) < 0.5) === -1)
99
+ .filter(
100
+ (d: PairedPickAndUnit) =>
101
+ formationPicks.findIndex(
102
+ (p: PairedPickAndUnit) =>
103
+ Math.abs(p.entryPick.md - d.exitPick.md) < 0.5,
104
+ ) === -1,
105
+ )
98
106
  .map((p: PairedPickAndUnit) => mapPick(p.exitPick, 'strat-picks'))
99
107
  // Remove duplicates from unitpicks filling in gaps in formation
100
- .filter((obj: Annotation, i: number, array: Annotation[]) => i === array.findIndex((v: Annotation) => v.title === obj.title && v.md === obj.md))
108
+ .filter(
109
+ (obj: Annotation, i: number, array: Annotation[]) =>
110
+ i ===
111
+ array.findIndex(
112
+ (v: Annotation) => v.title === obj.title && v.md === obj.md,
113
+ ),
114
+ )
101
115
  );
102
116
  }
103
117
 
104
- export const getPicksData = (picksData: { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] }): Annotation[] =>
105
- [...getReferencePicks(picksData.nonUnitPicks), ...getEntryPicks(picksData.unitPicks), ...getFilteredExitPicks(picksData.unitPicks)].sort(
106
- (a, b) => a.md! - b.md!,
107
- );
118
+ export const getPicksData = (picksData: {
119
+ unitPicks: PairedPickAndUnit[];
120
+ nonUnitPicks: PickWithId[];
121
+ }): Annotation[] =>
122
+ [
123
+ ...getReferencePicks(picksData.nonUnitPicks),
124
+ ...getEntryPicks(picksData.unitPicks),
125
+ ...getFilteredExitPicks(picksData.unitPicks),
126
+ ].sort((a, b) => a.md! - b.md!);
108
127
 
109
128
  /**
110
129
  * @param {Unit} u
@@ -134,7 +153,11 @@ const unitDto = (u: Unit): UnitDto => ({
134
153
  * @param {number} arr.from
135
154
  * @returns {[number, number][]}
136
155
  */
137
- function findGaps(from: number, to: number, arr: { from: number; to: number; itm: PairedPickAndUnit }[]): [number, number][] {
156
+ function findGaps(
157
+ from: number,
158
+ to: number,
159
+ arr: { from: number; to: number; itm: PairedPickAndUnit }[],
160
+ ): [number, number][] {
138
161
  if (arr.length === 0) {
139
162
  return [[from, to]];
140
163
  }
@@ -166,12 +189,20 @@ const transformStratColumn = (units: Unit[]): UnitDto[] => units.map(unitDto);
166
189
  * @param {Pick[]} picks picks
167
190
  * @param {Unit[]} stratColumn strat column
168
191
  */
169
- function joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined: PickAndUnit[]; nonUnitPicks: PickWithId[] } {
192
+ function joinPicksAndStratColumn(
193
+ picks: Pick[],
194
+ stratColumn: Unit[],
195
+ ): { joined: PickAndUnit[]; nonUnitPicks: PickWithId[] } {
170
196
  const transformed = transformStratColumn(stratColumn);
171
197
  const nonUnitPicks: PickWithId[] = [];
172
198
  const joined: PickAndUnit[] = [];
173
199
  picks.forEach((p: Pick) => {
174
- const matches = transformed.filter((u: UnitDto) => p.pickIdentifier?.search(new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i')) !== -1);
200
+ const matches = transformed.filter(
201
+ (u: UnitDto) =>
202
+ p.pickIdentifier?.search(
203
+ new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i'),
204
+ ) !== -1,
205
+ );
175
206
  if (matches.length > 0) {
176
207
  matches.forEach((u: UnitDto) =>
177
208
  joined.push({
@@ -203,7 +234,12 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
203
234
 
204
235
  const sorted = joined
205
236
  .filter((d: PickAndUnit) => d.level)
206
- .sort((a: PickAndUnit, b: PickAndUnit) => a.unitName.localeCompare(b.unitName) || a.md - b.md || a.ageTop - b.ageTop);
237
+ .sort(
238
+ (a: PickAndUnit, b: PickAndUnit) =>
239
+ a.unitName.localeCompare(b.unitName) ||
240
+ a.md - b.md ||
241
+ a.ageTop - b.ageTop,
242
+ );
207
243
 
208
244
  while (sorted.length > 0) {
209
245
  current = sorted.shift()!;
@@ -225,7 +261,9 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
225
261
  let top: PickAndUnit | undefined;
226
262
  let base: PickAndUnit | undefined;
227
263
 
228
- const pairWith = sorted.find((p: PickAndUnit) => p.identifier === pairWithName);
264
+ const pairWith = sorted.find(
265
+ (p: PickAndUnit) => p.identifier === pairWithName,
266
+ );
229
267
  if (!pairWith) {
230
268
  console.warn(`Unable to find ${pairWithName} pick for ${name}`);
231
269
  if (isTop) {
@@ -237,7 +275,9 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
237
275
  if (base) {
238
276
  console.warn(`Using ${base.identifier} as base for ${name}`);
239
277
  } else {
240
- console.warn(`Unable to find a base pick for ${name} pick at ${top.md}, ignored`);
278
+ console.warn(
279
+ `Unable to find a base pick for ${name} pick at ${top.md}, ignored`,
280
+ );
241
281
  continue;
242
282
  }
243
283
  } else if (isBase) {
@@ -249,7 +289,9 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
249
289
  if (top) {
250
290
  console.warn(`Using ${top.identifier} as top for ${name}`);
251
291
  } else {
252
- console.warn(`Unable to find a top pick for ${name} pick at ${base.md}, ignored`);
292
+ console.warn(
293
+ `Unable to find a top pick for ${name} pick at ${base.md}, ignored`,
294
+ );
253
295
  continue;
254
296
  }
255
297
  } else {
@@ -290,7 +332,10 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
290
332
  * @param {Pick[]} picks picks
291
333
  * @param {Unit[]} stratColumn strat column
292
334
  */
293
- export function transformFormationData(picks: Pick[], stratColumn: Unit[]): { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] } {
335
+ export function transformFormationData(
336
+ picks: Pick[],
337
+ stratColumn: Unit[],
338
+ ): { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] } {
294
339
  const { joined, nonUnitPicks } = joinPicksAndStratColumn(picks, stratColumn);
295
340
  const pairs = pairJoinedPicks(joined);
296
341
 
@@ -305,7 +350,10 @@ export function transformFormationData(picks: Pick[], stratColumn: Unit[]): { un
305
350
  while (itemstack.length > 0) {
306
351
  const first = itemstack.pop()!;
307
352
  const group: PairedPickAndUnit[] = [];
308
- while (itemstack.length > 0 && itemstack[itemstack.length - 1]?.level! > first.level) {
353
+ while (
354
+ itemstack.length > 0 &&
355
+ itemstack[itemstack.length - 1]?.level! > first.level
356
+ ) {
309
357
  group.push(itemstack.pop()!);
310
358
  }
311
359
  group.reverse();
@@ -313,11 +361,11 @@ export function transformFormationData(picks: Pick[], stratColumn: Unit[]): { un
313
361
  const arr: { from: number; to: number; itm: PairedPickAndUnit }[] = [];
314
362
  group.forEach((itm: PairedPickAndUnit) => {
315
363
  const gaps = findGaps(itm.mdEntry, itm.mdExit, arr);
316
- arr.push(...gaps.map((g) => ({ from: g[0], to: g[1], itm })));
364
+ arr.push(...gaps.map(g => ({ from: g[0], to: g[1], itm })));
317
365
  });
318
366
  arr.sort((a, b) => a.from - b.from);
319
367
  unitPicks.push(
320
- ...arr.map((d) => ({
368
+ ...arr.map(d => ({
321
369
  from: d.from,
322
370
  to: d.to,
323
371
  ...d.itm,