loom-browser 0.0.9 → 0.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 (98) hide show
  1. package/dist/loom-react.esm.js +3877 -3173
  2. package/dist/loom-react.esm.min.js +1 -1
  3. package/dist/loom-react.esm.min.js.map +1 -1
  4. package/dist/loom-worker.js +191 -137
  5. package/dist/loom-worker.min.js +1 -1
  6. package/dist/loom-worker.min.js.map +1 -1
  7. package/dist/loom.esm.js +4163 -3412
  8. package/dist/loom.esm.min.js +1 -1
  9. package/dist/loom.esm.min.js.map +1 -1
  10. package/dist/loom.js +4174 -3415
  11. package/dist/loom.min.js +1 -1
  12. package/dist/loom.min.js.map +1 -1
  13. package/dist/tsconfig.src.tsbuildinfo +1 -1
  14. package/dist/types/browser/dom/browserExport.d.ts +32 -0
  15. package/dist/types/browser/dom/contextMenu.d.ts +64 -0
  16. package/dist/types/browser/dom/contextMenuManager.d.ts +49 -0
  17. package/dist/types/browser/dom/defaultProviders.d.ts +23 -0
  18. package/dist/types/browser/dom/genomeBrowser.d.ts +171 -0
  19. package/dist/types/browser/dom/pointerEventManager.d.ts +109 -0
  20. package/dist/types/browser/dom/roiOverlayManager.d.ts +38 -0
  21. package/dist/types/browser/dom/svgFeatureOverlay.d.ts +27 -0
  22. package/dist/types/browser/headless/errors.d.ts +10 -0
  23. package/dist/types/browser/headless/headlessGenomeBrowser.d.ts +391 -0
  24. package/dist/types/browser/headless/roiManager.d.ts +47 -0
  25. package/dist/types/browser/headless/session.d.ts +45 -0
  26. package/dist/types/browser/headless/trackDataManager.d.ts +48 -0
  27. package/dist/types/browser/headless/trackFactories.d.ts +145 -0
  28. package/dist/types/browser/index.d.ts +24 -0
  29. package/dist/types/browserExport.d.ts +32 -0
  30. package/dist/types/commandDispatcher.d.ts +1 -1
  31. package/dist/types/contextMenuManager.d.ts +49 -0
  32. package/dist/types/data/searchService.d.ts +24 -0
  33. package/dist/types/dataSourceWorkerProvider.d.ts +3 -3
  34. package/dist/types/dataSources/bigWigDataSource.d.ts +2 -2
  35. package/dist/types/dataSources/config.d.ts +40 -0
  36. package/dist/types/dataSources/configureDataSource.d.ts +17 -0
  37. package/dist/types/dataSources/createDataSource.d.ts +14 -0
  38. package/dist/types/dataSources/geneDataSource.d.ts +4 -3
  39. package/dist/types/dataSources/gtxDataSource.d.ts +2 -2
  40. package/dist/types/dataSources/memoryDataSource.d.ts +2 -2
  41. package/dist/types/dataSources/sequenceDataSource.d.ts +4 -1
  42. package/dist/types/dataSources/textFeatureSource.d.ts +4 -2
  43. package/dist/types/dataSources/wholeGenomeUtils.d.ts +37 -0
  44. package/dist/types/defaultProviders.d.ts +23 -0
  45. package/dist/types/errors.d.ts +10 -0
  46. package/dist/types/formats/featureParser.d.ts +1 -1
  47. package/dist/types/genomeBrowser.d.ts +18 -91
  48. package/dist/types/headlessGenomeBrowser.d.ts +88 -225
  49. package/dist/types/index.d.ts +21 -14
  50. package/dist/types/io/binaryParser.d.ts +0 -1
  51. package/dist/types/logger.d.ts +20 -0
  52. package/dist/types/pointerEventManager.d.ts +109 -0
  53. package/dist/types/react/GenomeBrowserContext.d.ts +1 -1
  54. package/dist/types/react/LoomBrowser.d.ts +4 -4
  55. package/dist/types/react/hooks/useBrowserEvent.d.ts +1 -1
  56. package/dist/types/react/hooks/useGenomeBrowser.d.ts +1 -1
  57. package/dist/types/react/hooks/useTrackManager.d.ts +1 -1
  58. package/dist/types/react/ui/ChromosomeSelect.d.ts +1 -1
  59. package/dist/types/react/ui/ExportControls.d.ts +1 -1
  60. package/dist/types/react/ui/LocusInput.d.ts +1 -1
  61. package/dist/types/react/ui/Navbar.d.ts +1 -1
  62. package/dist/types/react/ui/WindowSize.d.ts +1 -1
  63. package/dist/types/react/ui/ZoomControls.d.ts +1 -1
  64. package/dist/types/remoteProtocol.d.ts +1 -1
  65. package/dist/types/roiManager.d.ts +47 -0
  66. package/dist/types/roiOverlayManager.d.ts +38 -0
  67. package/dist/types/stateProjection.d.ts +1 -1
  68. package/dist/types/trackDataManager.d.ts +48 -0
  69. package/dist/types/trackFactories.d.ts +140 -0
  70. package/dist/types/trackSelector.d.ts +1 -1
  71. package/dist/types/tracks/annotation/annotationTrackCanvas.d.ts +0 -1
  72. package/dist/types/tracks/annotation/config.d.ts +61 -0
  73. package/dist/types/tracks/baseTrackCanvas.d.ts +10 -0
  74. package/dist/types/tracks/configDiff.d.ts +14 -0
  75. package/dist/types/tracks/interaction/config.d.ts +40 -0
  76. package/dist/types/tracks/ruler/config.d.ts +24 -0
  77. package/dist/types/tracks/sequence/config.d.ts +56 -0
  78. package/dist/types/tracks/sequence/sequenceTrackCanvas.d.ts +3 -0
  79. package/dist/types/tracks/wig/config.d.ts +77 -0
  80. package/dist/types/types/igvCompat.d.ts +36 -0
  81. package/dist/types/types.d.ts +48 -284
  82. package/dist/types/ui/components/LoomBrowserShell.d.ts +2 -2
  83. package/dist/types/ui/components/LoomChromosomeSelect.d.ts +1 -1
  84. package/dist/types/ui/components/LoomContextMenu.d.ts +1 -0
  85. package/dist/types/ui/components/LoomExportControls.d.ts +1 -1
  86. package/dist/types/ui/components/LoomLocusInput.d.ts +1 -1
  87. package/dist/types/ui/components/LoomNavbar.d.ts +1 -1
  88. package/dist/types/ui/components/LoomWindowSize.d.ts +1 -1
  89. package/dist/types/ui/components/LoomZoomControls.d.ts +1 -1
  90. package/dist/types/undoManager.d.ts +49 -0
  91. package/dist/types/worker/dataSourceRegistry.d.ts +2 -2
  92. package/dist/types/worker/serializedError.d.ts +16 -0
  93. package/dist/types/worker/taskTimeout.d.ts +21 -0
  94. package/dist/types/worker/webWorkerPool.d.ts +5 -2
  95. package/dist/types/worker/webWorkerProvider.d.ts +3 -0
  96. package/dist/types/workerDataSource.d.ts +2 -2
  97. package/dist/types/workerProvider.d.ts +2 -2
  98. package/package.json +1 -1
