@genome-spy/core 0.79.0 → 0.79.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.
@@ -1 +1 @@
1
- {"version":3,"file":"legendEntriesSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/legendEntriesSource.js"],"names":[],"mappings":"AAiMA;;;GAGG;AACH,gDAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,gBAAgB,wDAW7D;AAhMD;IAUI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,iBAAiB,QACjD,OAAO,uBAAuB,EAAE,OAAO,EAmCjD;IA9BG,0DAAoB;IACpB,sEAAsE;IA4C1E;;;;;OAKG;IACH,uBAFa,MAAM,IAAI,CAQtB;;CAuGJ;uBAxLsB,kBAAkB"}
1
+ {"version":3,"file":"legendEntriesSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/legendEntriesSource.js"],"names":[],"mappings":"AAkMA;;;GAGG;AACH,gDAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,gBAAgB,wDAW7D;AAjMD;IAUI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,iBAAiB,QACjD,OAAO,uBAAuB,EAAE,OAAO,EAmCjD;IA9BG,0DAAoB;IACpB,sEAAsE;IA4C1E;;;;;OAKG;IACH,uBAFa,MAAM,IAAI,CAQtB;;CAwGJ;uBAzLsB,kBAAkB"}
@@ -183,11 +183,12 @@ export default class LegendEntriesSource extends DataSource {
183
183
  ? validTicks(scale, this.params.values, count)
184
184
  : tickValues(scale, count);
185
185
 
186
- return values.map((value, index) => ({
187
- value,
188
- label: format(value),
189
- _legendIndex: index,
190
- }));
186
+ return values
187
+ .flatMap((value) => {
188
+ const label = format(value);
189
+ return label ? [{ value, label }] : [];
190
+ })
191
+ .map((entry, index) => ({ ...entry, _legendIndex: index }));
191
192
  }
192
193
  }
193
194
 
@@ -1 +1 @@
1
- {"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridView.js"],"names":[],"mappings":"AA4lDA;;GAEG;AACH,sHAUC;AAqFD;;;;;GAKG;AACH,4CAJW,OAAO,wBAAwB,EAAE,OAAO,UACxC,OAAO,oBAAoB,EAAE,UAAU,YACvC,QAAQ,aA+BlB;AArlDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAH2D,KAAK,SAAnD,OAAQ,oBAAoB,EAAE,aAAc;IAgDrD;;;;;;;;;OASG;IACH,kBARW,KAAK,WACL,OAAO,4BAA4B,EAAE,OAAO,gBAC5C,aAAa,yFAEb,MAAM,WACN,MAAM,YACN,OAAO,YAAY,EAAE,WAAW,EAyC1C;IAtBG,uBAA0B;IAwB9B;;OAEG;IACH,6FAEC;IAED;;;;;;OAMG;IACH,4FAFa,SAAS,CAIrB;IAED;;;;;;;OAOG;IACH,oGAHW,MAAM,GACJ,SAAS,CASrB;IAED;;;;;OAKG;IACH,iGAQC;IAED;;;;;OAKG;IACH,qBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAHW,MAAM,SACN,MAAM,QAKhB;IAeD;;OAEG;IACH,mBAFW,qEAAM,QAWhB;IAYD;;OAEG;IACH,sFAEC;IAED,yBAEC;IAED;;OAEG;IACH,sCAEC;IAED;;;;;;OAMG;IACH,yBAFW;QAAE,YAAY,CAAC,EAAE,SAAS,EAAE,CAAA;KAAE,iBAWxC;IAED;;;;OAIG;IACH,gCAqCC;IAED;;;;;;OAMG;IACH,mCAUC;;CA4kCJ;qBA9gDM,gBAAgB;sBALD,wBAAwB;0BAMpB,qBAAqB;sBAQzB,gBAAgB"}
1
+ {"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridView.js"],"names":[],"mappings":"AAgoDA;;GAEG;AACH,sHAUC;AAqFD;;;;;GAKG;AACH,4CAJW,OAAO,wBAAwB,EAAE,OAAO,UACxC,OAAO,oBAAoB,EAAE,UAAU,YACvC,QAAQ,aA+BlB;AArnDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAH2D,KAAK,SAAnD,OAAQ,oBAAoB,EAAE,aAAc;IAgDrD;;;;;;;;;OASG;IACH,kBARW,KAAK,WACL,OAAO,4BAA4B,EAAE,OAAO,gBAC5C,aAAa,yFAEb,MAAM,WACN,MAAM,YACN,OAAO,YAAY,EAAE,WAAW,EAyC1C;IAtBG,uBAA0B;IAwB9B;;OAEG;IACH,6FAEC;IAED;;;;;;OAMG;IACH,4FAFa,SAAS,CAIrB;IAED;;;;;;;OAOG;IACH,oGAHW,MAAM,GACJ,SAAS,CASrB;IAED;;;;;OAKG;IACH,iGAQC;IAED;;;;;OAKG;IACH,qBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAHW,MAAM,SACN,MAAM,QAKhB;IAeD;;OAEG;IACH,mBAFW,qEAAM,QAWhB;IAYD;;OAEG;IACH,sFAEC;IAED,yBAEC;IAED;;OAEG;IACH,sCAEC;IAED;;;;;;OAMG;IACH,yBAFW;QAAE,YAAY,CAAC,EAAE,SAAS,EAAE,CAAA;KAAE,iBAWxC;IAED;;;;OAIG;IACH,gCAqCC;IAED;;;;;;OAMG;IACH,mCAUC;;CA4mCJ;qBAljDM,gBAAgB;sBALD,wBAAwB;0BAMpB,qBAAqB;sBAQzB,gBAAgB"}
@@ -91,7 +91,11 @@ function getLegendParallelSizeConstraints(legends) {
91
91
  if (orient == "top" || orient == "bottom") {
92
92
  widths.push(size.width);
93
93
  } else {
94
- heights.push(size.height);
94
+ // Side gradients can fill the available viewport height, but that
95
+ // available height must be determined by the real grid children and
96
+ // top/bottom chrome. Otherwise a shared right/left legend can make
97
+ // the grid grow to the browser height and then fill that height.
98
+ heights.push({ px: getSizeDefMinPx(size.height), grow: 0 });
95
99
  }
96
100
  }
97
101
 
