@ni/nimble-components 18.3.4 → 18.3.6

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 (38) hide show
  1. package/dist/all-components-bundle.js +152 -110
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +439 -454
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/table/index.d.ts +14 -1
  6. package/dist/esm/table/index.js +49 -6
  7. package/dist/esm/table/index.js.map +1 -1
  8. package/dist/esm/table/models/table-validator.d.ts +3 -0
  9. package/dist/esm/table/models/table-validator.js +25 -1
  10. package/dist/esm/table/models/table-validator.js.map +1 -1
  11. package/dist/esm/table/models/table-validator.spec.js +267 -195
  12. package/dist/esm/table/models/table-validator.spec.js.map +1 -1
  13. package/dist/esm/table/types.d.ts +2 -0
  14. package/dist/esm/table-column/base/index.d.ts +2 -1
  15. package/dist/esm/table-column/base/index.js +5 -0
  16. package/dist/esm/table-column/base/index.js.map +1 -1
  17. package/dist/esm/wafer-map/index.d.ts +8 -3
  18. package/dist/esm/wafer-map/index.js +17 -15
  19. package/dist/esm/wafer-map/index.js.map +1 -1
  20. package/dist/esm/wafer-map/modules/computations.d.ts +6 -6
  21. package/dist/esm/wafer-map/modules/computations.js +39 -35
  22. package/dist/esm/wafer-map/modules/computations.js.map +1 -1
  23. package/dist/esm/wafer-map/modules/data-manager.d.ts +0 -4
  24. package/dist/esm/wafer-map/modules/data-manager.js +2 -11
  25. package/dist/esm/wafer-map/modules/data-manager.js.map +1 -1
  26. package/dist/esm/wafer-map/modules/prerendering.d.ts +3 -3
  27. package/dist/esm/wafer-map/modules/prerendering.js +6 -6
  28. package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
  29. package/dist/esm/wafer-map/modules/rendering.d.ts +0 -1
  30. package/dist/esm/wafer-map/modules/rendering.js +5 -5
  31. package/dist/esm/wafer-map/modules/rendering.js.map +1 -1
  32. package/dist/esm/wafer-map/modules/zoom-handler.js +3 -4
  33. package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
  34. package/dist/esm/wafer-map/styles.js +2 -20
  35. package/dist/esm/wafer-map/styles.js.map +1 -1
  36. package/dist/esm/wafer-map/template.js +2 -8
  37. package/dist/esm/wafer-map/template.js.map +1 -1
  38. package/package.json +1 -1
@@ -26577,6 +26577,9 @@
26577
26577
  this.setAttribute('slot', uniqueId('table-column-slot'));
26578
26578
  }
26579
26579
  }
26580
+ __decorate$1([
26581
+ attr({ attribute: 'column-id' })
26582
+ ], TableColumn.prototype, "columnId", void 0);
26580
26583
 
26581
26584
  /**
26582
26585
  * Helper class for the nimble-table to validate that the table's configuration
@@ -26587,12 +26590,16 @@
26587
26590
  this.duplicateRecordId = false;
26588
26591
  this.missingRecordId = false;
26589
26592
  this.invalidRecordId = false;
26593
+ this.duplicateColumnId = false;
26594
+ this.missingColumnId = false;
26590
26595
  }
26591
26596
  getValidity() {
26592
26597
  return {
26593
26598
  duplicateRecordId: this.duplicateRecordId,
26594
26599
  missingRecordId: this.missingRecordId,
26595
- invalidRecordId: this.invalidRecordId
26600
+ invalidRecordId: this.invalidRecordId,
26601
+ duplicateColumnId: this.duplicateColumnId,
26602
+ missingColumnId: this.missingColumnId
26596
26603
  };
26597
26604
  }
26598
26605
  isValid() {
@@ -26626,6 +26633,26 @@
26626
26633
  && !this.invalidRecordId
26627
26634
  && !this.duplicateRecordId);
26628
26635
  }
26636
+ validateColumnIds(columnIds) {
26637
+ this.missingColumnId = false;
26638
+ this.duplicateColumnId = false;
26639
+ const anyColumnsHaveIds = columnIds.some(id => id);
26640
+ if (!anyColumnsHaveIds) {
26641
+ return true;
26642
+ }
26643
+ const idSet = new Set();
26644
+ for (const columnId of columnIds) {
26645
+ if (!columnId) {
26646
+ this.missingColumnId = true;
26647
+ continue;
26648
+ }
26649
+ if (idSet.has(columnId)) {
26650
+ this.duplicateColumnId = true;
26651
+ }
26652
+ idSet.add(columnId);
26653
+ }
26654
+ return !this.missingColumnId && !this.duplicateColumnId;
26655
+ }
26629
26656
  }
26630
26657
 
26631
26658
  const styles$d = css `
@@ -27680,6 +27707,7 @@
27680
27707
  */
