@ni/nimble-components 22.1.1 → 23.0.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 (44) hide show
  1. package/dist/all-components-bundle.js +280 -210
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +3428 -3424
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/theme-provider/design-token-comments.js +24 -16
  6. package/dist/esm/theme-provider/design-token-comments.js.map +1 -1
  7. package/dist/esm/theme-provider/design-token-names.d.ts +1 -1
  8. package/dist/esm/theme-provider/design-token-names.js +25 -16
  9. package/dist/esm/theme-provider/design-token-names.js.map +1 -1
  10. package/dist/esm/theme-provider/design-tokens.d.ts +3 -2
  11. package/dist/esm/theme-provider/design-tokens.js +5 -3
  12. package/dist/esm/theme-provider/design-tokens.js.map +1 -1
  13. package/dist/esm/wafer-map/index.d.ts +13 -6
  14. package/dist/esm/wafer-map/index.js +33 -16
  15. package/dist/esm/wafer-map/index.js.map +1 -1
  16. package/dist/esm/wafer-map/modules/data-manager.js +1 -1
  17. package/dist/esm/wafer-map/modules/data-manager.js.map +1 -1
  18. package/dist/esm/wafer-map/modules/experimental/hover-handler.d.ts +23 -0
  19. package/dist/esm/wafer-map/modules/experimental/hover-handler.js +80 -0
  20. package/dist/esm/wafer-map/modules/experimental/hover-handler.js.map +1 -0
  21. package/dist/esm/wafer-map/modules/{worker-renderer.d.ts → experimental/worker-renderer.d.ts} +1 -1
  22. package/dist/esm/wafer-map/modules/{worker-renderer.js → experimental/worker-renderer.js} +1 -1
  23. package/dist/esm/wafer-map/modules/experimental/worker-renderer.js.map +1 -0
  24. package/dist/esm/wafer-map/modules/hover-handler.d.ts +10 -2
  25. package/dist/esm/wafer-map/modules/hover-handler.js +43 -26
  26. package/dist/esm/wafer-map/modules/hover-handler.js.map +1 -1
  27. package/dist/esm/wafer-map/modules/prerendering.d.ts +1 -3
  28. package/dist/esm/wafer-map/modules/prerendering.js +5 -6
  29. package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
  30. package/dist/esm/wafer-map/modules/wafer-map-validator.js +17 -23
  31. package/dist/esm/wafer-map/modules/wafer-map-validator.js.map +1 -1
  32. package/dist/esm/wafer-map/modules/zoom-handler.d.ts +11 -7
  33. package/dist/esm/wafer-map/modules/zoom-handler.js +27 -37
  34. package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
  35. package/dist/esm/wafer-map/template.d.ts +1 -1
  36. package/dist/esm/wafer-map/types.d.ts +11 -0
  37. package/dist/esm/wafer-map/types.js.map +1 -1
  38. package/dist/tokens-internal.scss +96 -48
  39. package/dist/tokens.scss +56 -32
  40. package/package.json +3 -3
  41. package/dist/esm/wafer-map/modules/event-coordinator.d.ts +0 -19
  42. package/dist/esm/wafer-map/modules/event-coordinator.js +0 -35
  43. package/dist/esm/wafer-map/modules/event-coordinator.js.map +0 -1
  44. package/dist/esm/wafer-map/modules/worker-renderer.js.map +0 -1
@@ -16301,7 +16301,7 @@
16301
16301
 
16302
16302
  /**
16303
16303
  * Do not edit directly
16304
- * Generated on Wed, 20 Mar 2024 16:28:54 GMT
16304
+ * Generated on Mon, 25 Mar 2024 16:47:43 GMT
16305
16305
  */
16306
16306
 
16307
16307
  const Information100DarkUi = "#a46eff";
@@ -16334,6 +16334,8 @@
16334
16334
  const ControlLabel1Weight = "600";
16335
16335
  const BodyFamily = "Source Sans Pro";
16336
16336
  const BodyWeight = "400";
16337
+ const Body2Family = "Source Sans Pro";
16338
+ const Body2Weight = "400";
16337
16339
  const GroupLabel1Family = "Source Sans Pro";
16338
16340
  const GroupLabel1Weight = "600";
16339
16341
  const ButtonLabel1Family = "Source Sans Pro";
@@ -16367,6 +16369,7 @@
16367
16369
  const Title2Size = "22px";
16368
16370
  const ControlLabel1Size = "11px";
16369
16371
  const BodySize = "14px";
16372
+ const Body2Size = "16px";
16370
16373
  const GroupLabel1Size = "11px";
16371
16374
  const ButtonLabel1Size = "12.800000190734863px";
16372
16375
  const Title1Size = "19px";
@@ -16383,6 +16386,7 @@
16383
16386
  const ErrorLightUiSize = "11px";
16384
16387
  const GridHeaderSize = "12.800000190734863px";
16385
16388
  const BodyLineHeight = "18px";
16389
+ const Body2LineHeight = "16px";
16386
16390
  const ControlLabel1LineHeight = "16px";
16387
16391
  const GroupLabel1LineHeight = "16px";
16388
16392
  const Headline2LineHeight = "40px";
@@ -16595,22 +16599,6 @@
16595
16599
  placeholderFontWeight: 'placeholder-font-weight',
16596
16600
  placeholderFontLineHeight: 'placeholder-font-line-height',
