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
package/dist/loom.esm.js
CHANGED
|
@@ -1294,6 +1294,11 @@ class AnnotationTrackCanvas extends BaseTrackCanvas {
|
|
|
1294
1294
|
}
|
|
1295
1295
|
return results;
|
|
1296
1296
|
}
|
|
1297
|
+
setTheme(theme) {
|
|
1298
|
+
this._config = resolveAnnotationConfig(theme);
|
|
1299
|
+
this.background = theme.palette.background;
|
|
1300
|
+
this.render();
|
|
1301
|
+
}
|
|
1297
1302
|
serializeConfig(theme) {
|
|
1298
1303
|
const defaults = resolveAnnotationConfig(theme);
|
|
1299
1304
|
const overrides = {};
|
|
@@ -1615,6 +1620,10 @@ class RulerTrackCanvas extends BaseTrackCanvas {
|
|
|
1615
1620
|
renderRulerTrack(ctx, this.config, rc);
|
|
1616
1621
|
}
|
|
1617
1622
|
}
|
|
1623
|
+
setTheme(theme) {
|
|
1624
|
+
this._config = resolveRulerConfig(theme);
|
|
1625
|
+
this.render();
|
|
1626
|
+
}
|
|
1618
1627
|
serializeConfig(theme) {
|
|
1619
1628
|
const defaults = resolveRulerConfig(theme);
|
|
1620
1629
|
const overrides = {};
|
|
@@ -2669,6 +2678,11 @@ class WigTrackCanvas extends BaseTrackCanvas {
|
|
|
2669
2678
|
}
|
|
2670
2679
|
return [];
|
|
2671
2680
|
}
|
|
2681
|
+
setTheme(theme) {
|
|
2682
|
+
const dataRange = this._config.dataRange;
|
|
2683
|
+
this._config = { ...resolveWigConfig(theme), dataRange };
|
|
2684
|
+
this.render();
|
|
2685
|
+
}
|
|
2672
2686
|
serializeConfig(theme) {
|
|
2673
2687
|
const defaults = resolveWigConfig(theme);
|
|
2674
2688
|
const overrides = {};
|
|
@@ -5252,6 +5266,11 @@ class SequenceTrackCanvas extends BaseTrackCanvas {
|
|
|
5252
5266
|
doRender(ctx, _width, _height, rc) {
|
|
5253
5267
|
renderSequenceTrack(ctx, this._sequence, this._config, rc);
|
|
5254
5268
|
}
|
|
5269
|
+
setTheme(theme) {
|
|
5270
|
+
this._config = resolveSequenceConfig(theme);
|
|
5271
|
+
this._theme = theme;
|
|
5272
|
+
this.render();
|
|
5273
|
+
}
|
|
5255
5274
|
serializeConfig(theme) {
|
|
5256
5275
|
const defaults = resolveSequenceConfig(theme);
|
|
5257
5276
|
const overrides = {};
|
|
@@ -9473,6 +9492,10 @@ class InteractionTrackCanvas extends BaseTrackCanvas {
|
|
|
9473
9492
|
data.push({ name: 'Type', value: feature.type });
|
|
9474
9493
|
return data;
|
|
9475
9494
|
}
|
|
9495
|
+
setTheme(theme) {
|
|
9496
|
+
this._config = resolveInteractionConfig(theme);
|
|
9497
|
+
this.render();
|
|
9498
|
+
}
|
|
9476
9499
|
/** Serialize config for session save/restore, diffed against theme defaults. */
|
|
9477
9500
|
serializeConfig(theme) {
|
|
9478
9501
|
const resolved = resolveInteractionConfig(resolveTheme(theme));
|
|
@@ -10445,6 +10468,7 @@ const BrowserEvent = {
|
|
|
10445
10468
|
ROIChanged: 'roichanged',
|
|
10446
10469
|
ROIClick: 'roiclick',
|
|
10447
10470
|
ROIContextMenu: 'roicontextmenu',
|
|
10471
|
+
ThemeChanged: 'themechange',
|
|
10448
10472
|
};
|
|
10449
10473
|
/** Generate a unique track ID: "{type}-{counter}" or "track-{counter}" if type is unknown. */
|
|
10450
10474
|
let nextTrackId = 0;
|
|
@@ -10452,6 +10476,7 @@ function generateTrackId(type) {
|
|
|
10452
10476
|
return `${type !== null && type !== void 0 ? type : 'track'}-${nextTrackId++}`;
|
|
10453
10477
|
}
|
|
10454
10478
|
class HeadlessGenomeBrowser {
|
|
10479
|
+
get theme() { return this._theme; }
|
|
10455
10480
|
get locus() { return this._locus; }
|
|
10456
10481
|
get viewportWidth() { return this._viewportWidth; }
|
|
10457
10482
|
/** Agent-friendly state projection manager. Lazily created on first access. */
|
|
@@ -10477,7 +10502,7 @@ class HeadlessGenomeBrowser {
|
|
|
10477
10502
|
this.workerProvider = options.workerProvider;
|
|
10478
10503
|
this.popupProvider = (_g = options.popupProvider) !== null && _g !== void 0 ? _g : undefined;
|
|
10479
10504
|
this.contextMenuProvider = (_h = options.contextMenuProvider) !== null && _h !== void 0 ? _h : undefined;
|
|
10480
|
-
this.
|
|
10505
|
+
this._theme = resolveTheme(options.theme);
|
|
10481
10506
|
if (options.stateProjection)
|
|
10482
10507
|
this._state = options.stateProjection;
|
|
10483
10508
|
}
|
|
@@ -11217,6 +11242,14 @@ class HeadlessGenomeBrowser {
|
|
|
11217
11242
|
}
|
|
11218
11243
|
return track;
|
|
11219
11244
|
}
|
|
11245
|
+
/** Apply a new render theme to the browser and all existing tracks. */
|
|
11246
|
+
setTheme(theme) {
|
|
11247
|
+
this._theme = resolveTheme(theme);
|
|
11248
|
+
for (const mt of this.managedTracks) {
|
|
11249
|
+
mt.track.setTheme(this._theme);
|
|
11250
|
+
}
|
|
11251
|
+
this.events.emit(BrowserEvent.ThemeChanged, { theme: this._theme });
|
|
11252
|
+
}
|
|
11220
11253
|
/** Clean up event listeners, abort in-flight requests, clear tracks and ROIs. */
|
|
11221
11254
|
dispose() {
|
|
11222
11255
|
this.events.removeAllListeners();
|
|
@@ -12067,6 +12100,13 @@ class GenomeBrowser extends HeadlessGenomeBrowser {
|
|
|
12067
12100
|
this.events.on(BrowserEvent.DataLoaded, ({ track }) => {
|
|
12068
12101
|
this.updateAxisContent(track);
|
|
12069
12102
|
});
|
|
12103
|
+
// Repaint axis canvases when theme changes (track canvases update via
|
|
12104
|
+
// track.setTheme(), but axis sidebar is managed here in GenomeBrowser).
|
|
12105
|
+
this.events.on(BrowserEvent.ThemeChanged, () => {
|
|
12106
|
+
for (const mt of this.managedTracks) {
|
|
12107
|
+
this.updateAxisContent(mt.track);
|
|
12108
|
+
}
|
|
12109
|
+
});
|
|
12070
12110
|
// Re-render ROI overlays when ROIs change or viewport moves
|
|
12071
12111
|
this.events.on(BrowserEvent.ROIAdded, () => this.renderROIOverlays());
|
|
12072
12112
|
this.events.on(BrowserEvent.ROIRemoved, () => this.renderROIOverlays());
|
|
@@ -12269,9 +12309,10 @@ class GenomeBrowser extends HeadlessGenomeBrowser {
|
|
|
12269
12309
|
const { axisDiv } = entry;
|
|
12270
12310
|
const rawInfo = (_a = track.getAxisInfo) === null || _a === void 0 ? void 0 : _a.call(track);
|
|
12271
12311
|
if (!rawInfo) {
|
|
12272
|
-
// No axis info —
|
|
12312
|
+
// No axis info — keep the column for alignment but clear content
|
|
12273
12313
|
axisDiv.innerHTML = "";
|
|
12274
12314
|
axisDiv.style.borderRight = "none";
|
|
12315
|
+
axisDiv.style.backgroundColor = this.theme.palette.background;
|
|
12275
12316
|
entry.axisCanvas = null;
|
|
12276
12317
|
return;
|
|
12277
12318
|
}
|
|
@@ -13930,6 +13971,102 @@ class LoomNavbar extends HTMLElement {
|
|
|
13930
13971
|
}
|
|
13931
13972
|
}
|
|
13932
13973
|
|
|
13974
|
+
/**
|
|
13975
|
+
* Built-in RenderTheme presets.
|
|
13976
|
+
*
|
|
13977
|
+
* These are Partial<RenderTheme> objects — pass them to resolveTheme() to get
|
|
13978
|
+
* a fully resolved theme with defaults filled in.
|
|
13979
|
+
*
|
|
13980
|
+
* Usage:
|
|
13981
|
+
* import {resolveTheme} from './renderTheme'
|
|
13982
|
+
* import {modernRenderTheme} from './renderThemePresets'
|
|
13983
|
+
* const theme = resolveTheme(modernRenderTheme)
|
|
13984
|
+
*/
|
|
13985
|
+
/** Modern theme — blue/pink palette, rounded exons, system font. */
|
|
13986
|
+
const modernRenderTheme = {
|
|
13987
|
+
palette: {
|
|
13988
|
+
primary: '#4A90D9',
|
|
13989
|
+
secondary: '#D94A7A',
|
|
13990
|
+
accent: '#4A90D9',
|
|
13991
|
+
background: '#ffffff',
|
|
13992
|
+
foreground: '#333333',
|
|
13993
|
+
muted: '#B0B0B0',
|
|
13994
|
+
},
|
|
13995
|
+
fontFamily: 'Inter, system-ui, sans-serif',
|
|
13996
|
+
annotation: {
|
|
13997
|
+
utrColor: '#A8C8E8',
|
|
13998
|
+
altUtrColor: '#E8A8BE',
|
|
13999
|
+
borderColor: 'rgba(0, 0, 0, 0.15)',
|
|
14000
|
+
borderWidth: 0.5,
|
|
14001
|
+
borderRadius: 3,
|
|
14002
|
+
arrowInExonColor: 'rgba(255, 255, 255, 0.7)',
|
|
14003
|
+
labelFont: 'italic 10px Inter, system-ui, sans-serif',
|
|
14004
|
+
featureHeight: 12,
|
|
14005
|
+
expandedRowHeight: 28,
|
|
14006
|
+
margin: 8,
|
|
14007
|
+
},
|
|
14008
|
+
wig: {
|
|
14009
|
+
overflowColor: '#FF6B6B',
|
|
14010
|
+
},
|
|
14011
|
+
sequence: {
|
|
14012
|
+
frameColor1: 'hsl(220, 15%, 90%)',
|
|
14013
|
+
frameColor2: 'hsl(220, 15%, 95%)',
|
|
14014
|
+
startCodonColor: 'hsl(160, 55%, 42%)',
|
|
14015
|
+
stopCodonColor: 'hsl(0, 60%, 55%)',
|
|
14016
|
+
useFillText: true,
|
|
14017
|
+
frameLabelColor: '#444444',
|
|
14018
|
+
codonLabelColor: '#ffffff',
|
|
14019
|
+
frameFont: '600 10px Inter, system-ui, sans-serif',
|
|
14020
|
+
codonBorderRadius: 3,
|
|
14021
|
+
},
|
|
14022
|
+
};
|
|
14023
|
+
/** Dark theme — adapted for dark backgrounds, high contrast. */
|
|
14024
|
+
const darkRenderTheme = {
|
|
14025
|
+
palette: {
|
|
14026
|
+
primary: '#6CB4EE',
|
|
14027
|
+
secondary: '#EE6C9E',
|
|
14028
|
+
accent: '#6a9fd9',
|
|
14029
|
+
background: '#1a1a2e',
|
|
14030
|
+
foreground: '#e0e0e0',
|
|
14031
|
+
muted: '#555555',
|
|
14032
|
+
},
|
|
14033
|
+
nucleotideColors: {
|
|
14034
|
+
A: '#4ade80',
|
|
14035
|
+
C: '#60a5fa',
|
|
14036
|
+
G: '#facc15',
|
|
14037
|
+
T: '#f87171',
|
|
14038
|
+
N: '#666666',
|
|
14039
|
+
},
|
|
14040
|
+
annotation: {
|
|
14041
|
+
utrColor: '#3D6B8E',
|
|
14042
|
+
altUtrColor: '#8E3D5E',
|
|
14043
|
+
borderColor: 'rgba(255, 255, 255, 0.12)',
|
|
14044
|
+
borderWidth: 0.5,
|
|
14045
|
+
borderRadius: 3,
|
|
14046
|
+
arrowInExonColor: 'rgba(0, 0, 0, 0.4)',
|
|
14047
|
+
labelBackground: '#1a1a2e',
|
|
14048
|
+
labelFont: 'italic 10px sans-serif',
|
|
14049
|
+
featureHeight: 12,
|
|
14050
|
+
expandedRowHeight: 28,
|
|
14051
|
+
margin: 8,
|
|
14052
|
+
},
|
|
14053
|
+
wig: {
|
|
14054
|
+
overflowColor: '#FF6B6B',
|
|
14055
|
+
},
|
|
14056
|
+
sequence: {
|
|
14057
|
+
background: '#1a1a2e',
|
|
14058
|
+
frameColor1: 'hsl(230, 15%, 28%)',
|
|
14059
|
+
frameColor2: 'hsl(230, 15%, 22%)',
|
|
14060
|
+
startCodonColor: 'hsl(160, 50%, 35%)',
|
|
14061
|
+
stopCodonColor: 'hsl(0, 55%, 45%)',
|
|
14062
|
+
useFillText: true,
|
|
14063
|
+
frameLabelColor: '#c8c8c8',
|
|
14064
|
+
codonLabelColor: '#ffffff',
|
|
14065
|
+
frameFont: '600 10px sans-serif',
|
|
14066
|
+
codonBorderRadius: 3,
|
|
14067
|
+
},
|
|
14068
|
+
};
|
|
14069
|
+
|
|
13933
14070
|
/**
|
|
13934
14071
|
* <loom-browser> — Top-level shell combining navbar + GenomeBrowser.
|
|
13935
14072
|
*
|
|
@@ -14037,6 +14174,19 @@ class LoomBrowserShell extends HTMLElement {
|
|
|
14037
14174
|
var _a;
|
|
14038
14175
|
return (_a = this._browser) === null || _a === void 0 ? void 0 : _a.on(event, handler);
|
|
14039
14176
|
}
|
|
14177
|
+
/** Switch both the UI shell theme and the render theme in one call. */
|
|
14178
|
+
setTheme(shellTheme) {
|
|
14179
|
+
this.applyTheme(shellTheme);
|
|
14180
|
+
this.setAttribute('theme', shellTheme);
|
|
14181
|
+
if (this._browser) {
|
|
14182
|
+
const shellToRenderTheme = {
|
|
14183
|
+
modern: modernRenderTheme,
|
|
14184
|
+
dark: darkRenderTheme,
|
|
14185
|
+
};
|
|
14186
|
+
const mapped = shellToRenderTheme[shellTheme];
|
|
14187
|
+
this._browser.setTheme(mapped !== null && mapped !== void 0 ? mapped : {});
|
|
14188
|
+
}
|
|
14189
|
+
}
|
|
14040
14190
|
disconnectedCallback() {
|
|
14041
14191
|
if (this._browser) {
|
|
14042
14192
|
this._browser.dispose();
|
|
@@ -14053,12 +14203,31 @@ function createShell(container, options) {
|
|
|
14053
14203
|
if (!customElements.get('loom-browser')) {
|
|
14054
14204
|
customElements.define('loom-browser', LoomBrowserShell);
|
|
14055
14205
|
}
|
|
14206
|
+
const { shellTheme, ruler, genes, sequence, ...browserOptions } = options;
|
|
14207
|
+
// Auto-map shellTheme to matching RenderTheme when theme is not explicitly set
|
|
14208
|
+
if (shellTheme && !browserOptions.theme) {
|
|
14209
|
+
const shellToRenderTheme = {
|
|
14210
|
+
modern: modernRenderTheme,
|
|
14211
|
+
dark: darkRenderTheme,
|
|
14212
|
+
};
|
|
14213
|
+
const mapped = shellToRenderTheme[shellTheme];
|
|
14214
|
+
if (mapped) {
|
|
14215
|
+
browserOptions.theme = mapped;
|
|
14216
|
+
}
|
|
14217
|
+
}
|
|
14056
14218
|
const shell = document.createElement('loom-browser');
|
|
14057
|
-
if (
|
|
14058
|
-
shell.setAttribute('theme',
|
|
14219
|
+
if (shellTheme) {
|
|
14220
|
+
shell.setAttribute('theme', shellTheme);
|
|
14059
14221
|
}
|
|
14060
14222
|
container.appendChild(shell);
|
|
14061
|
-
shell.initialize(
|
|
14223
|
+
const browser = shell.initialize(browserOptions);
|
|
14224
|
+
// Add default tracks
|
|
14225
|
+
if (ruler !== false)
|
|
14226
|
+
browser.addRuler();
|
|
14227
|
+
if (genes !== false)
|
|
14228
|
+
browser.addGeneTrack({ maxTrackHeight: 150 });
|
|
14229
|
+
if (sequence === true)
|
|
14230
|
+
browser.addSequenceTrack();
|
|
14062
14231
|
return shell;
|
|
14063
14232
|
}
|
|
14064
14233
|
|
|
@@ -14650,148 +14819,6 @@ if (typeof customElements !== 'undefined') {
|
|
|
14650
14819
|
customElements.define('loom-browser', LoomBrowserShell);
|
|
14651
14820
|
}
|
|
14652
14821
|
|
|
14653
|
-
/**
|
|
14654
|
-
* Built-in RenderTheme presets.
|
|
14655
|
-
*
|
|
14656
|
-
* These are Partial<RenderTheme> objects — pass them to resolveTheme() to get
|
|
14657
|
-
* a fully resolved theme with defaults filled in.
|
|
14658
|
-
*
|
|
14659
|
-
* Usage:
|
|
14660
|
-
* import {resolveTheme} from './renderTheme'
|
|
14661
|
-
* import {modernRenderTheme} from './renderThemePresets'
|
|
14662
|
-
* const theme = resolveTheme(modernRenderTheme)
|
|
14663
|
-
*/
|
|
14664
|
-
/** Modern theme — blue/pink palette, rounded exons, system font. */
|
|
14665
|
-
const modernRenderTheme = {
|
|
14666
|
-
palette: {
|
|
14667
|
-
primary: '#4A90D9',
|
|
14668
|
-
secondary: '#D94A7A',
|
|
14669
|
-
accent: '#4A90D9',
|
|
14670
|
-
background: '#ffffff',
|
|
14671
|
-
foreground: '#333333',
|
|
14672
|
-
muted: '#B0B0B0',
|
|
14673
|
-
},
|
|
14674
|
-
fontFamily: 'Inter, system-ui, sans-serif',
|
|
14675
|
-
annotation: {
|
|
14676
|
-
utrColor: '#A8C8E8',
|
|
14677
|
-
altUtrColor: '#E8A8BE',
|
|
14678
|
-
borderColor: 'rgba(0, 0, 0, 0.15)',
|
|
14679
|
-
borderWidth: 0.5,
|
|
14680
|
-
borderRadius: 3,
|
|
14681
|
-
arrowInExonColor: 'rgba(255, 255, 255, 0.7)',
|
|
14682
|
-
labelFont: 'italic 10px Inter, system-ui, sans-serif',
|
|
14683
|
-
featureHeight: 12,
|
|
14684
|
-
expandedRowHeight: 28,
|
|
14685
|
-
margin: 8,
|
|
14686
|
-
},
|
|
14687
|
-
wig: {
|
|
14688
|
-
overflowColor: '#FF6B6B',
|
|
14689
|
-
},
|
|
14690
|
-
sequence: {
|
|
14691
|
-
frameColor1: 'hsl(220, 15%, 90%)',
|
|
14692
|
-
frameColor2: 'hsl(220, 15%, 95%)',
|
|
14693
|
-
startCodonColor: 'hsl(160, 55%, 42%)',
|
|
14694
|
-
stopCodonColor: 'hsl(0, 60%, 55%)',
|
|
14695
|
-
useFillText: true,
|
|
14696
|
-
frameLabelColor: '#444444',
|
|
14697
|
-
codonLabelColor: '#ffffff',
|
|
14698
|
-
frameFont: '600 10px Inter, system-ui, sans-serif',
|
|
14699
|
-
codonBorderRadius: 3,
|
|
14700
|
-
},
|
|
14701
|
-
};
|
|
14702
|
-
/** Dark theme — adapted for dark backgrounds, high contrast. */
|
|
14703
|
-
const darkRenderTheme = {
|
|
14704
|
-
palette: {
|
|
14705
|
-
primary: '#6CB4EE',
|
|
14706
|
-
secondary: '#EE6C9E',
|
|
14707
|
-
accent: '#6a9fd9',
|
|
14708
|
-
background: '#1a1a2e',
|
|
14709
|
-
foreground: '#e0e0e0',
|
|
14710
|
-
muted: '#555555',
|
|
14711
|
-
},
|
|
14712
|
-
nucleotideColors: {
|
|
14713
|
-
A: '#4ade80',
|
|
14714
|
-
C: '#60a5fa',
|
|
14715
|
-
G: '#facc15',
|
|
14716
|
-
T: '#f87171',
|
|
14717
|
-
N: '#666666',
|
|
14718
|
-
},
|
|
14719
|
-
annotation: {
|
|
14720
|
-
utrColor: '#3D6B8E',
|
|
14721
|
-
altUtrColor: '#8E3D5E',
|
|
14722
|
-
borderColor: 'rgba(255, 255, 255, 0.12)',
|
|
14723
|
-
borderWidth: 0.5,
|
|
14724
|
-
borderRadius: 3,
|
|
14725
|
-
arrowInExonColor: 'rgba(0, 0, 0, 0.4)',
|
|
14726
|
-
labelBackground: '#1a1a2e',
|
|
14727
|
-
labelFont: 'italic 10px sans-serif',
|
|
14728
|
-
featureHeight: 12,
|
|
14729
|
-
expandedRowHeight: 28,
|
|
14730
|
-
margin: 8,
|
|
14731
|
-
},
|
|
14732
|
-
wig: {
|
|
14733
|
-
overflowColor: '#FF6B6B',
|
|
14734
|
-
},
|
|
14735
|
-
sequence: {
|
|
14736
|
-
background: '#1a1a2e',
|
|
14737
|
-
frameColor1: 'hsl(230, 15%, 28%)',
|
|
14738
|
-
frameColor2: 'hsl(230, 15%, 22%)',
|
|
14739
|
-
startCodonColor: 'hsl(160, 50%, 35%)',
|
|
14740
|
-
stopCodonColor: 'hsl(0, 55%, 45%)',
|
|
14741
|
-
useFillText: true,
|
|
14742
|
-
frameLabelColor: '#c8c8c8',
|
|
14743
|
-
codonLabelColor: '#ffffff',
|
|
14744
|
-
frameFont: '600 10px sans-serif',
|
|
14745
|
-
codonBorderRadius: 3,
|
|
14746
|
-
},
|
|
14747
|
-
};
|
|
14748
|
-
|
|
14749
|
-
/**
|
|
14750
|
-
* Preset render themes for annotation tracks.
|
|
14751
|
-
*
|
|
14752
|
-
* Each theme is a Partial<AnnotationRenderConfig> that can be spread over defaults.
|
|
14753
|
-
* Usage: { ...defaultAnnotationRenderConfig(), ...modernTheme }
|
|
14754
|
-
*/
|
|
14755
|
-
/** Modern theme — softer colors, rounded exons, strand-based coloring. */
|
|
14756
|
-
const modernTheme = {
|
|
14757
|
-
color: '#4A90D9',
|
|
14758
|
-
altColor: '#D94A7A',
|
|
14759
|
-
utrColor: '#A8C8E8',
|
|
14760
|
-
altUtrColor: '#E8A8BE',
|
|
14761
|
-
borderColor: 'rgba(0, 0, 0, 0.15)',
|
|
14762
|
-
borderWidth: 0.5,
|
|
14763
|
-
borderRadius: 3,
|
|
14764
|
-
intronColor: '#B0B0B0',
|
|
14765
|
-
intronLineWidth: 1,
|
|
14766
|
-
arrowColor: '#999999',
|
|
14767
|
-
arrowInExonColor: 'rgba(255, 255, 255, 0.7)',
|
|
14768
|
-
labelColor: '#333333',
|
|
14769
|
-
labelFont: 'italic 10px sans-serif',
|
|
14770
|
-
featureHeight: 12,
|
|
14771
|
-
expandedRowHeight: 28,
|
|
14772
|
-
margin: 8,
|
|
14773
|
-
};
|
|
14774
|
-
/** Dark theme — modern theme adapted for dark backgrounds. */
|
|
14775
|
-
const darkTheme = {
|
|
14776
|
-
color: '#6CB4EE',
|
|
14777
|
-
altColor: '#EE6C9E',
|
|
14778
|
-
utrColor: '#3D6B8E',
|
|
14779
|
-
altUtrColor: '#8E3D5E',
|
|
14780
|
-
borderColor: 'rgba(255, 255, 255, 0.12)',
|
|
14781
|
-
borderWidth: 0.5,
|
|
14782
|
-
borderRadius: 3,
|
|
14783
|
-
intronColor: '#555555',
|
|
14784
|
-
intronLineWidth: 1,
|
|
14785
|
-
arrowColor: '#666666',
|
|
14786
|
-
arrowInExonColor: 'rgba(0, 0, 0, 0.4)',
|
|
14787
|
-
labelColor: '#C8C8C8',
|
|
14788
|
-
labelBackground: '#1a1a2e',
|
|
14789
|
-
labelFont: 'italic 10px sans-serif',
|
|
14790
|
-
featureHeight: 12,
|
|
14791
|
-
expandedRowHeight: 28,
|
|
14792
|
-
margin: 8,
|
|
14793
|
-
};
|
|
14794
|
-
|
|
14795
14822
|
/**
|
|
14796
14823
|
* Preset render themes for wig tracks.
|
|
14797
14824
|
*
|
|
@@ -14930,4 +14957,4 @@ function createFeatureSource(config, workerProvider) {
|
|
|
14930
14957
|
return { dataSource, trackType, format };
|
|
14931
14958
|
}
|
|
14932
14959
|
|
|
14933
|
-
export { AnnotationTrackCanvas, BaseTrackCanvas, BigWigDataSource, BigWigReader, BinaryParser, BrowserEvent, BufferedRangeReader, C2S, ChromAliasDefaults, CommandDispatcher, CommandError, DOMCanvasProvider, DefaultContextMenuProvider, DefaultPopupProvider, EventEmitter, FeatureCache, GeneDataSource, GenomeBrowser, GtxDataSource, GtxReader, HeadlessGenomeBrowser, InteractionTrackCanvas, IntervalTree, LoomBrowserShell, LoomChromosomeSelect, LoomContextMenu, LoomExportControls, LoomInputDialog, LoomLocusInput, LoomNavbar, LoomPopup, LoomWindowSize, LoomZoomControls, MainThreadProvider, NodeWorkerProvider, READY_STATE_OPEN, ROISet, ROI_DEFAULT_COLOR, ROI_USER_DEFINED_COLOR, RemoteConnection, RulerTrackCanvas, SESSION_VERSION, SequenceDataSource, SequenceTrackCanvas, StateProjection, TabixReader, TextFeatureSource, WebWorkerProvider, WigTrackCanvas, addCaseAliases, assembleGFFTranscripts, bufferLocus, cacheCoversViewport, clampLocus, classicThemeCSS, clearBigWigCache, clearGtxCache, commonContextMenuItems, complementBase, complementSequence, computeCumulativeOffsets, computeWigDataRange, createCachedSequence, createDataSource, createFeatureSource, createGenome, createGenomeSync, createShell, createTrackFromConfig, createTrackFromSession, darkRenderTheme, darkSequenceTheme,
|
|
14960
|
+
export { AnnotationTrackCanvas, BaseTrackCanvas, BigWigDataSource, BigWigReader, BinaryParser, BrowserEvent, BufferedRangeReader, C2S, ChromAliasDefaults, CommandDispatcher, CommandError, DOMCanvasProvider, DefaultContextMenuProvider, DefaultPopupProvider, EventEmitter, FeatureCache, GeneDataSource, GenomeBrowser, GtxDataSource, GtxReader, HeadlessGenomeBrowser, InteractionTrackCanvas, IntervalTree, LoomBrowserShell, LoomChromosomeSelect, LoomContextMenu, LoomExportControls, LoomInputDialog, LoomLocusInput, LoomNavbar, LoomPopup, LoomWindowSize, LoomZoomControls, MainThreadProvider, NodeWorkerProvider, READY_STATE_OPEN, ROISet, ROI_DEFAULT_COLOR, ROI_USER_DEFINED_COLOR, RemoteConnection, RulerTrackCanvas, SESSION_VERSION, SequenceDataSource, SequenceTrackCanvas, StateProjection, TabixReader, TextFeatureSource, WebWorkerProvider, WigTrackCanvas, addCaseAliases, assembleGFFTranscripts, bufferLocus, cacheCoversViewport, clampLocus, classicThemeCSS, clearBigWigCache, clearGtxCache, commonContextMenuItems, complementBase, complementSequence, computeCumulativeOffsets, computeWigDataRange, createCachedSequence, createDataSource, createFeatureSource, createGenome, createGenomeSync, createShell, createTrackFromConfig, createTrackFromSession, darkRenderTheme, darkSequenceTheme, darkWigTheme, dataSourceCacheKey, decodeBed, decodeBedGraph, decodeBedpe, decodeBroadPeak, decodeGFF3, decodeGFFAttribute, decodeGTF, decodeGappedPeak, decodeGenePred, decodeGenePredExt, decodeInteract, decodeNarrowPeak, decodeRefGeneJson, decodeRefflat, defaultAnnotationRenderConfig, defaultCanvasProvider, defaultInteractionRenderConfig, defaultNucleotideColors, defaultRenderTheme, defaultRulerRenderConfig, defaultSequenceRenderConfig, defaultWigRenderConfig, drawLetterGlyph, fetchBigWigFeatures, fetchBigWigWGFeatures, fetchGeneFeatures, fetchGtxFeatures, fetchGtxMultiFeatures, fetchGtxWGFeatures, fetchRange, fetchSequence, findUTRs, fixBedPE, formatBpLength, formatLocus, fromIgvSession, generateROIId, genomeToChromCoord, getChromLength, getDecoder, getThemeCSS, getTrackCreator, hg38ChromSizes, hg38Genome, inferFormatFromPath, inferIndexURL, inferTrackType, isBinaryFormat, isCoding, isExon, isHiccups, isIntron, isLikelyIndexed, isMainChromosome, isTranscript, isTranscriptPart, isUTR, isWholeGenomeView, knownFileExtensions, knownTrackTypes, lineWigTheme, mainChromosomeNames, mainThreadProvider, matchesSelector, modernRenderTheme, modernSequenceTheme, modernThemeCSS, modernWigTheme, numericDataMenuItems, packFeatures, parseChromSizes, parseColorString, parseFeatures, parseGFFAttributes, parseHeader, parseLocus, parseStrand, positionString, prettyPrintNumber, registerTrackCreator, registerTypeAlias, renderAnnotationTrack, renderDynSeqFeature, renderInteractionTrack, renderLabelAxis, renderQuantitativeAxis, renderROIOverlays, renderRulerTrack, renderSequenceTrack, renderWholeGenomeRuler, renderWigTrack, resolveAnnotationConfig, resolveInteractionConfig, resolveRulerConfig, resolveSequenceConfig, resolveTheme, resolveWigConfig, reverseComplementSequence, roiContextMenuItems, selectTracks, summarizeWigData, toIgvSession, toTrackSelector, translateSequence, translationDict, warmWigTheme };
|