27681
27708
  this.canRenderRows = true;
27682
27709
  this.tableValidator = new TableValidator();
27710
+ this.columnNotifiers = [];
27683
27711
  this.update = (state) => {
27684
27712
  this.table.setOptions(prev => ({
27685
27713
  ...prev,
@@ -27712,24 +27740,66 @@
27712
27740
  this.generateTanStackColumns(newData);
27713
27741
  this.setTableData(newData);
27714
27742
  }
27715
- idFieldNameChanged(_prev, _next) {
27716
- // Force TanStack to detect a data update because a row's ID is only
27717
- // generated when creating a new row model.
27718
- this.setTableData(this.table.options.data);
27719
- }
27720
27743
  connectedCallback() {
27721
27744
  super.connectedCallback();
27722
27745
  this.virtualizer.connectedCallback();
27746
+ this.validateAndObserveColumns();
27723
27747
  }
27724
27748
  disconnectedCallback() {
27749
+ super.disconnectedCallback();
27725
27750
  this.virtualizer.disconnectedCallback();
27751
+ this.removeColumnObservers();
27726
27752
  }
27727
27753
  checkValidity() {
27728
27754
  return this.tableValidator.isValid();
27729
27755
  }
27756
+ /**
27757
+ * @internal
27758
+ *
27759
+ * The event handler that is called when a notifier detects a change. Notifiers are added
27760
+ * to each column, so `source` is expected to be an instance of `TableColumn`, and `args`
27761
+ * is the string name of the property that changed on that column.
27762
+ */
27763
+ handleChange(source, args) {
27764
+ if (source instanceof TableColumn) {
27765
+ if (args === 'columnId') {
27766
+ this.validateColumnIds();
27767
+ }
27768
+ }
27769
+ }
27730
27770
  childItemsChanged() {
27731
27771
  void this.updateColumnsFromChildItems();
27732
27772
  }
27773
+ idFieldNameChanged(_prev, _next) {
27774
+ // Force TanStack to detect a data update because a row's ID is only
27775
+ // generated when creating a new row model.
27776
+ this.setTableData(this.table.options.data);
27777
+ }
27778
+ columnsChanged(_prev, _next) {
27779
+ if (!this.$fastController.isConnected) {
27780
+ return;
27781
+ }
27782
+ this.validateAndObserveColumns();
27783
+ }
27784
+ removeColumnObservers() {
27785
+ this.columnNotifiers.forEach(notifier => {
27786
+ notifier.unsubscribe(this);
27787
+ });
27788
+ this.columnNotifiers = [];
27789
+ }
27790
+ validateAndObserveColumns() {
27791
+ this.removeColumnObservers();
27792
+ for (const column of this.columns) {
27793
+ const notifier = Observable.getNotifier(column);
27794
+ notifier.subscribe(this);
27795
+ this.columnNotifiers.push(notifier);
27796
+ }
27797
+ this.validateColumnIds();
27798
+ }
27799
+ validateColumnIds() {
27800
+ this.tableValidator.validateColumnIds(this.columns.map(x => x.columnId));
27801
+ this.canRenderRows = this.checkValidity();
27802
+ }
27733
27803
  async updateColumnsFromChildItems() {
27734
27804
  const definedElements = this.childItems.map(async (item) => (item.matches(':not(:defined)')
27735
27805
  ? customElements.whenDefined(item.localName)
@@ -32361,11 +32431,7 @@ Instead styling against the role which is more general and likely a better appro
32361
32431
  const template = html `
32362
32432
  <div class="wafer-map-container">
32363
32433
  <svg class="svg-root">
32364
- <g
32365
- class="zoom-container"
32366
- ${ref('zoomContainer')}
32367
- transform=${x => x.transform.toString()}
32368
- >
32434
+ <g ${ref('zoomContainer')} transform=${x => x.transform.toString()}>
32369
32435
  <g class="notch ${x => x.orientation}">
32370
32436
  <svg
32371
32437
  class="circle-base"
@@ -32382,9 +32448,7 @@ Instead styling against the role which is more general and likely a better appro
32382
32448
  </g>
32383
32449
  </g>
32384
32450
  </svg>
32385
- <div class="wafer-map-area">
32386
- <canvas class="wafer-map-canvas" ${ref('canvas')}></canvas>
32387
- </div>
32451
+ <canvas class="wafer-map-canvas" ${ref('canvas')}></canvas>
32388
32452
  </div>
32389
32453
  `;
32390
32454
 
@@ -32397,7 +32461,7 @@ Instead styling against the role which is more general and likely a better appro
32397
32461
 
32398
32462
  .wafer-map-container {
32399
32463
  width: 100%;
32400
- padding-bottom: 100%;
32464
+ height: 100%;
32401
32465
  position: relative;
32402
32466
  display: inline-block;
32403
32467
  justify-content: center;
@@ -32430,16 +32494,7 @@ Instead styling against the role which is more general and likely a better appro
32430
32494
  transform: rotate(90deg);
32431
32495
  }
32432
32496
 
32433
- .zoom-container {
32434
- width: 100%;
32435
- height: 100%;
32436
- position: absolute;
32437
- }
32438
-
32439
32497
  .circle-base {
32440
- width: 100%;
32441
- height: 100%;
32442
- position: absolute;
32443
32498
  fill: white;
32444
32499
  }
32445
32500
 
@@ -32450,18 +32505,9 @@ Instead styling against the role which is more general and likely a better appro
32450
32505
  stroke: ${borderColor};
32451
32506
  }
32452
32507
 
32453
- .wafer-map-area {
32454
- position: absolute;
32455
- justify-content: center;
32456
- align-items: center;
32457
- width: 100%;
32458
- height: 100%;
32459
- }
32460
-
32461
32508
  .wafer-map-canvas {
32462
32509
  display: inline-block;
32463
- width: 100%;
32464
- height: 100%;
32510
+ position: absolute;
32465
32511
  }
32466
32512
  `;
32467
32513
 
@@ -33360,43 +33406,47 @@ Instead styling against the role which is more general and likely a better appro
33360
33406
  * Computations calculates and stores different measures which are used in the Wafermap
33361
33407
  */
33362
33408
  class Computations {
33363
- constructor(dies, axisLocation, canvasDimensions) {
33409
+ constructor(wafermap) {
33364
33410
  this.baseMargin = {
33365
- top: 20,
33366
- right: 20,
33367
- bottom: 20,
33368
- left: 20
33411
+ top: 0,
33412
+ right: 0,
33413
+ bottom: 0,
33414
+ left: 0
33369
33415
  };
33370
- this.dieSizeFactor = 1.5;
33371
33416
  this.defaultAlign = 0.5;
33372
- this.margin = this.baseMargin;
33373
- const gridMapDimensions = this.calculateMapDimensions(dies);
33374
- this.containerDimensions = this.calculateContainerDimensions(canvasDimensions, this.margin);
33375
- this.horizontalScale = this.createHorizontalScale(axisLocation, gridMapDimensions, this.containerDimensions.width);
33376
- this.dieDimensions = {
33377
- width: this.calculateGridWidth(gridMapDimensions.cols, this.containerDimensions.width),
33378
- height: 0
33417
+ this.baseMarginPercentage = 0.04;
33418
+ const canvasDimensions = {
33419
+ width: wafermap.canvasWidth,
33420
+ height: wafermap.canvasHeight
33379
33421
  };
33380
- this.radius = this.containerDimensions.width / 2
33381
- + this.dieDimensions.width * this.dieSizeFactor;
33382
- if (this.radius > canvasDimensions.width / 2) {
33383
- this.margin = this.calculateMarginWithAddition(this.radius - canvasDimensions.width / 2);
33384
- this.containerDimensions = this.calculateContainerDimensions(canvasDimensions, this.margin);
33385
- this.horizontalScale = this.createHorizontalScale(axisLocation, gridMapDimensions, this.containerDimensions.width);
33386
- this.dieDimensions = {
33387
- width: this.calculateGridWidth(gridMapDimensions.cols, this.containerDimensions.width),
33388
- height: 0
33389
- };
33390
- this.radius = this.containerDimensions.width / 2
33391
- + this.dieDimensions.width * this.dieSizeFactor;
33392
- }
33393
- this.verticalScale = this.createVerticalScale(axisLocation, gridMapDimensions, this.containerDimensions.height);
33422
+ const gridDimensions = this.calculateGridDimensions(wafermap.dies);
33423
+ const canvasDiameter = Math.min(canvasDimensions.width, canvasDimensions.height);
33424
+ const canvasMargin = {
33425
+ top: (canvasDimensions.height - canvasDiameter) / 2,
33426
+ right: (canvasDimensions.width - canvasDiameter) / 2,
33427
+ bottom: (canvasDimensions.height - canvasDiameter) / 2,
33428
+ left: (canvasDimensions.width - canvasDiameter) / 2
33429
+ };
33430
+ const baseMargin = {
33431
+ top: canvasDiameter * this.baseMarginPercentage,
33432
+ right: canvasDiameter * this.baseMarginPercentage,
33433
+ bottom: canvasDiameter * this.baseMarginPercentage,
33434
+ left: canvasDiameter * this.baseMarginPercentage
33435
+ };
33436
+ this.margin = this.calculateMarginAddition(baseMargin, canvasMargin);
33437
+ this.containerDimensions = this.calculateContainerDimensions(canvasDimensions, this.margin);
33438
+ const containerDiameter = Math.min(this.containerDimensions.width, this.containerDimensions.height);
33439
+ // this scale is used for positioning the dies on the canvas
33440
+ this.horizontalScale = this.createHorizontalScale(wafermap.quadrant, gridDimensions, containerDiameter);
33441
+ // this scale is used for positioning the dies on the canvas
33442
+ this.verticalScale = this.createVerticalScale(wafermap.quadrant, gridDimensions, containerDiameter);
33394
33443
  this.dieDimensions = {
33395
- width: this.dieDimensions.width,
33396
- height: this.calculateGridHeight(gridMapDimensions.rows, this.containerDimensions.height)
33444
+ width: this.calculateGridWidth(gridDimensions.cols, this.containerDimensions.width),
33445
+ height: this.calculateGridHeight(gridDimensions.rows, this.containerDimensions.height)
33397
33446
  };
33447
+ this.radius = containerDiameter / 2;
33398
33448
  }
33399
- calculateMapDimensions(dies) {
33449
+ calculateGridDimensions(dies) {
33400
33450
  if (dies.length === 0 || dies[0] === undefined) {
33401
33451
  return { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };
33402
33452
  }
@@ -33466,12 +33516,12 @@ Instead styling against the role which is more general and likely a better appro
33466
33516
  .range([0, containerHeight])
33467
33517
  .bandwidth();
33468
33518
  }
33469
- calculateMarginWithAddition(baseAddition = 0) {
33519
+ calculateMarginAddition(baseMargin, addedMargin) {
33470
33520
  return {
33471
- top: this.baseMargin.top + baseAddition,
33472
- right: this.baseMargin.right + baseAddition,
33473
- bottom: this.baseMargin.bottom + baseAddition,
33474
- left: this.baseMargin.top + baseAddition
33521
+ top: baseMargin.top + addedMargin.top,
33522
+ right: baseMargin.right + addedMargin.right,
33523
+ bottom: baseMargin.bottom + addedMargin.bottom,
33524
+ left: baseMargin.left + addedMargin.left
33475
33525
  };
33476
33526
  }
33477
33527
  }
@@ -33480,20 +33530,20 @@ Instead styling against the role which is more general and likely a better appro
33480
33530
  * Prerendering prepares render-ready dies data to be used by the rendering module
33481
33531
  */
33482
33532
  class Prerendering {
33483
- constructor(dies, colorScale, highlightedValues, horizontalScale, verticalScale, colorScaleMode, dieLabelsHidden, dieLabelsSuffix, maxCharacters, dieDimensions, margin) {
33533
+ constructor(wafermap, horizontalScale, verticalScale, dieDimensions, margin) {
33484
33534
  this.fontSizeFactor = 0.8;
33485
33535
  this.nonHighlightedOpacity = 0.3;
33486
33536
  this.emptyDieColor = 'rgba(218,223,236,1)';
33487
33537
  this.nanDieColor = 'rgba(122,122,122,1)';
33488
- this.d3ColorScale = this.createD3ColorScale(colorScale, colorScaleMode);
33489
- this.labelsFontSize = this.calculateLabelsFontSize(dieDimensions, maxCharacters);
33538
+ this.d3ColorScale = this.createD3ColorScale(wafermap.colorScale, wafermap.colorScaleMode);
33539
+ this.labelsFontSize = this.calculateLabelsFontSize(dieDimensions, wafermap.maxCharacters);
33490
33540
  this.diesRenderInfo = [];
33491
- for (const die of dies) {
33541
+ for (const die of wafermap.dies) {
33492
33542
  this.diesRenderInfo.push({
33493
33543
  x: horizontalScale(die.x) + margin.right,
33494
33544
  y: verticalScale(die.y) + margin.top,
33495
- fillStyle: this.calculateFillStyle(die.value, colorScaleMode, highlightedValues),
33496
- text: this.buildLabel(die.value, maxCharacters, dieLabelsHidden, dieLabelsSuffix)
33545
+ fillStyle: this.calculateFillStyle(die.value, wafermap.colorScaleMode, wafermap.highlightedValues),
33546
+ text: this.buildLabel(die.value, wafermap.maxCharacters, wafermap.dieLabelsHidden, wafermap.dieLabelsSuffix)
33497
33547
  });
33498
33548
  }
33499
33549
  }
@@ -33566,11 +33616,8 @@ Instead styling against the role which is more general and likely a better appro
33566
33616
  */
33567
33617
  class DataManager {
33568
33618
  constructor(wafermap) {
33569
- this.computations = new Computations(wafermap.dies, wafermap.quadrant, {
33570
- width: wafermap.canvasSideLength,
33571
- height: wafermap.canvasSideLength
33572
- });
33573
- this.prerendering = new Prerendering(wafermap.dies, wafermap.colorScale, wafermap.highlightedValues, this.computations.horizontalScale, this.computations.verticalScale, wafermap.colorScaleMode, wafermap.dieLabelsHidden, wafermap.dieLabelsSuffix, wafermap.maxCharacters, this.computations.dieDimensions, this.computations.margin);
33619
+ this.computations = new Computations(wafermap);
33620
+ this.prerendering = new Prerendering(wafermap, this.horizontalScale, this.verticalScale, this.dieDimensions, this.margin);
33574
33621
  }
33575
33622
  get containerDimensions() {
33576
33623
  return this.computations.containerDimensions;
@@ -33596,12 +33643,6 @@ Instead styling against the role which is more general and likely a better appro
33596
33643
  get diesRenderInfo() {
33597
33644
  return this.prerendering.diesRenderInfo;
33598
33645
  }
33599
- get mainCircleLocation() {
33600
- return {
33601
- x: this.computations.containerDimensions.width / 2,
33602
- y: this.computations.containerDimensions.height / 2
33603
- };
33604
- }
33605
33646
  }
33606
33647
 
33607
33648
  /**
@@ -33646,7 +33687,7 @@ Instead styling against the role which is more general and likely a better appro
33646
33687
  }
33647
33688
  }
33648
33689
  renderText() {
33649
- this.dieSize = this.dimensions.width
33690
+ const dieSize = this.dimensions.width
33650
33691
  * this.dimensions.height
33651
33692
  * (this.wafermap.transform.k || 1);
33652
33693
  const fontsize = this.labelFontSize;
@@ -33654,17 +33695,17 @@ Instead styling against the role which is more general and likely a better appro
33654
33695
  this.context.fillStyle = '#ffffff';
33655
33696
  this.context.textAlign = 'center';
33656
33697
  this.context.lineCap = 'butt';
33657
- const aproxTextHeight = this.context.measureText('M');
33658
- if (this.dieSize >= 50) {
33698
+ const approxTextHeight = this.context.measureText('M');
33699
+ if (dieSize >= 50) {
33659
33700
  for (const die of this.dies) {
33660
33701
  this.context.fillText(die.text, die.x + this.dimensions.width / 2, die.y
33661
33702
  + this.dimensions.height / 2
33662
- + aproxTextHeight.width / 2, this.dimensions.width - (this.dimensions.width / 100) * 20);
33703
+ + approxTextHeight.width / 2, this.dimensions.width - (this.dimensions.width / 100) * 20);
33663
33704
  }
33664
33705
  }
33665
33706
  }
33666
33707
  clearCanvas() {
33667
- this.context.clearRect(0, 0, this.wafermap.canvasSideLength * this.wafermap.transform.k, this.wafermap.canvasSideLength * this.wafermap.transform.k);
33708
+ this.context.clearRect(0, 0, this.wafermap.canvasWidth * this.wafermap.transform.k, this.wafermap.canvasHeight * this.wafermap.transform.k);
33668
33709
  }
33669
33710
  scaleCanvas() {
33670
33711
  this.context.translate(this.wafermap.transform.x, this.wafermap.transform.y);
@@ -33700,15 +33741,14 @@ Instead styling against the role which is more general and likely a better appro
33700
33741
  const zoomBehavior = zoom()
33701
33742
  .scaleExtent([
33702
33743
  1.1,
33703
- this.getZoomMax(this.wafermap.canvasSideLength
33704
- * this.wafermap.canvasSideLength, this.wafermap.dataManager.containerDimensions.width
33744
+ this.getZoomMax(this.wafermap.canvasWidth * this.wafermap.canvasHeight, this.wafermap.dataManager.containerDimensions.width
33705
33745
  * this.wafermap.dataManager.containerDimensions.height)
33706
33746
  ])
33707
33747
  .translateExtent([
33708
33748
  this.minExtentPoint,
33709
33749
  [
33710
- this.wafermap.canvasSideLength + this.extentPadding,
33711
- this.wafermap.canvasSideLength + this.extentPadding
33750
+ this.wafermap.canvasWidth + this.extentPadding,
33751
+ this.wafermap.canvasHeight + this.extentPadding
33712
33752
  ]
33713
33753
  ])
33714
33754
  .filter((event) => {
@@ -33784,10 +33824,6 @@ Instead styling against the role which is more general and likely a better appro
33784
33824
  * @internal
33785
33825
  */
33786
33826
  this.renderQueued = false;
33787
- /**
33788
- * @internal
33789
- */
33790
- this.canvasSideLength = 0;
33791
33827
  /**
33792
33828
  * @internal
33793
33829
  */
@@ -33815,7 +33851,7 @@ Instead styling against the role which is more general and likely a better appro
33815
33851
  */
33816
33852
  render() {
33817
33853
  this.renderQueued = false;
33818
- this.initalizeInternalModules();
33854
+ this.initializeInternalModules();
33819
33855
  this.renderer?.drawWafer();
33820
33856
  }
33821
33857
  queueRender() {
@@ -33827,7 +33863,7 @@ Instead styling against the role which is more general and likely a better appro
33827
33863
  DOM.queueUpdate(() => this.render());
33828
33864
  }
33829
33865
  }
33830
- initalizeInternalModules() {
33866
+ initializeInternalModules() {
33831
33867
  this.eventCoordinator?.detachEvents();
33832
33868
  this.dataManager = new DataManager(this);
33833
33869
  this.renderer = new RenderingModule(this);
@@ -33840,7 +33876,12 @@ Instead styling against the role which is more general and likely a better appro
33840
33876
  return;
33841
33877
  }
33842
33878
  const { height, width } = entry.contentRect;
33843
- this.canvasSideLength = Math.min(height, width);
33879
+ // Updating the canvas size clears its contents so update it explicitly instead of
33880
+ // via template bindings so we can confirm that it happens before render
33881
+ this.canvas.width = width;
33882
+ this.canvas.height = height;
33883
+ this.canvasWidth = width;
33884
+ this.canvasHeight = height;
33844
33885
  });
33845
33886
  resizeObserver.observe(this);
33846
33887
  return resizeObserver;
@@ -33875,13 +33916,11 @@ Instead styling against the role which is more general and likely a better appro
33875
33916
  transformChanged() {
33876
33917
  this.queueRender();
33877
33918
  }
33878
- canvasSideLengthChanged() {
33879
- if (this.canvasSideLength !== undefined
33880
- && this.canvasSideLength !== 0) {
33881
- this.canvas.width = this.canvasSideLength;
33882
- this.canvas.height = this.canvasSideLength;
33883
- this.queueRender();
33884
- }
33919
+ canvasWidthChanged() {
33920
+ this.queueRender();
33921
+ }
33922
+ canvasHeightChanged() {
33923
+ this.queueRender();
33885
33924
  }
33886
33925
  }
33887
33926
  __decorate$1([
@@ -33914,7 +33953,10 @@ Instead styling against the role which is more general and likely a better appro
33914
33953
  ], WaferMap.prototype, "colorScaleMode", void 0);
33915
33954
  __decorate$1([
33916
33955
  observable
33917
- ], WaferMap.prototype, "canvasSideLength", void 0);
33956
+ ], WaferMap.prototype, "canvasWidth", void 0);
33957
+ __decorate$1([
33958
+ observable
33959
+ ], WaferMap.prototype, "canvasHeight", void 0);
33918
33960
  __decorate$1([
33919
33961
  observable
33920
33962
  ], WaferMap.prototype, "transform", void 0);