@ni/nimble-components 17.0.0 → 17.0.2

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.
@@ -0,0 +1,87 @@
1
+ import { select } from 'd3-selection';
2
+ import { zoom, zoomIdentity, zoomTransform } from 'd3-zoom';
3
+ /**
4
+ * ZoomHandler deals with user interactions and events like zooming
5
+ */
6
+ export class ZoomHandler {
7
+ constructor(canvas, zoomContainer, dataManager, renderingModule, canvasLength) {
8
+ this.canvas = canvas;
9
+ this.zoomContainer = zoomContainer;
10
+ this.dataManager = dataManager;
11
+ this.renderingModule = renderingModule;
12
+ this.canvasLength = canvasLength;
13
+ this.zoomTransform = zoomIdentity;
14
+ this.minScale = 1.1;
15
+ this.minExtentPoint = [-100, -100];
16
+ this.extentPadding = 100;
17
+ }
18
+ attachZoomBehavior() {
19
+ this.zoomBehavior = this.createZoomBehavior();
20
+ this.zoomBehavior(select(this.canvas));
21
+ }
22
+ resetTransform() {
23
+ const canvasContext = this.canvas.getContext('2d');
24
+ if (canvasContext === null) {
25
+ return;
26
+ }
27
+ this.zoomTransform = zoomIdentity;
28
+ this.clearCanvas(canvasContext, this.canvasLength, this.canvasLength);
29
+ this.scaleCanvas(canvasContext, zoomIdentity.x, zoomIdentity.y, zoomIdentity.k);
30
+ this.renderingModule.drawWafer();
31
+ this.zoomBehavior?.transform(select(this.canvas), zoomIdentity);
32
+ }
33
+ createZoomBehavior() {
34
+ const zoomBehavior = zoom()
35
+ .scaleExtent([
36
+ 1.1,
37
+ this.getZoomMax(this.canvasLength * this.canvasLength, this.dataManager.containerDimensions.width
38
+ * this.dataManager.containerDimensions.height)
39
+ ])
40
+ .translateExtent([
41
+ this.minExtentPoint,
42
+ [
43
+ this.canvasLength + this.extentPadding,
44
+ this.canvasLength + this.extentPadding
45
+ ]
46
+ ])
47
+ .filter((event) => {
48
+ const transform = zoomTransform(this.canvas);
49
+ return transform.k >= this.minScale || event.type === 'wheel';
50
+ })
51
+ .on('zoom', (event) => {
52
+ const transform = event.transform;
53
+ const canvasContext = this.canvas.getContext('2d');
54
+ if (canvasContext === null) {
55
+ return;
56
+ }
57
+ canvasContext.save();
58
+ if (transform.k === this.minScale) {
59
+ this.zoomTransform = zoomIdentity;
60
+ this.clearCanvas(canvasContext, this.canvasLength, this.canvasLength);
61
+ this.scaleCanvas(canvasContext, zoomIdentity.x, zoomIdentity.y, zoomIdentity.k);
62
+ this.renderingModule.drawWafer();
63
+ zoomBehavior.transform(select(this.canvas), zoomIdentity);
64
+ }
65
+ else {
66
+ this.zoomTransform = transform;
67
+ this.clearCanvas(canvasContext, this.canvasLength * this.zoomTransform.k, this.canvasLength * this.zoomTransform.k);
68
+ this.scaleCanvas(canvasContext, transform.x, transform.y, transform.k);
69
+ this.renderingModule.drawWafer();
70
+ }
71
+ canvasContext.restore();
72
+ this.zoomContainer.setAttribute('transform', this.zoomTransform.toString());
73
+ });
74
+ return zoomBehavior;
75
+ }
76
+ getZoomMax(canvasArea, dataArea) {
77
+ return Math.ceil((dataArea / canvasArea) * 100);
78
+ }
79
+ clearCanvas(context, width, height) {
80
+ context.clearRect(0, 0, width, height);
81
+ }
82
+ scaleCanvas(context, x = 0, y = 0, scale = 1) {
83
+ context.translate(x, y);
84
+ context.scale(scale, scale);
85
+ }
86
+ }
87
+ //# sourceMappingURL=zoom-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoom-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/zoom-handler.ts"],"names":[],"mappings":"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"}
@@ -22,19 +22,30 @@ export const styles = css `
22
22
  position: absolute;
23
23
  }
24
24
 
25
- .svg-root.top {
25
+ .circle-base {
26
+ width: 100%;
27
+ height: 100%;
28
+ position: absolute;
29
+ fill: white;
30
+ }
31
+
32
+ .notch {
33
+ transform-origin: center center;
34
+ }
35
+
36
+ .notch.top {
26
37
  transform: rotate(-90deg);
27
38
  }
28
39
 
29
- .svg-root.right {
40
+ .notch.right {
30
41
  transform: rotate(0deg);
31
42
  }
32
43
 
33
- .svg-root.left {
44
+ .notch.left {
34
45
  transform: rotate(180deg);
35
46
  }
36
47
 
37
- .svg-root.bottom {
48
+ .notch.bottom {
38
49
  transform: rotate(90deg);
39
50
  }
40
51
 
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/wafer-map/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAsDD,WAAW;kBACjB,WAAW;;;;;;;;;;;;;;;;CAgB5B,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/wafer-map/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAiED,WAAW;kBACjB,WAAW;;;;;;;;;;;;;;;;CAgB5B,CAAC"}
@@ -1,20 +1,22 @@
1
1
  import { html, ref } from '@microsoft/fast-element';
2
2
  export const template = html `
