@genome-spy/core 0.65.0 → 0.66.1

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 (232) hide show
  1. package/dist/bundle/browser-BRemItdO.js +138 -0
  2. package/dist/bundle/{index-CD7FLu9x.js → index-BatuyGAI.js} +23 -21
  3. package/dist/bundle/{index-C0llXMqm.js → index-ByuE8dvu.js} +140 -88
  4. package/dist/bundle/index-Cq3QFUxX.js +1781 -0
  5. package/dist/bundle/index-D28m8tSW.js +1607 -0
  6. package/dist/bundle/index-DbJ0oeYM.js +631 -0
  7. package/dist/bundle/index.es.js +17587 -16593
  8. package/dist/bundle/index.js +214 -212
  9. package/dist/bundle/{inflate-DRgHi_KK.js → inflate-GtwLkvSP.js} +222 -224
  10. package/dist/bundle/unzip-NywezaRR.js +1492 -0
  11. package/dist/schema.json +13 -3
  12. package/dist/src/config/scaleDefaults.d.ts +8 -0
  13. package/dist/src/config/scaleDefaults.d.ts.map +1 -0
  14. package/dist/src/config/scaleDefaults.js +45 -0
  15. package/dist/src/data/flowInit.js +2 -2
  16. package/dist/src/data/sources/lazy/axisTickSource.js +1 -1
  17. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +1 -1
  18. package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
  19. package/dist/src/data/sources/lazy/singleAxisLazySource.js +10 -3
  20. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  21. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +5 -1
  22. package/dist/src/data/transforms/filterScoredLabels.d.ts +1 -1
  23. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
  24. package/dist/src/data/transforms/filterScoredLabels.js +1 -1
  25. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -1
  26. package/dist/src/data/transforms/linearizeGenomicCoordinate.js +2 -1
  27. package/dist/src/encoder/encoder.d.ts +1 -1
  28. package/dist/src/encoder/encoder.d.ts.map +1 -1
  29. package/dist/src/encoder/encoder.js +1 -1
  30. package/dist/src/genome/scaleLocus.d.ts +39 -0
  31. package/dist/src/genome/scaleLocus.d.ts.map +1 -1
  32. package/dist/src/genome/scaleLocus.js +76 -0
  33. package/dist/src/genomeSpy/canvasExport.d.ts +19 -0
  34. package/dist/src/genomeSpy/canvasExport.d.ts.map +1 -0
  35. package/dist/src/genomeSpy/canvasExport.js +66 -0
  36. package/dist/src/genomeSpy/containerUi.d.ts +17 -0
  37. package/dist/src/genomeSpy/containerUi.d.ts.map +1 -0
  38. package/dist/src/genomeSpy/containerUi.js +78 -0
  39. package/dist/src/genomeSpy/eventListenerRegistry.d.ts +19 -0
  40. package/dist/src/genomeSpy/eventListenerRegistry.d.ts.map +1 -0
  41. package/dist/src/genomeSpy/eventListenerRegistry.js +38 -0
  42. package/dist/src/genomeSpy/inputBindingManager.d.ts +14 -0
  43. package/dist/src/genomeSpy/inputBindingManager.d.ts.map +1 -0
  44. package/dist/src/genomeSpy/inputBindingManager.js +63 -0
  45. package/dist/src/genomeSpy/interactionController.d.ts +40 -0
  46. package/dist/src/genomeSpy/interactionController.d.ts.map +1 -0
  47. package/dist/src/genomeSpy/interactionController.js +371 -0
  48. package/dist/src/genomeSpy/keyboardListenerManager.d.ts +10 -0
  49. package/dist/src/genomeSpy/keyboardListenerManager.d.ts.map +1 -0
  50. package/dist/src/genomeSpy/keyboardListenerManager.js +31 -0
  51. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts +15 -0
  52. package/dist/src/genomeSpy/loadingIndicatorManager.d.ts.map +1 -0
  53. package/dist/src/genomeSpy/loadingIndicatorManager.js +92 -0
  54. package/dist/src/genomeSpy/renderCoordinator.d.ts +22 -0
  55. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -0
  56. package/dist/src/genomeSpy/renderCoordinator.js +118 -0
  57. package/dist/src/genomeSpy/viewContextFactory.d.ts +18 -0
  58. package/dist/src/genomeSpy/viewContextFactory.d.ts.map +1 -0
  59. package/dist/src/genomeSpy/viewContextFactory.js +79 -0
  60. package/dist/src/genomeSpy/viewDataInit.d.ts +12 -0
  61. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -0
  62. package/dist/src/genomeSpy/viewDataInit.js +41 -0
  63. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts +14 -0
  64. package/dist/src/genomeSpy/viewHierarchyConfig.d.ts.map +1 -0
  65. package/dist/src/genomeSpy/viewHierarchyConfig.js +24 -0
  66. package/dist/src/genomeSpy/viewHighlight.d.ts +5 -0
  67. package/dist/src/genomeSpy/viewHighlight.d.ts.map +1 -0
  68. package/dist/src/genomeSpy/viewHighlight.js +30 -0
  69. package/dist/src/genomeSpy.d.ts +16 -71
  70. package/dist/src/genomeSpy.d.ts.map +1 -1
  71. package/dist/src/genomeSpy.js +179 -745
  72. package/dist/src/gl/glslScaleGenerator.d.ts +1 -1
  73. package/dist/src/gl/webGLHelper.d.ts +2 -2
  74. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  75. package/dist/src/gl/webGLHelper.js +4 -4
  76. package/dist/src/index.d.ts.map +1 -1
  77. package/dist/src/index.js +2 -12
  78. package/dist/src/marks/mark.d.ts.map +1 -1
  79. package/dist/src/marks/mark.js +4 -2
  80. package/dist/src/{view → scales}/axisResolution.d.ts +9 -16
  81. package/dist/src/scales/axisResolution.d.ts.map +1 -0
  82. package/dist/src/{view → scales}/axisResolution.js +29 -18
  83. package/dist/src/scales/axisResolution.test.d.ts.map +1 -0
  84. package/dist/src/scales/scaleDomainAggregator.d.ts +57 -0
  85. package/dist/src/scales/scaleDomainAggregator.d.ts.map +1 -0
  86. package/dist/src/scales/scaleDomainAggregator.js +162 -0
  87. package/dist/src/scales/scaleDomainAggregator.test.d.ts +2 -0
  88. package/dist/src/scales/scaleDomainAggregator.test.d.ts.map +1 -0
  89. package/dist/src/scales/scaleInstanceManager.d.ts +40 -0
  90. package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -0
  91. package/dist/src/scales/scaleInstanceManager.js +313 -0
  92. package/dist/src/scales/scaleInstanceManager.test.d.ts +2 -0
  93. package/dist/src/scales/scaleInstanceManager.test.d.ts.map +1 -0
  94. package/dist/src/scales/scaleInteractionController.d.ts +73 -0
  95. package/dist/src/scales/scaleInteractionController.d.ts.map +1 -0
  96. package/dist/src/scales/scaleInteractionController.js +336 -0
  97. package/dist/src/scales/scaleInteractionController.test.d.ts +2 -0
  98. package/dist/src/scales/scaleInteractionController.test.d.ts.map +1 -0
  99. package/dist/src/scales/scalePropsResolver.d.ts +23 -0
  100. package/dist/src/scales/scalePropsResolver.d.ts.map +1 -0
  101. package/dist/src/scales/scalePropsResolver.js +74 -0
  102. package/dist/src/{view → scales}/scaleResolution.d.ts +52 -35
  103. package/dist/src/scales/scaleResolution.d.ts.map +1 -0
  104. package/dist/src/scales/scaleResolution.js +658 -0
  105. package/dist/src/scales/scaleResolution.test.d.ts.map +1 -0
  106. package/dist/src/scales/scaleResolutionConstants.d.ts +6 -0
  107. package/dist/src/scales/scaleResolutionConstants.d.ts.map +1 -0
  108. package/dist/src/scales/scaleResolutionConstants.js +5 -0
  109. package/dist/src/scales/scaleRules.d.ts +16 -0
  110. package/dist/src/scales/scaleRules.d.ts.map +1 -0
  111. package/dist/src/scales/scaleRules.js +103 -0
  112. package/dist/src/scales/scaleRules.test.d.ts +2 -0
  113. package/dist/src/scales/scaleRules.test.d.ts.map +1 -0
  114. package/dist/src/spec/channel.d.ts +13 -18
  115. package/dist/src/spec/scale.d.ts +6 -0
  116. package/dist/src/types/embedApi.d.ts +5 -0
  117. package/dist/src/types/scaleResolutionApi.d.ts +1 -1
  118. package/dist/src/view/concatView.d.ts +18 -0
  119. package/dist/src/view/concatView.d.ts.map +1 -1
  120. package/dist/src/view/concatView.js +73 -0
  121. package/dist/src/view/concatView.test.d.ts +2 -0
  122. package/dist/src/view/concatView.test.d.ts.map +1 -0
  123. package/dist/src/view/containerMutationHelper.d.ts +74 -0
  124. package/dist/src/view/containerMutationHelper.d.ts.map +1 -0
  125. package/dist/src/view/containerMutationHelper.js +114 -0
  126. package/dist/src/view/containerView.d.ts +0 -7
  127. package/dist/src/view/containerView.d.ts.map +1 -1
  128. package/dist/src/view/containerView.js +0 -10
  129. package/dist/src/view/facetView.d.ts.map +1 -1
  130. package/dist/src/view/facetView.js +0 -15
  131. package/dist/src/view/gridView/gridChild.d.ts +11 -0
  132. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  133. package/dist/src/view/gridView/gridChild.js +32 -6
  134. package/dist/src/view/gridView/gridView.d.ts +39 -1
  135. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  136. package/dist/src/view/gridView/gridView.js +106 -48
  137. package/dist/src/view/gridView/gridView.test.d.ts +2 -0
  138. package/dist/src/view/gridView/gridView.test.d.ts.map +1 -0
  139. package/dist/src/view/gridView/scrollbar.d.ts +39 -8
  140. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  141. package/dist/src/view/gridView/scrollbar.js +184 -69
  142. package/dist/src/view/layerView.d.ts +14 -0
  143. package/dist/src/view/layerView.d.ts.map +1 -1
  144. package/dist/src/view/layerView.js +66 -0
  145. package/dist/src/view/layerView.test.d.ts +2 -0
  146. package/dist/src/view/layerView.test.d.ts.map +1 -0
  147. package/dist/src/view/testUtils.d.ts.map +1 -1
  148. package/dist/src/view/testUtils.js +2 -1
  149. package/dist/src/view/unitView.d.ts.map +1 -1
  150. package/dist/src/view/unitView.js +24 -34
  151. package/dist/src/view/view.d.ts +6 -6
  152. package/dist/src/view/view.d.ts.map +1 -1
  153. package/dist/src/view/view.js +4 -4
  154. package/package.json +2 -2
  155. package/dist/bundle/browser-txUcLy2H.js +0 -123
  156. package/dist/bundle/index-BQpbYrv4.js +0 -1712
  157. package/dist/bundle/index-BhtHKLUo.js +0 -73
  158. package/dist/bundle/index-CCe8rnZz.js +0 -716
  159. package/dist/bundle/index-DhcU-Gk-.js +0 -1487
  160. package/dist/src/data/collector.test.js +0 -138
  161. package/dist/src/data/dataFlow.test.js +0 -38
  162. package/dist/src/data/flow.test.js +0 -81
  163. package/dist/src/data/flowInit.test.js +0 -413
  164. package/dist/src/data/flowNode.test.js +0 -50
  165. package/dist/src/data/flowOptimizer.test.js +0 -209
  166. package/dist/src/data/formats/fasta.test.js +0 -27
  167. package/dist/src/data/sources/inlineSource.test.js +0 -63
  168. package/dist/src/data/sources/sequenceSource.test.js +0 -81
  169. package/dist/src/data/transforms/aggregate.test.js +0 -134
  170. package/dist/src/data/transforms/clone.test.js +0 -11
  171. package/dist/src/data/transforms/coverage.test.js +0 -238
  172. package/dist/src/data/transforms/filter.test.js +0 -20
  173. package/dist/src/data/transforms/flatten.test.js +0 -96
  174. package/dist/src/data/transforms/flattenDelimited.test.js +0 -90
  175. package/dist/src/data/transforms/flattenSequence.test.js +0 -34
  176. package/dist/src/data/transforms/formula.test.js +0 -25
  177. package/dist/src/data/transforms/identifier.test.js +0 -92
  178. package/dist/src/data/transforms/pileup.test.js +0 -70
  179. package/dist/src/data/transforms/project.test.js +0 -32
  180. package/dist/src/data/transforms/regexExtract.test.js +0 -70
  181. package/dist/src/data/transforms/regexFold.test.js +0 -201
  182. package/dist/src/data/transforms/sample.test.js +0 -38
  183. package/dist/src/data/transforms/stack.test.js +0 -91
  184. package/dist/src/encoder/accessor.test.js +0 -162
  185. package/dist/src/encoder/encoder.test.js +0 -105
  186. package/dist/src/genome/genome.test.js +0 -268
  187. package/dist/src/genome/genomes.test.js +0 -8
  188. package/dist/src/genome/scaleIndex.test.js +0 -78
  189. package/dist/src/genome/scaleLocus.test.js +0 -4
  190. package/dist/src/scale/scale.test.js +0 -326
  191. package/dist/src/scale/ticks.test.js +0 -46
  192. package/dist/src/selection/selection.test.js +0 -14
  193. package/dist/src/utils/addBaseUrl.test.js +0 -30
  194. package/dist/src/utils/binnedIndex.test.js +0 -201
  195. package/dist/src/utils/cloner.test.js +0 -35
  196. package/dist/src/utils/coalesce.test.js +0 -16
  197. package/dist/src/utils/concatIterables.test.js +0 -8
  198. package/dist/src/utils/domainArray.test.js +0 -130
  199. package/dist/src/utils/indexer.test.js +0 -49
  200. package/dist/src/utils/interactionEvent.test.js +0 -35
  201. package/dist/src/utils/iterateNestedMaps.test.js +0 -33
  202. package/dist/src/utils/kWayMerge.test.js +0 -30
  203. package/dist/src/utils/mergeObjects.test.js +0 -42
  204. package/dist/src/utils/numberExtractor.test.js +0 -6
  205. package/dist/src/utils/propertyCacher.test.js +0 -89
  206. package/dist/src/utils/propertyCoalescer.test.js +0 -25
  207. package/dist/src/utils/radixSort.test.js +0 -51
  208. package/dist/src/utils/reservationMap.test.js +0 -20
  209. package/dist/src/utils/ringBuffer.test.js +0 -39
  210. package/dist/src/utils/topK.test.js +0 -54
  211. package/dist/src/utils/trees.test.js +0 -135
  212. package/dist/src/utils/url.test.js +0 -28
  213. package/dist/src/utils/variableTools.test.js +0 -13
  214. package/dist/src/view/axisResolution.d.ts.map +0 -1
  215. package/dist/src/view/axisResolution.test.d.ts.map +0 -1
  216. package/dist/src/view/axisResolution.test.js +0 -206
  217. package/dist/src/view/flowBuilder.test.js +0 -125
  218. package/dist/src/view/gridView/selectionRect.test.js +0 -87
  219. package/dist/src/view/layout/flexLayout.test.js +0 -323
  220. package/dist/src/view/layout/grid.test.js +0 -71
  221. package/dist/src/view/layout/rectangle.test.js +0 -192
  222. package/dist/src/view/paramMediator.test.js +0 -282
  223. package/dist/src/view/scaleResolution.d.ts.map +0 -1
  224. package/dist/src/view/scaleResolution.js +0 -1059
  225. package/dist/src/view/scaleResolution.test.d.ts.map +0 -1
  226. package/dist/src/view/scaleResolution.test.js +0 -645
  227. package/dist/src/view/view.test.js +0 -245
  228. package/dist/src/view/viewDispose.test.js +0 -110
  229. package/dist/src/view/viewFactory.test.js +0 -25
  230. package/dist/src/view/viewUtils.test.js +0 -87
  231. /package/dist/src/{view → scales}/axisResolution.test.d.ts +0 -0
  232. /package/dist/src/{view → scales}/scaleResolution.test.d.ts +0 -0
