@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
@@ -79,6 +79,8 @@ export function createEmbed(GenomeSpy) {
79
79
  return genomeSpy.getNamedScaleResolutions().get(name);
80
80
  },
81
81
 
82
+ getParam: genomeSpy.getParam.bind(genomeSpy),
83
+
82
84
  awaitVisibleLazyData:
83
85
  genomeSpy.awaitVisibleLazyData.bind(genomeSpy),
84
86
  getRenderedBounds: genomeSpy.getRenderedBounds.bind(genomeSpy),
@@ -1 +1 @@
1
- {"version":3,"file":"viewContextFactory.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewContextFactory.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;GAUG;AACH,2CANW,OAAO,CAAC,WAAW,CAAC,GAAG;IAC7B,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,0BAA0B,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,yBAAyB,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAAA;IACrb,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,GACS,WAAW,CAwEvB;0BApFY,OAAO,yBAAyB,EAAE,OAAO"}
1
+ {"version":3,"file":"viewContextFactory.d.ts","sourceRoot":"","sources":["../../../src/genomeSpy/viewContextFactory.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;GAUG;AACH,2CANW,OAAO,CAAC,WAAW,CAAC,GAAG;IAC7B,6BAA6B,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,0BAA0B,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,iBAAiB,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,iBAAiB,EAAE,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,yBAAyB,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,iBAAiB,EAAE,OAAO,CAAC,CAAA;IACrb,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,GACS,WAAW,CAyEvB;0BArFY,OAAO,yBAAyB,EAAE,OAAO"}
@@ -60,6 +60,7 @@ export function createViewContext(options) {
60
60
  /** @type {(keyof ViewContext)[]} */
61
61
  const methodNames = [
62
62
  "requestLayoutReflow",
63
+ "renderImmediately",
63
64
  "updateTooltip",
64
65
  "getNamedDataFromProvider",
65
66
  "getCurrentHover",
@@ -53,6 +53,12 @@ export default class GenomeSpy {
53
53
  * @param {any[]} data
54
54
  */
55
55
  updateNamedData(name: string, data: any[]): void;
56
+ /**
57
+ * Returns a handle for a named parameter.
58
+ *
59
+ * @param {string} name
60
+ */
61
+ getParam(name: string): import("./types/embedApi.js").ParamApi<import("./types/embedApi.js").ParamValue>;
56
62
  /**
57
63
  * @param {string} type
58
64
  * @param {(event: any) => void} listener
@@ -1 +1 @@
1
- {"version":3,"file":"genomeSpyBase.d.ts","sourceRoot":"","sources":["../../src/genomeSpyBase.js"],"names":[],"mappings":"AA8CA;;;GAGG;AAEH;IAoBI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA0CpD;IAvCG,uBAA0B;IAC1B,oDAAsB;IAItB,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,CAAC,CAAS,IAAM,EAAN,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAEpD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,yBAFU,CAAC,IAAI,qEAAM,KAAK,OAAO,CAE8B;IAE/D,oFAAoF;IACpF,iBADW,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC,CAK9E;IAED,mBAAmB;IACnB,8EAAyB;IAIzB,YAAkC;IAatC;;;OAGG;IACH,oCAFW,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,QAIjC;IAED;;OAEG;IACH,+BAFW,MAAM,YAShB;IAED;;;;OAIG;IACH,sBAHW,MAAM,QACN,GAAG,EAAE,QAYf;IAED;;;OAGG;IACH,uBAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;OAGG;IACH,0BAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;;;OAKG;IACH,gBAHW,kBAAkB,YAClB,GAAG,QAMb;IAgEG,iDAAsB;IAQ1B;;OAEG;IACH,gBAqBC;IAyND;;;OAGG;IACH,UAFa,OAAO,CAAC,OAAO,CAAC,CAyC5B;IAED,2CAiBC;IAED;;;;;OAKG;IACH,8BAFW,WAAW,iBAerB;IAED;;;;;;;OAOG;IACH,cAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAKlF;IAED;;;;;;;;OAQG;IACH,4BANW,MAAM,kBACN,MAAM,qBACN,MAAM,eACN,MAAM,UAuBhB;IAED;;;MAEC;IAED;eACwB,MAAM,GAAG,SAAS;gBAAU,MAAM,GAAG,SAAS;MAcrE;IAED,sBAGC;IAED,kBAEC;IAED,iCAEC;IAED,oEAYC;IAED,uFAWC;;CACJ;;;;iCA5oBY,eAAe,GAAG,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB;4BAtBnC,uBAAuB;qBAP9C,qBAAqB;wBAElB,yBAAyB;qBAL5B,oBAAoB"}
1
+ {"version":3,"file":"genomeSpyBase.d.ts","sourceRoot":"","sources":["../../src/genomeSpyBase.js"],"names":[],"mappings":"AA+CA;;;GAGG;AAEH;IAoBI;;;;;OAKG;IAEH;;;;;OAKG;IACH,uBAJW,WAAW,qDAEX,OAAO,qBAAqB,EAAE,YAAY,EA0CpD;IAvCG,uBAA0B;IAC1B,oDAAsB;IAItB,sCAAsC;IACtC,wCAAgB;IAEhB,yBAAoC;IAEpC,4CAA4C;IAC5C,oBADW,CAAC,CAAS,IAAM,EAAN,MAAM,KAAE,MAAM,EAAE,CAAC,EAAE,CACZ;IAE5B,mBAAoD;IAEpD,0BAA0B;IAC1B,aADW,WAAW,CACM;IAE5B;;;;;OAKG;IACH,yBAFU,CAAC,IAAI,qEAAM,KAAK,OAAO,CAE8B;IAE/D,oFAAoF;IACpF,iBADW,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC,CAK9E;IAED,mBAAmB;IACnB,8EAAyB;IAIzB,YAAkC;IAatC;;;OAGG;IACH,oCAFW,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,EAAE,QAIjC;IAED;;OAEG;IACH,+BAFW,MAAM,YAShB;IAED;;;;OAIG;IACH,sBAHW,MAAM,QACN,GAAG,EAAE,QAYf;IAED;;;;OAIG;IACH,eAFW,MAAM,oFAIhB;IAED;;;OAGG;IACH,uBAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;OAGG;IACH,0BAHW,MAAM,YACN,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,QAI9B;IAED;;;;;OAKG;IACH,gBAHW,kBAAkB,YAClB,GAAG,QAMb;IAmEG,iDAAsB;IAQ1B;;OAEG;IACH,gBAqBC;IA0ND;;;OAGG;IACH,UAFa,OAAO,CAAC,OAAO,CAAC,CAyC5B;IAED,2CAiBC;IAED;;;;;OAKG;IACH,8BAFW,WAAW,iBAerB;IAED;;;;;;;OAOG;IACH,cAFa,CAAC,SAFH,CAAC,cACD,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,OAAO,KAAK,EAAE,cAAc,CAAC,QAKlF;IAED;;;;;;;;OAQG;IACH,4BANW,MAAM,kBACN,MAAM,qBACN,MAAM,eACN,MAAM,UAuBhB;IAED;;;MAEC;IAED;eACwB,MAAM,GAAG,SAAS;gBAAU,MAAM,GAAG,SAAS;MAcrE;IAED,sBAGC;IAED,kBAEC;IAED,iCAEC;IAED,oEAYC;IAED,uFAWC;;CACJ;;;;iCAzpBY,eAAe,GAAG,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB;4BAvBnC,uBAAuB;qBAP9C,qBAAqB;wBAElB,yBAAyB;qBAL5B,oBAAoB"}
@@ -31,6 +31,7 @@ import { createViewContext } from "./genomeSpy/viewContextFactory.js";
31
31
  import { prepareViewHierarchy } from "./genomeSpy/headlessBootstrap.js";
32
32
  import { exportCanvas } from "./genomeSpy/canvasExport.js";
33
33
  import { validateSelectorConstraints } from "./view/viewSelectors.js";
34
+ import { resolveEmbedParam } from "./paramRuntime/embedParamApi.js";
34
35
  import SingleAxisWindowedSource from "./data/sources/lazy/singleAxisWindowedSource.js";
35
36
  import { ensureAssembliesForView } from "./genome/assemblyPreflight.js";
36
37
  import { resolveRootGenomeConfig } from "./genome/rootGenomeConfig.js";
@@ -171,6 +172,15 @@ export default class GenomeSpy {
171
172
  this.animator.requestRender();
172
173
  }
173
174
 
175
+ /**
176
+ * Returns a handle for a named parameter.
177
+ *
178
+ * @param {string} name
179
+ */
180
+ getParam(name) {
181
+ return resolveEmbedParam(this.viewRoot, name);
182
+ }
183
+
174
184
  /**
175
185
  * @param {string} type
176
186
  * @param {(event: any) => void} listener
@@ -256,7 +266,10 @@ export default class GenomeSpy {
256
266
  this.viewRoot
257
267
  ? calculateCanvasSize(this.viewRoot)
258
268
  : { width: undefined, height: undefined },
259
- { powerPreference: this.options.powerPreference ?? "default" }
269
+ { powerPreference: this.options.powerPreference ?? "default" },
270
+ // Physical backing-store changes do not affect layout, but they
271
+ // clear the canvas and require repainting the existing render batch.
272
+ () => this.#renderCoordinator?.renderAll()
260
273
  );
261
274
 
262
275
  canvasWrapper.appendChild(loadingIndicatorsElement);
@@ -357,6 +370,7 @@ export default class GenomeSpy {
357
370
  this.#extraBroadcastListeners.add(type, listener),
358
371
  removeBroadcastListener: (type, listener) =>
359
372
  this.#extraBroadcastListeners.remove(type, listener),
373
+ renderImmediately: this.renderAll.bind(this),
360
374
  isViewConfiguredVisible: this.viewVisibilityPredicate,
361
375
  isViewSpec: (spec) => this.viewFactory.isViewSpec(spec),
362
376
  getBaseConfig: () => baseConfig,
@@ -40,11 +40,12 @@ export default class WebGLHelper {
40
40
  * A function that returns the content size. If a dimension is undefined,
41
41
  * the canvas fills the container, otherwise the canvas is adjusted to the content size.
42
42
  * @param {WebGLContextAttributes} [webglContextAttributes]
43
+ * @param {() => void} [onCanvasResize]
43
44
  */
44
45
  constructor(container: HTMLElement, sizeSource?: () => {
45
46
  width: number;
46
47
  height: number;
47
- }, webglContextAttributes?: WebGLContextAttributes);
48
+ }, webglContextAttributes?: WebGLContextAttributes, onCanvasResize?: () => void);
48
49
  /**
49
50
  * @type {CanvasSizeHelper}
50
51
  */
@@ -58,6 +59,8 @@ export default class WebGLHelper {
58
59
  physicalWidth: number;
59
60
  physicalHeight: number;
60
61
  } | undefined;
62
+ /** @type {() => void} */
63
+ _onCanvasResize: () => void;
61
64
  /** @type {Map<string, WebGLShader>} */
62
65
  _shaderCache: Map<string, WebGLShader>;
63
66
  /** @type {WeakMap<import("../types/encoder.js").VegaScale, WebGLTexture>} */
@@ -79,7 +82,7 @@ export default class WebGLHelper {
79
82
  * @param {string | string[]} glsl
80
83
  */
81
84
  compileShader(type: number, glsl: string | string[]): WebGLShader;
82
- adjustGl(): void;
85
+ adjustGl(): boolean;
83
86
  finalize(): void;
84
87
  /**
85
88
  * Returns the canvas size in true display pixels
@@ -1 +1 @@
1
- {"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AAybA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AA7gBD;IACI;;;;;;;OAOG;IACH,uBANW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,EAsGhC;IA5FG;;OAEG;IACH,mBAFU,gBAAgB,CAEQ;IAElC;;OAEG;IACH,oBAFU;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAEjF;IAEnC,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAaL,uBAGC;IAED;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,iBAgCC;IAED,iBAGC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAI3C;IAED;;;;OAIG;IACH,kCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,UAI3C;IAED;;;OAGG;IACH;;;MAEC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA2GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BAwClE;CACJ;6BAvX4B,uBAAuB"}
1
+ {"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AA0cA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AA9hBD;IACI;;;;;;;;OAQG;IACH,uBAPW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,mBACtB,MAAM,IAAI,EAoHpB;IArGG;;OAEG;IACH,mBAFU,gBAAgB,CAEQ;IAElC;;OAEG;IACH,oBAFU;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAEjF;IAEnC,yBAAyB;IACzB,iBADW,MAAM,IAAI,CAC8B;IAEnD,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAmBL,uBAGC;IAED;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,oBAkCC;IAED,iBAGC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAI3C;IAED;;;;OAIG;IACH,kCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,UAI3C;IAED;;;OAGG;IACH;;;MAEC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA2GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BAwClE;CACJ;6BAxY4B,uBAAuB"}
@@ -41,8 +41,14 @@ export default class WebGLHelper {
41
41
  * A function that returns the content size. If a dimension is undefined,
42
42
  * the canvas fills the container, otherwise the canvas is adjusted to the content size.
43
43
  * @param {WebGLContextAttributes} [webglContextAttributes]
44
+ * @param {() => void} [onCanvasResize]
44
45
  */
45
- constructor(container, sizeSource, webglContextAttributes = {}) {
46
+ constructor(
47
+ container,
48
+ sizeSource,
49
+ webglContextAttributes = {},
50
+ onCanvasResize
51
+ ) {
46
52
  const resolvedSizeSource =
47
53
  sizeSource ??
48
54
  (() => ({
@@ -60,6 +66,9 @@ export default class WebGLHelper {
60
66
  */
61
67
  this._appliedCanvasSize = undefined;
62
68
 
69
+ /** @type {() => void} */
70
+ this._onCanvasResize = onCanvasResize ?? (() => {});
71
+
63
72
  /** @type {Map<string, WebGLShader>} */
64
73
  this._shaderCache = new Map();
65
74
 
@@ -138,7 +147,13 @@ export default class WebGLHelper {
138
147
  container,
139
148
  canvas,
140
149
  resolvedSizeSource,
141
- () => this.adjustGl()
150
+ () => {
151
+ // Assigning canvas.width/height clears the WebGL drawing buffer.
152
+ // The observer may fire after layout/render, so repaint immediately.
153
+ if (this.adjustGl()) {
154
+ this._onCanvasResize();
155
+ }
156
+ }
142
157
  );
143
158
 
144
159
  this.adjustGl();
@@ -193,7 +208,7 @@ export default class WebGLHelper {
193
208
  this._appliedCanvasSize.physicalWidth == physicalSize.width &&
194
209
  this._appliedCanvasSize.physicalHeight == physicalSize.height
195
210
  ) {
196
- return;
211
+ return false;
197
212
  }
198
213
 
199
214
  this.canvas.style.width = `${logicalSize.width}px`;
@@ -214,6 +229,8 @@ export default class WebGLHelper {
214
229
  physicalWidth: physicalSize.width,
215
230
  physicalHeight: physicalSize.height,
216
231
  };
232
+
233
+ return true;
217
234
  }
218
235
 
219
236
  finalize() {
@@ -1,4 +1,5 @@
1
1
  export const embed: (el: HTMLElement | string, spec: import("./spec/root.js").RootSpec | string, options?: import("./types/embedApi.js").EmbedOptions) => Promise<import("./types/embedApi.js").EmbedResult>;
2
+ export { intervalSelection } from "./selection/index.js";
2
3
  import GenomeSpy from "./genomeSpy.js";
3
4
  import { html } from "lit";
4
5
  import icon from "./img/bowtie.svg";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":"AAWA,6MAA4C;sBAPtB,gBAAgB;qBAJjB,KAAK;iBAKT,kBAAkB;oBACf,6BAA6B;yBACX,mBAAmB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.js"],"names":[],"mappings":"AAWA,6MAA4C;;sBAPtB,gBAAgB;qBAJjB,KAAK;iBAKT,kBAAkB;oBACf,6BAA6B;yBACX,mBAAmB"}
package/dist/src/index.js CHANGED
@@ -12,3 +12,4 @@ export { GenomeSpy, html, icon, favIcon };
12
12
  export const embed = createEmbed(GenomeSpy);
13
13
 
14
14
  export { loadSpec };
15
+ export { intervalSelection } from "./selection/index.js";