@@ -1238,7 +1242,7 @@ export default class GridView extends ContainerView {
1238
1242
 
1239
1243
  renderLocalLegends(
1240
1244
  gridChild.legends,
1241
- axes,
1245
+ this.#getLegendOffsetAxes(axes, col, row, grid),
1242
1246
  viewportCoords,
1243
1247
  context,
1244
1248
  options,
@@ -1326,6 +1330,38 @@ export default class GridView extends ContainerView {
1326
1330
  context.popView(this);
1327
1331
  }
1328
1332
 
1333
+ /**
1334
+ * Local legends are GridChild-owned, but shared axes are GridView-owned.
1335
+ * When they share an orient, the axis should remain next to the plot and
1336
+ * the legend should move outside it. Give legend placement the applicable
1337
+ * shared edge axes so `renderLocalLegends()` can apply the same offset it
1338
+ * already uses for local axes.
1339
+ *
1340
+ * @param {Partial<Record<import("../../spec/axis.js").AxisOrient, AxisView>>} axes
1341
+ * @param {number} col
1342
+ * @param {number} row
1343
+ * @param {Grid} grid
1344
+ */
1345
+ #getLegendOffsetAxes(axes, col, row, grid) {
1346
+ /** @type {Partial<Record<import("../../spec/axis.js").AxisOrient, AxisView>>} */
1347
+ const offsetAxes = { ...axes };
1348
+
1349
+ for (const axisView of Object.values(this.#sharedAxes)) {
1350
+ const orient = axisView.axisProps.orient;
1351
+ const isEdge =
1352
+ (orient == "left" && col == 0) ||
1353
+ (orient == "right" && col == grid.nCols - 1) ||
1354
+ (orient == "top" && row == 0) ||
1355
+ (orient == "bottom" && row == grid.nRows - 1);
1356
+
1357
+ if (isEdge && !offsetAxes[orient]) {
1358
+ offsetAxes[orient] = axisView;
1359
+ }
1360
+ }
1361
+
1362
+ return offsetAxes;
1363
+ }
1364
+
1329
1365
  /**
1330
1366
  * @param {import("../../utils/interaction.js").default} event
1331
1367
  */
@@ -4,7 +4,9 @@
4
4
  * @param {{
5
5
  * getPerpendicularSize: () => number,
6
6
  * getOffset: () => number,
7
- * getParallelSize?: () => number | undefined
7
+ * getParallelSize?: () => number | undefined,
8
+ * getWidth?: () => number,
9
+ * getHeight?: () => number
8
10
  * }} legendView
9
11
  * @param {number} [axisOffset]
10
12
  */
@@ -12,6 +14,8 @@ export function translateLegendCoords(coords: import("../layout/rectangle.js").d
12
14
  getPerpendicularSize: () => number;
13
15
  getOffset: () => number;
14
16
  getParallelSize?: () => number | undefined;
17
+ getWidth?: () => number;
18
+ getHeight?: () => number;
15
19
  }, axisOffset?: number): import("../layout/rectangle.js").default;
16
20
  /**
17
21
  * @param {import("./gridChildLegends.js").GridChildLegends} legends
@@ -1 +1 @@
1
- {"version":3,"file":"legendLayout.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/legendLayout.js"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,8CATW,OAAO,wBAAwB,EAAE,OAAO,UACxC,OAAO,sBAAsB,EAAE,YAAY,cAC3C;IACJ,oBAAoB,EAAE,MAAM,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CAC7C,eACO,MAAM,4CAuDhB;AAED;;;;;;;;GAQG;AACH,4CARW,OAAO,uBAAuB,EAAE,gBAAgB,QAChD,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,OAAO,gBAAgB,EAAE,OAAO,CAAC,CAAC,kBAC1F,OAAO,wBAAwB,EAAE,OAAO,WACxC,OAAO,6CAA6C,EAAE,OAAO,WAC7D,OAAO,0BAA0B,EAAE,gBAAgB,mBACnD,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,SAC7D,MAAM,QAiChB"}
1
+ {"version":3,"file":"legendLayout.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/legendLayout.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AACH,8CAXW,OAAO,wBAAwB,EAAE,OAAO,UACxC,OAAO,sBAAsB,EAAE,YAAY,cAC3C;IACJ,oBAAoB,EAAE,MAAM,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B,eACO,MAAM,4CAyDhB;AAED;;;;;;;;GAQG;AACH,4CARW,OAAO,uBAAuB,EAAE,gBAAgB,QAChD,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,OAAO,gBAAgB,EAAE,OAAO,CAAC,CAAC,kBAC1F,OAAO,wBAAwB,EAAE,OAAO,WACxC,OAAO,6CAA6C,EAAE,OAAO,WAC7D,OAAO,0BAA0B,EAAE,gBAAgB,mBACnD,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,SAC7D,MAAM,QAiChB"}
@@ -9,7 +9,9 @@ const LEGEND_ZINDEX = 1;
9
9
  * @param {{
10
10
  * getPerpendicularSize: () => number,
11
11
  * getOffset: () => number,
12
- * getParallelSize?: () => number | undefined
12
+ * getParallelSize?: () => number | undefined,
13
+ * getWidth?: () => number,
14
+ * getHeight?: () => number
13
15
  * }} legendView
14
16
  * @param {number} [axisOffset]
15
17
  */
@@ -24,6 +26,8 @@ export function translateLegendCoords(
24
26
  const parallelSize = legendView.getParallelSize?.() ?? coords.height;
25
27
  const cornerParallelSize =
26
28
  legendView.getParallelSize?.() ?? coords.height - 2 * offset;
29
+ const cornerWidth = legendView.getWidth?.() ?? ps;
30
+ const cornerHeight = legendView.getHeight?.() ?? cornerParallelSize;
27
31
 
28
32
  if (orient == "bottom") {
29
33
  return coords
@@ -44,25 +48,25 @@ export function translateLegendCoords(
44
48
  } else if (orient == "top-left") {
45
49
  return coords
46
50
  .translate(axisOffset + offset, offset)
47
- .modify({ width: ps, height: cornerParallelSize });
51
+ .modify({ width: cornerWidth, height: cornerHeight });
48
52
  } else if (orient == "top-right") {
49
53
  return coords
50
- .translate(coords.width - ps - axisOffset - offset, offset)
51
- .modify({ width: ps, height: cornerParallelSize });
54
+ .translate(coords.width - cornerWidth - axisOffset - offset, offset)
55
+ .modify({ width: cornerWidth, height: cornerHeight });
52
56
  } else if (orient == "bottom-left") {
53
57
  return coords
54
58
  .translate(
55
59
  axisOffset + offset,
56
- coords.height - cornerParallelSize - offset
60
+ coords.height - cornerHeight - offset
57
61
  )
58
- .modify({ width: ps, height: cornerParallelSize });
62
+ .modify({ width: cornerWidth, height: cornerHeight });
59
63
  } else if (orient == "bottom-right") {
60
64
  return coords
61
65
  .translate(
62
- coords.width - ps - axisOffset - offset,
63
- coords.height - cornerParallelSize - offset
66
+ coords.width - cornerWidth - axisOffset - offset,
67
+ coords.height - cornerHeight - offset
64
68
  )
65
- .modify({ width: ps, height: cornerParallelSize });
69
+ .modify({ width: cornerWidth, height: cornerHeight });
66
70
  } else {
67
71
  throw new Error(`Invalid legend orientation: ${orient}`);
68
72
  }
@@ -62,6 +62,8 @@ export class LegendRegionView extends ContainerView<import("../spec/view.js").Co
62
62
  */
63
63
  addLegendView(legendView: LegendView): void;
64
64
  getPerpendicularSize(): number;
65
+ getWidth(): number;
66
+ getHeight(): number;
65
67
  getOffset(): number;
66
68
  getParallelSize(): number;
67
69
  #private;
@@ -128,6 +130,7 @@ export type SymbolLegendStyle = {
128
130
  export type MeasuredLabels = {
129
131
  maxWidth: number;
130
132
  maxEntryWidth: number;
133
+ maxX: number;
131
134
  maxY: number;
132
135
  };
133
136
  import ContainerView from "./containerView.js";
@@ -1 +1 @@
1
- {"version":3,"file":"legendView.d.ts","sourceRoot":"","sources":["../../../src/view/legendView.js"],"names":[],"mappings":"AAuVA;;;;;;;;;;;;GAYG;AACH,8IAXG;IAAgC,OAAO,GAA/B,WAAW,EAAE;IAC0C,OAAO,EAA9D,OAAO,oBAAoB,EAAE,gBAAgB;IACoC,cAAc,GAA/F,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC1C,WAAW,GAAvC,iBAAiB;IACY,cAAc,GAA3C,OAAO,GAAG,QAAQ;IACI,MAAM,EAA5B,YAAY;IACK,MAAM,GAAvB,MAAM;IACqC,QAAQ,EAAnD,OAAO,oBAAoB,EAAE,IAAI;IACkB,OAAO,EAA1D,OAAO,yBAAyB,EAAE,OAAO;CACjD,GAAU,cAAc,CA+M1B;AAED;;;;;;;GAOG;AACH,+EANG;IAA+D,OAAO,EAA9D,OAAO,oBAAoB,EAAE,gBAAgB;IACvB,MAAM,EAA5B,YAAY;IACK,MAAM,GAAvB,MAAM;IAC6C,OAAO,EAA1D,OAAO,yBAAyB,EAAE,OAAO;CACjD,GAAU,cAAc,CAgO1B;AAED;;;;;;GAMG;AACH,sDANW;IACJ,oBAAoB,EAAE,MAAM,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,MAAM,CAAA;CAC1B,GAAG,SAAS,GACH,MAAM,CAMlB;AAED;IASI;;;;;;OAMG;IACH,oBANW,OAAO,mBAAmB,EAAE,YAAY,gBACxC,MAAM,WACN,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,EAqBrC;IALG,iDAAoB;IAuBxB;;OAEG;IACH,0BAFW,UAAU,QAWpB;IA2DD,+BAuBC;IAED,oBAOC;IAED,0BAcC;;CAiDJ;AAED;IAyBI;;;;;;;;;;;;;;;OAeG;IACH,gHAdG;QAA8B,OAAO,GAA7B,WAAW,EAAE;QACwC,OAAO,EAA5D,OAAO,oBAAoB,EAAE,gBAAgB;QACkC,cAAc,GAA7F,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC5C,WAAW,GAArC,iBAAiB;QACU,cAAc,GAAzC,OAAO,GAAG,QAAQ;QACY,IAAI,GAAlC,QAAQ,GAAG,UAAU;QACD,MAAM,EAA1B,YAAY;QACG,MAAM,GAArB,MAAM;QACmC,QAAQ,EAAjD,OAAO,oBAAoB,EAAE,IAAI;KACzC,WAAQ,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,YAC3B,OAAO,WAAW,EAAE,WAAW,EA0DzC;IATG,sDAAyB;IA6G7B,+BAEC;IAED,oBAEC;IAED;;OAEG;IACH,8BAFW,MAAM,OAAO,QAIvB;IAQD,oBAEC;IAED,iCAUC;IAkED;;;;;;;;;OASG;IACH,4BAFa,MAAM,IAAI,CAyBtB;;CA+BJ;2BA9wCY,OAAO,mBAAmB,EAAE,YAAY;0BACxC,OAAO,2BAA2B,EAAE,WAAW;6BAC/C,CAAC,OAAO,iBAAiB,EAAE,WAAW,GAAG,OAAO,iBAAiB,EAAE,WAAW,CAAC,GAAG;IACxF,IAAI,EAAE,OAAO,iBAAiB,EAAE,cAAc,CAAA;CACjD;gCACS;IACN,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,oBAAoB,EAAE,QAAQ,CAAC,CAAA;CAC5D;;cA0wCM,MAAM;mBACN,MAAM;UACN,MAAM;;0BAp2CU,oBAAoB"}
1
+ {"version":3,"file":"legendView.d.ts","sourceRoot":"","sources":["../../../src/view/legendView.js"],"names":[],"mappings":"AA8VA;;;;;;;;;;;;GAYG;AACH,8IAXG;IAAgC,OAAO,GAA/B,WAAW,EAAE;IAC0C,OAAO,EAA9D,OAAO,oBAAoB,EAAE,gBAAgB;IACoC,cAAc,GAA/F,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC1C,WAAW,GAAvC,iBAAiB;IACY,cAAc,GAA3C,OAAO,GAAG,QAAQ;IACI,MAAM,EAA5B,YAAY;IACK,MAAM,GAAvB,MAAM;IACqC,QAAQ,EAAnD,OAAO,oBAAoB,EAAE,IAAI;IACkB,OAAO,EAA1D,OAAO,yBAAyB,EAAE,OAAO;CACjD,GAAU,cAAc,CA+M1B;AAED;;;;;;;GAOG;AACH,+EANG;IAA+D,OAAO,EAA9D,OAAO,oBAAoB,EAAE,gBAAgB;IACvB,MAAM,EAA5B,YAAY;IACK,MAAM,GAAvB,MAAM;IAC6C,OAAO,EAA1D,OAAO,yBAAyB,EAAE,OAAO;CACjD,GAAU,cAAc,CAgO1B;AAED;;;;;;GAMG;AACH,sDANW;IACJ,oBAAoB,EAAE,MAAM,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,MAAM,CAAA;CAC1B,GAAG,SAAS,GACH,MAAM,CAMlB;AAED;IASI;;;;;;OAMG;IACH,oBANW,OAAO,mBAAmB,EAAE,YAAY,gBACxC,MAAM,WACN,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,EAqBrC;IALG,iDAAoB;IAuBxB;;OAEG;IACH,0BAFW,UAAU,QAWpB;IA2DD,+BAuBC;IAED,mBAOC;IAED,oBAQC;IAED,oBAOC;IAED,0BAcC;;CAiDJ;AAED;IAyBI;;;;;;;;;;;;;;;OAeG;IACH,gHAdG;QAA8B,OAAO,GAA7B,WAAW,EAAE;QACwC,OAAO,EAA5D,OAAO,oBAAoB,EAAE,gBAAgB;QACkC,cAAc,GAA7F,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC5C,WAAW,GAArC,iBAAiB;QACU,cAAc,GAAzC,OAAO,GAAG,QAAQ;QACY,IAAI,GAAlC,QAAQ,GAAG,UAAU;QACD,MAAM,EAA1B,YAAY;QACG,MAAM,GAArB,MAAM;QACmC,QAAQ,EAAjD,OAAO,oBAAoB,EAAE,IAAI;KACzC,WAAQ,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,YAC3B,OAAO,WAAW,EAAE,WAAW,EA0DzC;IATG,sDAAyB;IA6G7B,+BAEC;IAED,oBAEC;IAED;;OAEG;IACH,8BAFW,MAAM,OAAO,QAIvB;IAQD,oBAEC;IAED,iCAUC;IAkED;;;;;;;;;OASG;IACH,4BAFa,MAAM,IAAI,CAyBtB;;CA+BJ;2BAxyCY,OAAO,mBAAmB,EAAE,YAAY;0BACxC,OAAO,2BAA2B,EAAE,WAAW;6BAC/C,CAAC,OAAO,iBAAiB,EAAE,WAAW,GAAG,OAAO,iBAAiB,EAAE,WAAW,CAAC,GAAG;IACxF,IAAI,EAAE,OAAO,iBAAiB,EAAE,cAAc,CAAA;CACjD;gCACS;IACN,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,oBAAoB,EAAE,QAAQ,CAAC,CAAA;CAC5D;;cAoyCM,MAAM;mBACN,MAAM;UACN,MAAM;UACN,MAAM;;0BA/3CU,oBAAoB"}
@@ -227,10 +227,17 @@ function createLegendRootSpec(legend, body, context, forcedScaleChannels = []) {
227
227
  /**
228
228
  * @param {LegendConfig} legend
229
229
  */
230
- function isHorizontalLegend(legend) {
230
+ function isTopBottomLegend(legend) {
231
231
  return legend.orient == "top" || legend.orient == "bottom";
232
232
  }
233
233
 
234
+ /**
235
+ * @param {LegendConfig} legend
236
+ */
237
+ function isHorizontalLegend(legend) {
238
+ return isTopBottomLegend(legend) || legend.direction == "horizontal";
239
+ }
240
+
234
241
  /**
235
242
  * @param {LegendConfig} legend
236
243
  * @returns {import("../spec/legend.js").LegendTitleOrient}
@@ -955,6 +962,25 @@ export class LegendRegionView extends ContainerView {
955
962
  }
956
963
  }
957
964
 
965
+ getWidth() {
966
+ return Math.max(
967
+ 0,
968
+ ...this.#getVisibleLegendViews().map((legendView) =>
969
+ getSizeDefMinPx(legendView.getSize().width)
970
+ )
971
+ );
972
+ }
973
+
974
+ getHeight() {
975
+ return this.#getVisibleLegendViews().reduce(
976
+ (sum, legendView, index) =>
977
+ sum +
978
+ getSizeDefMinPx(legendView.getSize().height) +
979
+ (index > 0 ? this.#stackSpacing : 0),
980
+ 0
981
+ );
982
+ }
983
+
958
984
  getOffset() {
959
985
  return Math.max(
960
986
  0,
@@ -1188,17 +1214,17 @@ export default class LegendView extends ContainerView {
1188
1214
  return new FlexDimensions({ px: 0, grow: 0 }, { px: 0, grow: 0 });
1189
1215
  }
1190
1216
 
1217
+ const contentHorizontal = isHorizontalLegend(this.legendProps);
1191
1218
  const mainSize = { grow: 1 };
1192
1219
  const perpendicularSize = { px: this.getPerpendicularSize() };
1193
1220
  const parallelSize = this.#hasFlexibleParallelSize()
1194
1221
  ? this.#getFlexibleStackedParallelSize()
1195
1222
  : { px: this.getStackedParallelSize() };
1196
1223
 
1197
- if (
1198
- this.legendProps.orient == "top" ||
1199
- this.legendProps.orient == "bottom"
1200
- ) {
1224
+ if (isTopBottomLegend(this.legendProps)) {
1201
1225
  return new FlexDimensions(mainSize, perpendicularSize);
1226
+ } else if (contentHorizontal) {
1227
+ return new FlexDimensions(parallelSize, perpendicularSize);
1202
1228
  } else {
1203
1229
  return new FlexDimensions(perpendicularSize, parallelSize);
1204
1230
  }
@@ -1397,6 +1423,7 @@ export default class LegendView extends ContainerView {
1397
1423
  * @typedef {object} MeasuredLabels
1398
1424
  * @prop {number} maxWidth
1399
1425
  * @prop {number} maxEntryWidth
1426
+ * @prop {number} maxX
1400
1427
  * @prop {number} maxY
1401
1428
  */
1402
1429
 
@@ -1407,6 +1434,7 @@ export default class LegendView extends ContainerView {
1407
1434
  function getMeasuredLabels(labelViews) {
1408
1435
  let maxWidth = 0;
1409
1436
  let maxEntryWidth = 0;
1437
+ let maxX = 0;
1410
1438
  let maxY = 0;
1411
1439
  let completed = false;
1412
1440
 
@@ -1426,6 +1454,11 @@ function getMeasuredLabels(labelViews) {
1426
1454
  maxEntryWidth,
1427
1455
  Number(datum.entryWidth) || 0
1428
1456
  );
1457
+ maxX = Math.max(
1458
+ maxX,
1459
+ (Number(datum.labelX) || 0) +
1460
+ (Number(datum[LABEL_WIDTH_FIELD]) || 0)
1461
+ );
1429
1462
  maxY = Math.max(maxY, Number(datum.labelY) || 0);
1430
1463
  });
1431
1464
  }
@@ -1434,6 +1467,7 @@ function getMeasuredLabels(labelViews) {
1434
1467
  ? {
1435
1468
  maxWidth: Math.ceil(maxWidth),
1436
1469
  maxEntryWidth: Math.ceil(maxEntryWidth),
1470
+ maxX: Math.ceil(maxX),
1437
1471
  maxY: Math.ceil(maxY),
1438
1472
  }
1439
1473
  : undefined;
@@ -1505,7 +1539,11 @@ function getStackedLegendParallelSize(legend, type, measuredLabels, context) {
1505
1539
  return combine(DEFAULT_GRADIENT_LEGEND_LENGTH);
1506
1540
  } else if (measuredLabels) {
1507
1541
  const labelFontSize = legend.labelFontSize ?? 10;
1508
- return combine(measuredLabels.maxY + labelFontSize / 2);
1542
+ const bodyExtent = isHorizontalLegend(legend)
1543
+ ? measuredLabels.maxX
1544
+ : measuredLabels.maxY + labelFontSize / 2;
1545
+
1546
+ return combine(bodyExtent);
1509
1547
  } else {
1510
1548
  return combine(
1511
1549
  Math.sqrt(legend.symbolSize ?? 100) +
@@ -1593,7 +1631,12 @@ function getTitleWidth(legend, context) {
1593
1631
  fontStyle: legend.titleFontStyle,
1594
1632
  fontWeight: legend.titleFontWeight,
1595
1633
  });
1596
- const metrics = font.metrics;
1634
+ // Generated legend title width is materialized into the child spec before
1635
+ // asynchronous font loading has necessarily completed. Use fallback metrics
1636
+ // to avoid a padding-only title extent. TODO: Recompute generated legend
1637
+ // specs or make title extent lazy when requested font metrics become ready.
1638
+ const metrics =
1639
+ font.metrics ?? context.fontManager.getDefaultFont().metrics;
1597
1640
  if (!metrics) {
1598
1641
  return 0;
1599
1642
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../../src/view/testUtils.js"],"names":[],"mappings":"AAsCA;;;;GAIG;AACH,2DAJW,OAAO,kBAAkB,EAAE,kBAAkB,mBAC7C,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,6CAQzD;AAED;;;GAGG;AACH,uEAHW,OAAO,kBAAkB,EAAE,kBAAkB,GAC3C,uBAAuB,CAmCnC;AAGS,uBAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,uBAAuB,OAAO,kBAAkB,EAAE,kBAAkB,mBAAmB,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AA0BlP,oCAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,YAAY,WAAW,YAAY;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAC,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAqBjM;;;;;;GAMG;AACH,qCAHW,IAAI,WACJ,OAAO,uBAAuB,EAAE,OAAO;;;;;EAoBjD;AAED;;;;;;GAMG;AACH,mCAJW,QAAQ,uBACR,OAAO,kBAAkB,EAAE,kBAAkB,WAC7C,OAAO,uBAAuB,EAAE,OAAO;;;;;GAoBjD;;;;;;uBAzLY,OAAO,iBAAiB,EAAE,QAAQ;;;;;0BAClC,OAAO,yBAAyB,EAAE,OAAO;;;;;sCACzC,WAAW,GAAG;IACtB,aAAa,EAAE,CACb,IAAI,EAAE,OAAO,WAAW,EAAE,OAAO,EACjC,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAClD,OAAO,CAAC,EAAE,GAAG,KACV,IAAI,CAAA;CACV;0CAoBG,mCAAmC;iBANzB,WAAW;qCAMrB,mCAAmC"}
1
+ {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../../src/view/testUtils.js"],"names":[],"mappings":"AAkEA;;;;GAIG;AACH,2DAJW,OAAO,kBAAkB,EAAE,kBAAkB,mBAC7C,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,6CAQzD;AAED;;;GAGG;AACH,uEAHW,OAAO,kBAAkB,EAAE,kBAAkB,GAC3C,uBAAuB,CAmCnC;AAGS,uBAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,uBAAuB,OAAO,kBAAkB,EAAE,kBAAkB,mBAAmB,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AA0BlP,oCAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,QAAQ,QAAQ,aAAa;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,YAAY,WAAW,YAAY;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAC,GAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAqBjM;;;;;;GAMG;AACH,qCAHW,IAAI,WACJ,OAAO,uBAAuB,EAAE,OAAO;;;;;EAoBjD;AAED;;;;;;GAMG;AACH,mCAJW,QAAQ,uBACR,OAAO,kBAAkB,EAAE,kBAAkB,WAC7C,OAAO,uBAAuB,EAAE,OAAO;;;;;GAuBjD;;;;;;uBAxNY,OAAO,iBAAiB,EAAE,QAAQ;;;;;0BAClC,OAAO,yBAAyB,EAAE,OAAO;;;;;sCACzC,WAAW,GAAG;IACtB,aAAa,EAAE,CACb,IAAI,EAAE,OAAO,WAAW,EAAE,OAAO,EACjC,IAAI,EAAE,OAAO,iBAAiB,EAAE,kBAAkB,EAClD,OAAO,CAAC,EAAE,GAAG,KACV,IAAI,CAAA;CACV;0CAoBG,mCAAmC;iBANzB,WAAW;qCAMrB,mCAAmC"}
@@ -35,6 +35,34 @@ import { INTERNAL_DEFAULT_CONFIG } from "../config/defaultConfig.js";
35
35
  import { mergeConfigScopes } from "../config/mergeConfig.js";
36
36
  import { resolveBaseConfig } from "../config/resolveConfig.js";
37
37
  import { DEFAULT_THEME_NAME, resolveThemeSelection } from "../config/themes.js";
38
+ import BmFontManager from "../fonts/bmFontManager.js";
39
+
40
+ /**
41
+ * Uses the embedded default font for every font request. Layout snapshots
42
+ * should be stable and independent of asynchronously loaded font variants.
43
+ */
44
+ class LayoutSnapshotFontManager {
45
+ #fontManager = new BmFontManager();
46
+
47
+ getDefaultFont() {
48
+ return this.#fontManager.getDefaultFont();
49
+ }
50
+
51
+ getFont() {
52
+ return this.getDefaultFont();
53
+ }
54
+
55
+ /** @returns {Promise<void>} */
56
+ async waitUntilReady() {
57
+ return undefined;
58
+ }
59
+ }
60
+
61
+ function createLayoutSnapshotFontManager() {
62
+ return /** @type {BmFontManager} */ (
63
+ /** @type {unknown} */ (new LayoutSnapshotFontManager())
64
+ );
65
+ }
38
66
 
39
67
  /**
40
68
  * @param {import("./viewFactory.js").ViewFactoryOptions} [viewFactoryOptions]
@@ -183,7 +211,10 @@ export async function specToLayout(spec, viewFactoryOptions = {}, coords) {
183
211
  wrapRoot: true,
184
212
  ...viewFactoryOptions,
185
213
  },
186
- { baseConfig }
214
+ {
215
+ baseConfig,
216
+ fontManager: createLayoutSnapshotFontManager(),
217
+ }
187
218
  );
188
219
 
189
220
  return renderToLayout(view, coords);
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ import {
25
25
  clipCoords,
26
26
  normalizeClipOptions,
27
27
  } from "./renderingContext/clipOptions.js";
28
+ import { isInChromeSubtree } from "./viewChrome.js";
28
29
 
29
30
  // TODO: View classes have too many responsibilities. Come up with a way
30
31
  // to separate the concerns. However, most concerns are tightly tied to
@@ -488,6 +489,10 @@ export default class View {
488
489
  * @returns {number | import("../spec/view.js").Step | undefined}
489
490
  */
490
491
  #getConfiguredDefaultSize(dimension) {
492
+ if (isInChromeSubtree(this)) {
493
+ return undefined;
494
+ }
495
+
491
496
  const viewConfig = this.getConfig().view;
492
497
  if (!viewConfig) {
493
498
  return undefined;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @param {import("./view.js").default} view
3
+ * @param {ChromeOverride} behavior
4
+ */
5
+ export function setChromeOverride(view: import("./view.js").default, behavior: ChromeOverride): void;
6
+ /**
7
+ * @param {import("./view.js").default} view
8
+ * @returns {ChromeOverride | undefined}
9
+ */
10
+ export function getChromeOverride(view: import("./view.js").default): ChromeOverride | undefined;
11
+ /**
12
+ * Returns whether a view itself has been marked as decorative chrome.
13
+ *
14
+ * @param {import("./view.js").default} view
15
+ * @returns {boolean}
16
+ */
17
+ export function isChromeView(view: import("./view.js").default): boolean;
18
+ /**
19
+ * Returns whether a view is inside a chrome subtree in the layout hierarchy.
20
+ *
21
+ * @param {import("./view.js").default} view
22
+ * @returns {boolean}
23
+ */
24
+ export function isInChromeSubtree(view: import("./view.js").default): boolean;
25
+ /**
26
+ * Tracks views that are decorative chrome instead of user-authored plot views.
27
+ *
28
+ * Chrome views may still need inherited data, scales, or parameters, but they
29
+ * should not participate in plot-oriented defaults such as configured
30
+ * continuous view sizes.
31
+ */
32
+ export type ChromeOverride = "exclude" | "excludeSubtree";
33
+ //# sourceMappingURL=viewChrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewChrome.d.ts","sourceRoot":"","sources":["../../../src/view/viewChrome.js"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,YAC3B,cAAc,QAIxB;AAED;;;GAGG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,cAAc,GAAG,SAAS,CAItC;AAED;;;;;GAKG;AACH,mCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,CAInB;AAED;;;;;GAKG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,CAoBnB;;;;;;;;6BAxDY,SAAS,GAAG,gBAAgB"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Tracks views that are decorative chrome instead of user-authored plot views.
3
+ *
4
+ * Chrome views may still need inherited data, scales, or parameters, but they
5
+ * should not participate in plot-oriented defaults such as configured
6
+ * continuous view sizes.
7
+ *
8
+ * @typedef {"exclude" | "excludeSubtree"} ChromeOverride
9
+ */
10
+
11
+ /** @type {WeakMap<import("./view.js").default, ChromeOverride>} */
12
+ const chromeOverrides = new WeakMap();
13
+
14
+ /**
15
+ * @param {import("./view.js").default} view
16
+ * @param {ChromeOverride} behavior
17
+ */
18
+ export function setChromeOverride(view, behavior) {
19
+ chromeOverrides.set(view, behavior);
20
+ }
21
+
22
+ /**
23
+ * @param {import("./view.js").default} view
24
+ * @returns {ChromeOverride | undefined}
25
+ */
26
+ export function getChromeOverride(view) {
27
+ return chromeOverrides.get(view);
28
+ }
29
+
30
+ /**
31
+ * Returns whether a view itself has been marked as decorative chrome.
32
+ *
33
+ * @param {import("./view.js").default} view
34
+ * @returns {boolean}
35
+ */
36
+ export function isChromeView(view) {
37
+ return chromeOverrides.has(view);
38
+ }
39
+
40
+ /**
41
+ * Returns whether a view is inside a chrome subtree in the layout hierarchy.
42
+ *
43
+ * @param {import("./view.js").default} view
44
+ * @returns {boolean}
45
+ */
46
+ export function isInChromeSubtree(view) {
47
+ /** @type {import("./view.js").default | null} */
48
+ let current = view;
49
+
50
+ while (current) {
51
+ const behavior = chromeOverrides.get(current);
52
+ if (behavior === "excludeSubtree") {
53
+ return true;
54
+ }
55
+
56
+ if (current === view && behavior === "exclude") {
57
+ return true;
58
+ }
59
+
60
+ current = current.layoutParent;
61
+ }
62
+
63
+ return false;
64
+ }
@@ -36,13 +36,6 @@ export function markViewAsNonAddressable(view: import("./view.js").default, opti
36
36
  * @param {ChromeOptions} [options]
37
37
  */
38
38
  export function markViewAsChrome(view: import("./view.js").default, options?: ChromeOptions): void;
39
- /**
40
- * Returns whether a view has been marked as decorative chrome.
41
- *
42
- * @param {import("./view.js").default} view
43
- * @returns {boolean}
44
- */
45
- export function isChromeView(view: import("./view.js").default): boolean;
46
39
  /**
47
40
  * Returns the import scope chain for a view, using named import instances.
48
41
  *
@@ -137,6 +130,7 @@ export function getBookmarkableParams(root: import("./view.js").default): Bookma
137
130
  * @returns {SelectorValidationIssue[]}
138
131
  */
139
132
  export function validateSelectorConstraints(root: import("./view.js").default): SelectorValidationIssue[];
133
+ export { isChromeView } from "./viewChrome.js";
140
134
  /**
141
135
  * Selectors identify views and parameters in a way that stays stable when the
142
136
  * same template/import is instantiated multiple times. They combine a chain of
@@ -151,7 +145,6 @@ export function validateSelectorConstraints(root: import("./view.js").default):
151
145
  * @typedef {{ message: string, scope: string[] }} SelectorValidationIssue
152
146
  * @typedef {{ name: string | null }} ImportScopeInfo
153
147
  * @typedef {"exclude" | "excludeSubtree"} AddressableOverride
154
- * @typedef {"exclude" | "excludeSubtree"} ChromeOverride
155
148
  * @typedef {{ skipSubtree?: boolean }} AddressableOptions
156
149
  * @typedef {{ skipSubtree?: boolean }} ChromeOptions
157
150
  * @typedef {{ view: import("./view.js").default, param: import("../spec/parameter.js").Parameter }} ResolvedParam
@@ -172,7 +165,6 @@ export type ImportScopeInfo = {
172
165
  name: string | null;
173
166
  };
174
167
  export type AddressableOverride = "exclude" | "excludeSubtree";
175
- export type ChromeOverride = "exclude" | "excludeSubtree";
176
168
  export type AddressableOptions = {
177
169
  skipSubtree?: boolean;
178
170
  };
@@ -1 +1 @@
1
- {"version":3,"file":"viewSelectors.d.ts","sourceRoot":"","sources":["../../../src/view/viewSelectors.js"],"names":[],"mappings":"AAsCA;;;;;GAKG;AACH,6CAHW,OAAO,WAAW,EAAE,OAAO,aAC3B,MAAM,GAAG,IAAI,QAIvB;AAED;;;;;;;;GAQG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,aAC3B,MAAM,GAAG,IAAI,QAIvB;AAeD;;;;;GAKG;AACH,yCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,eAAe,GAAG,SAAS,CAIvC;AAED;;;;;GAKG;AACH,+CAHW,OAAO,WAAW,EAAE,OAAO,YAC3B,kBAAkB,QAM5B;AAED;;;;;GAKG;AACH,uCAHW,OAAO,WAAW,EAAE,OAAO,YAC3B,aAAa,QAMvB;AAED;;;;;GAKG;AACH,mCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,CAInB;AAED;;;;;GAKG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,MAAM,EAAE,CAgBpB;AAED;;;;;GAKG;AACH,sCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,YAAY,CAYxB;AAED;;;;;;GAMG;AACH,uCAJW,OAAO,WAAW,EAAE,OAAO,aAC3B,MAAM,GACJ,aAAa,CAazB;AAED;;;;;GAKG;AACH,+CAHW,aAAa,GACX,MAAM,CAQlB;AAED;;;;;GAKG;AACH,0CAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,WAAW,EAAE,OAAO,EAAE,CAWzC;AAED;;;;;GAKG;AACH,0CAHW,OAAO,WAAW,EAAE,OAAO,WAC3B,OAAO,WAAW,EAAE,OAAO,QAerC;AAED;;;;;GAKG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,WAAW,EAAE,OAAO,EAAE,CAWzC;AAED;;;;;GAKG;AACH,4CAHW,OAAO,WAAW,EAAE,OAAO,WAC3B,OAAO,WAAW,EAAE,OAAO,QAerC;AAED;;;;;;GAMG;AACH,0CAJW,OAAO,WAAW,EAAE,OAAO,YAC3B,YAAY,GACV,OAAO,WAAW,EAAE,OAAO,GAAG,SAAS,CAoCnD;AAED;;;;;;GAMG;AACH,2CAJW,OAAO,WAAW,EAAE,OAAO,YAC3B,aAAa,GACX,aAAa,GAAG,SAAS,CAuCrC;AAED;;;;;GAKG;AACH,8CAHW,OAAO,WAAW,EAAE,OAAO,WAC3B,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,QAyBjD;AAED;;;;;GAKG;AACH,4CAHW,OAAO,WAAW,EAAE,OAAO,GACzB,sBAAsB,EAAE,CAOpC;AAED;;;;;GAKG;AACH,kDAHW,OAAO,WAAW,EAAE,OAAO,GACzB,uBAAuB,EAAE,CAarC;AA5ZD;;;;;;GAMG;AAEH;;;;;;;;;;;GAWG;AAEH,wCAAyC,IAAI,CAAC;2BAZjC,OAAO,sBAAsB,EAAE,YAAY;4BAC3C,OAAO,sBAAsB,EAAE,aAAa;qCAC5C;IAAE,IAAI,EAAE,OAAO,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAA;CAAE;sCAC/G;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;8BACpC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;kCACvB,SAAS,GAAG,gBAAgB;6BAC5B,SAAS,GAAG,gBAAgB;iCAC5B;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE;4BACzB;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE;4BACzB;IAAE,IAAI,EAAE,OAAO,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,SAAS,CAAA;CAAE"}
1
+ {"version":3,"file":"viewSelectors.d.ts","sourceRoot":"","sources":["../../../src/view/viewSelectors.js"],"names":[],"mappings":"AAqCA;;;;;GAKG;AACH,6CAHW,OAAO,WAAW,EAAE,OAAO,aAC3B,MAAM,GAAG,IAAI,QAIvB;AAED;;;;;;;;GAQG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,aAC3B,MAAM,GAAG,IAAI,QAIvB;AAeD;;;;;GAKG;AACH,yCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,eAAe,GAAG,SAAS,CAIvC;AAED;;;;;GAKG;AACH,+CAHW,OAAO,WAAW,EAAE,OAAO,YAC3B,kBAAkB,QAM5B;AAED;;;;;GAKG;AACH,uCAHW,OAAO,WAAW,EAAE,OAAO,YAC3B,aAAa,QAMvB;AAED;;;;;GAKG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,MAAM,EAAE,CAgBpB;AAED;;;;;GAKG;AACH,sCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,YAAY,CAYxB;AAED;;;;;;GAMG;AACH,uCAJW,OAAO,WAAW,EAAE,OAAO,aAC3B,MAAM,GACJ,aAAa,CAazB;AAED;;;;;GAKG;AACH,+CAHW,aAAa,GACX,MAAM,CAQlB;AAED;;;;;GAKG;AACH,0CAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,WAAW,EAAE,OAAO,EAAE,CAWzC;AAED;;;;;GAKG;AACH,0CAHW,OAAO,WAAW,EAAE,OAAO,WAC3B,OAAO,WAAW,EAAE,OAAO,QAerC;AAED;;;;;GAKG;AACH,wCAHW,OAAO,WAAW,EAAE,OAAO,GACzB,OAAO,WAAW,EAAE,OAAO,EAAE,CAWzC;AAED;;;;;GAKG;AACH,4CAHW,OAAO,WAAW,EAAE,OAAO,WAC3B,OAAO,WAAW,EAAE,OAAO,QAerC;AAED;;;;;;GAMG;AACH,0CAJW,OAAO,WAAW,EAAE,OAAO,YAC3B,YAAY,GACV,OAAO,WAAW,EAAE,OAAO,GAAG,SAAS,CAoCnD;AAED;;;;;;GAMG;AACH,2CAJW,OAAO,WAAW,EAAE,OAAO,YAC3B,aAAa,GACX,aAAa,GAAG,SAAS,CAuCrC;AAED;;;;;GAKG;AACH,8CAHW,OAAO,WAAW,EAAE,OAAO,WAC3B,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,QAyBjD;AAED;;;;;GAKG;AACH,4CAHW,OAAO,WAAW,EAAE,OAAO,GACzB,sBAAsB,EAAE,CAOpC;AAED;;;;;GAKG;AACH,kDAHW,OAAO,WAAW,EAAE,OAAO,GACzB,uBAAuB,EAAE,CAarC;;AA9YD;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AAEH,wCAAyC,IAAI,CAAC;2BAXjC,OAAO,sBAAsB,EAAE,YAAY;4BAC3C,OAAO,sBAAsB,EAAE,aAAa;qCAC5C;IAAE,IAAI,EAAE,OAAO,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAA;CAAE;sCAC/G;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;8BACpC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;kCACvB,SAAS,GAAG,gBAAgB;iCAC5B;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE;4BACzB;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE;4BACzB;IAAE,IAAI,EAAE,OAAO,WAAW,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,SAAS,CAAA;CAAE"}
@@ -3,6 +3,9 @@ import {
3
3
  isSelectionParameter,
4
4
  isVariableParameter,
5
5
  } from "../paramRuntime/paramUtils.js";
6
+ import { getChromeOverride, setChromeOverride } from "./viewChrome.js";
7
+
8
+ export { isChromeView } from "./viewChrome.js";
6
9
 
7
10
  /**
8
11
  * Selectors identify views and parameters in a way that stays stable when the
@@ -19,7 +22,6 @@ import {
19
22
  * @typedef {{ message: string, scope: string[] }} SelectorValidationIssue
20
23
  * @typedef {{ name: string | null }} ImportScopeInfo
21
24
  * @typedef {"exclude" | "excludeSubtree"} AddressableOverride
22
- * @typedef {"exclude" | "excludeSubtree"} ChromeOverride
23
25
  * @typedef {{ skipSubtree?: boolean }} AddressableOptions
24
26
  * @typedef {{ skipSubtree?: boolean }} ChromeOptions
25
27
  * @typedef {{ view: import("./view.js").default, param: import("../spec/parameter.js").Parameter }} ResolvedParam
@@ -33,9 +35,6 @@ const importScopes = new WeakMap();
33
35
  /** @type {WeakMap<import("./view.js").default, AddressableOverride>} */
34
36
  const addressableOverrides = new WeakMap();
35
37
 
36
- /** @type {WeakMap<import("./view.js").default, ChromeOverride>} */
37
- const chromeOverrides = new WeakMap();
38
-
39
38
  /**
40
39
  * Marks a view as the root of an import scope.
41
40
  *
@@ -103,17 +102,7 @@ export function markViewAsNonAddressable(view, options = {}) {
103
102
  export function markViewAsChrome(view, options = {}) {
104
103
  const skipSubtree = options.skipSubtree ?? false;
105
104
  const behavior = skipSubtree ? "excludeSubtree" : "exclude";
106
- chromeOverrides.set(view, behavior);
107
- }
108
-
109
- /**
110
- * Returns whether a view has been marked as decorative chrome.
111
- *
112
- * @param {import("./view.js").default} view
113
- * @returns {boolean}
114
- */
115
- export function isChromeView(view) {
116
- return chromeOverrides.has(view);
105
+ setChromeOverride(view, behavior);
117
106
  }
118
107
 
119
108
  /**
@@ -215,7 +204,7 @@ export function getAddressableViews(root) {
215
204
  */
216
205
  export function visitNonChromeViews(root, visitor) {
217
206
  root.visit((view) => {
218
- const behavior = chromeOverrides.get(view);
207
+ const behavior = getChromeOverride(view);
219
208
  if (behavior === "excludeSubtree") {
220
209
  return VISIT_SKIP;
221
210
  }
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "contributors": [],
9
9
  "license": "MIT",
10
- "version": "0.79.0",
10
+ "version": "0.79.1",
11
11
  "jsdelivr": "dist/bundle/index.js",
12
12
  "unpkg": "dist/bundle/index.js",
13
13
  "browser": "dist/bundle/index.js",
@@ -78,5 +78,5 @@
78
78
  "devDependencies": {
79
79
  "@types/long": "^4.0.1"
80
80
  },
81
- "gitHead": "fbc253e91871c75151711b3c13373e3d7881dd5c"
81
+ "gitHead": "bd399afa44797ccbf7da2564ccc2ab52c7aa0a72"
82
82
  }