@@ -0,0 +1,103 @@
1
+ import { isContinuous } from "vega-scale";
2
+
3
+ import {
4
+ isPositionalChannel,
5
+ isPrimaryPositionalChannel,
6
+ } from "../encoder/encoder.js";
7
+ import {
8
+ INDEX,
9
+ LOCUS,
10
+ NOMINAL,
11
+ ORDINAL,
12
+ QUANTITATIVE,
13
+ } from "./scaleResolutionConstants.js";
14
+
15
+ /**
16
+ * @typedef {import("../spec/channel.js").Channel} Channel
17
+ */
18
+
19
+ /**
20
+ * @param {Channel} channel
21
+ * @param {import("../spec/channel.js").Type} dataType
22
+ * @returns {import("../spec/scale.js").ScaleType}
23
+ */
24
+ export function getDefaultScaleType(channel, dataType) {
25
+ // TODO: Band scale, Bin-Quantitative
26
+
27
+ if (dataType == INDEX || dataType == LOCUS) {
28
+ if (isPrimaryPositionalChannel(channel)) {
29
+ return dataType;
30
+ } else {
31
+ // TODO: Also explicitly set scales should be validated
32
+ throw new Error(
33
+ channel +
34
+ " does not support " +
35
+ dataType +
36
+ " data type. Only positional channels do."
37
+ );
38
+ }
39
+ }
40
+
41
+ /**
42
+ * @type {Partial<Record<Channel, (import("../spec/scale.js").ScaleType | undefined)[]>>}
43
+ * Default types: nominal, ordinal, quantitative.
44
+ * undefined = incompatible, "null" = disabled (pass-thru)
45
+ */
46
+ const defaults = {
47
+ x: ["band", "band", "linear"],
48
+ y: ["band", "band", "linear"],
49
+ size: [undefined, "point", "linear"],
50
+ opacity: [undefined, "point", "linear"],
51
+ fillOpacity: [undefined, "point", "linear"],
52
+ strokeOpacity: [undefined, "point", "linear"],
53
+ color: ["ordinal", "ordinal", "linear"],
54
+ fill: ["ordinal", "ordinal", "linear"],
55
+ stroke: ["ordinal", "ordinal", "linear"],
56
+ strokeWidth: [undefined, undefined, "linear"],
57
+ shape: ["ordinal", "ordinal", undefined],
58
+ dx: [undefined, undefined, "null"],
59
+ dy: [undefined, undefined, "null"],
60
+ angle: [undefined, undefined, "linear"],
61
+ sample: ["null", undefined, undefined],
62
+ };
63
+
64
+ /** @type {Channel[]} */
65
+ const typelessChannels = ["sample"];
66
+
67
+ const type = typelessChannels.includes(channel)
68
+ ? "null"
69
+ : defaults[channel]
70
+ ? defaults[channel][
71
+ [NOMINAL, ORDINAL, QUANTITATIVE].indexOf(dataType)
72
+ ]
73
+ : dataType == QUANTITATIVE
74
+ ? "linear"
75
+ : "ordinal";
76
+
77
+ if (type === undefined) {
78
+ throw new Error(
79
+ 'Channel "' +
80
+ channel +
81
+ '" is not compatible with "' +
82
+ dataType +
83
+ '" data type. Use of a proper scale may be needed.'
84
+ );
85
+ }
86
+
87
+ return type;
88
+ }
89
+
90
+ /**
91
+ * @param {import("../spec/scale.js").Scale} props
92
+ * @param {Channel} channel
93
+ */
94
+ export function applyLockedProperties(props, channel) {
95
+ if (isPositionalChannel(channel) && props.type !== "ordinal") {
96
+ // Unit ranges are a temporary default until pixel ranges are adopted.
97
+ props.range = [0, 1];
98
+ }
99
+
100
+ if (channel == "opacity" && isContinuous(props.type)) {
101
+ props.clamp = true;
102
+ }
103
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scaleRules.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaleRules.test.d.ts","sourceRoot":"","sources":["../../../src/scales/scaleRules.test.js"],"names":[],"mappings":""}
@@ -166,19 +166,15 @@ export interface ValueDefBase<V extends Value = Scalar> {
166
166
  export type ValueDef<V extends Value = Scalar> = ValueDefBase<V> & TitleMixins;
167
167
 
168
168
  export interface DatumDef<V extends Scalar | ExprRef = Scalar | ExprRef>
169
- extends Partial<TypeMixins<Type>>,
170
- BandMixins,
171
- ScaleMixins,
172
- TitleMixins {
169
+ extends Partial<TypeMixins<Type>>, BandMixins, ScaleMixins, TitleMixins {
173
170
  /**
174
171
  * A constant value in data domain.
175
172
  */
176
173
  datum?: V;
177
174
  }
178
175
 
179
- export interface ExprDef<>extends Partial<TypeMixins<Type>>,
180
- BandMixins,
181
- TitleMixins {
176
+ export interface ExprDef
177
+ extends Partial<TypeMixins<Type>>, BandMixins, TitleMixins {
182
178
  /**
183
179
  * An expression. Properties of the data can be accessed through the `datum` object.
184
180
  */
@@ -200,17 +196,16 @@ export type MarkPropDatumDef<T extends Type> = LegendMixins &
200
196
  ScaleDatumDef &
201
197
  TypeMixins<T>;
202
198
 
203
- export interface LegendMixins {
204
- /**
205
- * An object defining properties of the legend.
206
- * If `null`, the legend for the encoding channel will be removed.
207
- *
208
- * __Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.
209
- *
210
- * __See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation.
211
- */
212
- // TODO: legend?: Legend<ExprRef | SignalRef> | null;
213
- }
199
+ /**
200
+ * An object defining properties of the legend.
201
+ * If `null`, the legend for the encoding channel will be removed.
202
+ *
203
+ * __Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.
204
+ *
205
+ * __See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation.
206
+ */
207
+ // TODO: legend?: Legend<ExprRef | SignalRef> | null;
208
+ export type LegendMixins = Record<string, never>;
214
209
 
215
210
  export type ConditionalTemplate =
216
211
  | FieldDef<any>
@@ -47,6 +47,12 @@ export interface Scale {
47
47
  */
48
48
  type?: ScaleType;
49
49
 
50
+ /**
51
+ * The genome assembly name for locus scales. If undefined, the default
52
+ * genome from the genome store is used.
53
+ */
54
+ assembly?: string;
55
+
50
56
  /**
51
57
  * Customized domain values.
52
58
  *
@@ -40,6 +40,11 @@ export interface EmbedOptions {
40
40
  * @genome-spy/app package.
41
41
  */
42
42
  powerPreference?: "default" | "high-performance" | "low-power";
43
+
44
+ /**
45
+ * Optional hook for handling launch errors. Return true to suppress default UI.
46
+ */
47
+ onError?: (error: unknown, container: HTMLElement) => boolean | void;
43
48
  }
44
49
 
45
50
  /**
@@ -1,5 +1,5 @@
1
1
  import { ComplexDomain, NumericDomain } from "../spec/scale.js";
2
- import ScaleResolution from "../view/scaleResolution.js";
2
+ import ScaleResolution from "../scales/scaleResolution.js";
3
3
 
4
4
  export type ScaleResolutionEventType = "domain" | "range";
5
5
  export interface ScaleResolutionEvent {
@@ -11,6 +11,24 @@ export default class ConcatView extends GridView {
11
11
  * @param {string} name
12
12
  */
13
13
  constructor(spec: import("../spec/view.js").AnyConcatSpec, context: import("../types/viewContext.js").default, layoutParent: import("./containerView.js").default, dataParent: import("./view.js").default, name: string);
14
+ /**
15
+ * Adds a child spec dynamically. Intended for post-initialization updates.
16
+ *
17
+ * Callers should prefer this over direct GridView insertion to ensure
18
+ * dataflow initialization, axis wiring, and layout reflow are handled.
19
+ *
20
+ * @param {import("../spec/view.js").ViewSpec} childSpec
21
+ * @param {number} [index]
22
+ * @returns {Promise<import("./view.js").default>}
23
+ */
24
+ addChildSpec(childSpec: import("../spec/view.js").ViewSpec, index?: number): Promise<import("./view.js").default>;
25
+ /**
26
+ * Removes a child by index. Intended for post-initialization updates.
27
+ *
28
+ * @param {number} index
29
+ */
30
+ removeChildAt(index: number): Promise<void>;
31
+ #private;
14
32
  }
15
33
  import GridView from "./gridView/gridView.js";
16
34
  //# sourceMappingURL=concatView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IACI;;;;;;;OAOG;IACH,kBANW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,EAiBhB;CAqDJ;qBAlFoB,wBAAwB"}
1
+ {"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IACI;;;;;;;OAOG;IACH,kBANW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,EAiBhB;IA6BD;;;;;;;;;OASG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,UAClC,MAAM,GACJ,OAAO,CAAC,OAAO,WAAW,EAAE,OAAO,CAAC,CAIhD;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;;CA2EJ;qBA3JoB,wBAAwB"}
@@ -1,5 +1,6 @@
1
1
  import { isConcatSpec, isHConcatSpec, isVConcatSpec } from "./viewFactory.js";
2
2
  import GridView from "./gridView/gridView.js";
3
+ import ContainerMutationHelper from "./containerMutationHelper.js";
3
4
 
4
5
  /**
5
6
  * Creates a vertically or horizontally concatenated layout for children.
@@ -57,6 +58,29 @@ export default class ConcatView extends GridView {
57
58
  await this.createAxes();
58
59
  }
59
60
 
61
+ /**
62
+ * Adds a child spec dynamically. Intended for post-initialization updates.
63
+ *
64
+ * Callers should prefer this over direct GridView insertion to ensure
65
+ * dataflow initialization, axis wiring, and layout reflow are handled.
66
+ *
67
+ * @param {import("../spec/view.js").ViewSpec} childSpec
68
+ * @param {number} [index]
69
+ * @returns {Promise<import("./view.js").default>}
70
+ */
71
+ async addChildSpec(childSpec, index) {
72
+ return this.#getMutationHelper().addChildSpec(childSpec, index);
73
+ }
74
+
75
+ /**
76
+ * Removes a child by index. Intended for post-initialization updates.
77
+ *
78
+ * @param {number} index
79
+ */
80
+ async removeChildAt(index) {
81
+ await this.#getMutationHelper().removeChildAt(index);
82
+ }
83
+
60
84
  /**
61
85
  * @param {import("../spec/channel.js").Channel} channel
62
86
  * @param {import("../spec/view.js").ResolutionTarget} resolutionType
@@ -81,4 +105,53 @@ export default class ConcatView extends GridView {
81
105
  return "independent";
82
106
  }
83
107
  }
108
+
109
+ /**
110
+ * @returns {{
111
+ * specs: (import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec)[],
112
+ * insertAt: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => void,
113
+ * removeAt: (index: number) => void
114
+ * }}
115
+ */
116
+ #getChildSpecs() {
117
+ const spec = this.spec;
118
+ let specs;
119
+
120
+ if (isConcatSpec(spec)) {
121
+ specs = spec.concat;
122
+ } else if (isVConcatSpec(spec)) {
123
+ specs = spec.vconcat;
124
+ } else {
125
+ specs = spec.hconcat;
126
+ }
127
+
128
+ return {
129
+ specs,
130
+ insertAt: (index, childSpec) => {
131
+ specs.splice(index, 0, childSpec);
132
+ },
133
+ removeAt: (index) => {
134
+ specs.splice(index, 1);
135
+ },
136
+ };
137
+ }
138
+
139
+ /**
140
+ * @returns {ContainerMutationHelper}
141
+ */
142
+ #getMutationHelper() {
143
+ return new ContainerMutationHelper(this, {
144
+ getChildSpecs: this.#getChildSpecs.bind(this),
145
+ insertView: (view, index) => this.insertChildViewAt(view, index),
146
+ removeView: (index) => super.removeChildAt(index),
147
+ prepareView: async (view, _index, gridChild) => {
148
+ await gridChild.createAxes();
149
+ await this.syncSharedAxes();
150
+ },
151
+ afterRemove: async () => {
152
+ await this.syncSharedAxes();
153
+ },
154
+ defaultName: (_index) => "grid" + this.childCount,
155
+ });
156
+ }
84
157
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=concatView.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concatView.test.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Shared helper for dynamic container mutations.
3
+ * Encapsulates the common lifecycle for adding/removing child views.
4
+ */
5
+ export default class ContainerMutationHelper {
6
+ /**
7
+ * @typedef {import("./view.js").default} View
8
+ * @typedef {import("../spec/view.js").ViewSpec} ViewSpec
9
+ * @typedef {import("../spec/view.js").ImportSpec} ImportSpec
10
+ *
11
+ * @typedef {{
12
+ * specs: (ViewSpec | ImportSpec)[],
13
+ * insertAt: (index: number, spec: ViewSpec | ImportSpec) => void,
14
+ * removeAt: (index: number) => void
15
+ * }} ChildSpecs
16
+ */
17
+ /**
18
+ * @typedef {{
19
+ * getChildSpecs: () => ChildSpecs,
20
+ * insertView: (view: View, index: number) => any,
21
+ * removeView: (index: number) => void,
22
+ * prepareView?: (view: View, index: number, insertionResult: any) => Promise<void>,
23
+ * afterRemove?: (index: number) => Promise<void>,
24
+ * defaultName?: (index: number, spec: ViewSpec | ImportSpec) => string,
25
+ * requestLayout?: boolean
26
+ * }} MutationOptions
27
+ */
28
+ /**
29
+ * @param {import("./containerView.js").default} container
30
+ * @param {MutationOptions} options
31
+ */
32
+ constructor(container: import("./containerView.js").default, options: {
33
+ getChildSpecs: () => {
34
+ specs: (import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec)[];
35
+ insertAt: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => void;
36
+ removeAt: (index: number) => void;
37
+ };
38
+ insertView: (view: import("./view.js").default, index: number) => any;
39
+ removeView: (index: number) => void;
40
+ prepareView?: (view: import("./view.js").default, index: number, insertionResult: any) => Promise<void>;
41
+ afterRemove?: (index: number) => Promise<void>;
42
+ defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
43
+ requestLayout?: boolean;
44
+ });
45
+ container: import("./containerView.js").default;
46
+ options: {
47
+ getChildSpecs: () => {
48
+ specs: (import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec)[];
49
+ insertAt: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => void;
50
+ removeAt: (index: number) => void;
51
+ };
52
+ insertView: (view: import("./view.js").default, index: number) => any;
53
+ removeView: (index: number) => void;
54
+ prepareView?: (view: import("./view.js").default, index: number, insertionResult: any) => Promise<void>;
55
+ afterRemove?: (index: number) => Promise<void>;
56
+ defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
57
+ requestLayout?: boolean;
58
+ };
59
+ /**
60
+ * Adds a child spec dynamically and initializes its subtree dataflow.
61
+ *
62
+ * @param {import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec} childSpec
63
+ * @param {number} [index]
64
+ * @returns {Promise<View>}
65
+ */
66
+ addChildSpec(childSpec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, index?: number): Promise<import("./view.js").default>;
67
+ /**
68
+ * Removes a child by index and updates the backing spec list.
69
+ *
70
+ * @param {number} index
71
+ */
72
+ removeChildAt(index: number): Promise<void>;
73
+ }
74
+ //# sourceMappingURL=containerMutationHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;OAW3B;IAFG,gDAA0B;IAC1B;uBAhBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,6BAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,6BAAM,CA0CzB;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAehB;CACJ"}
@@ -0,0 +1,114 @@
1
+ import {
2
+ initializeViewSubtree,
3
+ loadViewSubtreeData,
4
+ } from "../data/flowInit.js";
5
+ import { configureViewOpacity } from "../genomeSpy/viewHierarchyConfig.js";
6
+ import { finalizeSubtreeGraphics } from "./viewUtils.js";
7
+
8
+ /**
9
+ * Shared helper for dynamic container mutations.
10
+ * Encapsulates the common lifecycle for adding/removing child views.
11
+ */
12
+ export default class ContainerMutationHelper {
13
+ /**
14
+ * @typedef {import("./view.js").default} View
15
+ * @typedef {import("../spec/view.js").ViewSpec} ViewSpec
16
+ * @typedef {import("../spec/view.js").ImportSpec} ImportSpec
17
+ *
18
+ * @typedef {{
19
+ * specs: (ViewSpec | ImportSpec)[],
20
+ * insertAt: (index: number, spec: ViewSpec | ImportSpec) => void,
21
+ * removeAt: (index: number) => void
22
+ * }} ChildSpecs
23
+ */
24
+
25
+ /**
26
+ * @typedef {{
27
+ * getChildSpecs: () => ChildSpecs,
28
+ * insertView: (view: View, index: number) => any,
29
+ * removeView: (index: number) => void,
30
+ * prepareView?: (view: View, index: number, insertionResult: any) => Promise<void>,
31
+ * afterRemove?: (index: number) => Promise<void>,
32
+ * defaultName?: (index: number, spec: ViewSpec | ImportSpec) => string,
33
+ * requestLayout?: boolean
34
+ * }} MutationOptions
35
+ */
36
+
37
+ /**
38
+ * @param {import("./containerView.js").default} container
39
+ * @param {MutationOptions} options
40
+ */
41
+ constructor(container, options) {
42
+ this.container = container;
43
+ this.options = options;
44
+ }
45
+
46
+ /**
47
+ * Adds a child spec dynamically and initializes its subtree dataflow.
48
+ *
49
+ * @param {import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec} childSpec
50
+ * @param {number} [index]
51
+ * @returns {Promise<View>}
52
+ */
53
+ async addChildSpec(childSpec, index) {
54
+ const { specs, insertAt } = this.options.getChildSpecs();
55
+ const insertIndex = index ?? specs.length;
56
+ const name =
57
+ this.options.defaultName?.(insertIndex, childSpec) ??
58
+ "child" + specs.length;
59
+
60
+ const childView = await this.container.context.createOrImportView(
61
+ childSpec,
62
+ this.container,
63
+ this.container,
64
+ name
65
+ );
66
+
67
+ insertAt(insertIndex, childSpec);
68
+ const insertionResult = this.options.insertView(childView, insertIndex);
69
+
70
+ if (this.options.prepareView) {
71
+ await this.options.prepareView(
72
+ childView,
73
+ insertIndex,
74
+ insertionResult
75
+ );
76
+ }
77
+
78
+ configureViewOpacity(childView);
79
+
80
+ const { dataSources, graphicsPromises } = initializeViewSubtree(
81
+ childView,
82
+ this.container.context.dataFlow
83
+ );
84
+ await loadViewSubtreeData(childView, dataSources);
85
+ await finalizeSubtreeGraphics(graphicsPromises);
86
+
87
+ if (this.options.requestLayout !== false) {
88
+ this.container.invalidateSizeCache();
89
+ this.container.context.requestLayoutReflow();
90
+ }
91
+
92
+ return childView;
93
+ }
94
+
95
+ /**
96
+ * Removes a child by index and updates the backing spec list.
97
+ *
98
+ * @param {number} index
99
+ */
100
+ async removeChildAt(index) {
101
+ const { removeAt } = this.options.getChildSpecs();
102
+ this.options.removeView(index);
103
+ removeAt(index);
104
+
105
+ if (this.options.afterRemove) {
106
+ await this.options.afterRemove(index);
107
+ }
108
+
109
+ if (this.options.requestLayout !== false) {
110
+ this.container.invalidateSizeCache();
111
+ this.container.context.requestLayoutReflow();
112
+ }
113
+ }
114
+ }
@@ -14,13 +14,6 @@ export default class ContainerView extends View {
14
14
  constructor(spec: import("../spec/view.js").ContainerSpec, context: import("../types/viewContext.js").default, layoutParent: ContainerView, dataParent: import("./view.js").default, name: string, options?: import("./view.js").ViewOptions);
15
15
  spec: import("../spec/view.js").ContainerSpec;
16
16
  initializeChildren(): Promise<void>;
17
- /**
18
- * Replaces a child view with another one. Does not alter the old or new child.
19
- *
20
- * @param {import("./view.js").default} child
21
- * @param {import("./view.js").default} replacement
22
- */
23
- replaceChild(child: import("./view.js").default, replacement: import("./view.js").default): void;
24
17
  /**
25
18
  * @param {string[]} path An array of view names
26
19
  * @returns {View}
@@ -1 +1 @@
1
- {"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IACI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAMzC;IADG,8CAAgB;IAGpB,oCAEC;IASD;;;;;OAKG;IACH,oBAHW,OAAO,WAAW,EAAE,OAAO,eAC3B,OAAO,WAAW,EAAE,OAAO,QAIrC;IA+CD;;;OAGG;IACH,2BAHW,MAAM,EAAE,GACN,IAAI,CAYhB;IAED;;;OAGG;IACH,sBAFW,MAAM,QAQhB;IAED;;;OAGG;IACH,2BAFW,MAAM,QAchB;IA1GD;;OAEG;IACH,qBAFa,gBAAgB,CAAC,IAAI,CAAC,CAIlC;CA+GJ;iBA7I4C,WAAW"}
1
+ {"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IACI;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAMzC;IADG,8CAAgB;IAGpB,oCAEC;IAsDD;;;OAGG;IACH,2BAHW,MAAM,EAAE,GACN,IAAI,CAYhB;IAED;;;OAGG;IACH,sBAFW,MAAM,QAQhB;IAED;;;OAGG;IACH,2BAFW,MAAM,QAchB;IAhGD;;OAEG;IACH,qBAFa,gBAAgB,CAAC,IAAI,CAAC,CAIlC;CAqGJ;iBAnI4C,WAAW"}
@@ -30,16 +30,6 @@ export default class ContainerView extends View {
30
30
  // override
31
31
  }
32
32
 
33
- /**
34
- * Replaces a child view with another one. Does not alter the old or new child.
35
- *
36
- * @param {import("./view.js").default} child
37
- * @param {import("./view.js").default} replacement
38
- */
39
- replaceChild(child, replacement) {
40
- throw new Error("Not implemented");
41
- }
42
-
43
33
  /**
44
34
  * Visits child views in depth-first pre-order. Terminates the search and returns
45
35
  * the value if the visitor returns a defined value. The `afterChildren` callback
@@ -1 +1 @@
1
- {"version":3,"file":"facetView.d.ts","sourceRoot":"","sources":["../../../src/view/facetView.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;GAcG;AACH;IACI;;;;;;;OAOG;IACH;;;;;;OAMG;IACH,kBALW,OAAO,gBAAgB,EAAE,SAAS,WAClC,OAAO,gBAAgB,EAAE,WAAW,UACpC,aAAa,QACb,MAAM,EA8BhB;IAzBG,UAAgB;IAEhB,WAEC;IAED;;;;OAIG;IACH,aAFU,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAYvC;IAED,oDAAoD;IACpD,kBADY,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CACa;IA4BjE,sBAIC;IAED;;;OAGG;IACH,qBAFW,KAAK,GAAG,QAAQ,OAwB1B;IAED,qBAyCC;IAED,qBASC;IA6BD,kDAgBC;IAOD;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,WAAW,EAAE,gBAAgB,QA2L9C;IA3KO,wBAA0B;CA4KrC;2BAhcY,QAAQ,GAAG,KAAK;;;;;;aA4CnB,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;;;0BA1Df,oBAAoB;qBACzB,eAAe"}
1
+ {"version":3,"file":"facetView.d.ts","sourceRoot":"","sources":["../../../src/view/facetView.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;GAcG;AACH;IACI;;;;;;;OAOG;IACH;;;;;;OAMG;IACH,kBALW,OAAO,gBAAgB,EAAE,SAAS,WAClC,OAAO,gBAAgB,EAAE,WAAW,UACpC,aAAa,QACb,MAAM,EA8BhB;IAzBG,UAAgB;IAEhB,WAEC;IAED;;;;OAIG;IACH,aAFU,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAYvC;IAED,oDAAoD;IACpD,kBADY,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CACa;IAajE,sBAIC;IAED;;;OAGG;IACH,qBAFW,KAAK,GAAG,QAAQ,OAwB1B;IAED,qBAyCC;IAED,qBASC;IA6BD,kDAgBC;IAOD;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,WAAW,EAAE,gBAAgB,QA2L9C;IA3KO,wBAA0B;CA4KrC;2BAjbY,QAAQ,GAAG,KAAK;;;;;;aA4CnB,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;;;0BA1Df,oBAAoB;qBACzB,eAAe"}
@@ -120,21 +120,6 @@ export default class FacetView extends ContainerView {
120
120
  }
121
121
  }
122
122
 
123
- /**
124
- * @param {import("./view.js").default} child
125
- * @param {import("./view.js").default} replacement
126
- */
127
- replaceChild(child, replacement) {
128
- if (child !== this.child) {
129
- throw new Error("Not my child!");
130
- }
131
-
132
- child.disposeSubtree();
133
- this.child = /** @type {UnitView | LayerView | DecoratorView} */ (
134
- replacement
135
- );
136
- }
137
-
138
123
  transformData() {
139
124
  super.transformData();
140
125
  // A hacky solution for updating facets. TODO: Something more robust.
@@ -9,6 +9,13 @@ export function createBackground(viewBackground: import("../../spec/view.js").Vi
9
9
  */
10
10
  export function createBackgroundStroke(viewBackground: import("../../spec/view.js").ViewBackground): import("../../spec/view.js").UnitSpec;
11
11
  export default class GridChild {
12
+ /**
13
+ * Users guide:
14
+ * - GridChild is owned by GridView and is not meant to be instantiated or
15
+ * managed directly by callers.
16
+ * - Use GridView/ConcatView APIs for insertion/removal so decorations and
17
+ * dataflow are kept in sync.
18
+ */
12
19
  /**
13
20
  * @param {import("../view.js").default} view
14
21
  * @param {import("../containerView.js").default} layoutParent
@@ -39,6 +46,10 @@ export default class GridChild {
39
46
  * Create view decorations, grid lines, axes, etc.
40
47
  */
41
48
  createAxes(): Promise<void>;
49
+ /**
50
+ * Disposes axis and gridline views so axes can be recreated safely.
51
+ */
52
+ disposeAxisViews(): void;
42
53
  getOverhang(): Padding;
43
54
  getOverhangAndPadding(): Padding;
44
55
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"AAkqBA;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA8BjD;AAED;;;GAGG;AACH,uDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA6CjD;AAhuBD;IACI;;;;OAIG;IACH,kBAJW,OAAO,YAAY,EAAE,OAAO,gBAC5B,OAAO,qBAAqB,EAAE,OAAO,UACrC,MAAM,EAyFhB;IAtFG,oDAAgC;IAChC,mCAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,sFAAsF;IACtF,MADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC/D;IAEd,+FAA+F;IAC/F,WADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9D;IAEnB,mFAAmF;IACnF,YADW,OAAO,CAAC,MAAM,CAAC,OAAO,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAC3D;IAEpB,4BAA4B;IAC5B,eADW,aAAa,CACM;IAE9B,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,wBAAwB;IACxB,QADW,SAAS,CACQ;IAoZhC,sEAiBC;IAED;;OAEG;IACH,4BAsKC;IAED,uBAqBC;IAED,iCAEC;;CACJ;qBAjpBoB,gBAAgB;qBANK,gBAAgB;yBADjC,oBAAoB;sBAQvB,gBAAgB;0BACZ,oBAAoB;sBAJxB,wBAAwB;oBAF1B,sBAAsB"}
1
+ {"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"AA4rBA;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA8BjD;AAED;;;GAGG;AACH,uDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA6CjD;AA1vBD;IACI;;;;;;OAMG;IAEH;;;;OAIG;IACH,kBAJW,OAAO,YAAY,EAAE,OAAO,gBAC5B,OAAO,qBAAqB,EAAE,OAAO,UACrC,MAAM,EAyFhB;IAtFG,oDAAgC;IAChC,mCAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,sFAAsF;IACtF,MADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC/D;IAEd,+FAA+F;IAC/F,WADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9D;IAEnB,mFAAmF;IACnF,YADW,OAAO,CAAC,MAAM,CAAC,OAAO,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAC3D;IAEpB,4BAA4B;IAC5B,eADW,aAAa,CACM;IAE9B,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,wBAAwB;IACxB,QADW,SAAS,CACQ;IAoZhC,sEAiBC;IAED;;OAEG;IACH,4BAwKC;IAED;;OAEG;IACH,yBAWC;IAED,uBAqBC;IAED,iCAEC;;CACJ;qBA3qBoB,gBAAgB;qBANK,gBAAgB;yBADjC,oBAAoB;sBAQvB,gBAAgB;0BACZ,oBAAoB;sBAJxB,wBAAwB;oBAF1B,sBAAsB"}