16597
16601
  placeholderFallbackFontFamily: 'placeholder-fallback-font-family',
16598
- bodyEmphasizedFont: 'body-emphasized-font',
16599
- bodyEmphasizedFontColor: 'body-emphasized-font-color',
16600
- bodyEmphasizedDisabledFontColor: 'body-emphasized-disabled-font-color',
16601
- bodyEmphasizedFontFamily: 'body-emphasized-font-family',
16602
- bodyEmphasizedFontSize: 'body-emphasized-font-size',
16603
- bodyEmphasizedFontWeight: 'body-emphasized-font-weight',
16604
- bodyEmphasizedFontLineHeight: 'body-emphasized-font-line-height',
16605
- bodyEmphasizedFallbackFontFamily: 'body-emphasized-fallback-font-family',
16606
- bodyEmphasizedPlus1Font: 'body-emphasized-plus-1-font',
16607
- bodyEmphasizedPlus1FontColor: 'body-emphasized-plus-1-font-color',
16608
- bodyEmphasizedPlus1DisabledFontColor: 'body-emphasized-plus-1-disabled-font-color',
16609
- bodyEmphasizedPlus1FontFamily: 'body-emphasized-plus-1-font-family',
16610
- bodyEmphasizedPlus1FontSize: 'body-emphasized-plus-1-font-size',
16611
- bodyEmphasizedPlus1FontWeight: 'body-emphasized-plus-1-font-weight',
16612
- bodyEmphasizedPlus1FontLineHeight: 'body-emphasized-plus-1-font-line-height',
16613
- bodyEmphasizedPlus1FallbackFontFamily: 'body-emphasized-plus-1-fallback-font-family',
16614
16602
  bodyFont: 'body-font',
16615
16603
  bodyFontColor: 'body-font-color',
16616
16604
  bodyDisabledFontColor: 'body-disabled-font-color',
@@ -16619,6 +16607,30 @@
16619
16607
  bodyFontWeight: 'body-font-weight',
16620
16608
  bodyFontLineHeight: 'body-font-line-height',
16621
16609
  bodyFallbackFontFamily: 'body-fallback-font-family',
16610
+ bodyEmphasizedFont: 'body-emphasized-font',
16611
+ bodyEmphasizedFontColor: 'body-emphasized-font-color',
16612
+ bodyEmphasizedDisabledFontColor: 'body-emphasized-disabled-font-color',
16613
+ bodyEmphasizedFontFamily: 'body-emphasized-font-family',
16614
+ bodyEmphasizedFontSize: 'body-emphasized-font-size',
16615
+ bodyEmphasizedFontWeight: 'body-emphasized-font-weight',
16616
+ bodyEmphasizedFontLineHeight: 'body-emphasized-font-line-height',
16617
+ bodyEmphasizedFallbackFontFamily: 'body-emphasized-fallback-font-family',
16618
+ bodyPlus1Font: 'body-plus-1-font',
16619
+ bodyPlus1FontColor: 'body-plus-1-font-color',
16620
+ bodyPlus1DisabledFontColor: 'body-plus-1-disabled-font-color',
16621
+ bodyPlus1FontFamily: 'body-plus-1-font-family',
16622
+ bodyPlus1FontSize: 'body-plus-1-font-size',
16623
+ bodyPlus1FontWeight: 'body-plus-1-font-weight',
16624
+ bodyPlus1FontLineHeight: 'body-plus-1-font-line-height',
16625
+ bodyPlus1FallbackFontFamily: 'body-plus-1-fallback-font-family',
16626
+ bodyPlus1EmphasizedFont: 'body-plus-1-emphasized-font',
16627
+ bodyPlus1EmphasizedFontColor: 'body-plus-1-emphasized-font-color',
16628
+ bodyPlus1EmphasizedDisabledFontColor: 'body-plus-1-emphasized-disabled-font-color',
16629
+ bodyPlus1EmphasizedFontFamily: 'body-plus-1-emphasized-font-family',
16630
+ bodyPlus1EmphasizedFontSize: 'body-plus-1-emphasized-font-size',
16631
+ bodyPlus1EmphasizedFontWeight: 'body-plus-1-emphasized-font-weight',
16632
+ bodyPlus1EmphasizedFontLineHeight: 'body-plus-1-emphasized-font-line-height',
16633
+ bodyPlus1EmphasizedFallbackFontFamily: 'body-plus-1-emphasized-fallback-font-family',
16622
16634
  groupHeaderFont: 'group-header-font',
16623
16635
  groupHeaderFontColor: 'group-header-font-color',
16624
16636
  groupHeaderDisabledFontColor: 'group-header-disabled-font-color',
@@ -16854,6 +16866,7 @@
16854
16866
  const LinkFallbackFontFamily = 'Source Sans Pro Fallback';
16855
16867
  const PlaceholderFallbackFontFamily = 'Source Sans Pro Fallback';
16856
16868
  const BodyFallbackFontFamily = 'Source Sans Pro Fallback';
16869
+ const Body2FallbackFontFamily = 'Source Sans Pro Fallback';
16857
16870
  const BodyEmphasizedFallbackFontFamily = 'Source Sans Pro Fallback';
16858
16871
  const BodyEmphasized2FallbackFontFamily = 'Source Sans Pro Fallback';
16859
16872
  const GroupLabel1FallbackFontFamily = 'Source Sans Pro Fallback';
