@niivue/niivue 0.48.1 → 0.50.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.
package/build/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { mat4, vec3, vec4, vec2 } from 'gl-matrix';
2
- import * as nifti from 'nifti-reader-js';
2
+ import { NIFTI1, NIFTI2 } from 'nifti-reader-js';
3
3
  import { WebSocketSubject } from 'rxjs/webSocket';
4
4
 
5
5
  type ColorMap = {
@@ -208,7 +208,8 @@ declare enum ImageType {
208
208
  HEAD = 15,
209
209
  DCM_FOLDER = 16,
210
210
  SRC = 17,
211
- FIB = 18
211
+ FIB = 18,
212
+ BMP = 19
212
213
  }
213
214
  type ImageFromUrlOptions = {
214
215
  url: string;
@@ -320,7 +321,7 @@ declare class NVImage {
320
321
  oblique_angle?: number;
321
322
  maxShearDeg?: number;
322
323
  useQFormNotSForm: boolean;
323
- alphaThreshold?: number;
324
+ colormapType?: number;
324
325
  pixDims?: number[];
325
326
  matRAS?: mat4;
326
327
  pixDimsRAS?: number[];
@@ -336,7 +337,7 @@ declare class NVImage {
336
337
  extentsMinOrtho?: number[];
337
338
  extentsMaxOrtho?: number[];
338
339
  mm2ortho?: mat4;
339
- hdr: nifti.NIFTI1 | nifti.NIFTI2 | null;
340
+ hdr: NIFTI1 | NIFTI2 | null;
340
341
  imageType?: ImageType;
341
342
  img?: TypedVoxelArray;
342
343
  imaginary?: Float32Array;
@@ -385,26 +386,29 @@ declare class NVImage {
385
386
  * @param colorbarVisible - TODO
386
387
  * @param colormapLabel - TODO
387
388
  */
388
- constructor(dataBuffer?: ArrayBuffer | ArrayBuffer[] | null, name?: string, colormap?: string, opacity?: number, pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null);
389
+ constructor(dataBuffer?: ArrayBuffer | ArrayBuffer[] | null, name?: string, colormap?: string, opacity?: number, pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number);
390
+ init(dataBuffer?: ArrayBuffer | ArrayBuffer[] | null, name?: string, colormap?: string, opacity?: number, _pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number, imgRaw?: ArrayBuffer | null): void;
391
+ static new(dataBuffer?: ArrayBuffer | ArrayBuffer[] | null, name?: string, colormap?: string, opacity?: number, pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number): Promise<NVImage>;
389
392
  computeObliqueAngle(mtx44: mat4): number;
390
393
  float32V1asRGBA(inImg: Float32Array): Uint8Array;
391
394
  loadImgV1(isFlipX?: boolean, isFlipY?: boolean, isFlipZ?: boolean): boolean;
392
395
  calculateOblique(): void;
393
396
  THD_daxes_to_NIFTI(xyzDelta: number[], xyzOrigin: number[], orientSpecific: number[]): void;
394
397
  SetPixDimFromSForm(): void;
395
- readDICOM(buf: ArrayBuffer | ArrayBuffer[]): ArrayBuffer;
396
398
  readECAT(buffer: ArrayBuffer): ArrayBuffer;
397
399
  readV16(buffer: ArrayBuffer): ArrayBuffer;
400
+ imageDataFromArrayBuffer(buffer: ArrayBuffer): Promise<ImageData>;
401
+ readBMP(buffer: ArrayBuffer): Promise<Uint8Array>;
398
402
  readVMR(buffer: ArrayBuffer): ArrayBuffer;
399
- readMGH(buffer: ArrayBuffer): ArrayBuffer;
400
- readFIB(buffer: ArrayBuffer): [ArrayBuffer, Float32Array];
401
- readSRC(buffer: ArrayBuffer): ArrayBuffer;
402
- readHEAD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
403
- readMHA(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
404
- readMIF(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
405
- readNRRD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
403
+ readMGH(buffer: ArrayBuffer): Promise<ArrayBuffer>;
404
+ readFIB(buffer: ArrayBuffer): Promise<[ArrayBuffer, Float32Array]>;
405
+ readSRC(buffer: ArrayBuffer): Promise<ArrayBuffer>;
406
+ readHEAD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
407
+ readMHA(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
408
+ readMIF(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
409
+ readNRRD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
406
410
  calculateRAS(): void;
407
- hdr2RAS(nVolumes?: number): nifti.NIFTI1 | nifti.NIFTI2;
411
+ hdr2RAS(nVolumes?: number): NIFTI1 | NIFTI2;
408
412
  img2RAS(nVolume?: number): TypedVoxelArray;
409
413
  vox2mm(XYZ: number[], mtx: mat4): vec3;
410
414
  mm2vox(mm: number[], frac?: boolean): Float32Array | vec3;
@@ -421,15 +425,19 @@ declare class NVImage {
421
425
  /**
422
426
  * set contrast/brightness to robust range (2%..98%)
423
427
  * @param vol - volume for estimate (use -1 to use estimate on all loaded volumes; use INFINITY for current volume)
428
+ * @param isBorder - if true (default) only center of volume used for estimate
424
429
  * @sets volume brightness and returns array [pct2, pct98, mnScale, mxScale]
425
430
  * @see {@link https://niivue.github.io/niivue/features/timeseries2.html | live demo usage}
426
431
  */
427
- calMinMax(vol?: number): number[];
432
+ calMinMax(vol?: number, isBorder?: boolean): number[];
428
433
  intensityRaw2Scaled(raw: number): number;
429
434
  intensityScaled2Raw(scaled: number): number;
430
- saveToUint8Array(fnm: string, drawing8?: Uint8Array | null): Uint8Array;
431
- saveToDisk(fnm?: string, drawing8?: Uint8Array | null): Uint8Array;
432
- static fetchDicomData(url: string, headers?: Record<string, string>): Promise<ArrayBuffer[]>;
435
+ saveToUint8Array(fnm: string, drawing8?: Uint8Array | null): Promise<Uint8Array>;
436
+ saveToDisk(fnm?: string, drawing8?: Uint8Array | null): Promise<Uint8Array>;
437
+ static fetchDicomData(url: string, headers?: Record<string, string>): Promise<Array<{
438
+ name: string;
439
+ data: ArrayBuffer;
440
+ }>>;
433
441
  static fetchPartial(url: string, bytesToLoad: number, headers?: Record<string, string>): Promise<Response>;
434
442
  /**
435
443
  * factory function to load and return a new NVImage instance from a given URL
@@ -453,7 +461,7 @@ declare class NVImage {
453
461
  */
454
462
  static createNiftiArray(dims?: number[], pixDims?: number[], affine?: number[], datatypeCode?: number, // DT_UINT8
455
463
  img?: Uint8Array): Uint8Array;
456
- static createNiftiHeader(dims?: number[], pixDims?: number[], affine?: number[], datatypeCode?: number): nifti.NIFTI1;
464
+ static createNiftiHeader(dims?: number[], pixDims?: number[], affine?: number[], datatypeCode?: number): NIFTI1;
457
465
  /**
458
466
  * read a 3D slab of voxels from a volume
459
467
  * @param voxStart - first row, column and slice (RAS order) for selection
@@ -478,7 +486,7 @@ declare class NVImage {
478
486
  * @example
479
487
  * myImage = NVImage.loadFromBase64('SomeBase64String')
480
488
  */
481
- static loadFromBase64({ base64, name, colormap, opacity, cal_min, cal_max, trustCalMinMax, percentileFrac, ignoreZeroVoxels, useQFormNotSForm, colormapNegative, frame4D, imageType, cal_minNeg, cal_maxNeg, colorbarVisible, colormapLabel }: ImageFromBase64): NVImage;
489
+ static loadFromBase64({ base64, name, colormap, opacity, cal_min, cal_max, trustCalMinMax, percentileFrac, ignoreZeroVoxels, useQFormNotSForm, colormapNegative, frame4D, imageType, cal_minNeg, cal_maxNeg, colorbarVisible, colormapLabel }: ImageFromBase64): Promise<NVImage>;
482
490
  /**
483
491
  * make a clone of a NVImage instance and return a new NVImage
484
492
  * @returns NVImage instance
@@ -608,6 +616,24 @@ declare enum DRAG_MODE {
608
616
  callbackOnly = 5,
609
617
  roiSelection = 6
610
618
  }
619
+ declare enum DRAG_MODE_SECONDARY {
620
+ none = 0,
621
+ contrast = 1,
622
+ measurement = 2,
623
+ pan = 3,
624
+ slicer3D = 4,
625
+ callbackOnly = 5,
626
+ roiSelection = 6
627
+ }
628
+ declare enum DRAG_MODE_PRIMARY {
629
+ crosshair = 0,
630
+ windowing = 1
631
+ }
632
+ declare enum COLORMAP_TYPE {
633
+ MIN_TO_MAX = 0,
634
+ ZERO_TO_MAX_TRANSPARENT_BELOW_MIN = 1,
635
+ ZERO_TO_MAX_TRANSLUCENT_BELOW_MIN = 2
636
+ }
611
637
  /**
612
638
  * NVConfigOptions
613
639
  */
@@ -647,7 +673,8 @@ type NVConfigOptions = {
647
673
  multiplanarShowRender: SHOW_RENDER;
648
674
  isRadiologicalConvention: boolean;
649
675
  meshThicknessOn2D: number | string;
650
- dragMode: DRAG_MODE;
676
+ dragMode: DRAG_MODE | DRAG_MODE_SECONDARY;
677
+ dragModePrimary: DRAG_MODE_PRIMARY;
651
678
  yoke3Dto2DZoom: boolean;
652
679
  isDepthPickMesh: boolean;
653
680
  isCornerOrientationText: boolean;
@@ -680,6 +707,7 @@ type NVConfigOptions = {
680
707
  renderOverlayBlend: number;
681
708
  sliceMosaicString: string;
682
709
  centerMosaic: boolean;
710
+ interactive: boolean;
683
711
  penSize: number;
684
712
  clickToSegment: boolean;
685
713
  clickToSegmentRadius: number;
@@ -698,6 +726,7 @@ type NVConfigOptions = {
698
726
  measureTextColor: number[];
699
727
  measureLineColor: number[];
700
728
  measureTextHeight: number;
729
+ isAlphaClipDark: boolean;
701
730
  };
702
731
  declare const DEFAULT_OPTIONS: NVConfigOptions;
703
732
  type SceneData = {
@@ -1117,7 +1146,7 @@ type NVMeshLayer = {
1117
1146
  values: AnyNumberArray;
1118
1147
  outlineBorder?: number;
1119
1148
  isTransparentBelowCalMin?: boolean;
1120
- alphaThreshold?: boolean;
1149
+ colormapType?: number;
1121
1150
  base64?: string;
1122
1151
  colorbarVisible?: boolean;
1123
1152
  };
@@ -1131,6 +1160,7 @@ declare const NVMeshLayerDefaults: {
1131
1160
  cal_max: number;
1132
1161
  cal_minNeg: number;
1133
1162
  cal_maxNeg: number;
1163
+ colormapType: COLORMAP_TYPE;
1134
1164
  values: number[];
1135
1165
  };
1136
1166
  declare class NVMeshFromUrlOptions {
@@ -1245,15 +1275,16 @@ declare class NVMesh {
1245
1275
  updateFibers(gl: WebGL2RenderingContext): void;
1246
1276
  indexNearestXYZmm(Xmm: number, Ymm: number, Zmm: number): number[];
1247
1277
  unloadMesh(gl: WebGL2RenderingContext): void;
1278
+ blendColormap(u8: Uint8Array, additiveRGBA: Uint8Array, layer: NVMeshLayer, mn: number, mx: number, lut: Uint8ClampedArray, invert?: boolean): void;
1248
1279
  updateMesh(gl: WebGL2RenderingContext): void;
1249
1280
  reverseFaces(gl: WebGL2RenderingContext): void;
1250
1281
  hierarchicalOrder(): number;
1251
1282
  decimateFaces(n: number, ntarget: number): void;
1252
1283
  decimateHierarchicalMesh(gl: WebGL2RenderingContext, order?: number): boolean;
1253
- setLayerProperty(id: number, key: keyof NVMeshLayer, val: number | string | boolean, gl: WebGL2RenderingContext): void;
1284
+ setLayerProperty(id: number, key: keyof NVMeshLayer, val: number | string | boolean, gl: WebGL2RenderingContext): Promise<void>;
1254
1285
  setProperty(key: keyof this, val: unknown, gl: WebGL2RenderingContext): void;
1255
1286
  generatePosNormClr(pts: Float32Array, tris: Uint32Array, rgba255: Uint8Array): Float32Array;
1256
- static readMesh(buffer: ArrayBuffer, name: string, gl: WebGL2RenderingContext, opacity?: number, rgba255?: Uint8Array, visible?: boolean): NVMesh;
1287
+ static readMesh(buffer: ArrayBuffer, name: string, gl: WebGL2RenderingContext, opacity?: number, rgba255?: Uint8Array, visible?: boolean): Promise<NVMesh>;
1257
1288
  static loadLayer(layer: NVMeshLayer, nvmesh: NVMesh): Promise<void>;
1258
1289
  /**
1259
1290
  * factory function to load and return a new NVMesh instance from a given URL
@@ -1270,35 +1301,6 @@ declare class NVMesh {
1270
1301
  * load and return a new NVMesh instance from a base64 encoded string
1271
1302
  */
1272
1303
  loadFromBase64({ base64, gl, name, opacity, rgba255, visible, layers }?: Partial<LoadFromBase64Params>): Promise<NVMesh>;
1273
- static readGII(buffer: ArrayBuffer): GII;
1274
- static readX3D(buffer: ArrayBuffer): X3D;
1275
- static readNII(buffer: ArrayBuffer, n_vert?: number): Uint8Array | Float32Array | Int32Array | Int16Array;
1276
- static readNII2(buffer: ArrayBuffer, n_vert?: number): Uint8Array | Float32Array | Int32Array | Int16Array;
1277
- static readMGH(buffer: ArrayBuffer): MGH;
1278
- static readSTL(buffer: ArrayBuffer): DefaultMeshType;
1279
- static readTxtSTL(buffer: ArrayBuffer): DefaultMeshType;
1280
- static readSRF(buffer: ArrayBuffer): DefaultMeshType;
1281
- static readFreeSurfer(buffer: ArrayBuffer): DefaultMeshType;
1282
- static readOBJ(buffer: ArrayBuffer): DefaultMeshType;
1283
- static readOFF(buffer: ArrayBuffer): DefaultMeshType;
1284
- static readGEO(buffer: ArrayBuffer, isFlipWinding?: boolean): DefaultMeshType;
1285
- static readICO(buffer: ArrayBuffer): DefaultMeshType;
1286
- static readPLY(buffer: ArrayBuffer): DefaultMeshType;
1287
- static readMZ3(buffer: ArrayBuffer, n_vert?: number): MZ3;
1288
- static readVTK(buffer: ArrayBuffer): VTK;
1289
- static readASC(buffer: ArrayBuffer): DefaultMeshType;
1290
- static readNV(buffer: ArrayBuffer): DefaultMeshType;
1291
- static readANNOT(buffer: ArrayBuffer, n_vert: number, isReadColortables?: boolean): ANNOT;
1292
- static readCURV(buffer: ArrayBuffer, n_vert: number): Float32Array;
1293
- static readSTC(buffer: ArrayBuffer, n_vert: number): Float32Array;
1294
- static readSMP(buffer: ArrayBuffer, n_vert: number): Float32Array;
1295
- static readTxtVTK(buffer: ArrayBuffer): VTK;
1296
- static readTRK(buffer: ArrayBuffer): TRK;
1297
- static readTCK(buffer: ArrayBuffer): TCK;
1298
- static readTSF(buffer: ArrayBuffer): Float32Array;
1299
- static readTT(buffer: ArrayBuffer): TT;
1300
- static readTRX(buffer: ArrayBuffer): TRX;
1301
- static readTRACT(buffer: ArrayBuffer): TRACT;
1302
1304
  }
1303
1305
 
1304
1306
  /**
@@ -1509,21 +1511,37 @@ declare class NVController {
1509
1511
  }
1510
1512
 
1511
1513
  type TypedNumberArray = Float64Array | Float32Array | Uint32Array | Uint16Array | Uint8Array | Int32Array | Int16Array | Int8Array;
1512
- /**
1513
- * Namespace for utility functions
1514
- * @ignore
1515
- */
1516
1514
  declare class NVUtilities {
1517
1515
  static arrayBufferToBase64(arrayBuffer: ArrayBuffer): string;
1518
- static readMatV4(buffer: ArrayBuffer): Record<string, TypedNumberArray>;
1516
+ static decompress(data: Uint8Array): Promise<Uint8Array>;
1517
+ static decompressToBuffer(data: Uint8Array): Promise<ArrayBuffer>;
1518
+ static readMatV4(buffer: ArrayBuffer): Promise<Record<string, TypedNumberArray>>;
1519
+ static b64toUint8(base64: string): Uint8Array;
1519
1520
  static uint8tob64(bytes: Uint8Array): string;
1520
1521
  static download(content: string | ArrayBuffer, fileName: string, contentType: string): void;
1521
1522
  static readFileAsync(file: Blob): Promise<ArrayBuffer>;
1522
1523
  static blobToBase64(blob: Blob): Promise<string>;
1523
1524
  static decompressBase64String(base64: string): Promise<string>;
1524
1525
  static compressToBase64String(string: string): Promise<string>;
1526
+ /**
1527
+ * Converts a string into a Uint8Array for use with compression/decompression methods (101arrowz/fflate: MIT License)
1528
+ * @param str The string to encode
1529
+ * @param latin1 Whether or not to interpret the data as Latin-1. This should
1530
+ * not need to be true unless decoding a binary string.
1531
+ * @returns The string encoded in UTF-8/Latin-1 binary
1532
+ */
1533
+ static strToU8(str: string, latin1?: boolean): Uint8Array;
1534
+ static compress(data: Uint8Array, format?: CompressionFormat): Promise<ArrayBuffer>;
1525
1535
  static compressStringToArrayBuffer(input: string): Promise<ArrayBuffer>;
1526
1536
  static isArrayBufferCompressed(buffer: ArrayBuffer): boolean;
1537
+ /**
1538
+ * Converts a Uint8Array to a string (101arrowz/fflate: MIT License)
1539
+ * @param dat The data to decode to string
1540
+ * @param latin1 Whether or not to interpret the data as Latin-1. This should
1541
+ * not need to be true unless encoding to binary string.
1542
+ * @returns The original UTF-8/Latin-1 string
1543
+ */
1544
+ static strFromU8(dat: Uint8Array, latin1?: boolean): string;
1527
1545
  static decompressArrayBuffer(buffer: ArrayBuffer): Promise<string>;
1528
1546
  static arraysAreEqual(a: unknown[], b: unknown[]): boolean;
1529
1547
  /**
@@ -1553,14 +1571,14 @@ declare class NVUtilities {
1553
1571
  */
1554
1572
  declare class NVMeshLoaders {
1555
1573
  static readTRACT(buffer: ArrayBuffer): TRACT;
1556
- static readTT(buffer: ArrayBuffer): TT;
1557
- static readTRX(buffer: ArrayBuffer): TRX;
1574
+ static readTT(buffer: ArrayBuffer): Promise<TT>;
1575
+ static readTRX(buffer: ArrayBuffer): Promise<TRX>;
1558
1576
  static readTSF(buffer: ArrayBuffer, n_vert?: number): Float32Array;
1559
1577
  static readTCK(buffer: ArrayBuffer): TCK;
1560
- static readTRK(buffer: ArrayBuffer): TRK;
1578
+ static readTRK(buffer: ArrayBuffer): Promise<TRK>;
1561
1579
  static readTxtVTK(buffer: ArrayBuffer): VTK;
1562
- static readLayer(name: string, buffer: ArrayBuffer, nvmesh: NVMesh, opacity?: number, colormap?: string, colormapNegative?: string, useNegativeCmap?: boolean, cal_min?: number | null, cal_max?: number | null, outlineBorder?: number): NVMeshLayer | undefined;
1563
- static readSMP(buffer: ArrayBuffer, n_vert: number): Float32Array;
1580
+ static readLayer(name: string, buffer: ArrayBuffer, nvmesh: NVMesh, opacity?: number, colormap?: string, colormapNegative?: string, useNegativeCmap?: boolean, cal_min?: number | null, cal_max?: number | null, outlineBorder?: number): Promise<NVMeshLayer | undefined>;
1581
+ static readSMP(buffer: ArrayBuffer, n_vert: number): Promise<Float32Array>;
1564
1582
  static readSTC(buffer: ArrayBuffer, n_vert: number): Float32Array;
1565
1583
  static isCurv(buffer: ArrayBuffer): boolean;
1566
1584
  static readCURV(buffer: ArrayBuffer, n_vert: number): Float32Array;
@@ -1568,24 +1586,25 @@ declare class NVMeshLoaders {
1568
1586
  static readNV(buffer: ArrayBuffer): DefaultMeshType;
1569
1587
  static readASC(buffer: ArrayBuffer): DefaultMeshType;
1570
1588
  static readVTK(buffer: ArrayBuffer): VTK;
1589
+ static readWRL(buffer: ArrayBuffer): DefaultMeshType;
1571
1590
  static readDFS(buffer: ArrayBuffer): DefaultMeshType;
1572
- static readMZ3(buffer: ArrayBuffer, n_vert?: number): MZ3;
1591
+ static readMZ3(buffer: ArrayBuffer, n_vert?: number): Promise<MZ3>;
1573
1592
  static readPLY(buffer: ArrayBuffer): DefaultMeshType;
1574
1593
  static readICO(buffer: ArrayBuffer): DefaultMeshType;
1575
1594
  static readGEO(buffer: ArrayBuffer, isFlipWinding?: boolean): DefaultMeshType;
1576
1595
  static readOFF(buffer: ArrayBuffer): DefaultMeshType;
1577
1596
  static readOBJMNI(buffer: ArrayBuffer): DefaultMeshType;
1578
- static readOBJ(buffer: ArrayBuffer): DefaultMeshType;
1597
+ static readOBJ(buffer: ArrayBuffer): Promise<DefaultMeshType>;
1579
1598
  static readFreeSurfer(buffer: ArrayBuffer): DefaultMeshType;
1580
- static readSRF(buffer: ArrayBuffer): DefaultMeshType;
1599
+ static readSRF(buffer: ArrayBuffer): Promise<DefaultMeshType>;
1581
1600
  static readTxtSTL(buffer: ArrayBuffer): DefaultMeshType;
1582
1601
  static readSTL(buffer: ArrayBuffer): DefaultMeshType;
1583
1602
  static decimateLayerVertices(nVertLayer: number, nVertMesh: number): number;
1584
- static readNII2(buffer: ArrayBuffer, n_vert?: number, anatomicalStructurePrimary?: string): Int32Array | Float32Array | Int16Array | Uint8Array;
1585
- static readNII(buffer: ArrayBuffer, n_vert?: number, anatomicalStructurePrimary?: string): Float32Array | Uint8Array | Int32Array | Int16Array;
1586
- static readMGH(buffer: ArrayBuffer, n_vert?: number, isReadColortables?: boolean): MGH;
1603
+ static readNII2(buffer: ArrayBuffer, n_vert?: number, anatomicalStructurePrimary?: string): Promise<Int32Array | Float32Array | Int16Array | Uint8Array>;
1604
+ static readNII(buffer: ArrayBuffer, n_vert?: number, anatomicalStructurePrimary?: string): Promise<Float32Array | Uint8Array | Int32Array | Int16Array>;
1605
+ static readMGH(buffer: ArrayBuffer, n_vert?: number, isReadColortables?: boolean): Promise<MGH>;
1587
1606
  static readX3D(buffer: ArrayBuffer): X3D;
1588
- static readGII(buffer: ArrayBuffer, n_vert?: number): GII;
1607
+ static readGII(buffer: ArrayBuffer, n_vert?: number): Promise<GII>;
1589
1608
  }
1590
1609
 
1591
1610
  type Extents = {
@@ -1598,11 +1617,13 @@ type Extents = {
1598
1617
  */
1599
1618
  declare class NVMeshUtilities {
1600
1619
  static getClusterBoundaryU8(u8: Uint8Array, faces: number[] | Uint32Array): boolean[];
1601
- static createMZ3(vertices: Float32Array, indices: Uint32Array, compress?: boolean): ArrayBuffer;
1620
+ static gzip(data: Uint8Array): Promise<Uint8Array>;
1621
+ static createMZ3(vertices: Float32Array, indices: Uint32Array, compress?: boolean, colors?: Uint8Array | null): ArrayBuffer;
1622
+ static createMZ3Async(vertices: Float32Array, indices: Uint32Array, compress?: boolean, colors?: Uint8Array | null): Promise<ArrayBuffer>;
1602
1623
  static createOBJ(vertices: Float32Array, indices: Uint32Array): ArrayBuffer;
1603
1624
  static createSTL(vertices: Float32Array, indices: Uint32Array): ArrayBuffer;
1604
1625
  static downloadArrayBuffer(buffer: ArrayBuffer, filename: string): void;
1605
- static saveMesh(vertices: Float32Array, indices: Uint32Array, filename?: string, compress?: boolean): ArrayBuffer;
1626
+ static saveMesh(vertices: Float32Array, indices: Uint32Array, filename?: string, compress?: boolean): Promise<ArrayBuffer>;
1606
1627
  static getClusterBoundary(rgba8: Uint8Array, faces: number[] | Uint32Array): boolean[];
1607
1628
  static getExtents(pts: number[] | Float32Array): Extents;
1608
1629
  static generateNormals(pts: number[] | Float32Array, tris: number[] | Uint32Array): Float32Array;
@@ -1612,7 +1633,7 @@ type ColormapListEntry = {
1612
1633
  name: string;
1613
1634
  min: number;
1614
1635
  max: number;
1615
- alphaThreshold: boolean;
1636
+ isColorbarFromZero: boolean;
1616
1637
  negative: boolean;
1617
1638
  visible: boolean;
1618
1639
  invert: boolean;
@@ -1696,12 +1717,22 @@ type UIData = {
1696
1717
  lastTwoTouchDistance: number;
1697
1718
  multiTouchGesture: boolean;
1698
1719
  dpr?: number;
1720
+ windowX: number;
1721
+ windowY: number;
1699
1722
  };
1700
1723
  type SaveImageOptions = {
1701
1724
  filename: string;
1702
1725
  isSaveDrawing: boolean;
1703
1726
  volumeByIndex: number;
1704
1727
  };
1728
+ type DicomLoaderInput = ArrayBuffer | ArrayBuffer[] | File[];
1729
+ type DicomLoader = {
1730
+ loader: (data: DicomLoaderInput) => Promise<Array<{
1731
+ name: string;
1732
+ data: ArrayBuffer;
1733
+ }>>;
1734
+ toExt: string;
1735
+ };
1705
1736
  /**
1706
1737
  * Niivue can be attached to a canvas. An instance of Niivue contains methods for
1707
1738
  * loading and rendering NIFTI image data in a WebGL 2.0 context.
@@ -1711,6 +1742,7 @@ type SaveImageOptions = {
1711
1742
  */
1712
1743
  declare class Niivue {
1713
1744
  loaders: {};
1745
+ dicomLoader: DicomLoader | null;
1714
1746
  canvas: HTMLCanvasElement | null;
1715
1747
  _gl: WebGL2RenderingContext | null;
1716
1748
  isBusy: boolean;
@@ -1780,7 +1812,6 @@ declare class Niivue {
1780
1812
  backgroundMasksOverlays: number;
1781
1813
  overlayOutlineWidth: number;
1782
1814
  overlayAlphaShader: number;
1783
- isAlphaClipDark: boolean;
1784
1815
  position?: vec3;
1785
1816
  extentsMin?: vec3;
1786
1817
  extentsMax?: vec3;
@@ -1998,6 +2029,7 @@ declare class Niivue {
1998
2029
  onCustomMeshShaderAdded: (fragmentShaderText: string, name: string) => void;
1999
2030
  onMeshShaderChanged: (meshIndex: number, shaderIndex: number) => void;
2000
2031
  onMeshPropertyChanged: (meshIndex: number, key: string, val: unknown) => void;
2032
+ onDicomLoaderFinishedWithImages: (files: NVImage[] | NVMesh[]) => void;
2001
2033
  /**
2002
2034
  * callback function to run when the user loads a new NiiVue document
2003
2035
  * @example
@@ -2011,6 +2043,8 @@ declare class Niivue {
2011
2043
  get opts(): NVConfigOptions;
2012
2044
  get sliceMosaicString(): string;
2013
2045
  set sliceMosaicString(newSliceMosaicString: string);
2046
+ get isAlphaClipDark(): boolean;
2047
+ set isAlphaClipDark(newVal: boolean);
2014
2048
  mediaUrlMap: Map<NVImage | NVMesh, string>;
2015
2049
  initialized: boolean;
2016
2050
  currentDrawUndoBitmap: number;
@@ -2145,6 +2179,7 @@ declare class Niivue {
2145
2179
  checkMultitouch(e: TouchEvent): void;
2146
2180
  touchStartListener(e: TouchEvent): void;
2147
2181
  touchEndListener(e: TouchEvent): void;
2182
+ windowingHandler(x: number, y: number, volIdx?: number): void;
2148
2183
  mouseMoveListener(e: MouseEvent): void;
2149
2184
  resetBriCon(msg?: TouchEvent | MouseEvent | null): void;
2150
2185
  setDragStart(x: number, y: number): void;
@@ -2174,6 +2209,7 @@ declare class Niivue {
2174
2209
  * @see {@link https://niivue.github.io/niivue/features/document.3d.html | live demo usage}
2175
2210
  */
2176
2211
  removeVolumeByUrl(url: string): void;
2212
+ traverseFileTree(item: any, path: string, fileArray: any): Promise<File[]>;
2177
2213
  readDirectory(directory: FileSystemDirectoryEntry): FileSystemEntry[];
2178
2214
  /**
2179
2215
  * Returns boolean: true if filename ends with mesh extension (TRK, pial, etc)
@@ -2193,7 +2229,9 @@ declare class Niivue {
2193
2229
  */
2194
2230
  loadFromFile(file: File): Promise<void>;
2195
2231
  useLoader(loader: unknown, fileExt: string, toExt: string): void;
2196
- dropListener(e: DragEvent): void;
2232
+ useDicomLoader(loader: DicomLoader): void;
2233
+ getDicomLoader(): DicomLoader;
2234
+ dropListener(e: DragEvent): Promise<void>;
2197
2235
  /**
2198
2236
  * insert a gap between slices of a mutliplanar view.
2199
2237
  * @param pixels - spacing between tiles of multiplanar view
@@ -2347,7 +2385,7 @@ declare class Niivue {
2347
2385
  * @example niivue.saveImage({ filename: "myimage.nii.gz", isSaveDrawing: true });
2348
2386
  * @see {@link https://niivue.github.io/niivue/features/draw.ui.html | live demo usage}
2349
2387
  */
2350
- saveImage(options?: SaveImageOptions): Uint8Array | boolean;
2388
+ saveImage(options?: SaveImageOptions): Promise<boolean | Uint8Array>;
2351
2389
  getMeshIndexByID(id: string | number): number;
2352
2390
  /**
2353
2391
  * change property of mesh, tractogram or connectome
@@ -2394,7 +2432,7 @@ declare class Niivue {
2394
2432
  * @example niivue.setMeshLayerProperty(niivue.meshes[0].id, 0, 'frame4D', 22)
2395
2433
  * @see {@link https://niivue.github.io/niivue/features/mesh.4D.html | live demo usage}
2396
2434
  */
2397
- setMeshLayerProperty(mesh: number, layer: number, key: keyof NVMeshLayer, val: number): void;
2435
+ setMeshLayerProperty(mesh: number, layer: number, key: keyof NVMeshLayer, val: number): Promise<void>;
2398
2436
  /**
2399
2437
  * adjust offset position and scale of 2D sliceScale
2400
2438
  * @param xyzmmZoom - first three components are spatial, fourth is scaling
@@ -2637,7 +2675,7 @@ declare class Niivue {
2637
2675
  * @returns Niivue instance
2638
2676
  * @see {@link https://niivue.github.io/niivue/features/document.load.html | live demo usage}
2639
2677
  */
2640
- loadDocument(document: NVDocument): this;
2678
+ loadDocument(document: NVDocument): Promise<this>;
2641
2679
  /**
2642
2680
  * generates JavaScript to load the current scene as a document
2643
2681
  * @param canvasId - id of canvas NiiVue will be attached to
@@ -2680,6 +2718,7 @@ declare class Niivue {
2680
2718
  */
2681
2719
  saveDocument(fileName?: string, compress?: boolean): Promise<void>;
2682
2720
  loadImages(images: Array<ImageFromUrlOptions | LoadFromUrlParams>): Promise<this>;
2721
+ loadDicoms(dicomList: ImageFromUrlOptions[]): Promise<this>;
2683
2722
  /**
2684
2723
  * load an array of volume objects
2685
2724
  * @param volumeList - the array of objects to load. each object must have a resolvable "url" property at a minimum
@@ -3157,4 +3196,4 @@ declare class Niivue {
3157
3196
  set gl(gl: WebGL2RenderingContext | null);
3158
3197
  }
3159
3198
 
3160
- export { type Connectome, type ConnectomeOptions, DEFAULT_OPTIONS, DRAG_MODE, type DocumentData, type DragReleaseParams, type ExportDocumentData, INITIAL_SCENE_DATA, LabelAnchorPoint, LabelLineTerminator, LabelTextAlignment, type LegacyConnectome, type LegacyNodes, MULTIPLANAR_TYPE, type NVConfigOptions, type NVConnectomeEdge, type NVConnectomeNode, NVController, NVDocument, NVImage, NVImageFromUrlOptions, NVLabel3D, NVLabel3DStyle, NVMesh, NVMeshFromUrlOptions, NVMeshLayerDefaults, NVMeshLoaders, NVMeshUtilities, NVUtilities, type NiftiHeader, type NiiVueLocation, type NiiVueLocationValue, Niivue, type Point, SHOW_RENDER, SLICE_TYPE, type Scene, type SyncOpts, type Volume, cmapper, ColorTables as colortables };
3199
+ export { COLORMAP_TYPE, type Connectome, type ConnectomeOptions, DEFAULT_OPTIONS, DRAG_MODE, DRAG_MODE_PRIMARY, DRAG_MODE_SECONDARY, type DicomLoader, type DicomLoaderInput, type DocumentData, type DragReleaseParams, type ExportDocumentData, INITIAL_SCENE_DATA, LabelAnchorPoint, LabelLineTerminator, LabelTextAlignment, type LegacyConnectome, type LegacyNodes, MULTIPLANAR_TYPE, type NVConfigOptions, type NVConnectomeEdge, type NVConnectomeNode, NVController, NVDocument, NVImage, NVImageFromUrlOptions, NVLabel3D, NVLabel3DStyle, NVMesh, NVMeshFromUrlOptions, NVMeshLayerDefaults, NVMeshLoaders, NVMeshUtilities, NVUtilities, type NiftiHeader, type NiiVueLocation, type NiiVueLocationValue, Niivue, type Point, SHOW_RENDER, SLICE_TYPE, type Scene, type SyncOpts, type Volume, cmapper, ColorTables as colortables };