@ni/nimble-components 23.0.0 → 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.
- package/dist/all-components-bundle.js +248 -192
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +135 -131
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/wafer-map/index.d.ts +13 -6
- package/dist/esm/wafer-map/index.js +33 -16
- package/dist/esm/wafer-map/index.js.map +1 -1
- package/dist/esm/wafer-map/modules/data-manager.js +1 -1
- package/dist/esm/wafer-map/modules/data-manager.js.map +1 -1
- package/dist/esm/wafer-map/modules/experimental/hover-handler.d.ts +23 -0
- package/dist/esm/wafer-map/modules/experimental/hover-handler.js +80 -0
- package/dist/esm/wafer-map/modules/experimental/hover-handler.js.map +1 -0
- package/dist/esm/wafer-map/modules/{worker-renderer.d.ts → experimental/worker-renderer.d.ts} +1 -1
- package/dist/esm/wafer-map/modules/{worker-renderer.js → experimental/worker-renderer.js} +1 -1
- package/dist/esm/wafer-map/modules/experimental/worker-renderer.js.map +1 -0
- package/dist/esm/wafer-map/modules/hover-handler.d.ts +10 -2
- package/dist/esm/wafer-map/modules/hover-handler.js +43 -26
- package/dist/esm/wafer-map/modules/hover-handler.js.map +1 -1
- package/dist/esm/wafer-map/modules/prerendering.d.ts +1 -3
- package/dist/esm/wafer-map/modules/prerendering.js +5 -6
- package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
- package/dist/esm/wafer-map/modules/wafer-map-validator.js +17 -23
- package/dist/esm/wafer-map/modules/wafer-map-validator.js.map +1 -1
- package/dist/esm/wafer-map/modules/zoom-handler.d.ts +11 -7
- package/dist/esm/wafer-map/modules/zoom-handler.js +27 -37
- package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
- package/dist/esm/wafer-map/template.d.ts +1 -1
- package/dist/esm/wafer-map/types.d.ts +11 -0
- package/dist/esm/wafer-map/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/esm/wafer-map/modules/event-coordinator.d.ts +0 -19
- package/dist/esm/wafer-map/modules/event-coordinator.js +0 -35
- package/dist/esm/wafer-map/modules/event-coordinator.js.map +0 -1
- package/dist/esm/wafer-map/modules/worker-renderer.js.map +0 -1
|
@@ -3,9 +3,9 @@ import { ZoomTransform } from 'd3-zoom';
|
|
|
3
3
|
import type { Table } from 'apache-arrow';
|
|
4
4
|
import { DataManager } from './modules/data-manager';
|
|
5
5
|
import { RenderingModule } from './modules/rendering';
|
|
6
|
-
import { HoverDieOpacity, WaferMapColorScale, WaferMapColorScaleMode, WaferMapDie, WaferMapOrientation, WaferMapOriginLocation, WaferMapValidity } from './types';
|
|
6
|
+
import { HoverDie, HoverDieOpacity, WaferMapColorScale, WaferMapColorScaleMode, WaferMapDie, WaferMapOrientation, WaferMapOriginLocation, WaferMapValidity, type WaferRequiredFields } from './types';
|
|
7
7
|
import { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';
|
|
8
|
-
import { WorkerRenderer } from './modules/worker-renderer';
|
|
8
|
+
import { WorkerRenderer } from './modules/experimental/worker-renderer';
|
|
9
9
|
declare global {
|
|
10
10
|
interface HTMLElementTagNameMap {
|
|
11
11
|
'nimble-wafer-map': WaferMap;
|
|
@@ -14,7 +14,7 @@ declare global {
|
|
|
14
14
|
/**
|
|
15
15
|
* A nimble-styled WaferMap
|
|
16
16
|
*/
|
|
17
|
-
export declare class WaferMap extends FoundationElement {
|
|
17
|
+
export declare class WaferMap<T extends WaferRequiredFields = WaferRequiredFields> extends FoundationElement {
|
|
18
18
|
/**
|
|
19
19
|
* @internal
|
|
20
20
|
* needs to be initialized before the properties trigger changes
|
|
@@ -90,12 +90,14 @@ export declare class WaferMap extends FoundationElement {
|
|
|
90
90
|
/**
|
|
91
91
|
* @internal
|
|
92
92
|
*/
|
|
93
|
-
hoverDie: WaferMapDie | undefined;
|
|
93
|
+
hoverDie: WaferMapDie | HoverDie | undefined;
|
|
94
94
|
highlightedTags: string[];
|
|
95
95
|
dies: WaferMapDie[];
|
|
96
|
-
diesTable: Table | undefined;
|
|
96
|
+
diesTable: Table<T> | undefined;
|
|
97
97
|
colorScale: WaferMapColorScale;
|
|
98
|
-
private readonly
|
|
98
|
+
private readonly hoverHandler;
|
|
99
|
+
private readonly experimentalHoverHandler;
|
|
100
|
+
private readonly zoomHandler;
|
|
99
101
|
private readonly resizeObserver;
|
|
100
102
|
private readonly waferMapValidator;
|
|
101
103
|
get validity(): WaferMapValidity;
|
|
@@ -110,6 +112,10 @@ export declare class WaferMap extends FoundationElement {
|
|
|
110
112
|
* The hover does not require an event update, but it's also the last update in the sequence.
|
|
111
113
|
*/
|
|
112
114
|
update(): void;
|
|
115
|
+
/**
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
118
|
+
isExperimentalRenderer(): boolean;
|
|
113
119
|
private validate;
|
|
114
120
|
private createResizeObserver;
|
|
115
121
|
private originLocationChanged;
|
|
@@ -129,5 +135,6 @@ export declare class WaferMap extends FoundationElement {
|
|
|
129
135
|
private canvasWidthChanged;
|
|
130
136
|
private canvasHeightChanged;
|
|
131
137
|
private hoverDieChanged;
|
|
138
|
+
private get asRequiredFieldsWaferMap();
|
|
132
139
|
}
|
|
133
140
|
export declare const waferMapTag = "nimble-wafer-map";
|
|
@@ -6,11 +6,13 @@ import { template } from './template';
|
|
|
6
6
|
import { styles } from './styles';
|
|
7
7
|
import { DataManager } from './modules/data-manager';
|
|
8
8
|
import { RenderingModule } from './modules/rendering';
|
|
9
|
-
import { EventCoordinator } from './modules/event-coordinator';
|
|
10
9
|
import { HoverDieOpacity, WaferMapColorScaleMode, WaferMapOrientation, WaferMapOriginLocation } from './types';
|
|
11
10
|
import { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';
|
|
12
11
|
import { WaferMapValidator } from './modules/wafer-map-validator';
|
|
13
|
-
import { WorkerRenderer } from './modules/worker-renderer';
|
|
12
|
+
import { WorkerRenderer } from './modules/experimental/worker-renderer';
|
|
13
|
+
import { HoverHandler } from './modules/hover-handler';
|
|
14
|
+
import { HoverHandler as ExperimentalHoverHandler } from './modules/experimental/hover-handler';
|
|
15
|
+
import { ZoomHandler } from './modules/zoom-handler';
|
|
14
16
|
/**
|
|
15
17
|
* A nimble-styled WaferMap
|
|
16
18
|
*/
|
|
@@ -21,7 +23,7 @@ export class WaferMap extends FoundationElement {
|
|
|
21
23
|
* @internal
|
|
22
24
|
* needs to be initialized before the properties trigger changes
|
|
23
25
|
*/
|
|
24
|
-
this.waferMapUpdateTracker = new WaferMapUpdateTracker(this);
|
|
26
|
+
this.waferMapUpdateTracker = new WaferMapUpdateTracker(this.asRequiredFieldsWaferMap);
|
|
25
27
|
this.originLocation = WaferMapOriginLocation.bottomLeft;
|
|
26
28
|
this.gridMinX = undefined;
|
|
27
29
|
this.gridMaxX = undefined;
|
|
@@ -35,15 +37,15 @@ export class WaferMap extends FoundationElement {
|
|
|
35
37
|
/**
|
|
36
38
|
* @internal
|
|
37
39
|
*/
|
|
38
|
-
this.dataManager = new DataManager(this);
|
|
40
|
+
this.dataManager = new DataManager(this.asRequiredFieldsWaferMap);
|
|
39
41
|
/**
|
|
40
42
|
* @internal
|
|
41
43
|
*/
|
|
42
|
-
this.mainRenderer = new RenderingModule(this);
|
|
44
|
+
this.mainRenderer = new RenderingModule(this.asRequiredFieldsWaferMap);
|
|
43
45
|
/**
|
|
44
46
|
* @internal
|
|
45
47
|
*/
|
|
46
|
-
this.workerRenderer = new WorkerRenderer(this);
|
|
48
|
+
this.workerRenderer = new WorkerRenderer(this.asRequiredFieldsWaferMap);
|
|
47
49
|
this.renderer = this.mainRenderer;
|
|
48
50
|
/**
|
|
49
51
|
* @internal
|
|
@@ -75,9 +77,11 @@ export class WaferMap extends FoundationElement {
|
|
|
75
77
|
colors: [],
|
|
76
78
|
values: []
|
|
77
79
|
};
|
|
78
|
-
this.
|
|
80
|
+
this.hoverHandler = new HoverHandler(this.asRequiredFieldsWaferMap);
|
|
81
|
+
this.experimentalHoverHandler = new ExperimentalHoverHandler(this.asRequiredFieldsWaferMap);
|
|
82
|
+
this.zoomHandler = new ZoomHandler(this.asRequiredFieldsWaferMap);
|
|
79
83
|
this.resizeObserver = this.createResizeObserver();
|
|
80
|
-
this.waferMapValidator = new WaferMapValidator(this);
|
|
84
|
+
this.waferMapValidator = new WaferMapValidator(this.asRequiredFieldsWaferMap);
|
|
81
85
|
}
|
|
82
86
|
get validity() {
|
|
83
87
|
return this.waferMapValidator.getValidity();
|
|
@@ -87,11 +91,17 @@ export class WaferMap extends FoundationElement {
|
|
|
87
91
|
this.canvasContext = this.canvas.getContext('2d', {
|
|
88
92
|
willReadFrequently: true
|
|
89
93
|
});
|
|
94
|
+
this.hoverHandler.connect();
|
|
95
|
+
this.experimentalHoverHandler.connect();
|
|
96
|
+
this.zoomHandler.connect();
|
|
90
97
|
this.resizeObserver.observe(this);
|
|
91
98
|
this.waferMapUpdateTracker.trackAll();
|
|
92
99
|
}
|
|
93
100
|
disconnectedCallback() {
|
|
94
101
|
super.disconnectedCallback();
|
|
102
|
+
this.hoverHandler.disconnect();
|
|
103
|
+
this.experimentalHoverHandler.disconnect();
|
|
104
|
+
this.zoomHandler.disconnect();
|
|
95
105
|
this.resizeObserver.unobserve(this);
|
|
96
106
|
}
|
|
97
107
|
/**
|
|
@@ -107,8 +117,12 @@ export class WaferMap extends FoundationElement {
|
|
|
107
117
|
if (this.validity.invalidDiesTableSchema) {
|
|
108
118
|
return;
|
|
109
119
|
}
|
|
120
|
+
this.renderer = this.isExperimentalRenderer()
|
|
121
|
+
? this.workerRenderer
|
|
122
|
+
: this.mainRenderer;
|
|
110
123
|
if (this.waferMapUpdateTracker.requiresEventsUpdate) {
|
|
111
|
-
|
|
124
|
+
// zoom translateExtent needs to be recalculated when canvas size changes
|
|
125
|
+
this.zoomHandler.disconnect();
|
|
112
126
|
if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {
|
|
113
127
|
this.dataManager.updateContainerDimensions();
|
|
114
128
|
this.renderer.updateSortedDiesAndDrawWafer();
|
|
@@ -128,12 +142,18 @@ export class WaferMap extends FoundationElement {
|
|
|
128
142
|
else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {
|
|
129
143
|
this.renderer.drawWafer();
|
|
130
144
|
}
|
|
131
|
-
this.
|
|
145
|
+
this.zoomHandler.connect();
|
|
132
146
|
}
|
|
133
147
|
else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {
|
|
134
148
|
this.renderer.renderHover();
|
|
135
149
|
}
|
|
136
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* @internal
|
|
153
|
+
*/
|
|
154
|
+
isExperimentalRenderer() {
|
|
155
|
+
return this.diesTable !== undefined;
|
|
156
|
+
}
|
|
137
157
|
validate() {
|
|
138
158
|
this.waferMapValidator.validateGridDimensions();
|
|
139
159
|
this.waferMapValidator.validateDiesTableSchema();
|
|
@@ -196,16 +216,10 @@ export class WaferMap extends FoundationElement {
|
|
|
196
216
|
}
|
|
197
217
|
diesChanged() {
|
|
198
218
|
this.waferMapUpdateTracker.track('dies');
|
|
199
|
-
this.renderer = this.diesTable === undefined
|
|
200
|
-
? this.mainRenderer
|
|
201
|
-
: this.workerRenderer;
|
|
202
219
|
this.waferMapUpdateTracker.queueUpdate();
|
|
203
220
|
}
|
|
204
221
|
diesTableChanged() {
|
|
205
222
|
this.waferMapUpdateTracker.track('dies');
|
|
206
|
-
this.renderer = this.diesTable === undefined
|
|
207
|
-
? this.mainRenderer
|
|
208
|
-
: this.workerRenderer;
|
|
209
223
|
this.waferMapUpdateTracker.queueUpdate();
|
|
210
224
|
}
|
|
211
225
|
colorScaleChanged() {
|
|
@@ -229,6 +243,9 @@ export class WaferMap extends FoundationElement {
|
|
|
229
243
|
this.waferMapUpdateTracker.track('hoverDie');
|
|
230
244
|
this.waferMapUpdateTracker.queueUpdate();
|
|
231
245
|
}
|
|
246
|
+
get asRequiredFieldsWaferMap() {
|
|
247
|
+
return this;
|
|
248
|
+
}
|
|
232
249
|
}
|
|
233
250
|
__decorate([
|
|
234
251
|
attr({ attribute: 'origin-location' })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport type { Table } from 'apache-arrow';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport { EventCoordinator } from './modules/event-coordinator';\nimport {\n HoverDieOpacity,\n WaferMapColorScale,\n WaferMapColorScaleMode,\n WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n WaferMapValidity\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\nimport { WorkerRenderer } from './modules/worker-renderer';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap extends FoundationElement {\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker = new WaferMapUpdateTracker(this);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly dataManager = new DataManager(this);\n /**\n * @internal\n */\n public readonly mainRenderer = new RenderingModule(this);\n /**\n * @internal\n */\n public readonly workerRenderer = new WorkerRenderer(this);\n\n @observable\n public renderer: RenderingModule | WorkerRenderer = this.mainRenderer;\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public diesTable: Table | undefined;\n\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly eventCoordinator = new EventCoordinator(this);\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator = new WaferMapValidator(this);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n this.validate();\n if (this.validity.invalidDiesTableSchema) {\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n this.eventCoordinator.detachEvents();\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n this.eventCoordinator.attachEvents();\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n private validate(): void {\n this.waferMapValidator.validateGridDimensions();\n this.waferMapValidator.validateDiesTableSchema();\n }\n\n private createResizeObserver(): ResizeObserver {\n const resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry === undefined) {\n return;\n }\n const { height, width } = entry.contentRect;\n // Updating the canvas size clears its contents so update it explicitly instead of\n // via template bindings so we can confirm that it happens before render\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvasWidth = width;\n this.canvasHeight = height;\n });\n return resizeObserver;\n }\n\n private originLocationChanged(): void {\n this.waferMapUpdateTracker.track('originLocation');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinXChanged(): void {\n this.waferMapUpdateTracker.track('gridMinX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxXChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinYChanged(): void {\n this.waferMapUpdateTracker.track('gridMinY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxYChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private maxCharactersChanged(): void {\n this.waferMapUpdateTracker.track('maxCharacters');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsHiddenChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsHidden');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsSuffixChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsSuffix');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleModeChanged(): void {\n this.waferMapUpdateTracker.track('colorScaleMode');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private highlightedTagsChanged(): void {\n this.waferMapUpdateTracker.track('highlightedTags');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.renderer = this.diesTable === undefined\n ? this.mainRenderer\n : this.workerRenderer;\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesTableChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.renderer = this.diesTable === undefined\n ? this.mainRenderer\n : this.workerRenderer;\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport type { Table } from 'apache-arrow';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport {\n HoverDie,\n HoverDieOpacity,\n WaferMapColorScale,\n WaferMapColorScaleMode,\n WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n WaferMapValidity,\n type WaferRequiredFields\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\nimport { WorkerRenderer } from './modules/experimental/worker-renderer';\nimport { HoverHandler } from './modules/hover-handler';\nimport { HoverHandler as ExperimentalHoverHandler } from './modules/experimental/hover-handler';\nimport { ZoomHandler } from './modules/zoom-handler';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap<\n T extends WaferRequiredFields = WaferRequiredFields\n> extends FoundationElement {\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker: WaferMapUpdateTracker = new WaferMapUpdateTracker(this.asRequiredFieldsWaferMap);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly dataManager: DataManager = new DataManager(\n this.asRequiredFieldsWaferMap\n );\n\n /**\n * @internal\n */\n public readonly mainRenderer = new RenderingModule(\n this.asRequiredFieldsWaferMap\n );\n\n /**\n * @internal\n */\n public readonly workerRenderer = new WorkerRenderer(\n this.asRequiredFieldsWaferMap\n );\n\n @observable\n public renderer: RenderingModule | WorkerRenderer = this.mainRenderer;\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | HoverDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public diesTable: Table<T> | undefined;\n\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly hoverHandler: HoverHandler = new HoverHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly experimentalHoverHandler: ExperimentalHoverHandler = new ExperimentalHoverHandler(this.asRequiredFieldsWaferMap);\n\n private readonly zoomHandler: ZoomHandler = new ZoomHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator: WaferMapValidator = new WaferMapValidator(this.asRequiredFieldsWaferMap);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.hoverHandler.connect();\n this.experimentalHoverHandler.connect();\n this.zoomHandler.connect();\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.hoverHandler.disconnect();\n this.experimentalHoverHandler.disconnect();\n this.zoomHandler.disconnect();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n this.validate();\n if (this.validity.invalidDiesTableSchema) {\n return;\n }\n this.renderer = this.isExperimentalRenderer()\n ? this.workerRenderer\n : this.mainRenderer;\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n // zoom translateExtent needs to be recalculated when canvas size changes\n this.zoomHandler.disconnect();\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n this.zoomHandler.connect();\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n /**\n * @internal\n */\n public isExperimentalRenderer(): boolean {\n return this.diesTable !== undefined;\n }\n\n private validate(): void {\n this.waferMapValidator.validateGridDimensions();\n this.waferMapValidator.validateDiesTableSchema();\n }\n\n private createResizeObserver(): ResizeObserver {\n const resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry === undefined) {\n return;\n }\n const { height, width } = entry.contentRect;\n // Updating the canvas size clears its contents so update it explicitly instead of\n // via template bindings so we can confirm that it happens before render\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvasWidth = width;\n this.canvasHeight = height;\n });\n return resizeObserver;\n }\n\n private originLocationChanged(): void {\n this.waferMapUpdateTracker.track('originLocation');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinXChanged(): void {\n this.waferMapUpdateTracker.track('gridMinX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxXChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinYChanged(): void {\n this.waferMapUpdateTracker.track('gridMinY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxYChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private maxCharactersChanged(): void {\n this.waferMapUpdateTracker.track('maxCharacters');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsHiddenChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsHidden');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsSuffixChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsSuffix');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleModeChanged(): void {\n this.waferMapUpdateTracker.track('colorScaleMode');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private highlightedTagsChanged(): void {\n this.waferMapUpdateTracker.track('highlightedTags');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesTableChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private get asRequiredFieldsWaferMap(): WaferMap {\n return this as WaferMap;\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}
|
|
@@ -40,7 +40,7 @@ export class DataManager {
|
|
|
40
40
|
constructor(wafermap) {
|
|
41
41
|
this.wafermap = wafermap;
|
|
42
42
|
this.computations = new Computations(wafermap);
|
|
43
|
-
this.prerendering = new Prerendering(wafermap
|
|
43
|
+
this.prerendering = new Prerendering(wafermap);
|
|
44
44
|
}
|
|
45
45
|
updateContainerDimensions() {
|
|
46
46
|
this.computations.updateContainerDimensions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-manager.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/data-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C;;GAEG;AACH,MAAM,OAAO,WAAW;IACpB,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;IACjD,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IAC3C,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;IAC7C,CAAC;IAED,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC;IACrD,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IAC3C,CAAC;IAED,IAAW,qBAAqB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IACnD,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAMD,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"data-manager.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/data-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C;;GAEG;AACH,MAAM,OAAO,WAAW;IACpB,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;IACjD,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IAC3C,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;IAC7C,CAAC;IAED,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC;IACrD,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IAC3C,CAAC;IAED,IAAW,qBAAqB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IACnD,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAMD,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEM,yBAAyB;QAC5B,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,CAAC;QAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEM,YAAY;QACf,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;IAC7C,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;IAC7C,CAAC;IAEM,cAAc,CAAC,KAAuB;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAEO,aAAa;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAC5D,CAAC;IACN,CAAC;CACJ","sourcesContent":["import type { ScaleBand, ScaleQuantile } from 'd3-scale';\nimport { Computations } from './computations';\nimport { Prerendering } from './prerendering';\nimport type { WaferMap } from '..';\nimport type {\n Dimensions,\n Margin,\n DieRenderInfo,\n WaferMapDie,\n PointCoordinates\n} from '../types';\n\n/**\n * Data Manager uses Computations and Prerendering modules in order and exposes the results\n */\nexport class DataManager {\n public get containerDimensions(): Dimensions {\n return this.computations.containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this.computations.dieDimensions;\n }\n\n public get radius(): number {\n return this.computations.radius;\n }\n\n public get margin(): Margin {\n return this.computations.margin;\n }\n\n public get horizontalScale(): ScaleBand<number> {\n return this.computations.horizontalScale;\n }\n\n public get invertedHorizontalScale(): ScaleQuantile<number, number> {\n return this.computations.invertedHorizontalScale;\n }\n\n public get verticalScale(): ScaleBand<number> {\n return this.computations.verticalScale;\n }\n\n public get invertedVerticalScale(): ScaleQuantile<number, number> {\n return this.computations.invertedVerticalScale;\n }\n\n public get labelsFontSize(): number {\n return this.prerendering.labelsFontSize;\n }\n\n public get diesRenderInfo(): DieRenderInfo[] {\n return this.prerendering.diesRenderInfo;\n }\n\n public get data(): Map<string, WaferMapDie> {\n return this.dataMap;\n }\n\n private readonly computations: Computations;\n private readonly prerendering: Prerendering;\n private dataMap!: Map<string, WaferMapDie>;\n\n public constructor(private readonly wafermap: WaferMap) {\n this.computations = new Computations(wafermap);\n this.prerendering = new Prerendering(wafermap);\n }\n\n public updateContainerDimensions(): void {\n this.computations.updateContainerDimensions();\n this.updateDataMap();\n this.updateLabelsFontSize();\n }\n\n public updateScales(): void {\n this.computations.updateScales();\n this.updateDataMap();\n this.updateLabelsFontSize();\n }\n\n public updateLabelsFontSize(): void {\n this.prerendering.updateLabelsFontSize();\n }\n\n public updateDiesRenderInfo(): void {\n this.prerendering.updateDiesRenderInfo();\n }\n\n public getWaferMapDie(point: PointCoordinates): WaferMapDie | undefined {\n return this.dataMap.get(`${point.x}_${point.y}`);\n }\n\n private updateDataMap(): void {\n this.dataMap = new Map(\n this.wafermap.dies.map(die => [`${die.x}_${die.y}`, die])\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { WaferMap } from '../..';
|
|
2
|
+
/**
|
|
3
|
+
* HoverHandler deals with user interactions and events like hovering
|
|
4
|
+
*/
|
|
5
|
+
export declare class HoverHandler {
|
|
6
|
+
private readonly wafermap;
|
|
7
|
+
constructor(wafermap: WaferMap);
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
connect(): void;
|
|
12
|
+
/**
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
disconnect(): void;
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
* keep public for testing until data manager refactor
|
|
19
|
+
*/
|
|
20
|
+
readonly onMouseMove: (event: MouseEvent) => void;
|
|
21
|
+
private readonly onMouseOut;
|
|
22
|
+
private calculateDieCoordinates;
|
|
23
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { WaferMapOriginLocation } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* HoverHandler deals with user interactions and events like hovering
|
|
4
|
+
*/
|
|
5
|
+
export class HoverHandler {
|
|
6
|
+
constructor(wafermap) {
|
|
7
|
+
this.wafermap = wafermap;
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
* keep public for testing until data manager refactor
|
|
11
|
+
*/
|
|
12
|
+
this.onMouseMove = (event) => {
|
|
13
|
+
if (!this.wafermap.isExperimentalRenderer()) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// get original mouse position in case we are in zoom.
|
|
17
|
+
const invertedPoint = this.wafermap.transform.invert([
|
|
18
|
+
event.offsetX,
|
|
19
|
+
event.offsetY
|
|
20
|
+
]);
|
|
21
|
+
// does not work yet until data manager will parse diesTable
|
|
22
|
+
const dieCoordinates = this.calculateDieCoordinates({
|
|
23
|
+
x: invertedPoint[0],
|
|
24
|
+
y: invertedPoint[1]
|
|
25
|
+
});
|
|
26
|
+
const colIndex = this.wafermap
|
|
27
|
+
.diesTable.getChild('colIndex')
|
|
28
|
+
.toArray();
|
|
29
|
+
const rowIndex = this.wafermap
|
|
30
|
+
.diesTable.getChild('rowIndex')
|
|
31
|
+
.toArray();
|
|
32
|
+
// will replace iterating with arquero filtering after fixing errors
|
|
33
|
+
for (let i = 0; i < colIndex.length; i++) {
|
|
34
|
+
if (colIndex[i] === dieCoordinates.x
|
|
35
|
+
&& rowIndex[i] === dieCoordinates.y) {
|
|
36
|
+
this.wafermap.hoverDie = {
|
|
37
|
+
index: i,
|
|
38
|
+
x: dieCoordinates.x,
|
|
39
|
+
y: dieCoordinates.y
|
|
40
|
+
};
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
this.wafermap.hoverDie = undefined;
|
|
45
|
+
};
|
|
46
|
+
this.onMouseOut = (_event) => {
|
|
47
|
+
this.wafermap.hoverDie = undefined;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
connect() {
|
|
54
|
+
this.wafermap.addEventListener('mousemove', this.onMouseMove);
|
|
55
|
+
this.wafermap.addEventListener('mouseout', this.onMouseOut);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
disconnect() {
|
|
61
|
+
this.wafermap.removeEventListener('mousemove', this.onMouseMove);
|
|
62
|
+
this.wafermap.removeEventListener('mouseout', this.onMouseOut);
|
|
63
|
+
}
|
|
64
|
+
calculateDieCoordinates(mousePosition) {
|
|
65
|
+
const originLocation = this.wafermap.originLocation;
|
|
66
|
+
const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
|
|
67
|
+
|| originLocation === WaferMapOriginLocation.topLeft
|
|
68
|
+
? Math.floor
|
|
69
|
+
: Math.ceil;
|
|
70
|
+
const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
|
|
71
|
+
|| originLocation === WaferMapOriginLocation.bottomRight
|
|
72
|
+
? Math.floor
|
|
73
|
+
: Math.ceil;
|
|
74
|
+
// go to x and y scale to get the x,y values of the die.
|
|
75
|
+
const x = xRoundFunction(this.wafermap.dataManager.invertedHorizontalScale(mousePosition.x - this.wafermap.dataManager.margin.left));
|
|
76
|
+
const y = yRoundFunction(this.wafermap.dataManager.invertedVerticalScale(mousePosition.y - this.wafermap.dataManager.margin.top));
|
|
77
|
+
return { x, y };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=hover-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-handler.js","sourceRoot":"","sources":["../../../../../src/wafer-map/modules/experimental/hover-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WaferMap } from '../..';\nimport { PointCoordinates, WaferMapOriginLocation } from '../../types';\n\n/**\n * HoverHandler deals with user interactions and events like hovering\n */\nexport class HoverHandler {\n public constructor(private readonly wafermap: WaferMap) {}\n\n /**\n * @internal\n */\n public connect(): void {\n this.wafermap.addEventListener('mousemove', this.onMouseMove);\n this.wafermap.addEventListener('mouseout', this.onMouseOut);\n }\n\n /**\n * @internal\n */\n public disconnect(): void {\n this.wafermap.removeEventListener('mousemove', this.onMouseMove);\n this.wafermap.removeEventListener('mouseout', this.onMouseOut);\n }\n\n /**\n * @internal\n * keep public for testing until data manager refactor\n */\n public readonly onMouseMove = (event: MouseEvent): void => {\n if (!this.wafermap.isExperimentalRenderer()) {\n return;\n }\n // get original mouse position in case we are in zoom.\n const invertedPoint = this.wafermap.transform.invert([\n event.offsetX,\n event.offsetY\n ]);\n\n // does not work yet until data manager will parse diesTable\n const dieCoordinates = this.calculateDieCoordinates({\n x: invertedPoint[0],\n y: invertedPoint[1]\n });\n const colIndex = this.wafermap\n .diesTable!.getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap\n .diesTable!.getChild('rowIndex')!\n .toArray();\n\n // will replace iterating with arquero filtering after fixing errors\n for (let i = 0; i < colIndex.length; i++) {\n if (\n colIndex[i] === dieCoordinates.x\n && rowIndex[i] === dieCoordinates.y\n ) {\n this.wafermap.hoverDie = {\n index: i,\n x: dieCoordinates.x,\n y: dieCoordinates.y\n };\n return;\n }\n }\n this.wafermap.hoverDie = undefined;\n };\n\n private readonly onMouseOut = (_event: MouseEvent): void => {\n this.wafermap.hoverDie = undefined;\n };\n\n private calculateDieCoordinates(\n mousePosition: PointCoordinates\n ): PointCoordinates {\n const originLocation = this.wafermap.originLocation;\n const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ? Math.floor\n : Math.ceil;\n const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ? Math.floor\n : Math.ceil;\n // go to x and y scale to get the x,y values of the die.\n const x = xRoundFunction(\n this.wafermap.dataManager.invertedHorizontalScale(\n mousePosition.x - this.wafermap.dataManager.margin.left\n )\n );\n const y = yRoundFunction(\n this.wafermap.dataManager.invertedVerticalScale(\n mousePosition.y - this.wafermap.dataManager.margin.top\n )\n );\n return { x, y };\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-renderer.js","sourceRoot":"","sources":["../../../../../src/wafer-map/modules/experimental/worker-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,cAAc;IACvB,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,4BAA4B;QAC/B,iDAAiD;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAEM,SAAS;QACZ,+CAA+C;QAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;cAClE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM;cACpE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAC7D,CAAC,CAAC,eAAe,CAAC,IAAI;YACtB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAClE,CAAC;IAEO,uBAAuB;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAC3B,CAAC;YACF,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,OAAO,EAAE,CAAC;aACb;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAC3B,CAAC;YACF,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,OAAO,EAAE,CAAC;aACb;YACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;gBACnD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI;gBAC/C,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG;aACjD,CAAC,CAAC;YACH,OAAO,aAAa,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;SACtE;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ","sourcesContent":["import type { WaferMap } from '../..';\nimport { HoverDieOpacity } from '../../types';\n\n/**\n * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas\n */\nexport class WorkerRenderer {\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateSortedDiesAndDrawWafer(): void {\n // redundant function for backwards compatibility\n this.drawWafer();\n }\n\n public drawWafer(): void {\n // rendering will be implemented in a future PR\n this.renderHover();\n }\n\n public renderHover(): void {\n this.wafermap.hoverWidth = this.wafermap.dataManager.dieDimensions.width\n * this.wafermap.transform.k;\n this.wafermap.hoverHeight = this.wafermap.dataManager.dieDimensions.height\n * this.wafermap.transform.k;\n this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined\n ? HoverDieOpacity.hide\n : HoverDieOpacity.show;\n this.wafermap.hoverTransform = this.calculateHoverTransform();\n }\n\n private calculateHoverTransform(): string {\n if (this.wafermap.hoverDie !== undefined) {\n const scaledX = this.wafermap.dataManager.horizontalScale(\n this.wafermap.hoverDie.x\n );\n if (scaledX === undefined) {\n return '';\n }\n const scaledY = this.wafermap.dataManager.verticalScale(\n this.wafermap.hoverDie.y\n );\n if (scaledY === undefined) {\n return '';\n }\n const transformedPoint = this.wafermap.transform.apply([\n scaledX + this.wafermap.dataManager.margin.left,\n scaledY + this.wafermap.dataManager.margin.top\n ]);\n return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;\n }\n return '';\n }\n}\n"]}
|
|
@@ -5,8 +5,16 @@ import type { WaferMap } from '..';
|
|
|
5
5
|
export declare class HoverHandler {
|
|
6
6
|
private readonly wafermap;
|
|
7
7
|
constructor(wafermap: WaferMap);
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
connect(): void;
|
|
12
|
+
/**
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
disconnect(): void;
|
|
16
|
+
private readonly onMouseMove;
|
|
17
|
+
private readonly onMouseOut;
|
|
10
18
|
private calculateDieCoordinates;
|
|
11
19
|
private hoversOverDie;
|
|
12
20
|
}
|
|
@@ -5,32 +5,49 @@ import { WaferMapOriginLocation } from '../types';
|
|
|
5
5
|
export class HoverHandler {
|
|
6
6
|
constructor(wafermap) {
|
|
7
7
|
this.wafermap = wafermap;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
this.onMouseMove = (event) => {
|
|
9
|
+
if (this.wafermap.isExperimentalRenderer()) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const mousePosition = {
|
|
13
|
+
x: event.offsetX,
|
|
14
|
+
y: event.offsetY
|
|
15
|
+
};
|
|
16
|
+
if (!this.hoversOverDie(mousePosition)) {
|
|
17
|
+
this.wafermap.hoverDie = undefined;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// get original mouse position in case we are in zoom.
|
|
21
|
+
const invertedPoint = this.wafermap.transform.invert([
|
|
22
|
+
mousePosition.x,
|
|
23
|
+
mousePosition.y
|
|
24
|
+
]);
|
|
25
|
+
const dieCoordinates = this.calculateDieCoordinates({
|
|
26
|
+
x: invertedPoint[0],
|
|
27
|
+
y: invertedPoint[1]
|
|
28
|
+
});
|
|
29
|
+
this.wafermap.hoverDie = this.wafermap.dataManager.getWaferMapDie(dieCoordinates);
|
|
13
30
|
};
|
|
14
|
-
|
|
31
|
+
this.onMouseOut = (_event) => {
|
|
15
32
|
this.wafermap.hoverDie = undefined;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
x: invertedPoint[0],
|
|
25
|
-
y: invertedPoint[1]
|
|
26
|
-
});
|
|
27
|
-
this.wafermap.hoverDie = this.wafermap.dataManager.getWaferMapDie(dieCoordinates);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
connect() {
|
|
39
|
+
this.wafermap.addEventListener('mousemove', this.onMouseMove);
|
|
40
|
+
this.wafermap.addEventListener('mouseout', this.onMouseOut);
|
|
28
41
|
}
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
/**
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
45
|
+
disconnect() {
|
|
46
|
+
this.wafermap.removeEventListener('mousemove', this.onMouseMove);
|
|
47
|
+
this.wafermap.removeEventListener('mouseout', this.onMouseOut);
|
|
31
48
|
}
|
|
32
|
-
calculateDieCoordinates(
|
|
33
|
-
const originLocation = wafermap.originLocation;
|
|
49
|
+
calculateDieCoordinates(mousePosition) {
|
|
50
|
+
const originLocation = this.wafermap.originLocation;
|
|
34
51
|
const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft
|
|
35
52
|
|| originLocation === WaferMapOriginLocation.topLeft
|
|
36
53
|
? Math.floor
|
|
@@ -40,12 +57,12 @@ export class HoverHandler {
|
|
|
40
57
|
? Math.floor
|
|
41
58
|
: Math.ceil;
|
|
42
59
|
// go to x and y scale to get the x,y values of the die.
|
|
43
|
-
const x = xRoundFunction(wafermap.dataManager.invertedHorizontalScale(mousePosition.x - wafermap.dataManager.margin.left));
|
|
44
|
-
const y = yRoundFunction(wafermap.dataManager.invertedVerticalScale(mousePosition.y - wafermap.dataManager.margin.top));
|
|
60
|
+
const x = xRoundFunction(this.wafermap.dataManager.invertedHorizontalScale(mousePosition.x - this.wafermap.dataManager.margin.left));
|
|
61
|
+
const y = yRoundFunction(this.wafermap.dataManager.invertedVerticalScale(mousePosition.y - this.wafermap.dataManager.margin.top));
|
|
45
62
|
return { x, y };
|
|
46
63
|
}
|
|
47
|
-
hoversOverDie(
|
|
48
|
-
const rgba = wafermap.canvasContext.getImageData(mousePosition.x, mousePosition.y, 1, 1).data;
|
|
64
|
+
hoversOverDie(mousePosition) {
|
|
65
|
+
const rgba = this.wafermap.canvasContext.getImageData(mousePosition.x, mousePosition.y, 1, 1).data;
|
|
49
66
|
let rgbaSum = 0;
|
|
50
67
|
for (const color of rgba) {
|
|
51
68
|
rgbaSum += color;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/hover-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEpE;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;
|
|
1
|
+
{"version":3,"file":"hover-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/hover-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WaferMap } from '..';\nimport { PointCoordinates, WaferMapOriginLocation } from '../types';\n\n/**\n * HoverHandler deals with user interactions and events like hovering\n */\nexport class HoverHandler {\n public constructor(private readonly wafermap: WaferMap) {}\n\n /**\n * @internal\n */\n public connect(): void {\n this.wafermap.addEventListener('mousemove', this.onMouseMove);\n this.wafermap.addEventListener('mouseout', this.onMouseOut);\n }\n\n /**\n * @internal\n */\n public disconnect(): void {\n this.wafermap.removeEventListener('mousemove', this.onMouseMove);\n this.wafermap.removeEventListener('mouseout', this.onMouseOut);\n }\n\n private readonly onMouseMove = (event: MouseEvent): void => {\n if (this.wafermap.isExperimentalRenderer()) {\n return;\n }\n const mousePosition: PointCoordinates = {\n x: event.offsetX,\n y: event.offsetY\n };\n\n if (!this.hoversOverDie(mousePosition)) {\n this.wafermap.hoverDie = undefined;\n return;\n }\n // get original mouse position in case we are in zoom.\n const invertedPoint = this.wafermap.transform.invert([\n mousePosition.x,\n mousePosition.y\n ]);\n\n const dieCoordinates = this.calculateDieCoordinates({\n x: invertedPoint[0],\n y: invertedPoint[1]\n });\n\n this.wafermap.hoverDie = this.wafermap.dataManager.getWaferMapDie(dieCoordinates);\n };\n\n private readonly onMouseOut = (_event: MouseEvent): void => {\n this.wafermap.hoverDie = undefined;\n };\n\n private calculateDieCoordinates(\n mousePosition: PointCoordinates\n ): PointCoordinates {\n const originLocation = this.wafermap.originLocation;\n const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ? Math.floor\n : Math.ceil;\n const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ? Math.floor\n : Math.ceil;\n // go to x and y scale to get the x,y values of the die.\n const x = xRoundFunction(\n this.wafermap.dataManager.invertedHorizontalScale(\n mousePosition.x - this.wafermap.dataManager.margin.left\n )\n );\n const y = yRoundFunction(\n this.wafermap.dataManager.invertedVerticalScale(\n mousePosition.y - this.wafermap.dataManager.margin.top\n )\n );\n return { x, y };\n }\n\n private hoversOverDie(mousePosition: PointCoordinates): boolean {\n const rgba = this.wafermap.canvasContext.getImageData(\n mousePosition.x,\n mousePosition.y,\n 1,\n 1\n ).data;\n let rgbaSum = 0;\n for (const color of rgba) {\n rgbaSum += color;\n }\n return rgbaSum > 0;\n }\n}\n"]}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { ScaleLinear, ScaleOrdinal } from 'd3-scale';
|
|
2
2
|
import type { DieRenderInfo } from '../types';
|
|
3
3
|
import type { WaferMap } from '..';
|
|
4
|
-
import type { DataManager } from './data-manager';
|
|
5
4
|
/**
|
|
6
5
|
* Prerendering prepares render-ready dies data to be used by the rendering module
|
|
7
6
|
*/
|
|
8
7
|
export declare class Prerendering {
|
|
9
8
|
private readonly wafermap;
|
|
10
|
-
private readonly dataManager;
|
|
11
9
|
get labelsFontSize(): number;
|
|
12
10
|
get diesRenderInfo(): DieRenderInfo[];
|
|
13
11
|
d3ColorScale: ScaleOrdinal<string, string> | ScaleLinear<string, string>;
|
|
@@ -17,7 +15,7 @@ export declare class Prerendering {
|
|
|
17
15
|
private readonly nonHighlightedOpacity;
|
|
18
16
|
private readonly emptyDieColor;
|
|
19
17
|
private readonly nanDieColor;
|
|
20
|
-
constructor(wafermap: WaferMap
|
|
18
|
+
constructor(wafermap: WaferMap);
|
|
21
19
|
updateLabelsFontSize(): void;
|
|
22
20
|
updateDiesRenderInfo(): void;
|
|
23
21
|
private computeDieRenderInfo;
|