loom-browser 0.0.3 → 0.0.5
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/README.md +28 -3
- package/dist/loom-react.esm.js +13967 -0
- package/dist/loom-react.esm.min.js +2 -0
- package/dist/loom-react.esm.min.js.map +1 -0
- package/dist/loom.esm.js +175 -148
- package/dist/loom.esm.min.js +1 -1
- package/dist/loom.esm.min.js.map +1 -1
- package/dist/loom.js +174 -149
- package/dist/loom.min.js +1 -1
- package/dist/loom.min.js.map +1 -1
- package/dist/tsconfig.src.tsbuildinfo +1 -0
- package/dist/types/headlessGenomeBrowser.d.ts +8 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/react/GenomeBrowserContext.d.ts +6 -0
- package/dist/types/react/LoomBrowser.d.ts +86 -0
- package/dist/types/react/hooks/index.d.ts +3 -0
- package/dist/types/react/hooks/useBrowserEvent.d.ts +7 -0
- package/dist/types/react/hooks/useGenomeBrowser.d.ts +7 -0
- package/dist/types/react/hooks/useLocus.d.ts +11 -0
- package/dist/types/react/hooks/useTrackManager.d.ts +11 -0
- package/dist/types/react/index.d.ts +9 -0
- package/dist/types/react/tracks/BedTrack.d.ts +14 -0
- package/dist/types/react/tracks/GeneTrack.d.ts +14 -0
- package/dist/types/react/tracks/GtxTrack.d.ts +13 -0
- package/dist/types/react/tracks/InteractionTrack.d.ts +12 -0
- package/dist/types/react/tracks/RulerTrack.d.ts +6 -0
- package/dist/types/react/tracks/SequenceTrack.d.ts +6 -0
- package/dist/types/react/tracks/WigTrack.d.ts +12 -0
- package/dist/types/react/tracks/index.d.ts +14 -0
- package/dist/types/react/ui/ChromosomeSelect.d.ts +7 -0
- package/dist/types/react/ui/ExportControls.d.ts +7 -0
- package/dist/types/react/ui/LocusInput.d.ts +7 -0
- package/dist/types/react/ui/Navbar.d.ts +7 -0
- package/dist/types/react/ui/WindowSize.d.ts +7 -0
- package/dist/types/react/ui/ZoomControls.d.ts +7 -0
- package/dist/types/react/ui/ensureRegistered.d.ts +5 -0
- package/dist/types/react/ui/index.d.ts +12 -0
- package/dist/types/react/ui/types.d.ts +24 -0
- package/dist/types/tracks/annotation/annotationTrackCanvas.d.ts +1 -0
- package/dist/types/tracks/baseTrackCanvas.d.ts +2 -0
- package/dist/types/tracks/interaction/interactionTrackCanvas.d.ts +1 -0
- package/dist/types/tracks/ruler/rulerTrackCanvas.d.ts +1 -0
- package/dist/types/tracks/sequence/sequenceTrackCanvas.d.ts +1 -0
- package/dist/types/tracks/wig/wigTrackCanvas.d.ts +1 -0
- package/dist/types/types.d.ts +2 -0
- package/dist/types/ui/components/LoomBrowserShell.d.ts +9 -1
- package/package.json +20 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
2
|
+
import './types';
|
|
3
|
+
export interface ChromosomeSelectProps {
|
|
4
|
+
/** Override the browser from context. */
|
|
5
|
+
browser?: GenomeBrowser | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function ChromosomeSelect({ browser: browserProp }: ChromosomeSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
2
|
+
import './types';
|
|
3
|
+
export interface ExportControlsProps {
|
|
4
|
+
/** Override the browser from context. */
|
|
5
|
+
browser?: GenomeBrowser | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function ExportControls({ browser: browserProp }: ExportControlsProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
2
|
+
import './types';
|
|
3
|
+
export interface LocusInputProps {
|
|
4
|
+
/** Override the browser from context. */
|
|
5
|
+
browser?: GenomeBrowser | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function LocusInput({ browser: browserProp }: LocusInputProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
2
|
+
import './types';
|
|
3
|
+
export interface NavbarProps {
|
|
4
|
+
/** Override the browser from context. */
|
|
5
|
+
browser?: GenomeBrowser | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function Navbar({ browser: browserProp }: NavbarProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
2
|
+
import './types';
|
|
3
|
+
export interface WindowSizeProps {
|
|
4
|
+
/** Override the browser from context. */
|
|
5
|
+
browser?: GenomeBrowser | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function WindowSize({ browser: browserProp }: WindowSizeProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenomeBrowser } from '../../genomeBrowser';
|
|
2
|
+
import './types';
|
|
3
|
+
export interface ZoomControlsProps {
|
|
4
|
+
/** Override the browser from context. */
|
|
5
|
+
browser?: GenomeBrowser | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function ZoomControls({ browser: browserProp }: ZoomControlsProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { ChromosomeSelect } from './ChromosomeSelect';
|
|
2
|
+
export type { ChromosomeSelectProps } from './ChromosomeSelect';
|
|
3
|
+
export { LocusInput } from './LocusInput';
|
|
4
|
+
export type { LocusInputProps } from './LocusInput';
|
|
5
|
+
export { ZoomControls } from './ZoomControls';
|
|
6
|
+
export type { ZoomControlsProps } from './ZoomControls';
|
|
7
|
+
export { WindowSize } from './WindowSize';
|
|
8
|
+
export type { WindowSizeProps } from './WindowSize';
|
|
9
|
+
export { ExportControls } from './ExportControls';
|
|
10
|
+
export type { ExportControlsProps } from './ExportControls';
|
|
11
|
+
export { Navbar } from './Navbar';
|
|
12
|
+
export type { NavbarProps } from './Navbar';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSX IntrinsicElements augmentation for Loom web components.
|
|
3
|
+
* This lets TypeScript accept <loom-*> elements in JSX without errors.
|
|
4
|
+
*/
|
|
5
|
+
import type { LoomChromosomeSelect } from '../../ui/components/LoomChromosomeSelect';
|
|
6
|
+
import type { LoomLocusInput } from '../../ui/components/LoomLocusInput';
|
|
7
|
+
import type { LoomZoomControls } from '../../ui/components/LoomZoomControls';
|
|
8
|
+
import type { LoomWindowSize } from '../../ui/components/LoomWindowSize';
|
|
9
|
+
import type { LoomExportControls } from '../../ui/components/LoomExportControls';
|
|
10
|
+
import type { LoomNavbar } from '../../ui/components/LoomNavbar';
|
|
11
|
+
type WebComponentProps<T> = React.DetailedHTMLProps<React.HTMLAttributes<T>, T>;
|
|
12
|
+
declare module 'react' {
|
|
13
|
+
namespace JSX {
|
|
14
|
+
interface IntrinsicElements {
|
|
15
|
+
'loom-chromosome-select': WebComponentProps<LoomChromosomeSelect>;
|
|
16
|
+
'loom-locus-input': WebComponentProps<LoomLocusInput>;
|
|
17
|
+
'loom-zoom-controls': WebComponentProps<LoomZoomControls>;
|
|
18
|
+
'loom-window-size': WebComponentProps<LoomWindowSize>;
|
|
19
|
+
'loom-export-controls': WebComponentProps<LoomExportControls>;
|
|
20
|
+
'loom-navbar': WebComponentProps<LoomNavbar>;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -54,5 +54,6 @@ export declare class AnnotationTrackCanvas extends BaseTrackCanvas<AnnotationRen
|
|
|
54
54
|
getAxisInfo(): AxisInfo | undefined;
|
|
55
55
|
getContextMenuItems(_x: number, _y: number): ContextMenuItem[];
|
|
56
56
|
hitTest(x: number, y: number): HitTestResult<AnnotationFeature>[];
|
|
57
|
+
setTheme(theme: RenderTheme): void;
|
|
57
58
|
serializeConfig(theme: RenderTheme): AnnotationTrackSessionConfig;
|
|
58
59
|
}
|
|
@@ -46,6 +46,8 @@ export declare abstract class BaseTrackCanvas<TConfig> implements Track {
|
|
|
46
46
|
setLocus(locus: Locus): void;
|
|
47
47
|
/** Merge partial config and re-render. */
|
|
48
48
|
setConfig(config: Partial<TConfig>): void;
|
|
49
|
+
/** Apply a new render theme and re-render. Subclasses must override. */
|
|
50
|
+
abstract setTheme(theme: RenderTheme): void;
|
|
49
51
|
/** Suspend rendering — calls to render() will be deferred until resumeRendering(). */
|
|
50
52
|
suspendRendering(): void;
|
|
51
53
|
/** Resume rendering. If render() was called while suspended, flushes now. */
|
|
@@ -41,6 +41,7 @@ export declare class InteractionTrackCanvas extends BaseTrackCanvas<InteractionR
|
|
|
41
41
|
/** Hit-test: find features at canvas-relative pixel coordinates. */
|
|
42
42
|
hitTest(x: number, y: number): HitTestResult<InteractionFeature>[];
|
|
43
43
|
private buildPopupData;
|
|
44
|
+
setTheme(theme: RenderTheme): void;
|
|
44
45
|
/** Serialize config for session save/restore, diffed against theme defaults. */
|
|
45
46
|
serializeConfig(theme: RenderTheme): InteractionTrackSessionConfig;
|
|
46
47
|
/** Return axis info for proportional display mode. */
|
|
@@ -39,5 +39,6 @@ export declare class RulerTrackCanvas extends BaseTrackCanvas<RulerRenderConfig>
|
|
|
39
39
|
protected computeHeight(_width: number): number;
|
|
40
40
|
protected getBackground(): string;
|
|
41
41
|
protected doRender(ctx: CanvasRenderingContext2D, _width: number, _height: number, rc: RenderContext): void;
|
|
42
|
+
setTheme(theme: RenderTheme): void;
|
|
42
43
|
serializeConfig(theme: RenderTheme): RulerTrackSessionConfig;
|
|
43
44
|
}
|
|
@@ -63,5 +63,6 @@ export declare class SequenceTrackCanvas extends BaseTrackCanvas<SequenceRenderC
|
|
|
63
63
|
protected computeHeight(_width: number): number;
|
|
64
64
|
protected getBackground(): string;
|
|
65
65
|
protected doRender(ctx: CanvasRenderingContext2D, _width: number, _height: number, rc: RenderContext): void;
|
|
66
|
+
setTheme(theme: RenderTheme): void;
|
|
66
67
|
serializeConfig(theme: RenderTheme): TrackSessionConfig;
|
|
67
68
|
}
|
|
@@ -78,5 +78,6 @@ export declare class WigTrackCanvas extends BaseTrackCanvas<WigRenderConfig> {
|
|
|
78
78
|
*/
|
|
79
79
|
getNumericState(): NumericState;
|
|
80
80
|
hitTest(x: number, _y: number): HitTestResult<WigFeature>[];
|
|
81
|
+
setTheme(theme: RenderTheme): void;
|
|
81
82
|
serializeConfig(theme: RenderTheme): WigTrackSessionConfig;
|
|
82
83
|
}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -76,6 +76,8 @@ export interface Track {
|
|
|
76
76
|
detach(): void;
|
|
77
77
|
/** Set an error state to render on the track canvas. Pass null to clear. */
|
|
78
78
|
setError(error: Error | null): void;
|
|
79
|
+
/** Apply a new render theme and re-render. Replaces all theme-derived config values. */
|
|
80
|
+
setTheme(theme: import('./themes/renderTheme').RenderTheme): void;
|
|
79
81
|
/**
|
|
80
82
|
* Hit-test at canvas-relative pixel coordinates.
|
|
81
83
|
* Returns features at that point with pre-formatted popup data.
|
|
@@ -38,12 +38,20 @@ export declare class LoomBrowserShell extends HTMLElement {
|
|
|
38
38
|
setLocus(locus: Locus): void;
|
|
39
39
|
/** Proxy: subscribe to browser events. */
|
|
40
40
|
on<K extends keyof BrowserEvents>(event: K, handler: (data: BrowserEvents[K]) => void): (() => void) | undefined;
|
|
41
|
+
/** Switch both the UI shell theme and the render theme in one call. */
|
|
42
|
+
setTheme(shellTheme: ShellTheme): void;
|
|
41
43
|
disconnectedCallback(): void;
|
|
42
44
|
}
|
|
43
45
|
/** Options for createShell(). */
|
|
44
46
|
export interface CreateShellOptions extends GenomeBrowserOptions {
|
|
45
|
-
/** UI shell theme (CSS chrome).
|
|
47
|
+
/** UI shell theme (CSS chrome). When set, also defaults the render theme to match unless `theme` is explicitly provided. */
|
|
46
48
|
shellTheme?: ShellTheme;
|
|
49
|
+
/** Show ruler track. Default: true */
|
|
50
|
+
ruler?: boolean;
|
|
51
|
+
/** Show gene annotation track (UCSC RefSeq). Default: true */
|
|
52
|
+
genes?: boolean;
|
|
53
|
+
/** Show sequence track. Default: false */
|
|
54
|
+
sequence?: boolean;
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
57
|
* Convenience function to create an <loom-browser> shell and initialize it.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loom-browser",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"main": "dist/loom.esm.js",
|
|
5
5
|
"module": "dist/loom.esm.js",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
"types": "./dist/types/index.d.ts",
|
|
10
10
|
"import": "./dist/loom.esm.js",
|
|
11
11
|
"require": "./dist/loom.js"
|
|
12
|
+
},
|
|
13
|
+
"./react": {
|
|
14
|
+
"types": "./dist/types/react/index.d.ts",
|
|
15
|
+
"import": "./dist/loom-react.esm.js"
|
|
12
16
|
}
|
|
13
17
|
},
|
|
14
18
|
"type": "module",
|
|
@@ -64,6 +68,18 @@
|
|
|
64
68
|
"url": "git+https://github.com/riyavsinha/loom.git"
|
|
65
69
|
},
|
|
66
70
|
"browserslist": "> 1%, not dead",
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"react": ">=18",
|
|
73
|
+
"react-dom": ">=18"
|
|
74
|
+
},
|
|
75
|
+
"peerDependenciesMeta": {
|
|
76
|
+
"react": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
79
|
+
"react-dom": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
67
83
|
"devDependencies": {
|
|
68
84
|
"@eslint/js": "^10.0.1",
|
|
69
85
|
"@gmod/cram": "^5.0.5",
|
|
@@ -72,6 +88,7 @@
|
|
|
72
88
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
73
89
|
"@types/jsdom": "^28.0.1",
|
|
74
90
|
"@types/mocha": "^10.0.10",
|
|
91
|
+
"@types/react": "^19.2.14",
|
|
75
92
|
"@typescript-eslint/eslint-plugin": "^8.57.0",
|
|
76
93
|
"@typescript-eslint/parser": "^8.57.0",
|
|
77
94
|
"@vitest/coverage-v8": "^3.2.4",
|
|
@@ -89,6 +106,8 @@
|
|
|
89
106
|
"igv-utils": "github:igvteam/igv-utils#v1.7.1",
|
|
90
107
|
"jsdom": "^29.0.0",
|
|
91
108
|
"mocha": "^11.1.0",
|
|
109
|
+
"react": "^19.2.4",
|
|
110
|
+
"react-dom": "^19.2.4",
|
|
92
111
|
"rollup": "^2.66.0",
|
|
93
112
|
"rollup-plugin-copy": "^3.3.0",
|
|
94
113
|
"sass": "^1.45.1",
|