3
3
  <div class="wafer-map-container">
4
- <svg class="svg-root ${x => x.orientation}">
5
- <g class="zoom-container">
6
- <svg
7
- class="circle-base"
8
- version="1.1"
9
- x="0px"
10
- y="0px"
11
- viewBox="1 .45 20 21"
12
- >
13
- <path
14
- class="circle-drawing-path"
15
- d="m 21 12 a 10 10 330 1 1 0 -1.98 a 1 1 0 0 0 0 2"
16
- />
17
- </svg>
4
+ <svg class="svg-root">
5
+ <g class="zoom-container" ${ref('zoomContainer')}>
6
+ <g class="notch ${x => x.orientation}">
7
+ <svg
8
+ class="circle-base"
9
+ version="1.1"
10
+ x="0px"
11
+ y="0px"
12
+ viewBox="1 .45 20 21"
13
+ >
14
+ <path
15
+ class="circle-drawing-path"
16
+ d="m 21 12 a 10 10 330 1 1 0 -1.98 a 1 1 0 0 0 0 2"
17
+ />
18
+ </svg>
19
+ </g>
18
20
  </g>
19
21
  </svg>
20
22
  <div class="wafer-map-area">
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/wafer-map/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAU;;+BAEP,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;;;;;;;;;;;;;;;;;+CAiBF,GAAG,CAAC,QAAQ,CAAC;;;CAG3D,CAAC"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/wafer-map/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAU;;;wCAGE,GAAG,CAAC,eAAe,CAAC;kCAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;;;;;;;;;;;;;;;;;+CAiBL,GAAG,CAAC,QAAQ,CAAC;;;CAG3D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ni/nimble-components",
3
- "version": "17.0.0",
3
+ "version": "17.0.2",
4
4
  "description": "Styled web components for the NI Nimble Design System",
5
5
  "scripts": {
6
6
  "build": "npm run generate-icons && npm run build-components && npm run bundle-components && npm run generate-scss && npm run build-storybook",
@@ -54,6 +54,10 @@
54
54
  "@tanstack/table-core": "^8.7.0",
55
55
  "@types/d3": "^7.4.0",
56
56
  "@types/d3-scale": "^4.0.2",
57
+ "@types/d3-zoom": "^3.0.0",
58
+ "@types/d3-selection": "^3.0.0",
59
+ "d3-selection": "^3.0.0",
60
+ "d3-zoom": "^3.0.0",
57
61
  "d3-random": "^3.0.1",
58
62
  "d3-scale": "^4.0.2",
59
63
  "hex-rgb": "^5.0.0",