napari-js 0.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 (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/cache/lru.d.ts +19 -0
  4. package/dist/camera/camera.d.ts +25 -0
  5. package/dist/camera/camera3d.d.ts +28 -0
  6. package/dist/camera/controls.d.ts +7 -0
  7. package/dist/camera/controls3d.d.ts +6 -0
  8. package/dist/color/checkerboard.d.ts +5 -0
  9. package/dist/color/colormap.d.ts +26 -0
  10. package/dist/color/display-pipeline.d.ts +22 -0
  11. package/dist/color/histogram.d.ts +14 -0
  12. package/dist/color/label-colormap.d.ts +7 -0
  13. package/dist/color/lut.d.ts +9 -0
  14. package/dist/engine/canvas.d.ts +20 -0
  15. package/dist/engine/device.d.ts +23 -0
  16. package/dist/engine/readback.d.ts +13 -0
  17. package/dist/engine/renderer.d.ts +42 -0
  18. package/dist/engine/viewport.d.ts +12 -0
  19. package/dist/index.d.ts +34 -0
  20. package/dist/io/pyramid.d.ts +41 -0
  21. package/dist/io/texture-source.d.ts +68 -0
  22. package/dist/layers/image-layer.d.ts +47 -0
  23. package/dist/layers/labels-layer.d.ts +32 -0
  24. package/dist/layers/layer.d.ts +32 -0
  25. package/dist/layers/points-layer.d.ts +59 -0
  26. package/dist/layers/volume-layer.d.ts +46 -0
  27. package/dist/math/mat4.d.ts +22 -0
  28. package/dist/napari-js.js +1986 -0
  29. package/dist/napari-js.js.map +1 -0
  30. package/dist/picking/pick.d.ts +6 -0
  31. package/dist/scene/dims.d.ts +20 -0
  32. package/dist/scene/events.d.ts +9 -0
  33. package/dist/scene/layer-list.d.ts +16 -0
  34. package/dist/scene/viewer-model.d.ts +20 -0
  35. package/dist/version.d.ts +1 -0
  36. package/dist/viewer.d.ts +76 -0
  37. package/dist/visuals/blend.d.ts +6 -0
  38. package/dist/visuals/format-plan.d.ts +19 -0
  39. package/dist/visuals/image-colormap-shader.d.ts +1 -0
  40. package/dist/visuals/image-visual.d.ts +45 -0
  41. package/dist/visuals/labels-shader.d.ts +1 -0
  42. package/dist/visuals/labels-visual.d.ts +23 -0
  43. package/dist/visuals/layer-visual.d.ts +23 -0
  44. package/dist/visuals/points-shader.d.ts +1 -0
  45. package/dist/visuals/points-visual.d.ts +22 -0
  46. package/dist/visuals/tiled-image-visual.d.ts +46 -0
  47. package/dist/visuals/volume-shader.d.ts +1 -0
  48. package/dist/visuals/volume-visual.d.ts +32 -0
  49. package/package.json +60 -0
@@ -0,0 +1,32 @@
1
+ import { Emitter } from '../scene/events';
2
+ export type BlendMode = 'opaque' | 'translucent' | 'additive' | 'minimum';
3
+ /**
4
+ * Base layer: identity + the display properties shared by every layer kind (opacity,
5
+ * blending, visibility, and a data→world affine via `scale`/`translate`). Mutating any
6
+ * property emits {@link changed} so the renderer can schedule a redraw — the napari
7
+ * evented-layer model, GPU-side.
8
+ */
9
+ export declare abstract class Layer {
10
+ readonly id: string;
11
+ readonly changed: Emitter<Layer>;
12
+ abstract readonly kind: string;
13
+ name: string;
14
+ /** Data→world scale (e.g. physical pixel size). */
15
+ scale: [number, number];
16
+ /** Data→world translation. */
17
+ translate: [number, number];
18
+ protected _opacity: number;
19
+ protected _visible: boolean;
20
+ protected _blending: BlendMode;
21
+ protected constructor(opts?: {
22
+ name?: string;
23
+ scale?: [number, number];
24
+ translate?: [number, number];
25
+ });
26
+ get opacity(): number;
27
+ set opacity(value: number);
28
+ get visible(): boolean;
29
+ set visible(value: boolean);
30
+ get blending(): BlendMode;
31
+ set blending(value: BlendMode);
32
+ }
@@ -0,0 +1,59 @@
1
+ import { Layer, BlendMode } from './layer';
2
+ export type PointSymbol = 'disc' | 'ring' | 'square';
3
+ export type RGBA = [number, number, number, number];
4
+ /** Per-point or broadcast scalar/color inputs. */
5
+ type SizeInput = number | number[] | Float32Array;
6
+ type ColorInput = RGBA | RGBA[];
7
+ export interface PointsLayerOptions {
8
+ name?: string;
9
+ /** Marker diameter in data units (single value or per-point). */
10
+ size?: SizeInput;
11
+ /** Fill color (single RGBA 0..1 or per-point). */
12
+ faceColor?: ColorInput;
13
+ /** Border color (single or per-point). */
14
+ borderColor?: ColorInput;
15
+ /** Border thickness in data units. */
16
+ borderWidth?: number;
17
+ symbol?: PointSymbol;
18
+ opacity?: number;
19
+ blending?: BlendMode;
20
+ visible?: boolean;
21
+ scale?: [number, number];
22
+ translate?: [number, number];
23
+ }
24
+ /**
25
+ * A scatter layer of point markers (the napari Points layer analog). Positions are `[x, y]`
26
+ * pairs in data coordinates; size/colors may be uniform or per-point. Marker shape is one of
27
+ * {@link PointSymbol}. Mutating display props emits `changed`; structural changes
28
+ * (positions/size/colors) also bump {@link dataVersion} so the visual rebuilds its instance
29
+ * buffer.
30
+ */
31
+ export declare class PointsLayer extends Layer {
32
+ readonly kind = "points";
33
+ readonly count: number;
34
+ positions: Float32Array;
35
+ dataVersion: number;
36
+ private _size;
37
+ private _faceColor;
38
+ private _borderColor;
39
+ private _borderWidth;
40
+ private _symbol;
41
+ constructor(positions: Float32Array | number[][], opts?: PointsLayerOptions);
42
+ get size(): SizeInput;
43
+ set size(value: SizeInput);
44
+ get faceColor(): ColorInput;
45
+ set faceColor(value: ColorInput);
46
+ get borderColor(): ColorInput;
47
+ set borderColor(value: ColorInput);
48
+ get borderWidth(): number;
49
+ set borderWidth(value: number);
50
+ get symbol(): PointSymbol;
51
+ set symbol(value: PointSymbol);
52
+ symbolCode(): number;
53
+ /** Per-point size at index `i`. */
54
+ sizeAt(i: number): number;
55
+ /** Build the interleaved instance buffer (count × 12 floats) for the GPU. */
56
+ buildInstanceData(): Float32Array<ArrayBuffer>;
57
+ }
58
+ export declare const POINTS_INSTANCE_STRIDE = 12;
59
+ export {};
@@ -0,0 +1,46 @@
1
+ import { Layer, BlendMode } from './layer';
2
+ import { Colormap } from '../color/colormap';
3
+ export type VolumeRendering = 'mip' | 'translucent' | 'iso';
4
+ export interface VolumeLayerOptions {
5
+ name?: string;
6
+ colormap?: Colormap | string;
7
+ /** Normalization window in source-data units (default [0,255] for uint8). */
8
+ contrastLimits?: [number, number];
9
+ gamma?: number;
10
+ rendering?: VolumeRendering;
11
+ /** Iso threshold as a windowed value 0..1 (iso mode). */
12
+ isoThreshold?: number;
13
+ opacity?: number;
14
+ blending?: BlendMode;
15
+ visible?: boolean;
16
+ }
17
+ /**
18
+ * A 3D scalar volume (the napari Image-in-3D / volume analog), rendered by fragment
19
+ * raymarching. `data` is an 8-bit scalar field of size `width*height*depth` in x-fastest
20
+ * order. uint16/float volumes are a follow-up. Rendered only when `dims.ndisplay === 3`.
21
+ */
22
+ export declare class VolumeLayer extends Layer {
23
+ readonly kind = "volume";
24
+ readonly width: number;
25
+ readonly height: number;
26
+ readonly depth: number;
27
+ readonly data: Uint8Array;
28
+ colormapVersion: number;
29
+ private _colormap;
30
+ private _contrastLimits;
31
+ private _gamma;
32
+ private _rendering;
33
+ private _isoThreshold;
34
+ constructor(data: Uint8Array, width: number, height: number, depth: number, opts?: VolumeLayerOptions);
35
+ get colormap(): Colormap;
36
+ set colormap(value: Colormap | string);
37
+ get contrastLimits(): [number, number];
38
+ set contrastLimits(value: readonly [number, number]);
39
+ get gamma(): number;
40
+ set gamma(value: number);
41
+ get rendering(): VolumeRendering;
42
+ set rendering(value: VolumeRendering);
43
+ renderingCode(): number;
44
+ get isoThreshold(): number;
45
+ set isoThreshold(value: number);
46
+ }
@@ -0,0 +1,22 @@
1
+ /** Column-major 4×4 matrix (WGSL `mat4x4<f32>` layout): element at row r, col c is `m[c*4 + r]`. */
2
+ export type Mat4 = Float32Array;
3
+ export declare function identity(): Mat4;
4
+ /** Return `a * b` (apply `b` first, then `a`). */
5
+ export declare function multiply(a: Mat4, b: Mat4): Mat4;
6
+ /** Affine map `(x, y) → (sx·x + tx, sy·y + ty)` in homogeneous form (data → world). */
7
+ export declare function scaleTranslate2d(sx: number, sy: number, tx: number, ty: number): Mat4;
8
+ /**
9
+ * Orthographic 2D view-projection: world → clip space, centered on `center`, scaled by
10
+ * `zoom` (canvas px per world unit), for a `vw`×`vh` viewport. The Y axis is flipped so that
11
+ * increasing world/data Y points downward on screen (image convention).
12
+ */
13
+ export type Vec3 = readonly [number, number, number];
14
+ export declare function scale3d(sx: number, sy: number, sz: number): Mat4;
15
+ export declare function translate3d(tx: number, ty: number, tz: number): Mat4;
16
+ /** WebGPU-style perspective (clip z in [0,1]). `fovy` in radians. */
17
+ export declare function perspective(fovy: number, aspect: number, near: number, far: number): Mat4;
18
+ /** Right-handed view matrix looking from `eye` toward `center` (column-major). */
19
+ export declare function lookAt(eye: Vec3, center: Vec3, up: Vec3): Mat4;
20
+ /** Inverse of a 4×4 matrix (column-major). Returns the identity if singular. */
21
+ export declare function invert(a: Mat4): Mat4;
22
+ export declare function ortho2d(center: readonly [number, number], zoom: number, vw: number, vh: number): Mat4;