@@ -16937,9 +16950,10 @@
16937
16950
  const [linkProminentFont, linkProminentFontColor, linkProminentDisabledFontColor, linkProminentFontFamily, linkProminentFontWeight, linkProminentFontSize, linkProminentFontLineHeight, linkProminentFallbackFontFamily] = createFontTokens(tokenNames.linkProminentFont, (element) => getColorForTheme(element, DigitalGreenDark, PowerGreen, PowerGreen), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), LinkLightUiFamily, LinkLightUiWeight, LinkLightUiSize, LinkLineHeight, LinkFallbackFontFamily);
16938
16951
  const [linkActiveProminentFont, linkActiveProminentFontColor, linkActiveProminentDisabledFontColor, linkActiveProminentFontFamily, linkActiveProminentFontWeight, linkActiveProminentFontSize, linkActiveProminentFontLineHeight, linkActiveProminentFallbackFontFamily] = createFontTokens(tokenNames.linkActiveProminentFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), LinkLightUiFamily, LinkLightUiWeight, LinkLightUiSize, LinkLineHeight, LinkFallbackFontFamily);
16939
16952
  const [placeholderFont, placeholderFontColor, placeholderDisabledFontColor, placeholderFontFamily, placeholderFontWeight, placeholderFontSize, placeholderFontLineHeight, placeholderFallbackFontFamily] = createFontTokens(tokenNames.placeholderFont, (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.6), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), PlaceholderFamily, PlaceholderWeight, PlaceholderSize, PlaceholderLineHeight, PlaceholderFallbackFontFamily);
16940
- const [bodyEmphasizedFont, bodyEmphasizedFontColor, bodyEmphasizedDisabledFontColor, bodyEmphasizedFontFamily, bodyEmphasizedFontWeight, bodyEmphasizedFontSize, bodyEmphasizedFontLineHeight, bodyEmphasizedFallbackFontFamily] = createFontTokens(tokenNames.bodyEmphasizedFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), BodyEmphasizedFamily, BodyEmphasizedWeight, BodyEmphasizedSize, BodyEmphasizedLineHeight, BodyEmphasizedFallbackFontFamily);
16941
- createFontTokens(tokenNames.bodyEmphasizedPlus1Font, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), BodyEmphasized2Family, BodyEmphasized2Weight, BodyEmphasized2Size, BodyEmphasized2LineHeight, BodyEmphasized2FallbackFontFamily);
16942
16953
  const [bodyFont, bodyFontColor, bodyDisabledFontColor, bodyFontFamily, bodyFontWeight, bodyFontSize, bodyFontLineHeight, bodyFallbackFontFamily] = createFontTokens(tokenNames.bodyFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), BodyFamily, BodyWeight, BodySize, BodyLineHeight, BodyFallbackFontFamily);
16954
+ const [bodyEmphasizedFont, bodyEmphasizedFontColor, bodyEmphasizedDisabledFontColor, bodyEmphasizedFontFamily, bodyEmphasizedFontWeight, bodyEmphasizedFontSize, bodyEmphasizedFontLineHeight, bodyEmphasizedFallbackFontFamily] = createFontTokens(tokenNames.bodyEmphasizedFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), BodyEmphasizedFamily, BodyEmphasizedWeight, BodyEmphasizedSize, BodyEmphasizedLineHeight, BodyEmphasizedFallbackFontFamily);
16955
+ createFontTokens(tokenNames.bodyPlus1Font, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), Body2Family, Body2Weight, Body2Size, Body2LineHeight, Body2FallbackFontFamily);
16956
+ createFontTokens(tokenNames.bodyPlus1EmphasizedFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), BodyEmphasized2Family, BodyEmphasized2Weight, BodyEmphasized2Size, BodyEmphasized2LineHeight, BodyEmphasized2FallbackFontFamily);
16943
16957
  const [groupHeaderFont, groupHeaderFontColor, groupHeaderDisabledFontColor, groupHeaderFontFamily, groupHeaderFontWeight, groupHeaderFontSize, groupHeaderFontLineHeight, groupHeaderFallbackFontFamily] = createFontTokens(tokenNames.groupHeaderFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), GroupLabel1Family, GroupLabel1Weight, GroupLabel1Size, GroupLabel1LineHeight, GroupLabel1FallbackFontFamily);
16944
16958
  const [controlLabelFont, controlLabelFontColor, controlLabelDisabledFontColor, controlLabelFontFamily, controlLabelFontWeight, controlLabelFontSize, controlLabelFontLineHeight, controlLabelFallbackFontFamily] = createFontTokens(tokenNames.controlLabelFont, (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.6), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), ControlLabel1Family, ControlLabel1Weight, ControlLabel1Size, ControlLabel1LineHeight, ControlLabel1FallbackFontFamily);
16945
16959
  const [buttonLabelFont, buttonLabelFontColor, buttonLabelDisabledFontColor, buttonLabelFontFamily, buttonLabelFontWeight, buttonLabelFontSize, buttonLabelFontLineHeight, buttonLabelFallbackFontFamily] = createFontTokens(tokenNames.buttonLabelFont, (element) => getDefaultFontColorForTheme(element), (element) => hexToRgbaCssColor(getDefaultFontColorForTheme(element), 0.3), ButtonLabel1Family, ButtonLabel1Weight, ButtonLabel1Size, ButtonLabel1LineHeight, ButtonLabel1FallbackFontFamily);
