@genome-spy/app 0.74.0 → 0.76.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/dist/AbortablePromiseCache-beUIcZcW.js +96 -0
- package/dist/agentApi-CzdacisO.js +25226 -0
- package/dist/agentApi.es.js +9460 -0
- package/dist/agentShared.es.js +4742 -0
- package/dist/{blosc-oa0DlI6G.js → blosc-BX4BJ8sR.js} +1 -1
- package/dist/componentStyles-CIXoKEp0.js +2182 -0
- package/dist/dialog.es.js +377 -0
- package/dist/{esm-n0auOe11.js → esm-BH0wx5y-.js} +1 -1
- package/dist/esm-BLfLaJtE.js +121 -0
- package/dist/{esm-D-WfYOx7.js → esm-BWsx1OJ2.js} +25 -25
- package/dist/{browser-Dvlo92rx.js → esm-BY4T8YoD.js} +38 -22
- package/dist/esm-CZvS2Ldm.js +155 -0
- package/dist/esm-CdIesJ1z.js +461 -0
- package/dist/{esm-DCCYNvaz.js → esm-Cr7pLUfG.js} +50 -50
- package/dist/esm-D-y0Ce1M.js +573 -0
- package/dist/esm-DHOMWRoL.js +1426 -0
- package/dist/{esm-Cmo4qEPr.js → esm-DJUb6vy0.js} +5 -5
- package/dist/esm-DPS6pYKF.js +1248 -0
- package/dist/esm-DRZ5LLNH.js +142 -0
- package/dist/esm-DjF6pKy5.js +369 -0
- package/dist/esm-PDPkTR1_.js +1015 -0
- package/dist/esm-s_SlArJ8.js +298 -0
- package/dist/index.es.js +7910 -28759
- package/dist/index.js +1135 -736
- package/dist/lit-ymUSmGBw.js +510 -0
- package/dist/{lz4-jZ0zyLBa.js → lz4-BSYl80V8.js} +1 -1
- package/dist/parquetRead-m8-8_SpH.js +1609 -0
- package/dist/schema.json +665 -97
- package/dist/style.css +1 -1
- package/dist/viewUtils-C5htqZCm.js +14147 -0
- package/dist/{zstd-C6ksIG9r.js → zstd-BAfRM3IH.js} +1 -1
- package/package.json +30 -5
- package/src/agentApi/index.d.ts +123 -0
- package/src/agentShared/index.d.ts +97 -0
- package/src/agentShared/types.d.ts +8 -0
- package/src/appTypes.d.ts +75 -0
- package/src/bookmark/databaseSchema.d.ts +33 -0
- package/src/charts/boxplotTypes.d.ts +15 -0
- package/src/charts/sampleAttributePlotTypes.d.ts +149 -0
- package/src/coreSpecAugmentation.d.ts +29 -0
- package/src/dialog/index.d.ts +5 -0
- package/src/embedTypes.d.ts +9 -0
- package/src/index.d.ts +16 -0
- package/src/sampleView/sampleViewTypes.d.ts +174 -0
- package/src/sampleView/state/payloadTypes.d.ts +400 -0
- package/src/sampleView/state/sampleState.d.ts +76 -0
- package/src/sampleView/types.d.ts +125 -0
- package/src/spec/appSpec.d.ts +54 -0
- package/src/spec/sampleView.d.ts +487 -0
- package/src/spec/view.d.ts +124 -0
- package/src/state/paramProvenanceTypes.d.ts +215 -0
- package/src/state/selectionExpansionTypes.d.ts +77 -0
- package/src/state.d.ts +97 -0
- package/src/types/lz-string.d.ts +24 -0
- package/src/types/vega-loader.d.ts +1 -0
- package/src/utils/colorScaleSummary.d.ts +15 -0
- package/src/utils/statistics/fieldSummary.d.ts +49 -0
- package/src/vite-env.d.ts +6 -0
- package/LICENSE +0 -21
- /package/dist/{AbortablePromiseCache-3gHJdF3E.js → AbortablePromiseCache-BDH1cqFl.js} +0 -0
- /package/dist/{chunk-INHXZS53-fPMmEwMt.js → chunk-INHXZS53-DwEV9sMh.js} +0 -0
- /package/dist/{esm-BygJiwh0.js → esm-BL9SNSnj.js} +0 -0
- /package/dist/{esm-B8-vSu-c.js → esm-BwW--bVV.js} +0 -0
- /package/dist/{esm-CGX-qz1d.js → esm-Bz_92nH0.js} +0 -0
- /package/dist/{esm-CuMSzCHy.js → esm-D2_c7lXY.js} +0 -0
- /package/dist/{parquetRead-CJe1UPsz.js → parquetRead-BuEN-6yG.js} +0 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { ViewAttributeSpecifier } from "./sampleViewTypes.js";
|
|
2
|
+
import { SampleHierarchy } from "./state/sampleState.js";
|
|
3
|
+
import { ChromosomalLocus } from "@genome-spy/core/spec/genome.js";
|
|
4
|
+
import { Scale } from "@genome-spy/core/spec/scale.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Stable identifier for an abstract attribute used by actions and agent
|
|
8
|
+
* context.
|
|
9
|
+
*
|
|
10
|
+
* `type` identifies the attribute source kind, and `specifier` contains the
|
|
11
|
+
* concrete lookup information for that source.
|
|
12
|
+
*
|
|
13
|
+
* Examples:
|
|
14
|
+
* - `{ type: "SAMPLE_ATTRIBUTE", specifier: "age" }`
|
|
15
|
+
*/
|
|
16
|
+
export type AttributeIdentifierType =
|
|
17
|
+
| "SAMPLE_ATTRIBUTE"
|
|
18
|
+
| "VALUE_AT_LOCUS"
|
|
19
|
+
| "SAMPLE_NAME"
|
|
20
|
+
| "VIEW_ATTRIBUTE";
|
|
21
|
+
|
|
22
|
+
export interface AttributeIdentifier {
|
|
23
|
+
type: AttributeIdentifierType;
|
|
24
|
+
specifier?: string | ViewAttributeSpecifier;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* One endpoint of an interval.
|
|
29
|
+
*/
|
|
30
|
+
export type IntervalPoint = number | ChromosomalLocus;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Interval expressed as two scalar or locus points.
|
|
34
|
+
*/
|
|
35
|
+
export type Interval = [IntervalPoint, IntervalPoint];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Aggregation operators supported by interval-based attribute access.
|
|
39
|
+
*/
|
|
40
|
+
export type AggregationOp =
|
|
41
|
+
| "itemCount"
|
|
42
|
+
| "min"
|
|
43
|
+
| "max"
|
|
44
|
+
| "weightedMean"
|
|
45
|
+
| "variance"
|
|
46
|
+
| "count";
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Aggregation configuration for interval-derived attribute access.
|
|
50
|
+
*/
|
|
51
|
+
export interface AggregationSpec {
|
|
52
|
+
op: AggregationOp;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Arguments passed to attribute value providers, including the current
|
|
57
|
+
* selection of sample ids and optional interval/aggregation context.
|
|
58
|
+
*/
|
|
59
|
+
export interface AttributeValuesScope {
|
|
60
|
+
sampleIds: string[];
|
|
61
|
+
sampleHierarchy: SampleHierarchy;
|
|
62
|
+
interval?: Interval;
|
|
63
|
+
aggregation?: AggregationSpec;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Context passed to attribute availability hooks.
|
|
68
|
+
*/
|
|
69
|
+
export interface AttributeEnsureContext {
|
|
70
|
+
signal?: AbortSignal;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface AttributeInfo {
|
|
74
|
+
/**
|
|
75
|
+
* A concise name of the attribute: TODO: Used for what?
|
|
76
|
+
* @deprecated Use attribute instead
|
|
77
|
+
*/
|
|
78
|
+
name: string;
|
|
79
|
+
|
|
80
|
+
attribute: AttributeIdentifier;
|
|
81
|
+
|
|
82
|
+
/** More detailed name with optional formatting */
|
|
83
|
+
title: string | import("lit").TemplateResult;
|
|
84
|
+
|
|
85
|
+
/** Formatted attribute name for context menus (e.g., with selective emphasis). */
|
|
86
|
+
emphasizedName: string | import("lit").TemplateResult;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Optional description of the attribute. Can be used in UI and agent
|
|
90
|
+
* context to explain the meaning of the attribute.
|
|
91
|
+
*/
|
|
92
|
+
description?: string;
|
|
93
|
+
|
|
94
|
+
/** Function that maps a sampleId to an attribute value */
|
|
95
|
+
accessor: (sampleId: string, sampleHierarchy: SampleHierarchy) => any;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Provides values for dialogs (e.g., histograms) with optional interval aggregation.
|
|
99
|
+
* Use `extractAttributeValues` for the default fallback implementation.
|
|
100
|
+
*/
|
|
101
|
+
valuesProvider: (scope: AttributeValuesScope) => any[];
|
|
102
|
+
|
|
103
|
+
/** e.g., "quantitative" */
|
|
104
|
+
type: string;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Optional hook for ensuring attribute availability before access.
|
|
108
|
+
* Used by async intent processing to resolve lazy data dependencies.
|
|
109
|
+
*/
|
|
110
|
+
ensureAvailability?: (context: AttributeEnsureContext) => Promise<void>;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Optional hook for awaiting post-dispatch readiness.
|
|
114
|
+
* Used by async intent processing to guarantee that state and data are ready.
|
|
115
|
+
*/
|
|
116
|
+
awaitProcessed?: (context: AttributeEnsureContext) => Promise<void>;
|
|
117
|
+
|
|
118
|
+
scale?: any;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Authored scale definition for the source encoding, when available.
|
|
122
|
+
* Unlike `scale`, this does not include runtime-inferred defaults.
|
|
123
|
+
*/
|
|
124
|
+
scaleSpec?: Scale;
|
|
125
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { RootConfig } from "@genome-spy/core/spec/root.js";
|
|
2
|
+
import { AppViewSpec } from "./view.js";
|
|
3
|
+
|
|
4
|
+
export interface RemoteBookmarkConfig {
|
|
5
|
+
/**
|
|
6
|
+
* URL to the remote bookmark file.
|
|
7
|
+
*/
|
|
8
|
+
url: string;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Should the user be shown a tour of the remote bookmarks when the visualization
|
|
12
|
+
* is launched? If the `initialBookmark` property is not defined, the tour starts
|
|
13
|
+
* from the first bookmark.
|
|
14
|
+
*
|
|
15
|
+
* __Default value:__ `false`
|
|
16
|
+
*/
|
|
17
|
+
tour?: boolean;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Name of the bookmark that should be loaded as the initial state. The bookmark
|
|
21
|
+
* description dialog is shown only if the `tour` property is set to `true`.
|
|
22
|
+
*/
|
|
23
|
+
initialBookmark?: string;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Name of the bookmark that should be loaded when the user ends the tour.
|
|
27
|
+
* If `null`, the dialog will be closed and the current state is retained.
|
|
28
|
+
* If undefined, the default state without any performed actions will be loaded.
|
|
29
|
+
*/
|
|
30
|
+
afterTourBookmark?: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface BookmarkConfig {
|
|
34
|
+
/**
|
|
35
|
+
* Configuration for loading bookmarks from a remote JSON file.
|
|
36
|
+
*/
|
|
37
|
+
remote?: RemoteBookmarkConfig;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
interface AppRootConfig {
|
|
41
|
+
/**
|
|
42
|
+
* A unique identifier that is used in storing state bookmarks to browser's
|
|
43
|
+
* IndexedDB. This is needed to make distinction between visualizations that
|
|
44
|
+
* are served from the same origin, i.e., the same host and port.
|
|
45
|
+
*/
|
|
46
|
+
specId?: string;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Bookmark configuration.
|
|
50
|
+
*/
|
|
51
|
+
bookmarks?: BookmarkConfig;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type AppRootSpec = AppViewSpec & RootConfig & AppRootConfig;
|
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
import { Data, InlineData, UrlData } from "@genome-spy/core/spec/data.js";
|
|
2
|
+
import { Align, FontStyle, FontWeight } from "@genome-spy/core/spec/font.js";
|
|
3
|
+
import { Scale } from "@genome-spy/core/spec/scale.js";
|
|
4
|
+
import { ViewSpecBase, ViewBackground } from "@genome-spy/core/spec/view.js";
|
|
5
|
+
import {
|
|
6
|
+
AppConfigurableVisibilitySpec,
|
|
7
|
+
AppLayerSpec,
|
|
8
|
+
AppNestedViewSpec,
|
|
9
|
+
AppUnitSpec,
|
|
10
|
+
} from "./view.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A view specification for a SampleView.
|
|
14
|
+
*/
|
|
15
|
+
export interface SampleSpec extends Omit<ViewSpecBase, "templates"> {
|
|
16
|
+
/**
|
|
17
|
+
* Is the SampleView visibility configurable from the GenomeSpy App toolbar.
|
|
18
|
+
*
|
|
19
|
+
* __Default value:__ `true`
|
|
20
|
+
*/
|
|
21
|
+
configurableVisibility?: AppConfigurableVisibilitySpec["configurableVisibility"];
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Sample identity and label configuration.
|
|
25
|
+
*
|
|
26
|
+
* If `identity` is omitted, sample identifiers are inferred from the data.
|
|
27
|
+
*/
|
|
28
|
+
samples: SampleDef;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Metadata sources and metadata matrix layout.
|
|
32
|
+
*/
|
|
33
|
+
metadata?: MetadataDef;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* An object defining the view background and outline. The background is
|
|
37
|
+
* repeated for each group.
|
|
38
|
+
*/
|
|
39
|
+
view?: ViewBackground;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The view specification to be repeated for each sample.
|
|
43
|
+
*/
|
|
44
|
+
spec: AppLayerSpec | AppUnitSpec;
|
|
45
|
+
|
|
46
|
+
// Templates inside a SampleSpec may only produce non-sample descendants.
|
|
47
|
+
// This keeps SampleView as a top-level/sibling concept instead of nestable.
|
|
48
|
+
templates?: Record<string, AppNestedViewSpec>;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Keep summary tracks visible while scrolling samples.
|
|
52
|
+
*
|
|
53
|
+
* __Default value:__ `true`
|
|
54
|
+
*/
|
|
55
|
+
stickySummaries?: boolean;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type SampleAttributeType = "nominal" | "ordinal" | "quantitative";
|
|
59
|
+
|
|
60
|
+
export type SampleAttributeSemanticType =
|
|
61
|
+
| "subjectId"
|
|
62
|
+
| "modelSystemId"
|
|
63
|
+
| "timeToEvent"
|
|
64
|
+
| "eventStatus"
|
|
65
|
+
| "category";
|
|
66
|
+
|
|
67
|
+
export interface SampleAttributeDef {
|
|
68
|
+
/**
|
|
69
|
+
* User-facing description of the metadata attribute.
|
|
70
|
+
*/
|
|
71
|
+
description?: string;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The attribute type. One of `"nominal"`, `"ordinal"`, or `"quantitative"`.
|
|
75
|
+
*/
|
|
76
|
+
type?: SampleAttributeType;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Domain-specific meaning of the metadata attribute.
|
|
80
|
+
*/
|
|
81
|
+
semanticType?: SampleAttributeSemanticType;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Color scale for metadata cells.
|
|
85
|
+
*/
|
|
86
|
+
scale?: Scale;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Scale for mapping quantitative values to metadata cell width.
|
|
90
|
+
*/
|
|
91
|
+
barScale?: Scale;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Width of the column in pixels.
|
|
95
|
+
*/
|
|
96
|
+
width?: number;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Whether the attribute is visible when the view opens.
|
|
100
|
+
*/
|
|
101
|
+
visible?: boolean;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Attribute label shown in the metadata header.
|
|
105
|
+
*
|
|
106
|
+
* If omitted, the attribute name is used.
|
|
107
|
+
*/
|
|
108
|
+
title?: string;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface SampleIdentityDef {
|
|
112
|
+
/**
|
|
113
|
+
* Data source that defines the sample set for the view.
|
|
114
|
+
*
|
|
115
|
+
* The source must contain one row per sample. Metadata imports are matched
|
|
116
|
+
* against these sample ids.
|
|
117
|
+
*/
|
|
118
|
+
data: Data;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Field that contains the canonical sample id.
|
|
122
|
+
*
|
|
123
|
+
* __Default value:__ `"sample"`
|
|
124
|
+
*/
|
|
125
|
+
idField?: string;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Field containing a user-visible sample label.
|
|
129
|
+
*
|
|
130
|
+
* If omitted, sample ids are used.
|
|
131
|
+
*/
|
|
132
|
+
displayNameField?: string;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface ColumnIdentifierField {
|
|
136
|
+
/**
|
|
137
|
+
* Name of the identifier field shown in UI and diagnostics.
|
|
138
|
+
*
|
|
139
|
+
* Example values: `"symbol"`, `"ensembl"`, `"entrez"`.
|
|
140
|
+
*/
|
|
141
|
+
name: string;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Backend path to identifier values aligned to matrix columns.
|
|
145
|
+
*
|
|
146
|
+
* The array length must equal the number of columns in the matrix.
|
|
147
|
+
*/
|
|
148
|
+
path: string;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Marks this identifier as the primary, canonical identifier.
|
|
152
|
+
*/
|
|
153
|
+
primary?: boolean;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Enables case-insensitive matching for this identifier field.
|
|
157
|
+
*/
|
|
158
|
+
caseInsensitive?: boolean;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Remove version suffixes during matching (for example, ENSG...`.12`).
|
|
162
|
+
*
|
|
163
|
+
* Useful for identifiers such as Ensembl ids that may contain version
|
|
164
|
+
* suffixes in some datasets but not in user queries.
|
|
165
|
+
*/
|
|
166
|
+
stripVersionSuffix?: boolean;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export interface DataBackendDef {
|
|
170
|
+
backend: "data";
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Eager tabular metadata source.
|
|
174
|
+
*
|
|
175
|
+
* Supports `UrlData` and `InlineData`.
|
|
176
|
+
*/
|
|
177
|
+
data: UrlData | InlineData;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Field name in the table that matches sample ids in the view.
|
|
181
|
+
*
|
|
182
|
+
* __Default value:__ `"sample"`
|
|
183
|
+
*/
|
|
184
|
+
sampleIdField?: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export interface ZarrMatrixLayoutDef {
|
|
188
|
+
/**
|
|
189
|
+
* Path to matrix values, arranged as sample rows by metadata columns.
|
|
190
|
+
*
|
|
191
|
+
* __Default value:__ `"X"`
|
|
192
|
+
*/
|
|
193
|
+
valuesPath?: string;
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Path to matrix row identifiers (sample ids).
|
|
197
|
+
*
|
|
198
|
+
* __Default value:__ `"obs_names"`
|
|
199
|
+
*/
|
|
200
|
+
rowIdsPath?: string;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Path to matrix column identifiers.
|
|
204
|
+
*
|
|
205
|
+
* __Default value:__ `"var_names"`
|
|
206
|
+
*/
|
|
207
|
+
columnIdsPath?: string;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export interface ZarrBackendDef {
|
|
211
|
+
backend: "zarr";
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* URL to the root of the Zarr store.
|
|
215
|
+
*/
|
|
216
|
+
url: string;
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Path overrides for the matrix layout.
|
|
220
|
+
*/
|
|
221
|
+
matrix?: ZarrMatrixLayoutDef;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Identifier arrays used to resolve user queries to columns.
|
|
225
|
+
*
|
|
226
|
+
* If omitted, only primary column ids are used for lookup.
|
|
227
|
+
*/
|
|
228
|
+
identifiers?: ColumnIdentifierField[];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export interface ParquetBackendDef {
|
|
232
|
+
backend: "parquet";
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* URL to a Parquet metadata source.
|
|
236
|
+
*
|
|
237
|
+
* Reserved for future use.
|
|
238
|
+
*/
|
|
239
|
+
url: string;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Field containing sample ids.
|
|
243
|
+
*/
|
|
244
|
+
sampleIdField: string;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export interface ArrowBackendDef {
|
|
248
|
+
backend: "arrow";
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* URL to an Arrow metadata source.
|
|
252
|
+
*
|
|
253
|
+
* Reserved for future use.
|
|
254
|
+
*/
|
|
255
|
+
url: string;
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Field containing sample ids.
|
|
259
|
+
*/
|
|
260
|
+
sampleIdField: string;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export type MetadataBackendDef =
|
|
264
|
+
| DataBackendDef
|
|
265
|
+
| ZarrBackendDef
|
|
266
|
+
| ParquetBackendDef
|
|
267
|
+
| ArrowBackendDef;
|
|
268
|
+
|
|
269
|
+
export interface MetadataSourceDef {
|
|
270
|
+
/**
|
|
271
|
+
* Stable source identifier.
|
|
272
|
+
*
|
|
273
|
+
* Should remain stable across spec revisions if bookmarks/provenance replay
|
|
274
|
+
* must keep working.
|
|
275
|
+
*/
|
|
276
|
+
id?: string;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* User-facing label shown in menus and dialogs.
|
|
280
|
+
*
|
|
281
|
+
* If omitted, UI falls back to `id`.
|
|
282
|
+
*/
|
|
283
|
+
name?: string;
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* User-facing description of what this source contains.
|
|
287
|
+
*
|
|
288
|
+
* Can be shown in UI and can help automated agents choose the correct
|
|
289
|
+
* source.
|
|
290
|
+
*/
|
|
291
|
+
description?: string;
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Startup loading behavior.
|
|
295
|
+
*
|
|
296
|
+
* - `false`: do not load at startup
|
|
297
|
+
* - `"*"`: load all columns allowed by this source
|
|
298
|
+
* - `string[]`: resolve and load only the listed columns
|
|
299
|
+
*
|
|
300
|
+
* If omitted, data backends load all columns and other backends do not
|
|
301
|
+
* load columns at startup.
|
|
302
|
+
*/
|
|
303
|
+
initialLoad?: false | "*" | string[];
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Column ids that must never be imported from this source.
|
|
307
|
+
*
|
|
308
|
+
* The data backend always excludes its `sampleIdField` automatically, so
|
|
309
|
+
* this property is only needed for other helper columns such as display
|
|
310
|
+
* labels.
|
|
311
|
+
*/
|
|
312
|
+
excludeColumns?: string[];
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Default destination group path for imported attributes.
|
|
316
|
+
*
|
|
317
|
+
* Imported column names are placed under this path, which effectively
|
|
318
|
+
* creates (or reuses) a metadata hierarchy node.
|
|
319
|
+
*
|
|
320
|
+
* This value is parsed as a path using `attributeGroupSeparator` when that
|
|
321
|
+
* separator is defined for the source. Without an explicit separator, the
|
|
322
|
+
* whole value is treated as one group name (including any `/` characters).
|
|
323
|
+
*
|
|
324
|
+
* Users can override this per import in the dialog.
|
|
325
|
+
*/
|
|
326
|
+
groupPath?: string;
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Separator used by source-side attribute names to express hierarchy.
|
|
330
|
+
*
|
|
331
|
+
* Example: if separator is `"."`, column `clinical.OS` is interpreted as
|
|
332
|
+
* group `clinical` and attribute `OS`.
|
|
333
|
+
*/
|
|
334
|
+
attributeGroupSeparator?: string;
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Attribute definitions keyed by attribute/column id (and optionally by group path).
|
|
338
|
+
*
|
|
339
|
+
* Special key `""` defines source-level defaults for all imported columns.
|
|
340
|
+
* Path splitting is applied only when `attributeGroupSeparator` is defined.
|
|
341
|
+
*/
|
|
342
|
+
attributes?: Record<string, SampleAttributeDef>;
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Source backend configuration.
|
|
346
|
+
*/
|
|
347
|
+
backend: MetadataBackendDef;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export interface MetadataSourceImportDef {
|
|
351
|
+
/**
|
|
352
|
+
* URL to a standalone metadata source definition file.
|
|
353
|
+
*
|
|
354
|
+
* Imports are shallow: imported files must define exactly one source and
|
|
355
|
+
* cannot contain nested `import` entries.
|
|
356
|
+
*/
|
|
357
|
+
url: string;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
export type MetadataSourceEntry =
|
|
361
|
+
| MetadataSourceDef
|
|
362
|
+
| { import: MetadataSourceImportDef };
|
|
363
|
+
|
|
364
|
+
export interface MetadataDef {
|
|
365
|
+
/**
|
|
366
|
+
* Metadata source definitions used for startup and on-demand imports.
|
|
367
|
+
*
|
|
368
|
+
* Source order is significant for startup loading: eager startup imports
|
|
369
|
+
* are applied in declaration order.
|
|
370
|
+
*/
|
|
371
|
+
sources?: MetadataSourceEntry[];
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Default width of metadata columns in pixels.
|
|
375
|
+
*
|
|
376
|
+
* __Default value:__ `10`
|
|
377
|
+
*/
|
|
378
|
+
attributeWidth?: number;
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Spacing between metadata columns in pixels.
|
|
382
|
+
*
|
|
383
|
+
* __Default value:__ `1`
|
|
384
|
+
*/
|
|
385
|
+
spacing?: number;
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Font typeface for metadata attribute labels.
|
|
389
|
+
*
|
|
390
|
+
* __Default value:__ `"Lato"`
|
|
391
|
+
*/
|
|
392
|
+
labelFont?: string;
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Font style for metadata attribute labels.
|
|
396
|
+
*
|
|
397
|
+
* __Default value:__ `"normal"`
|
|
398
|
+
*/
|
|
399
|
+
labelFontStyle?: FontStyle;
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Font weight for metadata attribute labels.
|
|
403
|
+
*
|
|
404
|
+
* __Default value:__ `"regular"`
|
|
405
|
+
*/
|
|
406
|
+
labelFontWeight?: FontWeight;
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Font size for metadata attribute labels in pixels.
|
|
410
|
+
*
|
|
411
|
+
* __Default value:__ `11`
|
|
412
|
+
*/
|
|
413
|
+
labelFontSize?: number;
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Angle of metadata attribute labels in degrees.
|
|
417
|
+
*
|
|
418
|
+
* __Default value:__ `-90`
|
|
419
|
+
*/
|
|
420
|
+
labelAngle?: number;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
export interface SampleDef {
|
|
424
|
+
/**
|
|
425
|
+
* Defines the sample ids and optional display names for the sample view.
|
|
426
|
+
*
|
|
427
|
+
* If omitted, sample ids are inferred from the `sample` channel in the view
|
|
428
|
+
* data.
|
|
429
|
+
*/
|
|
430
|
+
identity?: SampleIdentityDef;
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Title shown above sample labels.
|
|
434
|
+
* If omitted, the title defaults to `"Sample"`.
|
|
435
|
+
* Set to `null` to hide the title.
|
|
436
|
+
*/
|
|
437
|
+
labelTitle?: string | null;
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Width reserved for sample labels in pixels.
|
|
441
|
+
*
|
|
442
|
+
* If omitted, the width is inferred from the sample labels.
|
|
443
|
+
*/
|
|
444
|
+
labelLength?: number;
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* The font typeface. GenomeSpy uses [SDF](https://github.com/Chlumsky/msdfgen)
|
|
448
|
+
* versions of [Google Fonts](https://fonts.google.com/). Check their
|
|
449
|
+
* availability at the [A-Frame
|
|
450
|
+
* Fonts](https://github.com/etiennepinchon/aframe-fonts/tree/master/fonts)
|
|
451
|
+
* repository. System fonts are **not** supported.
|
|
452
|
+
*
|
|
453
|
+
* **Default value:** `"Lato"`
|
|
454
|
+
*/
|
|
455
|
+
labelFont?: string;
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* The font style. Valid values: `"normal"` and `"italic"`.
|
|
459
|
+
*
|
|
460
|
+
* **Default value:** `"normal"`
|
|
461
|
+
*/
|
|
462
|
+
labelFontStyle?: FontStyle;
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* The font weight. The following strings and numbers are valid values:
|
|
466
|
+
* `"thin"` (`100`), `"light"` (`300`), `"regular"` (`400`),
|
|
467
|
+
* `"normal"` (`400`), `"medium"` (`500`), `"bold"` (`700`),
|
|
468
|
+
* `"black"` (`900`)
|
|
469
|
+
*
|
|
470
|
+
* **Default value:** `"regular"`
|
|
471
|
+
*/
|
|
472
|
+
labelFontWeight?: FontWeight;
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* The font size in pixels.
|
|
476
|
+
*
|
|
477
|
+
* **Default value:** `11`
|
|
478
|
+
*/
|
|
479
|
+
labelFontSize?: number;
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* The horizontal alignment of the text. One of `"left"`, `"center"`, or `"right"`.
|
|
483
|
+
*
|
|
484
|
+
* **Default value:** `"left"`
|
|
485
|
+
*/
|
|
486
|
+
labelAlign?: Align;
|
|
487
|
+
}
|