@@ -4,7 +4,7 @@
4
4
  * Shows the current locus as a formatted string. User can type a new locus
5
5
  * and press Enter to navigate. Updates automatically on locuschange events.
6
6
  */
7
- import type { GenomeBrowser } from '../../genomeBrowser';
7
+ import type { GenomeBrowser } from '../../browser/dom/genomeBrowser';
8
8
  export declare class LoomLocusInput extends HTMLElement {
9
9
  private input;
10
10
  private unsubscribe;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * <loom-navbar> — Horizontal navigation bar composing locus input, window size, and zoom controls.
3
3
  */
4
- import type { GenomeBrowser } from '../../genomeBrowser';
4
+ import type { GenomeBrowser } from '../../browser/dom/genomeBrowser';
5
5
  export declare class LoomNavbar extends HTMLElement {
6
6
  private chromSelect;
7
7
  private locusInput;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * <loom-window-size> — Read-only display of current viewport bp range.
3
3
  */
4
- import type { GenomeBrowser } from '../../genomeBrowser';
4
+ import type { GenomeBrowser } from '../../browser/dom/genomeBrowser';
5
5
  export declare class LoomWindowSize extends HTMLElement {
6
6
  private label;
7
7
  private unsubscribe;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * <loom-zoom-controls> — Zoom in/out buttons.
3
3
  */
4
- import type { GenomeBrowser } from '../../genomeBrowser';
4
+ import type { GenomeBrowser } from '../../browser/dom/genomeBrowser';
5
5
  export declare class LoomZoomControls extends HTMLElement {
6
6
  private _browser;
7
7
  constructor();
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Undo/redo manager for HeadlessGenomeBrowser.
3
+ *
4
+ * Maintains two stacks of tagged session snapshots. Each entry records the
5
+ * mutation type so consumers can filter (e.g., skip navigation-only entries).
6
+ *
7
+ * Decoupled from the browser — operates purely on SessionConfig objects.
8
+ */
9
+ import type { SessionConfig } from './types';
10
+ /** Category of mutation that produced an undo entry. */
11
+ export type UndoEntryType = 'navigation' | 'track-add' | 'track-remove' | 'track-reorder' | 'track-config' | 'roi' | 'theme' | 'session-load';
12
+ /** A single undo/redo stack entry. */
13
+ export interface UndoEntry {
14
+ type: UndoEntryType;
15
+ session: SessionConfig;
16
+ }
17
+ export declare class UndoManager {
18
+ readonly maxHistory: number;
19
+ private undoStack;
20
+ private redoStack;
21
+ private _paused;
22
+ constructor(maxHistory?: number);
23
+ /** Whether snapshot calls are currently suppressed. */
24
+ get paused(): boolean;
25
+ /** Suppress snapshot calls (e.g., during loadSession restoration). */
26
+ pause(): void;
27
+ /** Resume snapshot calls. */
28
+ resume(): void;
29
+ /** Push the current state before a mutation. Clears the redo stack. */
30
+ snapshot(type: UndoEntryType, session: SessionConfig): void;
31
+ /**
32
+ * Undo: pop from undo stack, push currentSession to redo, return the entry to restore.
33
+ * Optionally skip entries matching a predicate (they are discarded).
34
+ */
35
+ undo(currentSession: SessionConfig, skip?: (e: UndoEntry) => boolean): UndoEntry | undefined;
36
+ /**
37
+ * Redo: pop from redo stack, push currentSession to undo, return the entry to restore.
38
+ * Optionally skip entries matching a predicate (they are discarded).
39
+ */
40
+ redo(currentSession: SessionConfig, skip?: (e: UndoEntry) => boolean): UndoEntry | undefined;
41
+ canUndo(skip?: (e: UndoEntry) => boolean): boolean;
42
+ canRedo(skip?: (e: UndoEntry) => boolean): boolean;
43
+ /** Number of entries in the undo stack. */
44
+ get undoSize(): number;
45
+ /** Number of entries in the redo stack. */
46
+ get redoSize(): number;
47
+ /** Clear all history. */
48
+ clear(): void;
49
+ }
@@ -7,7 +7,7 @@
7
7
  * Runs inside a web worker or Node worker_threads context.
8
8
  * Layer 1 (Data + Layout): no DOM.
9
9
  */
10
- import type { DataSourceConfig, Locus } from '../types';
10
+ import type { DataSourceConfig, DataSourceConfigMethod, Locus } from '../types';
11
11
  export declare class DataSourceRegistry {
12
12
  private readonly instances;
13
13
  private readonly inflightAborts;
@@ -27,7 +27,7 @@ export declare class DataSourceRegistry {
27
27
  * Call a setter method on a registered DataSource.
28
28
  * Used for serializable configuration updates (setCumulativeOffsets, setWindowFunction, etc.).
29
29
  */
30
- configure(instanceId: string, method: string, args: unknown[]): void;
30
+ configure(instanceId: string, method: DataSourceConfigMethod, args: unknown[]): void;
31
31
  /** Destroy a DataSource instance and clean up. */
32
32
  destroy(instanceId: string): void;
33
33
  }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Serialized error for cross-worker-boundary error propagation.
3
+ *
4
+ * Workers can't transfer Error objects via postMessage. This type carries
5
+ * the error message, name, and stack trace across the boundary so the
6
+ * receiving side can reconstruct a meaningful Error.
7
+ */
8
+ export interface SerializedError {
9
+ message: string;
10
+ name: string;
11
+ stack?: string;
12
+ }
13
+ /** Extract serializable fields from an error. */
14
+ export declare function serializeError(err: unknown): SerializedError;
15
+ /** Reconstruct an Error from serialized fields (preserves name and stack). */
16
+ export declare function deserializeError(se: SerializedError): Error;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Timeout utility for worker task execution.
3
+ *
4
+ * Wraps a promise with a configurable timeout. If the promise doesn't settle
5
+ * within the timeout, it rejects with a TaskTimeoutError.
6
+ *
7
+ * Layer 1 (Data): no DOM, no canvas.
8
+ */
9
+ /** Default timeout for worker tasks (30 seconds). */
10
+ export declare const DEFAULT_TASK_TIMEOUT_MS = 30000;
11
+ /** Error thrown when a worker task exceeds its timeout. */
12
+ export declare class TaskTimeoutError extends Error {
13
+ constructor(taskName: string, ms: number);
14
+ }
15
+ /**
16
+ * Race a promise against a timeout. Returns the promise result if it settles
17
+ * first, or rejects with TaskTimeoutError if the timeout fires first.
18
+ *
19
+ * Pass `ms <= 0` to disable the timeout (returns the promise as-is).
20
+ */
21
+ export declare function withTimeout<T>(promise: Promise<T>, ms: number, taskName: string): Promise<T>;
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import type { WorkerProvider, WorkerTask, WorkerTaskResultMap } from '../workerProvider';
21
21
  import type { DataSourceWorkerProvider } from '../dataSourceWorkerProvider';
22
- import type { DataSourceConfig, Locus } from '../types';
22
+ import type { DataSourceConfig, DataSourceConfigMethod, Locus } from '../types';
23
23
  export interface WebWorkerPoolOptions {
24
24
  /**
25
25
  * URL to the worker pool script.
@@ -37,10 +37,13 @@ export interface WebWorkerPoolOptions {
37
37
  * Number of workers in the pool. Default: 1.
38
38
  */
39
39
  poolSize?: number;
40
+ /** Task timeout in ms. Default: 30000. Set to 0 to disable. */
41
+ taskTimeoutMs?: number;
40
42
  }
41
43
  export declare class WebWorkerPool implements WorkerProvider, DataSourceWorkerProvider {
42
44
  private workers;
43
45
  private readyPromises;
46
+ private readonly taskTimeoutMs;
44
47
  private nextId;
45
48
  private nextWorker;
46
49
  private pending;
@@ -53,7 +56,7 @@ export declare class WebWorkerPool implements WorkerProvider, DataSourceWorkerPr
53
56
  execute<T extends WorkerTask>(task: T, transfer?: Transferable[]): Promise<WorkerTaskResultMap[T['task']]>;
54
57
  create(instanceId: string, config: DataSourceConfig): void;
55
58
  fetch<F>(instanceId: string, locus: Locus, bpPerPixel: number, signal: AbortSignal): Promise<F[]>;
56
- configure(instanceId: string, method: string, ...args: unknown[]): void;
59
+ configure(instanceId: string, method: DataSourceConfigMethod, ...args: unknown[]): void;
57
60
  destroy(instanceId: string): void;
58
61
  dispose(): void;
59
62
  /**
@@ -33,12 +33,15 @@ export interface WebWorkerProviderOptions {
33
33
  * Default: 1.
34
34
  */
35
35
  poolSize?: number;
36
+ /** Task timeout in ms. Default: 30000. Set to 0 to disable. */
37
+ taskTimeoutMs?: number;
36
38
  }
37
39
  export declare class WebWorkerProvider implements WorkerProvider {
38
40
  private workers;
39
41
  private nextId;
40
42
  private nextWorker;
41
43
  private pending;
44
+ private readonly taskTimeoutMs;
42
45
  /**
43
46
  * @param optionsOrUrl - Options object with workerUrl and poolSize,
44
47
  * or a URL string/URL for backward compatibility (single worker).
@@ -10,11 +10,11 @@
10
10
  *
11
11
  * Layer 1 (Data + Layout): no DOM.
12
12
  */
13
- import type { DataSource, Locus } from './types';
13
+ import type { DataSource, ConfigurableDataSource, Locus } from './types';
14
14
  import type { CumulativeOffsets } from './genome/chromSizes';
15
15
  import type { DataSourceWorkerProvider } from './dataSourceWorkerProvider';
16
16
  import type { WindowFunction } from './types';
17
- export declare class WorkerDataSource<F = unknown> implements DataSource<F> {
17
+ export declare class WorkerDataSource<F = unknown> implements DataSource<F>, ConfigurableDataSource {
18
18
  private readonly provider;
19
19
  readonly instanceId: string;
20
20
  private resolver?;
@@ -11,7 +11,7 @@
11
11
  * - WebWorkerProvider — browser (Web Workers)
12
12
  * - NodeWorkerProvider — Node.js (worker_threads)
13
13
  */
14
- import type { AnnotationFeature, WigFeature, WindowFunction, TextFileFormat, DataSourceConfig, Locus } from './types';
14
+ import type { AnnotationFeature, WigFeature, WindowFunction, TextFileFormat, DataSourceConfig, DataSourceConfigMethod, Locus } from './types';
15
15
  import type { FeatureHeader } from './formats/featureParser';
16
16
  import type { DataSourceWorkerProvider } from './dataSourceWorkerProvider';
17
17
  export interface PackTask {
@@ -75,7 +75,7 @@ export declare class MainThreadProvider implements WorkerProvider, DataSourceWor
75
75
  private dispatch;
76
76
  create(instanceId: string, config: DataSourceConfig): void;
77
77
  fetch<F>(instanceId: string, locus: Locus, bpPerPixel: number, signal: AbortSignal): Promise<F[]>;
78
- configure(instanceId: string, method: string, ...args: unknown[]): void;
78
+ configure(instanceId: string, method: DataSourceConfigMethod, ...args: unknown[]): void;
79
79
  destroy(instanceId: string): void;
80
80
  dispose(): void;
81
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loom-browser",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
4
4
  "main": "dist/loom.esm.js",
5
5
  "module": "dist/loom.esm.js",
6
6
  "types": "dist/types/index.d.ts",