@@ -73574,12 +73588,7 @@ img.ProseMirror-separator {
73574
73588
 
73575
73589
  var identity$2 = new Transform(1, 0, 0);
73576
73590
 
73577
- transform.prototype = Transform.prototype;
73578
-
73579
- function transform(node) {
73580
- while (!node.__zoom) if (!(node = node.parentNode)) return identity$2;
73581
- return node.__zoom;
73582
- }
73591
+ Transform.prototype;
73583
73592
 
73584
73593
  function nopropagation(event) {
73585
73594
  event.stopImmediatePropagation();
@@ -75298,16 +75307,15 @@ img.ProseMirror-separator {
75298
75307
  get diesRenderInfo() {
75299
75308
  return this._diesRenderInfo;
75300
75309
  }
75301
- constructor(wafermap, dataManager) {
75310
+ constructor(wafermap) {
75302
75311
  this.wafermap = wafermap;
75303
- this.dataManager = dataManager;
75304
75312
  this.fontSizeFactor = 0.8;
75305
75313
  this.nonHighlightedOpacity = 0.3;
75306
75314
  this.emptyDieColor = 'rgba(218,223,236,1)';
75307
75315
  this.nanDieColor = 'rgba(122,122,122,1)';
75308
75316
  }
75309
75317
  updateLabelsFontSize() {
75310
- this._labelsFontSize = this.calculateLabelsFontSize(this.dataManager.dieDimensions, this.wafermap.maxCharacters);
75318
+ this._labelsFontSize = this.calculateLabelsFontSize(this.wafermap.dataManager.dieDimensions, this.wafermap.maxCharacters);
75311
75319
  this.updateDiesRenderInfo();
75312
75320
  }
75313
75321
  updateDiesRenderInfo() {
@@ -75318,9 +75326,9 @@ img.ProseMirror-separator {
75318
75326
  .filter(isDieRenderInfo);
75319
75327
  }
75320
75328
  computeDieRenderInfo(die) {
75321
- const margin = this.dataManager.margin;
75322
- const scaledX = this.dataManager.horizontalScale(die.x);
75323
- const scaledY = this.dataManager.verticalScale(die.y);
75329
+ const margin = this.wafermap.dataManager.margin;
75330
+ const scaledX = this.wafermap.dataManager.horizontalScale(die.x);
75331
+ const scaledY = this.wafermap.dataManager.verticalScale(die.y);
75324
75332
  if (scaledX === undefined || scaledY === undefined) {
75325
75333
  return null;
75326
75334
  }
@@ -75439,7 +75447,7 @@ img.ProseMirror-separator {
75439
75447
  constructor(wafermap) {
75440
75448
  this.wafermap = wafermap;
75441
75449
  this.computations = new Computations(wafermap);
75442
- this.prerendering = new Prerendering(wafermap, this);
75450
+ this.prerendering = new Prerendering(wafermap);
75443
75451
  }
75444
75452
  updateContainerDimensions() {
75445
75453
  this.computations.updateContainerDimensions();
@@ -75588,147 +75596,6 @@ img.ProseMirror-separator {
75588
75596
  }
75589
75597
  }
75590
75598
 
75591
- /**
75592
- * ZoomHandler deals with user interactions and events like zooming
75593
- */
75594
- class ZoomHandler {
75595
- constructor(wafermap) {
75596
- this.wafermap = wafermap;
75597
- this.zoomTransform = identity$2;
75598
- this.minScale = 1.1;
75599
- this.minExtentPoint = [-100, -100];
75600
- this.extentPadding = 100;
75601
- }
75602
- createZoomBehavior() {
75603
- this.zoomBehavior = zoom()
75604
- .scaleExtent([
75605
- 1.1,
75606
- this.getZoomMax(this.wafermap.canvasWidth * this.wafermap.canvasHeight, this.wafermap.dataManager.containerDimensions.width
75607
- * this.wafermap.dataManager.containerDimensions.height)
75608
- ])
75609
- .translateExtent([
75610
- this.minExtentPoint,
75611
- [
75612
- this.wafermap.canvasWidth + this.extentPadding,
75613
- this.wafermap.canvasHeight + this.extentPadding
75614
- ]
75615
- ])
75616
- .filter((event) => {
75617
- const transform$1 = transform(this.wafermap.canvas);
75618
- const filterEval = transform$1.k >= this.minScale || event.type === 'wheel';
75619
- return filterEval;
75620
- })
75621
- .on('zoom', (event) => {
75622
- // D3 will automatically remove existing handlers when adding new ones
75623
- // See: https://github.com/d3/d3-zoom/blob/v3.0.0/README.md#zoom_on
75624
- this.rescale(event);
75625
- });
75626
- this.zoomBehavior(select(this.wafermap.canvas));
75627
- }
75628
- rescale(event) {
75629
- const transform = event.transform;
75630
- if (transform.k === this.minScale) {
75631
- this.zoomTransform = identity$2;
75632
- this.zoomBehavior.transform(select(this.wafermap.canvas), identity$2);
75633
- }
75634
- else {
75635
- this.zoomTransform = transform;
75636
- }
75637
- this.wafermap.transform = this.zoomTransform;
75638
- }
75639
- getZoomMax(canvasArea, dataArea) {
75640
- return Math.ceil((dataArea / canvasArea) * 100);
75641
- }
75642
- }
75643
-
75644
- /**
75645
- * HoverHandler deals with user interactions and events like hovering
75646
- */
75647
- class HoverHandler {
75648
- constructor(wafermap) {
75649
- this.wafermap = wafermap;
75650
- }
75651
- mousemove(event) {
75652
- const mousePosition = {
75653
- x: event.offsetX,
75654
- y: event.offsetY
75655
- };
75656
- if (!this.hoversOverDie(this.wafermap, mousePosition)) {
75657
- this.wafermap.hoverDie = undefined;
75658
- return;
75659
- }
75660
- // get original mouse position in case we are in zoom.
75661
- const invertedPoint = this.wafermap.transform.invert([
75662
- mousePosition.x,
75663
- mousePosition.y
75664
- ]);
75665
- const dieCoordinates = this.calculateDieCoordinates(this.wafermap, {
75666
- x: invertedPoint[0],
75667
- y: invertedPoint[1]
75668
- });
75669
- this.wafermap.hoverDie = this.wafermap.dataManager.getWaferMapDie(dieCoordinates);
75670
- }
75671
- mouseout() {
75672
- this.wafermap.hoverDie = undefined;
75673
- }
75674
- calculateDieCoordinates(wafermap, mousePosition) {
75675
- const originLocation = wafermap.originLocation;
75676
- const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
75677
- || originLocation === WaferMapOriginLocation.topLeft
75678
- ? Math.floor
75679
- : Math.ceil;
75680
- const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
75681
- || originLocation === WaferMapOriginLocation.bottomRight
75682
- ? Math.floor
75683
- : Math.ceil;
75684
- // go to x and y scale to get the x,y values of the die.
75685
- const x = xRoundFunction(wafermap.dataManager.invertedHorizontalScale(mousePosition.x - wafermap.dataManager.margin.left));
75686
- const y = yRoundFunction(wafermap.dataManager.invertedVerticalScale(mousePosition.y - wafermap.dataManager.margin.top));
75687
- return { x, y };
75688
- }
75689
- hoversOverDie(wafermap, mousePosition) {
75690
- const rgba = wafermap.canvasContext.getImageData(mousePosition.x, mousePosition.y, 1, 1).data;
75691
- let rgbaSum = 0;
75692
- for (const color of rgba) {
75693
- rgbaSum += color;
75694
- }
75695
- return rgbaSum > 0;
75696
- }
75697
- }
75698
-
75699
- /**
75700
- * EventCoordinator deals with user interactions and events
75701
- */
75702
- class EventCoordinator {
75703
- constructor(wafermap) {
75704
- this.wafermap = wafermap;
75705
- this.onWheelMove = (event) => {
75706
- event.preventDefault();
75707
- };
75708
- this.onMouseMove = (event) => {
75709
- this.hoverHandler.mousemove(event);
75710
- };
75711
- this.onMouseOut = () => {
75712
- this.hoverHandler.mouseout();
75713
- };
75714
- this.zoomHandler = new ZoomHandler(wafermap);
75715
- this.hoverHandler = new HoverHandler(wafermap);
75716
- }
75717
- attachEvents() {
75718
- this.zoomHandler.createZoomBehavior();
75719
- this.wafermap.addEventListener('mousemove', this.onMouseMove);
75720
- this.wafermap.addEventListener('mouseout', this.onMouseOut);
75721
- this.wafermap.canvas.addEventListener('wheel', this.onWheelMove, {
75722
- passive: false
75723
- });
75724
- }
75725
- detachEvents() {
75726
- this.wafermap.removeEventListener('mousemove', this.onMouseMove);
75727
- this.wafermap.removeEventListener('mouseout', this.onMouseOut);
75728
- this.wafermap.canvas.removeEventListener('wheel', this.onWheelMove);
75729
- }
75730
- }
75731
-
75732
75599
  const trackedItems = [
75733
75600
  'highlightedTags',
75734
75601
  'canvasWidth',
@@ -76434,10 +76301,10 @@ img.ProseMirror-separator {
76434
76301
  }
76435
76302
  validateGridDimensions() {
76436
76303
  this.invalidGridDimensions = false;
76437
- if (typeof this.wafermap.gridMinX === 'undefined'
76438
- && typeof this.wafermap.gridMaxX === 'undefined'
76439
- && typeof this.wafermap.gridMinY === 'undefined'
76440
- && typeof this.wafermap.gridMaxY === 'undefined') {
76304
+ if (this.wafermap.gridMinX === undefined
76305
+ && this.wafermap.gridMaxX === undefined
76306
+ && this.wafermap.gridMinY === undefined
76307
+ && this.wafermap.gridMaxY === undefined) {
76441
76308
  this.invalidGridDimensions = false;
76442
76309
  }
76443
76310
  else if (typeof this.wafermap.gridMinX !== 'number'
@@ -76456,25 +76323,19 @@ img.ProseMirror-separator {
76456
76323
  this.invalidDiesTableSchema = false;
76457
76324
  }
76458
76325
  else {
76459
- const colIndexField = this.wafermap.diesTable.schema.fields.findIndex(f => f.name === 'colIndex');
76460
- const rowIndexField = this.wafermap.diesTable.schema.fields.findIndex(f => f.name === 'rowIndex');
76461
- const valueField = this.wafermap.diesTable.schema.fields.findIndex(f => f.name === 'value');
76462
- if (this.wafermap.diesTable.numCols < 3
76463
- || colIndexField === -1
76464
- || rowIndexField === -1
76465
- || valueField === -1
76466
- || !DataType.isInt(this.wafermap.diesTable.schema.fields[colIndexField].type)
76467
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
76468
- || this.wafermap.diesTable.schema.fields[colIndexField].type
76469
- .bitWidth !== 32
76470
- || !DataType.isInt(this.wafermap.diesTable.schema.fields[rowIndexField].type)
76471
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
76472
- || this.wafermap.diesTable.schema.fields[rowIndexField].type
76473
- .bitWidth !== 32
76474
- || !DataType.isFloat(this.wafermap.diesTable.schema.fields[valueField].type)
76475
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
76476
- || this.wafermap.diesTable.schema.fields[valueField].type
76477
- .precision !== Precision.DOUBLE) {
76326
+ const fields = this.wafermap.diesTable.schema.fields;
76327
+ const colField = fields.find(field => field.name === 'colIndex');
76328
+ const rowField = fields.find(field => field.name === 'rowIndex');
76329
+ const valueField = fields.find(field => field.name === 'value');
76330
+ if (!colField
76331
+ || !rowField
76332
+ || !valueField
76333
+ || !DataType.isInt(colField.type)
76334
+ || colField.type.bitWidth !== 32
76335
+ || !DataType.isInt(rowField.type)
76336
+ || rowField.type.bitWidth !== 32
76337
+ || !DataType.isFloat(valueField.type)
76338
+ || valueField.type.precision !== Precision.DOUBLE) {
76478
76339
  this.invalidDiesTableSchema = true;
76479
76340
  }
76480
76341
  }
@@ -76527,6 +76388,200 @@ img.ProseMirror-separator {
76527
76388
  }
76528
76389
  }
76529
76390
 
76391
+ /**
76392
+ * HoverHandler deals with user interactions and events like hovering
76393
+ */
76394
+ let HoverHandler$1 = class HoverHandler {
76395
+ constructor(wafermap) {
76396
+ this.wafermap = wafermap;
76397
+ this.onMouseMove = (event) => {
76398
+ if (this.wafermap.isExperimentalRenderer()) {
76399
+ return;
76400
+ }
76401
+ const mousePosition = {
76402
+ x: event.offsetX,
76403
+ y: event.offsetY
76404
+ };
76405
+ if (!this.hoversOverDie(mousePosition)) {
76406
+ this.wafermap.hoverDie = undefined;
76407
+ return;
76408
+ }
76409
+ // get original mouse position in case we are in zoom.
76410
+ const invertedPoint = this.wafermap.transform.invert([
76411
+ mousePosition.x,
76412
+ mousePosition.y
76413
+ ]);
76414
+ const dieCoordinates = this.calculateDieCoordinates({
76415
+ x: invertedPoint[0],
76416
+ y: invertedPoint[1]
76417
+ });
76418
+ this.wafermap.hoverDie = this.wafermap.dataManager.getWaferMapDie(dieCoordinates);
76419
+ };
76420
+ this.onMouseOut = (_event) => {
76421
+ this.wafermap.hoverDie = undefined;
76422
+ };
76423
+ }
76424
+ /**
76425
+ * @internal
76426
+ */
76427
+ connect() {
76428
+ this.wafermap.addEventListener('mousemove', this.onMouseMove);
76429
+ this.wafermap.addEventListener('mouseout', this.onMouseOut);
76430
+ }
76431
+ /**
76432
+ * @internal
76433
+ */
76434
+ disconnect() {
76435
+ this.wafermap.removeEventListener('mousemove', this.onMouseMove);
76436
+ this.wafermap.removeEventListener('mouseout', this.onMouseOut);
76437
+ }
76438
+ calculateDieCoordinates(mousePosition) {
76439
+ const originLocation = this.wafermap.originLocation;
76440
+ const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
76441
+ || originLocation === WaferMapOriginLocation.topLeft
76442
+ ? Math.floor
76443
+ : Math.ceil;
76444
+ const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
76445
+ || originLocation === WaferMapOriginLocation.bottomRight
76446
+ ? Math.floor
76447
+ : Math.ceil;
76448
+ // go to x and y scale to get the x,y values of the die.
76449
+ const x = xRoundFunction(this.wafermap.dataManager.invertedHorizontalScale(mousePosition.x - this.wafermap.dataManager.margin.left));
76450
+ const y = yRoundFunction(this.wafermap.dataManager.invertedVerticalScale(mousePosition.y - this.wafermap.dataManager.margin.top));
76451
+ return { x, y };
76452
+ }
76453
+ hoversOverDie(mousePosition) {
76454
+ const rgba = this.wafermap.canvasContext.getImageData(mousePosition.x, mousePosition.y, 1, 1).data;
76455
+ let rgbaSum = 0;
76456
+ for (const color of rgba) {
76457
+ rgbaSum += color;
76458
+ }
76459
+ return rgbaSum > 0;
76460
+ }
76461
+ };
76462
+
76463
+ /**
76464
+ * HoverHandler deals with user interactions and events like hovering
76465
+ */
76466
+ class HoverHandler {
76467
+ constructor(wafermap) {
76468
+ this.wafermap = wafermap;
76469
+ /**
76470
+ * @internal
76471
+ * keep public for testing until data manager refactor
76472
+ */
76473
+ this.onMouseMove = (event) => {
76474
+ if (!this.wafermap.isExperimentalRenderer()) {
76475
+ return;
76476
+ }
76477
+ // get original mouse position in case we are in zoom.
76478
+ const invertedPoint = this.wafermap.transform.invert([
76479
+ event.offsetX,
76480
+ event.offsetY
76481
+ ]);
76482
+ // does not work yet until data manager will parse diesTable
76483
+ const dieCoordinates = this.calculateDieCoordinates({
76484
+ x: invertedPoint[0],
76485
+ y: invertedPoint[1]
76486
+ });
76487
+ const colIndex = this.wafermap
76488
+ .diesTable.getChild('colIndex')
76489
+ .toArray();
76490
+ const rowIndex = this.wafermap
76491
+ .diesTable.getChild('rowIndex')
76492
+ .toArray();
76493
+ // will replace iterating with arquero filtering after fixing errors
76494
+ for (let i = 0; i < colIndex.length; i++) {
76495
+ if (colIndex[i] === dieCoordinates.x
76496
+ && rowIndex[i] === dieCoordinates.y) {
76497
+ this.wafermap.hoverDie = {
76498
+ index: i,
76499
+ x: dieCoordinates.x,
76500
+ y: dieCoordinates.y
76501
+ };
76502
+ return;
76503
+ }
76504
+ }
76505
+ this.wafermap.hoverDie = undefined;
76506
+ };
76507
+ this.onMouseOut = (_event) => {
76508
+ this.wafermap.hoverDie = undefined;
76509
+ };
76510
+ }
76511
+ /**
76512
+ * @internal
76513
+ */
76514
+ connect() {
76515
+ this.wafermap.addEventListener('mousemove', this.onMouseMove);
76516
+ this.wafermap.addEventListener('mouseout', this.onMouseOut);
76517
+ }
76518
+ /**
76519
+ * @internal
76520
+ */
76521
+ disconnect() {
76522
+ this.wafermap.removeEventListener('mousemove', this.onMouseMove);
76523
+ this.wafermap.removeEventListener('mouseout', this.onMouseOut);
76524
+ }
76525
+ calculateDieCoordinates(mousePosition) {
76526
+ const originLocation = this.wafermap.originLocation;
76527
+ const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
76528
+ || originLocation === WaferMapOriginLocation.topLeft
76529
+ ? Math.floor
76530
+ : Math.ceil;
76531
+ const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
76532
+ || originLocation === WaferMapOriginLocation.bottomRight
76533
+ ? Math.floor
76534
+ : Math.ceil;
76535
+ // go to x and y scale to get the x,y values of the die.
76536
+ const x = xRoundFunction(this.wafermap.dataManager.invertedHorizontalScale(mousePosition.x - this.wafermap.dataManager.margin.left));
76537
+ const y = yRoundFunction(this.wafermap.dataManager.invertedVerticalScale(mousePosition.y - this.wafermap.dataManager.margin.top));
76538
+ return { x, y };
76539
+ }
76540
+ }
76541
+
76542
+ /**
76543
+ * ZoomHandler deals with user interactions and events like zooming
76544
+ */
76545
+ class ZoomHandler {
76546
+ constructor(wafermap) {
76547
+ this.wafermap = wafermap;
76548
+ this.scaleExtent = [1, 100];
76549
+ this.minExtentPoint = [0, 0];
76550
+ this.onWheelMove = (event) => {
76551
+ event.preventDefault();
76552
+ };
76553
+ }
76554
+ /**
76555
+ * @internal
76556
+ */
76557
+ connect() {
76558
+ this.createZoomBehavior();
76559
+ this.wafermap.addEventListener('wheel', this.onWheelMove, {
76560
+ passive: false
76561
+ });
76562
+ }
76563
+ /**
76564
+ * @internal
76565
+ */
76566
+ disconnect() {
76567
+ zoom().on('zoom', null)(select(this.wafermap));
76568
+ this.wafermap.removeEventListener('wheel', this.onWheelMove);
76569
+ }
76570
+ createZoomBehavior() {
76571
+ zoom()
76572
+ .scaleExtent(this.scaleExtent)
76573
+ .translateExtent([
76574
+ this.minExtentPoint,
76575
+ [this.wafermap.canvasWidth, this.wafermap.canvasHeight]
76576
+ ])
76577
+ .on('zoom', (event) => {
76578
+ // D3 will automatically remove existing handlers when adding new ones
76579
+ // See: https://github.com/d3/d3-zoom/blob/v3.0.0/README.md#zoom_on
76580
+ this.wafermap.transform = event.transform;
76581
+ })(select(this.wafermap));
76582
+ }
76583
+ }
76584
+
76530
76585
  /**
76531
76586
  * A nimble-styled WaferMap
76532
76587
  */
@@ -76537,7 +76592,7 @@ img.ProseMirror-separator {
76537
76592
  * @internal
76538
76593
  * needs to be initialized before the properties trigger changes
76539
76594
  */
76540
- this.waferMapUpdateTracker = new WaferMapUpdateTracker(this);
76595
+ this.waferMapUpdateTracker = new WaferMapUpdateTracker(this.asRequiredFieldsWaferMap);
76541
76596
  this.originLocation = WaferMapOriginLocation.bottomLeft;
76542
76597
  this.gridMinX = undefined;
76543
76598
  this.gridMaxX = undefined;
@@ -76551,15 +76606,15 @@ img.ProseMirror-separator {
76551
76606
  /**
76552
76607
  * @internal
76553
76608
  */
76554
- this.dataManager = new DataManager(this);
76609
+ this.dataManager = new DataManager(this.asRequiredFieldsWaferMap);
76555
76610
  /**
76556
76611
  * @internal
76557
76612
  */
76558
- this.mainRenderer = new RenderingModule(this);
76613
+ this.mainRenderer = new RenderingModule(this.asRequiredFieldsWaferMap);
76559
76614
  /**
76560
76615
  * @internal
76561
76616
  */
76562
- this.workerRenderer = new WorkerRenderer(this);
76617
+ this.workerRenderer = new WorkerRenderer(this.asRequiredFieldsWaferMap);
76563
76618
  this.renderer = this.mainRenderer;
76564
76619
  /**
76565
76620
  * @internal
@@ -76591,9 +76646,11 @@ img.ProseMirror-separator {
76591
76646
  colors: [],
76592
76647
  values: []
76593
76648
  };
76594
- this.eventCoordinator = new EventCoordinator(this);
76649
+ this.hoverHandler = new HoverHandler$1(this.asRequiredFieldsWaferMap);
76650
+ this.experimentalHoverHandler = new HoverHandler(this.asRequiredFieldsWaferMap);
76651
+ this.zoomHandler = new ZoomHandler(this.asRequiredFieldsWaferMap);
76595
76652
  this.resizeObserver = this.createResizeObserver();
76596
- this.waferMapValidator = new WaferMapValidator(this);
76653
+ this.waferMapValidator = new WaferMapValidator(this.asRequiredFieldsWaferMap);
76597
76654
  }
76598
76655
  get validity() {
76599
76656
  return this.waferMapValidator.getValidity();
@@ -76603,11 +76660,17 @@ img.ProseMirror-separator {
76603
76660
  this.canvasContext = this.canvas.getContext('2d', {
76604
76661
  willReadFrequently: true
76605
76662
  });
76663
+ this.hoverHandler.connect();
76664
+ this.experimentalHoverHandler.connect();
76665
+ this.zoomHandler.connect();
76606
76666
  this.resizeObserver.observe(this);
76607
76667
  this.waferMapUpdateTracker.trackAll();
76608
76668
  }
76609
76669
  disconnectedCallback() {
76610
76670
  super.disconnectedCallback();
76671
+ this.hoverHandler.disconnect();
76672
+ this.experimentalHoverHandler.disconnect();
76673
+ this.zoomHandler.disconnect();
76611
76674
  this.resizeObserver.unobserve(this);
76612
76675
  }
76613
76676
  /**
@@ -76623,8 +76686,12 @@ img.ProseMirror-separator {
76623
76686
  if (this.validity.invalidDiesTableSchema) {
76624
76687
  return;
76625
76688
  }
76689
+ this.renderer = this.isExperimentalRenderer()
76690
+ ? this.workerRenderer
76691
+ : this.mainRenderer;
76626
76692
  if (this.waferMapUpdateTracker.requiresEventsUpdate) {
76627
- this.eventCoordinator.detachEvents();
76693
+ // zoom translateExtent needs to be recalculated when canvas size changes
76694
+ this.zoomHandler.disconnect();
76628
76695
  if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {
76629
76696
  this.dataManager.updateContainerDimensions();
76630
76697
  this.renderer.updateSortedDiesAndDrawWafer();
@@ -76644,12 +76711,18 @@ img.ProseMirror-separator {
76644
76711
  else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {
76645
76712
  this.renderer.drawWafer();
76646
76713
  }
76647
- this.eventCoordinator.attachEvents();
76714
+ this.zoomHandler.connect();
76648
76715
  }
76649
76716
  else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {
76650
76717
  this.renderer.renderHover();
76651
76718
  }
76652
76719
  }
76720
+ /**
76721
+ * @internal
76722
+ */
76723
+ isExperimentalRenderer() {
76724
+ return this.diesTable !== undefined;
76725
+ }
76653
76726
  validate() {
76654
76727
  this.waferMapValidator.validateGridDimensions();
76655
76728
  this.waferMapValidator.validateDiesTableSchema();
@@ -76712,16 +76785,10 @@ img.ProseMirror-separator {
76712
76785
  }
76713
76786
  diesChanged() {
76714
76787
  this.waferMapUpdateTracker.track('dies');
76715
- this.renderer = this.diesTable === undefined
76716
- ? this.mainRenderer
76717
- : this.workerRenderer;
76718
76788
  this.waferMapUpdateTracker.queueUpdate();
76719
76789
  }
76720
76790
  diesTableChanged() {
76721
76791
  this.waferMapUpdateTracker.track('dies');
76722
- this.renderer = this.diesTable === undefined
76723
- ? this.mainRenderer
76724
- : this.workerRenderer;
76725
76792
  this.waferMapUpdateTracker.queueUpdate();
76726
76793
  }
76727
76794
  colorScaleChanged() {
@@ -76745,6 +76812,9 @@ img.ProseMirror-separator {
76745
76812
  this.waferMapUpdateTracker.track('hoverDie');
76746
76813
  this.waferMapUpdateTracker.queueUpdate();
76747
76814
  }
76815
+ get asRequiredFieldsWaferMap() {
76816
+ return this;
76817
+ }
76748
76818
  }
76749
76819
  __decorate$1([
76750
76820
  attr({ attribute: 'origin-location' })