@genome-spy/core 0.75.0 → 0.77.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 (114) hide show
  1. package/dist/bundle/browser-KWU9rWZT.js +123 -0
  2. package/dist/bundle/{esm-CgfVIRJ-.js → esm-0dYHNV_D.js} +2 -2
  3. package/dist/bundle/{esm-sIoQYZ21.js → esm-CRMf_I9V.js} +18 -18
  4. package/dist/bundle/esm-CT3ygiMq.js +1084 -0
  5. package/dist/bundle/{esm-DQiq2Zhd.js → esm-CscjKVDc.js} +44 -44
  6. package/dist/bundle/index.es.js +3408 -3185
  7. package/dist/bundle/index.js +106 -97
  8. package/dist/schema.json +352 -0
  9. package/dist/src/config/defaults/markDefaults.d.ts.map +1 -1
  10. package/dist/src/config/defaults/markDefaults.js +1 -12
  11. package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -1
  12. package/dist/src/config/defaults/scaleDefaults.js +1 -0
  13. package/dist/src/config/markConfig.d.ts.map +1 -1
  14. package/dist/src/config/markConfig.js +16 -8
  15. package/dist/src/config/themes.d.ts.map +1 -1
  16. package/dist/src/config/themes.js +15 -2
  17. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  18. package/dist/src/data/sources/lazy/bigWigSource.js +31 -11
  19. package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +2 -2
  20. package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts +2 -0
  21. package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts.map +1 -0
  22. package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
  23. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts +19 -3
  24. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  25. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +34 -13
  26. package/dist/src/data/sources/lazy/tabixSource.d.ts +7 -0
  27. package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
  28. package/dist/src/data/sources/lazy/tabixSource.js +18 -0
  29. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +37 -0
  30. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -0
  31. package/dist/src/data/sources/lazy/tabixTsvSource.js +163 -0
  32. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  33. package/dist/src/data/transforms/filterScoredLabels.js +3 -2
  34. package/dist/src/embedFactory.d.ts.map +1 -1
  35. package/dist/src/embedFactory.js +2 -0
  36. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -1
  37. package/dist/src/genomeSpy/viewContextFactory.js +1 -0
  38. package/dist/src/genomeSpyBase.d.ts +6 -0
  39. package/dist/src/genomeSpyBase.d.ts.map +1 -1
  40. package/dist/src/genomeSpyBase.js +15 -1
  41. package/dist/src/gl/webGLHelper.d.ts +5 -2
  42. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  43. package/dist/src/gl/webGLHelper.js +20 -3
  44. package/dist/src/index.d.ts +1 -0
  45. package/dist/src/index.d.ts.map +1 -1
  46. package/dist/src/index.js +1 -0
  47. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +1084 -2
  48. package/dist/src/marks/link.vertex.glsl.js +1 -1
  49. package/dist/src/marks/mark.d.ts.map +1 -1
  50. package/dist/src/marks/mark.js +0 -6
  51. package/dist/src/marks/rect.vertex.glsl.js +1 -1
  52. package/dist/src/minimal.d.ts +1 -0
  53. package/dist/src/minimal.d.ts.map +1 -1
  54. package/dist/src/minimal.js +6 -4
  55. package/dist/src/paramRuntime/embedParamApi.d.ts +26 -0
  56. package/dist/src/paramRuntime/embedParamApi.d.ts.map +1 -0
  57. package/dist/src/paramRuntime/embedParamApi.js +133 -0
  58. package/dist/src/scale/scale.js +10 -2
  59. package/dist/src/scales/domainPlanner.js +1 -1
  60. package/dist/src/scales/scaleInteractionController.d.ts +8 -4
  61. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -1
  62. package/dist/src/scales/scaleInteractionController.js +55 -7
  63. package/dist/src/scales/scaleResolution.d.ts +3 -3
  64. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  65. package/dist/src/scales/scaleResolution.js +14 -7
  66. package/dist/src/scales/selectionDomainUtils.d.ts +10 -0
  67. package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
  68. package/dist/src/scales/selectionDomainUtils.js +32 -3
  69. package/dist/src/selection/index.d.ts +8 -0
  70. package/dist/src/selection/index.d.ts.map +1 -0
  71. package/dist/src/selection/index.js +12 -0
  72. package/dist/src/spec/channel.d.ts +30 -0
  73. package/dist/src/spec/data.d.ts +40 -0
  74. package/dist/src/spec/parameter.d.ts +6 -0
  75. package/dist/src/spec/transform.d.ts +6 -0
  76. package/dist/src/styles/genome-spy.css +8 -0
  77. package/dist/src/styles/genome-spy.css.d.ts +1 -1
  78. package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
  79. package/dist/src/styles/genome-spy.css.js +8 -0
  80. package/dist/src/types/embedApi.d.ts +54 -0
  81. package/dist/src/types/scaleResolutionApi.d.ts +28 -1
  82. package/dist/src/types/viewContext.d.ts +11 -0
  83. package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
  84. package/dist/src/utils/ui/tooltip.js +22 -0
  85. package/dist/src/view/axisGridView.d.ts.map +1 -1
  86. package/dist/src/view/axisGridView.js +2 -1
  87. package/dist/src/view/axisView.d.ts.map +1 -1
  88. package/dist/src/view/axisView.js +2 -1
  89. package/dist/src/view/facetView.d.ts.map +1 -1
  90. package/dist/src/view/facetView.js +2 -1
  91. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  92. package/dist/src/view/gridView/gridChild.js +9 -1
  93. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  94. package/dist/src/view/gridView/gridView.js +198 -32
  95. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  96. package/dist/src/view/gridView/scrollbar.js +5 -1
  97. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  98. package/dist/src/view/gridView/selectionRect.js +5 -1
  99. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  100. package/dist/src/view/gridView/separatorView.js +5 -1
  101. package/dist/src/view/testUtils.d.ts +30 -3
  102. package/dist/src/view/testUtils.d.ts.map +1 -1
  103. package/dist/src/view/testUtils.js +51 -2
  104. package/dist/src/view/viewSelectors.d.ts +38 -10
  105. package/dist/src/view/viewSelectors.d.ts.map +1 -1
  106. package/dist/src/view/viewSelectors.js +67 -2
  107. package/dist/src/view/viewUtilTypes.d.ts +15 -0
  108. package/dist/src/view/viewUtils.d.ts.map +1 -1
  109. package/dist/src/view/viewUtils.js +10 -0
  110. package/package.json +3 -3
  111. package/dist/bundle/browser-BTgw5ieH.js +0 -126
  112. package/dist/bundle/esm-DtE8VqAv.js +0 -1015
  113. /package/dist/bundle/{esm-BDFRLEuD.js → esm-C49STiCR.js} +0 -0
  114. /package/dist/bundle/{esm-CGX-qz1d.js → esm-CuVa5T98.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"markDefaults.d.ts","sourceRoot":"","sources":["../../../../src/config/defaults/markDefaults.js"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,4BADW,OAAO,sBAAsB,EAAE,UAAU,CAKlD;AAEF,yDAAyD;AACzD,kCADW,OAAO,sBAAsB,EAAE,WAAW,CAkBnD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAYlD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAWlD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAUlD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAiClD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAmBlD"}
1
+ {"version":3,"file":"markDefaults.d.ts","sourceRoot":"","sources":["../../../../src/config/defaults/markDefaults.js"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,4BADW,OAAO,sBAAsB,EAAE,UAAU,CAMlD;AAEF,yDAAyD;AACzD,kCADW,OAAO,sBAAsB,EAAE,WAAW,CAgBnD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAUlD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CASlD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAQlD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CA+BlD;AAEF,wDAAwD;AACxD,iCADW,OAAO,sBAAsB,EAAE,UAAU,CAiBlD"}
@@ -3,15 +3,14 @@ export const MARK_DEFAULTS = {
3
3
  xOffset: 0,
4
4
  yOffset: 0,
5
5
  minBufferSize: 0,
6
+ opacity: 1.0,
6
7
  };
7
8
 
8
9
  /** @type {import("../../spec/config.js").PointConfig} */
9
10
  export const POINT_MARK_DEFAULTS = {
10
11
  x: 0.5,
11
12
  y: 0.5,
12
- color: "#4c78a8",
13
13
  filled: true,
14
- opacity: 1.0,
15
14
  size: 100.0,
16
15
  semanticScore: 0.0,
17
16
  shape: "circle",
@@ -30,8 +29,6 @@ export const RECT_MARK_DEFAULTS = {
30
29
  x2: undefined,
31
30
  y2: undefined,
32
31
  filled: true,
33
- color: "#4c78a8",
34
- opacity: 1.0,
35
32
  strokeWidth: 3,
36
33
  cornerRadius: 0.0,
37
34
  minWidth: 0.5,
@@ -44,8 +41,6 @@ export const RULE_MARK_DEFAULTS = {
44
41
  x2: undefined,
45
42
  y2: undefined,
46
43
  size: 1,
47
- color: "black",
48
- opacity: 1.0,
49
44
  minLength: 0.0,
50
45
  strokeDash: null,
51
46
  strokeDashOffset: 0,
@@ -54,8 +49,6 @@ export const RULE_MARK_DEFAULTS = {
54
49
 
55
50
  /** @type {import("../../spec/config.js").TickConfig} */
56
51
  export const TICK_MARK_DEFAULTS = {
57
- color: "black",
58
- opacity: 1.0,
59
52
  minLength: 0.0,
60
53
  strokeDash: null,
61
54
  strokeDashOffset: 0,
@@ -72,8 +65,6 @@ export const TEXT_MARK_DEFAULTS = {
72
65
  y2: undefined,
73
66
  text: "",
74
67
  size: 11.0,
75
- color: "black",
76
- opacity: 1.0,
77
68
  font: undefined,
78
69
  fontStyle: undefined,
79
70
  fontWeight: undefined,
@@ -106,8 +97,6 @@ export const LINK_MARK_DEFAULTS = {
106
97
  y: 0.0,
107
98
  y2: undefined,
108
99
  size: 1.0,
109
- color: "black",
110
- opacity: 1.0,
111
100
  segments: 101,
112
101
  arcHeightFactor: 1.0,
113
102
  minArcHeight: 1.5,
@@ -1 +1 @@
1
- {"version":3,"file":"scaleDefaults.d.ts","sourceRoot":"","sources":["../../../../src/config/defaults/scaleDefaults.js"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,6BADW,OAAO,sBAAsB,EAAE,WAAW,CAUnD;AAEF,yDAAyD;AACzD,6BADW,OAAO,sBAAsB,EAAE,WAAW,CAKnD"}
1
+ {"version":3,"file":"scaleDefaults.d.ts","sourceRoot":"","sources":["../../../../src/config/defaults/scaleDefaults.js"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,6BADW,OAAO,sBAAsB,EAAE,WAAW,CAUnD;AAEF,yDAAyD;AACzD,6BADW,OAAO,sBAAsB,EAAE,WAAW,CAMnD"}
@@ -15,4 +15,5 @@ export const RANGE_DEFAULTS = {
15
15
  shape: ["circle", "square", "triangle-up", "cross", "diamond"],
16
16
  size: [0, 400],
17
17
  angle: [0, 360],
18
+ heatmap: "yellowgreenblue",
18
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"markConfig.d.ts","sourceRoot":"","sources":["../../../src/config/markConfig.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,kDALW,OAAO,mBAAmB,EAAE,eAAe,EAAE,YAC7C,OAAO,iBAAiB,EAAE,QAAQ,SAClC,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAC3B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAmB/B"}
1
+ {"version":3,"file":"markConfig.d.ts","sourceRoot":"","sources":["../../../src/config/markConfig.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,kDALW,OAAO,mBAAmB,EAAE,eAAe,EAAE,YAC7C,OAAO,iBAAiB,EAAE,QAAQ,SAClC,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAC3B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA2B/B"}
@@ -12,16 +12,24 @@ export function getConfiguredMarkDefaults(scopes, markType, style) {
12
12
  // part of style resolution, and explicit mark.style entries augment it.
13
13
  const styles = [markType, ...normalizeStyle(style)];
14
14
 
15
- return mergeConfigScopes(
16
- scopes.flatMap((scope) => [
17
- /** @type {Record<string, any> | undefined} */ (scope.mark),
18
- /** @type {Record<string, any> | undefined} */ (scope[markType]),
19
- ...styles.map(
15
+ const genericBuckets = scopes.map(
16
+ (scope) => /** @type {Record<string, any> | undefined} */ (scope.mark)
17
+ );
18
+ const markTypeBuckets = scopes.map(
19
+ (scope) =>
20
+ /** @type {Record<string, any> | undefined} */ (scope[markType])
21
+ );
22
+
23
+ return mergeConfigScopes([
24
+ ...genericBuckets,
25
+ ...markTypeBuckets,
26
+ ...scopes.flatMap((scope) =>
27
+ styles.map(
20
28
  (styleName) =>
21
29
  /** @type {Record<string, any> | undefined} */ (
22
30
  scope.style?.[styleName]
23
31
  )
24
- ),
25
- ])
26
- );
32
+ )
33
+ ),
34
+ ]);
27
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../../src/config/themes.js"],"names":[],"mappings":"AA+QA;;;GAGG;AACH,gDAHW,OAAO,mBAAmB,EAAE,gBAAgB,GAC1C,MAAM,GAAG,SAAS,CAI9B;AAED;;;GAGG;AACH,iDAHW,OAAO,mBAAmB,EAAE,gBAAgB,GAAG,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,SAAS,GACvG,OAAO,mBAAmB,EAAE,eAAe,GAAG,SAAS,CAWnE;AA1BD;;GAEG;AACH,iCAFU,OAAO,mBAAmB,EAAE,gBAAgB,CAER"}
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../../src/config/themes.js"],"names":[],"mappings":"AA4RA;;;GAGG;AACH,gDAHW,OAAO,mBAAmB,EAAE,gBAAgB,GAC1C,MAAM,GAAG,SAAS,CAI9B;AAED;;;GAGG;AACH,iDAHW,OAAO,mBAAmB,EAAE,gBAAgB,GAAG,OAAO,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,SAAS,GACvG,OAAO,mBAAmB,EAAE,eAAe,GAAG,SAAS,CAWnE;AA1BD;;GAEG;AACH,iCAFU,OAAO,mBAAmB,EAAE,gBAAgB,CAER"}
@@ -39,7 +39,7 @@ const VEGALITE_THEME = {
39
39
  quantitativeColorScheme: "blues",
40
40
  },
41
41
  range: {
42
- heatmap: "viridis",
42
+ heatmap: "yellowgreenblue",
43
43
  ramp: "blues",
44
44
  diverging: "blueorange",
45
45
  },
@@ -59,7 +59,20 @@ const VEGALITE_THEME = {
59
59
  * @type {Record<import("../spec/config.js").BuiltInThemeName, import("../spec/config.js").GenomeSpyConfig & { background?: string}>}
60
60
  */
61
61
  const BUILT_IN_THEME_DEFINITIONS = {
62
- genomespy: {},
62
+ genomespy: {
63
+ mark: {
64
+ color: "#4c78a8",
65
+ },
66
+ rule: {
67
+ color: "black",
68
+ },
69
+ text: {
70
+ color: "black",
71
+ },
72
+ link: {
73
+ color: "black",
74
+ },
75
+ },
63
76
  vegalite: VEGALITE_THEME,
64
77
  quartz: mergeConfigScopes([
65
78
  VEGALITE_THEME,
@@ -1 +1 @@
1
- {"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigWigSource.js"],"names":[],"mappings":"AAQA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAoCjD;IArBG,mDAYC;IA+DL;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAqBlB;IAED;;;OAGG;IAEH,uBAJW,MAAM,EAAE,kBACR,MAAM,iBA2BhB;;CACJ;qCAhKoC,+BAA+B"}
1
+ {"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigWigSource.js"],"names":[],"mappings":"AAQA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAoCjD;IArBG,mDAYC;IA+DL;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAqBlB;IAED;;;OAGG;IAEH,uBAJW,MAAM,EAAE,kBACR,MAAM,iBAkChB;;CACJ;qCAvKoC,+BAA+B"}
@@ -142,23 +142,30 @@ export default class BigWigSource extends SingleAxisWindowedSource {
142
142
  async loadInterval(interval, reductionLevel) {
143
143
  const scale =
144
144
  1 / 2 / reductionLevel / withoutExprRef(this.params.pixelsPerBin);
145
- const featureChunks = await this.discretizeAndLoad(
146
- interval,
147
- (d, signal) =>
145
+ const featureChunks = await this.discretizeAndLoad(interval, {
146
+ load: (d, signal) =>
148
147
  this.#bbi
149
148
  .getFeatures(d.chrom, d.startPos, d.endPos, {
150
149
  scale,
151
150
  signal,
152
151
  })
153
- .then((features) =>
154
- features.map((f) => ({
155
- chrom: d.chrom,
156
- start: f.start,
157
- end: f.end,
158
- score: f.score,
159
- }))
152
+ .then((features) => mapFeatures(d.chrom, features)),
153
+ loadBatch: (intervals, signal) =>
154
+ this.#bbi
155
+ .getFeaturesMulti(
156
+ intervals.map((d) => ({
157
+ refName: d.chrom,
158
+ start: d.startPos,
159
+ end: d.endPos,
160
+ })),
161
+ { scale, signal }
160
162
  )
161
- );
163
+ .then((featureChunks) =>
164
+ featureChunks.map((features, i) =>
165
+ mapFeatures(intervals[i].chrom, features)
166
+ )
167
+ ),
168
+ });
162
169
 
163
170
  if (featureChunks) {
164
171
  this.publishData(featureChunks);
@@ -176,6 +183,19 @@ function isBigWigSource(params) {
176
183
 
177
184
  registerBuiltInLazyDataSource(isBigWigSource, BigWigSource);
178
185
 
186
+ /**
187
+ * @param {string} chrom
188
+ * @param {import("@gmod/bbi").Feature[]} features
189
+ */
190
+ function mapFeatures(chrom, features) {
191
+ return features.map((f) => ({
192
+ chrom,
193
+ start: f.start,
194
+ end: f.end,
195
+ score: f.score,
196
+ }));
197
+ }
198
+
179
199
  /**
180
200
  * @param {number[]} domain
181
201
  * @param {number} widthInPixels view width in pixels
@@ -1,8 +1,8 @@
1
- import "./axisTickSource.js";
2
- import "./axisGenomeSource.js";
1
+ import "./registerCoreLazySources.js";
3
2
  import "./indexedFastaSource.js";
4
3
  import "./bigWigSource.js";
5
4
  import "./bigBedSource.js";
6
5
  import "./bamSource.js";
6
+ import "./tabixTsvSource.js";
7
7
  import "./gff3Source.js";
8
8
  import "./vcfSource.js";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registerCoreLazySources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerCoreLazySources.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/registerCoreLazySources.js"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import "./axisTickSource.js";
2
+ import "./axisGenomeSource.js";
@@ -1,3 +1,13 @@
1
+ /**
2
+ * @template T
3
+ * @typedef {(discreteInterval: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval, signal: AbortSignal) => Promise<T>} DiscreteIntervalLoader
4
+ */
5
+ /**
6
+ * @template T
7
+ * @typedef {object} DiscreteIntervalLoaders
8
+ * @prop {DiscreteIntervalLoader<T>} load
9
+ * @prop {(discreteIntervals: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval[], signal: AbortSignal) => Promise<T[]>} [loadBatch]
10
+ */
1
11
  /**
2
12
  * Divides the domain into windows and loads the data for one or two consecutive windows
3
13
  * that cover the visible interval.
@@ -36,15 +46,16 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
36
46
  protected reloadLastDomain(): void;
37
47
  /**
38
48
  * Splits the interval into discrete chromosomal intervals – one for each chromosome –
39
- * and loads the data for each of them. Handles abort signals and errors.
49
+ * and loads the data using a batched loader when available. Handles abort signals
50
+ * and errors.
40
51
  *
41
52
  * @param {number[]} interval
42
- * @param {(discreteInteval: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval, signal: AbortSignal) => Promise<T>} loader
53
+ * @param {DiscreteIntervalLoader<T> | DiscreteIntervalLoaders<T>} loader
43
54
  * @return {Promise<T[]>}
44
55
  * @template T
45
56
  * @protected
46
57
  */
47
- protected discretizeAndLoad<T>(interval: number[], loader: (discreteInteval: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval, signal: AbortSignal) => Promise<T>): Promise<T[]>;
58
+ protected discretizeAndLoad<T>(interval: number[], loader: DiscreteIntervalLoader<T> | DiscreteIntervalLoaders<T>): Promise<T[]>;
48
59
  /**
49
60
  *
50
61
  * @param {number[]} interval Domain
@@ -55,5 +66,10 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
55
66
  protected callIfWindowsChanged(interval: number[], windowSize: number, callback: (arg0: number[]) => void): void;
56
67
  #private;
57
68
  }
69
+ export type DiscreteIntervalLoader<T> = (discreteInterval: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval, signal: AbortSignal) => Promise<T>;
70
+ export type DiscreteIntervalLoaders<T> = {
71
+ load: DiscreteIntervalLoader<T>;
72
+ loadBatch?: (discreteIntervals: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval[], signal: AbortSignal) => Promise<T[]>;
73
+ };
58
74
  import SingleAxisLazySource from "./singleAxisLazySource.js";
59
75
  //# sourceMappingURL=singleAxisWindowedSource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH;IAWI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,4BAA4B,EAAE,OAAO,CAAA;KAAC,CAGvE;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAqBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,QAqBlB;IAeD;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IArBD;;OAEG;IACH,mCAQC;IAyBD;;;;;;;;;OASG;IACH,4BAHa,CAAC,YAHH,MAAM,EAAE,UACR,CAAC,eAAe,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3H,OAAO,CAAC,CAAC,EAAE,CAAC,CAyCvB;IAED;;;;;;OAMG;IACH,yCALW,MAAM,EAAE,cACR,MAAM,YACN,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAE,IAAI,QAyBjC;;CACJ;iCA9LgC,2BAA2B"}
1
+ {"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AACH;IAWI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,4BAA4B,EAAE,OAAO,CAAA;KAAC,CAGvE;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAqBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,QAqBlB;IAeD;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IArBD;;OAEG;IACH,mCAQC;IAyBD;;;;;;;;;;OAUG;IACH,4BAHa,CAAC,YAHH,MAAM,EAAE,UACR,sBAAsB,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,GACrD,OAAO,CAAC,CAAC,EAAE,CAAC,CAiDvB;IAED;;;;;;OAMG;IACH,yCALW,MAAM,EAAE,cACR,MAAM,YACN,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAE,IAAI,QAyBjC;;CACJ;mCAhNY,CAAC,IACD,CAAC,gBAAgB,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;oCAI7H,CAAC;UAEJ,sBAAsB,CAAC,CAAC,CAAC;gBACzB,CAAC,iBAAiB,EAAE,OAAO,mCAAmC,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;;iCAX3G,2BAA2B"}
@@ -2,6 +2,18 @@ import { withoutExprRef } from "../../../paramRuntime/paramUtils.js";
2
2
  import { debounce } from "../../../utils/debounce.js";
3
3
  import SingleAxisLazySource from "./singleAxisLazySource.js";
4
4
 
5
+ /**
6
+ * @template T
7
+ * @typedef {(discreteInterval: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval, signal: AbortSignal) => Promise<T>} DiscreteIntervalLoader
8
+ */
9
+
10
+ /**
11
+ * @template T
12
+ * @typedef {object} DiscreteIntervalLoaders
13
+ * @prop {DiscreteIntervalLoader<T>} load
14
+ * @prop {(discreteIntervals: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval[], signal: AbortSignal) => Promise<T[]>} [loadBatch]
15
+ */
16
+
5
17
  /**
6
18
  * Divides the domain into windows and loads the data for one or two consecutive windows
7
19
  * that cover the visible interval.
@@ -113,10 +125,11 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
113
125
 
114
126
  /**
115
127
  * Splits the interval into discrete chromosomal intervals – one for each chromosome –
116
- * and loads the data for each of them. Handles abort signals and errors.
128
+ * and loads the data using a batched loader when available. Handles abort signals
129
+ * and errors.
117
130
  *
118
131
  * @param {number[]} interval
119
- * @param {(discreteInteval: import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval, signal: AbortSignal) => Promise<T>} loader
132
+ * @param {DiscreteIntervalLoader<T> | DiscreteIntervalLoaders<T>} loader
120
133
  * @return {Promise<T[]>}
121
134
  * @template T
122
135
  * @protected
@@ -130,21 +143,29 @@ export default class SingleAxisWindowedSource extends SingleAxisLazySource {
130
143
  this.#abortController = new AbortController();
131
144
  const signal = this.#abortController.signal;
132
145
 
133
- // GMOD libraries expect a single chromosome/sequence for each request.
134
- // Thus, we split the interval into discrete intervals representing
135
- // individual chromosomes and load the data for each of them separately
136
- // but in parallel.
146
+ // Lazy sources load data using chromosome coordinates. The continuous
147
+ // scale domain must be split before it can be passed to the source.
137
148
  const discreteChromosomeIntervals =
138
149
  this.genome.continuousToDiscreteChromosomeIntervals(interval);
139
150
 
151
+ const loaders = typeof loader == "function" ? { load: loader } : loader;
152
+
140
153
  try {
141
- const resultByChrom = await Promise.all(
142
- discreteChromosomeIntervals.map(
143
- async (
144
- /** @type {import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval} */ d
145
- ) => loader(d, signal)
146
- )
147
- );
154
+ const resultByChrom = loaders.loadBatch
155
+ ? await loaders.loadBatch(discreteChromosomeIntervals, signal)
156
+ : await Promise.all(
157
+ discreteChromosomeIntervals.map(
158
+ async (
159
+ /** @type {import("@genome-spy/core/genome/genome.js").DiscreteChromosomeInterval} */ d
160
+ ) => loaders.load(d, signal)
161
+ )
162
+ );
163
+
164
+ if (resultByChrom.length !== discreteChromosomeIntervals.length) {
165
+ throw new Error(
166
+ "Batched lazy loader must return one chunk per interval."
167
+ );
168
+ }
148
169
 
149
170
  if (!signal.aborted) {
150
171
  this.setLoadingStatus("complete");
@@ -14,6 +14,13 @@ export default class TabixSource<T> extends SingleAxisWindowedSource {
14
14
  * @protected
15
15
  */
16
16
  protected _handleHeader(header: string): Promise<void>;
17
+ /**
18
+ * Read a prefix of the Tabix file and decode it as text.
19
+ *
20
+ * @returns {Promise<string>}
21
+ * @protected
22
+ */
23
+ protected _readFilePrefix(): Promise<string>;
17
24
  /**
18
25
  * @abstract
19
26
  * @protected
@@ -1 +1 @@
1
- {"version":3,"file":"tabixSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/tabixSource.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,iCAHa,CAAC;IAOV;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,SAAS,QACzC,OAAO,uBAAuB,EAAE,OAAO,EAyCjD;IAzBG,kDAgBC;IA0FL;;;OAGG;IACH,gCAHW,MAAM,iBAKhB;IAED;;;;;OAKG;IACH,gCAHW,MAAM,EAAE,GACN,CAAC,EAAE,CAKf;;CACJ;qCAxJoC,+BAA+B"}
1
+ {"version":3,"file":"tabixSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/tabixSource.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,iCAHa,CAAC;IAOV;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,SAAS,QACzC,OAAO,uBAAuB,EAAE,OAAO,EAyCjD;IAzBG,kDAgBC;IA0FL;;;OAGG;IACH,gCAHW,MAAM,iBAKhB;IAED;;;;;OAKG;IACH,6BAHa,OAAO,CAAC,MAAM,CAAC,CAY3B;IAED;;;;;OAKG;IACH,gCAHW,MAAM,EAAE,GACN,CAAC,EAAE,CAKf;;CACJ;qCAzKoC,+BAA+B"}
@@ -1,3 +1,4 @@
1
+ import { unzip } from "@gmod/bgzf-filehandle";
1
2
  import {
2
3
  activateExprRefProps,
3
4
  withoutExprRef,
@@ -145,6 +146,23 @@ export default class TabixSource extends SingleAxisWindowedSource {
145
146
  //
146
147
  }
147
148
 
149
+ /**
150
+ * Read a prefix of the Tabix file and decode it as text.
151
+ *
152
+ * @returns {Promise<string>}
153
+ * @protected
154
+ */
155
+ async _readFilePrefix() {
156
+ const { maxBlockSize } = await this.#tbiIndex.getMetadata();
157
+ const tbiIndex = /** @type {any} */ (this.#tbiIndex);
158
+ const compressedPrefix = await tbiIndex.filehandle.read(
159
+ maxBlockSize,
160
+ 0
161
+ );
162
+ const bytes = await unzip(compressedPrefix);
163
+ return new TextDecoder("utf-8").decode(bytes);
164
+ }
165
+
148
166
  /**
149
167
  * @abstract
150
168
  * @protected
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Extract a TSV header from a tabix file header.
3
+ *
4
+ * Tabix headers commonly end with a commented column line such as
5
+ * `#chrom\tstart\tend\tvalue`.
6
+ *
7
+ * @param {string} header
8
+ * @returns {string[] | undefined}
9
+ */
10
+ export function extractTabixTsvColumns(header: string): string[] | undefined;
11
+ /**
12
+ * Extract a TSV header from the first line of a plain tabix file prefix.
13
+ *
14
+ * This is used when the file does not have a commented header line, but the
15
+ * first physical line still contains column names.
16
+ *
17
+ * @param {string} text
18
+ * @returns {string[] | undefined}
19
+ */
20
+ export function extractTabixTsvColumnsFromFirstLine(text: string): string[] | undefined;
21
+ /**
22
+ * Parse tabix TSV records into plain objects.
23
+ *
24
+ * @param {string[]} lines
25
+ * @param {string[]} columns
26
+ * @param {import("../../../spec/data.js").Parse | null | undefined} [parse]
27
+ */
28
+ export function parseTabixTsvLines(lines: string[], columns: string[], parse?: import("../../../spec/data.js").Parse | null | undefined): Record<string, any>[];
29
+ /**
30
+ * @extends {TabixSource<Record<string, any>>}
31
+ */
32
+ export default class TabixTsvSource extends TabixSource<Record<string, any>> {
33
+ constructor(params: import("../../../spec/data.js").TabixData, view: import("../../../view/view.js").default);
34
+ #private;
35
+ }
36
+ import TabixSource from "./tabixSource.js";
37
+ //# sourceMappingURL=tabixTsvSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabixTsvSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/tabixTsvSource.js"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,+CAHW,MAAM,GACJ,MAAM,EAAE,GAAG,SAAS,CAsBhC;AAED;;;;;;;;GAQG;AACH,0DAHW,MAAM,GACJ,MAAM,EAAE,GAAG,SAAS,CAkBhC;AAED;;;;;;GAMG;AACH,0CAJW,MAAM,EAAE,WACR,MAAM,EAAE,UACR,OAAO,uBAAuB,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,yBAgClE;AAED;;GAEG;AACH;;;CA8CC;wBApJuB,kBAAkB"}
@@ -0,0 +1,163 @@
1
+ import { read } from "vega-loader";
2
+ import { withoutExprRef } from "../../../paramRuntime/paramUtils.js";
3
+ import { toVegaLoaderFormat } from "../dataUtils.js";
4
+ import { registerBuiltInLazyDataSource } from "./lazyDataSourceRegistry.js";
5
+ import TabixSource from "./tabixSource.js";
6
+
7
+ /**
8
+ * Extract a TSV header from a tabix file header.
9
+ *
10
+ * Tabix headers commonly end with a commented column line such as
11
+ * `#chrom\tstart\tend\tvalue`.
12
+ *
13
+ * @param {string} header
14
+ * @returns {string[] | undefined}
15
+ */
16
+ export function extractTabixTsvColumns(header) {
17
+ const lines = header.split(/\r?\n/);
18
+
19
+ for (let i = lines.length - 1; i >= 0; i--) {
20
+ const line = lines[i].trimEnd().replace(/\r$/, "");
21
+
22
+ if (!line || line.startsWith("##")) {
23
+ continue;
24
+ }
25
+
26
+ if (!line.startsWith("#")) {
27
+ continue;
28
+ }
29
+
30
+ const columns = line.slice(1).split("\t");
31
+
32
+ if (columns.length > 1) {
33
+ return columns;
34
+ }
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Extract a TSV header from the first line of a plain tabix file prefix.
40
+ *
41
+ * This is used when the file does not have a commented header line, but the
42
+ * first physical line still contains column names.
43
+ *
44
+ * @param {string} text
45
+ * @returns {string[] | undefined}
46
+ */
47
+ export function extractTabixTsvColumnsFromFirstLine(text) {
48
+ const lines = text.split(/\r?\n/);
49
+
50
+ const firstLine = lines.find((line) => {
51
+ const trimmed = line.trimStart();
52
+ return trimmed !== "" && !trimmed.startsWith("#");
53
+ });
54
+
55
+ if (!firstLine) {
56
+ return;
57
+ }
58
+
59
+ const columns = firstLine.trimEnd().replace(/\r$/, "").split("\t");
60
+ if (columns.length > 1) {
61
+ return columns;
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Parse tabix TSV records into plain objects.
67
+ *
68
+ * @param {string[]} lines
69
+ * @param {string[]} columns
70
+ * @param {import("../../../spec/data.js").Parse | null | undefined} [parse]
71
+ */
72
+ export function parseTabixTsvLines(lines, columns, parse) {
73
+ if (lines.length == 0) {
74
+ return [];
75
+ }
76
+
77
+ /** @type {any} */
78
+ const format = {
79
+ type: "tsv",
80
+ columns,
81
+ parse: parse ?? "auto",
82
+ };
83
+
84
+ /** @type {Record<string, any>[]} */
85
+ const data = read(lines.join("\n"), toVegaLoaderFormat(format));
86
+
87
+ const chromField = columns[0];
88
+ /** @type {unknown} */
89
+ let prev = null;
90
+ let stringChrom = "";
91
+
92
+ for (const datum of data) {
93
+ const value = datum[chromField];
94
+ if (value != prev) {
95
+ prev = value;
96
+ stringChrom = String(value);
97
+ }
98
+ datum[chromField] = stringChrom;
99
+ }
100
+
101
+ return data;
102
+ }
103
+
104
+ /**
105
+ * @extends {TabixSource<Record<string, any>>}
106
+ */
107
+ export default class TabixTsvSource extends TabixSource {
108
+ /** @type {string[] | undefined} */
109
+ #columns;
110
+
111
+ get label() {
112
+ return "tabixSource";
113
+ }
114
+
115
+ /**
116
+ * @param {string} header
117
+ */
118
+ async _handleHeader(header) {
119
+ const params =
120
+ /** @type {import("../../../spec/data.js").TabixTsvData} */ (
121
+ this.params
122
+ );
123
+ const columns = withoutExprRef(params.columns);
124
+ this.#columns = columns ?? extractTabixTsvColumns(header);
125
+
126
+ if (!this.#columns?.length) {
127
+ this.#columns = extractTabixTsvColumnsFromFirstLine(
128
+ await this._readFilePrefix()
129
+ );
130
+ }
131
+
132
+ if (!this.#columns?.length) {
133
+ throw new Error(
134
+ "No columns available for Tabix TSV source. Provide data.lazy.columns or a tabix header line such as #chrom\\tstart\\tend, or a plain first row such as chrom\\tstart\\tend."
135
+ );
136
+ }
137
+ }
138
+
139
+ /**
140
+ * @param {string[]} lines
141
+ */
142
+ _parseFeatures(lines) {
143
+ const params =
144
+ /** @type {import("../../../spec/data.js").TabixTsvData} */ (
145
+ this.params
146
+ );
147
+ return parseTabixTsvLines(
148
+ lines,
149
+ this.#columns ?? [],
150
+ withoutExprRef(params.parse)
151
+ );
152
+ }
153
+ }
154
+
155
+ /**
156
+ * @param {import("../../../spec/data.js").LazyDataParams} params
157
+ * @returns {params is import("../../../spec/data.js").TabixTsvData}
158
+ */
159
+ function isTabixTsvSource(params) {
160
+ return params?.type == "tabix";
161
+ }
162
+
163
+ registerBuiltInLazyDataSource(isTabixTsvSource, TabixTsvSource);
@@ -1 +1 @@
1
- {"version":3,"file":"filterScoredLabels.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filterScoredLabels.js"],"names":[],"mappings":"AAOA;IAcI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,wBAAwB,QAC1D,OAAO,oBAAoB,EAAE,OAAO,EAkD9C;IA9DD;;;;OAIG;IACH,kDAEC;IAUG,mEAAoB;IAEpB,oBAAoB;IACpB,OADW,GAAG,EAAE,CACD;IAEf,mBAAoC;IAMpC,sDAA8C;IAC9C,oDAAgE;IAChE,wDAAuD;IACvD,sDAAmD;IACnD,mDAA6C;IAC7C,mDAA6C;IAC7C,gCAAgC;IAChC,cADW,CAAS,IAAG,EAAH,GAAG,KAAE,GAAG,CAGd;IACd,gBAAuC;IAEvC,uCAAuC;IACvC,iBADW,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CACH;IAEhC,8DAAuD;IAIvD,qBAAuE;IA8B3E,4BAsEC;IAKG,sBAAuB;CAU9B;sBAzKqB,gBAAgB;2BAFX,+BAA+B"}
1
+ {"version":3,"file":"filterScoredLabels.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filterScoredLabels.js"],"names":[],"mappings":"AAOA;IAcI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,wBAAwB,QAC1D,OAAO,oBAAoB,EAAE,OAAO,EAmD9C;IA/DD;;;;OAIG;IACH,kDAEC;IAUG,mEAAoB;IAEpB,oBAAoB;IACpB,OADW,GAAG,EAAE,CACD;IAEf,mBAAoC;IAMpC,sDAA8C;IAC9C,oDAAgE;IAChE,wDAAuD;IACvD,sDAAmD;IACnD,mDAA6C;IAC7C,mDAA6C;IAC7C,gCAAgC;IAChC,cADW,CAAS,IAAG,EAAH,GAAG,KAAE,GAAG,CAGd;IACd,gBAAuC;IAEvC,uCAAuC;IACvC,iBADW,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CACH;IAEhC,8DAAuD;IAIvD,qBAAuE;IA+B3E,4BAsEC;IAKG,sBAAuB;CAU9B;sBA1KqB,gBAAgB;2BAFX,+BAA+B"}
@@ -59,8 +59,9 @@ export default class FilterScoredLabelsTransform extends Transform {
59
59
  const callback = () => this._filterAndPropagate();
60
60
  this.schedule = () => view.context.animator.requestTransition(callback);
61
61
 
62
- // Propagate when the domain changes
63
- const domainListener = () => this.schedule();
62
+ // Propagate immediately when the domain changes so inertial zoom frames
63
+ // render with labels computed for the current scale domain.
64
+ const domainListener = () => this._filterAndPropagate();
64
65
  this.resolution.addEventListener("domain", domainListener);
65
66
  this.registerDisposer(() =>
66
67
  this.resolution.removeEventListener("domain", domainListener)
@@ -1 +1 @@
1
- {"version":3,"file":"embedFactory.d.ts","sourceRoot":"","sources":["../../src/embedFactory.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,uCAHW,KAAK,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,qBAAqB,EAAE,YAAY,KAAK,OAAO,gBAAgB,EAAE,OAAO,GAC7J,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,qBAAqB,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,qBAAqB,EAAE,WAAW,CAAC,CAmFpM;AAaD;;;;;GAKG;AACH,8BAFW,MAAM,gBAmBhB"}
1
+ {"version":3,"file":"embedFactory.d.ts","sourceRoot":"","sources":["../../src/embedFactory.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,uCAHW,KAAK,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,qBAAqB,EAAE,YAAY,KAAK,OAAO,gBAAgB,EAAE,OAAO,GAC7J,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,qBAAqB,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,qBAAqB,EAAE,WAAW,CAAC,CAqFpM;AAaD;;;;;GAKG;AACH,8BAFW,MAAM,gBAmBhB"}