@ni/nimble-components 29.1.7 → 29.2.0

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 (71) hide show
  1. package/dist/all-components-bundle.js +861 -470
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +2873 -2758
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/all-components.d.ts +1 -0
  6. package/dist/esm/all-components.js +1 -0
  7. package/dist/esm/all-components.js.map +1 -1
  8. package/dist/esm/combobox/template.js +1 -1
  9. package/dist/esm/combobox/template.js.map +1 -1
  10. package/dist/esm/list-option/template.js +1 -0
  11. package/dist/esm/list-option/template.js.map +1 -1
  12. package/dist/esm/list-option-group/index.d.ts +65 -0
  13. package/dist/esm/list-option-group/index.js +130 -0
  14. package/dist/esm/list-option-group/index.js.map +1 -0
  15. package/dist/esm/list-option-group/styles.d.ts +1 -0
  16. package/dist/esm/list-option-group/styles.js +62 -0
  17. package/dist/esm/list-option-group/styles.js.map +1 -0
  18. package/dist/esm/list-option-group/template.d.ts +2 -0
  19. package/dist/esm/list-option-group/template.js +37 -0
  20. package/dist/esm/list-option-group/template.js.map +1 -0
  21. package/dist/esm/rich-text/mention-listbox/template.js +3 -3
  22. package/dist/esm/rich-text/mention-listbox/template.js.map +1 -1
  23. package/dist/esm/select/index.d.ts +11 -2
  24. package/dist/esm/select/index.js +149 -36
  25. package/dist/esm/select/index.js.map +1 -1
  26. package/dist/esm/select/template.d.ts +4 -0
  27. package/dist/esm/select/template.js +11 -2
  28. package/dist/esm/select/template.js.map +1 -1
  29. package/dist/esm/select/testing/select.pageobject.d.ts +4 -1
  30. package/dist/esm/select/testing/select.pageobject.js +15 -0
  31. package/dist/esm/select/testing/select.pageobject.js.map +1 -1
  32. package/dist/esm/wafer-map/{modules/experimental → experimental}/computations.d.ts +25 -8
  33. package/dist/esm/wafer-map/{modules/experimental → experimental}/computations.js +87 -8
  34. package/dist/esm/wafer-map/experimental/computations.js.map +1 -0
  35. package/dist/esm/wafer-map/{modules/experimental → experimental}/hover-handler.d.ts +1 -1
  36. package/dist/esm/wafer-map/{modules/experimental → experimental}/hover-handler.js +3 -5
  37. package/dist/esm/wafer-map/experimental/hover-handler.js.map +1 -0
  38. package/dist/esm/wafer-map/experimental/worker-renderer.d.ts +24 -0
  39. package/dist/esm/wafer-map/experimental/worker-renderer.js +75 -0
  40. package/dist/esm/wafer-map/experimental/worker-renderer.js.map +1 -0
  41. package/dist/esm/wafer-map/index.d.ts +4 -3
  42. package/dist/esm/wafer-map/index.js +54 -18
  43. package/dist/esm/wafer-map/index.js.map +1 -1
  44. package/dist/esm/wafer-map/modules/computations.d.ts +1 -1
  45. package/dist/esm/wafer-map/modules/computations.js.map +1 -1
  46. package/dist/esm/wafer-map/modules/data-manager.d.ts +2 -1
  47. package/dist/esm/wafer-map/modules/data-manager.js.map +1 -1
  48. package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
  49. package/dist/esm/wafer-map/modules/wafer-map-update-tracker.d.ts +4 -0
  50. package/dist/esm/wafer-map/modules/wafer-map-update-tracker.js +37 -2
  51. package/dist/esm/wafer-map/modules/wafer-map-update-tracker.js.map +1 -1
  52. package/dist/esm/wafer-map/types.d.ts +0 -16
  53. package/dist/esm/wafer-map/types.js.map +1 -1
  54. package/dist/esm/wafer-map/workers/matrix-renderer.d.ts +1 -1
  55. package/dist/esm/wafer-map/workers/matrix-renderer.js +1 -1
  56. package/dist/esm/wafer-map/workers/matrix-renderer.js.map +1 -1
  57. package/dist/esm/wafer-map/workers/types.d.ts +39 -0
  58. package/dist/esm/wafer-map/workers/types.js +2 -0
  59. package/dist/esm/wafer-map/workers/types.js.map +1 -0
  60. package/package.json +1 -1
  61. package/dist/esm/wafer-map/modules/experimental/computations.js.map +0 -1
  62. package/dist/esm/wafer-map/modules/experimental/data-manager.d.ts +0 -21
  63. package/dist/esm/wafer-map/modules/experimental/data-manager.js +0 -41
  64. package/dist/esm/wafer-map/modules/experimental/data-manager.js.map +0 -1
  65. package/dist/esm/wafer-map/modules/experimental/hover-handler.js.map +0 -1
  66. package/dist/esm/wafer-map/modules/experimental/prerendering.d.ts +0 -18
  67. package/dist/esm/wafer-map/modules/experimental/prerendering.js +0 -63
  68. package/dist/esm/wafer-map/modules/experimental/prerendering.js.map +0 -1
  69. package/dist/esm/wafer-map/modules/experimental/worker-renderer.d.ts +0 -13
  70. package/dist/esm/wafer-map/modules/experimental/worker-renderer.js +0 -96
  71. package/dist/esm/wafer-map/modules/experimental/worker-renderer.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"prerendering.js","sourceRoot":"","sources":["../../../../../src/wafer-map/modules/experimental/prerendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAIrD;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IASD,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAHrC,mBAAc,GAAG,GAAG,CAAC;QACrB,yBAAoB,GAAG,EAAE,CAAC;IAEc,CAAC;IAEnD,MAAM;QACT,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAC/C,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,aAAa,EACnD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAC9B,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAClD,CAAC;IAEO,mBAAmB;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,sBAAsB,CAAC,MAAM,EAAE;YAChE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,WAAW,EAAkB;iBAC7C,MAAM,CAAC,MAAM,CAAC;iBACd,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACrB,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACnB,IAAI,KAAK,GAAG,GAAG,EAAE;oBACb,GAAG,GAAG,KAAK,CAAC;iBACf;gBACD,IAAI,KAAK,GAAG,GAAG,EAAE;oBACb,GAAG,GAAG,KAAK,CAAC;iBACf;YACL,CAAC,CAAC,CAAC;YACH,gGAAgG;YAChG,MAAM,YAAY,GAAG,KAAK,CACtB,GAAG,EACH,GAAG,EACH,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAC5C,CAAC;YACF,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC5B,OAAO;oBACH,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;oBAC1B,KAAK;iBACR,CAAC;YACN,CAAC,CAAC,CAAC;SACN;QACD,sDAAsD;QACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAClB,OAAO;gBACH,KAAK;gBACL,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAE;aAClD,CAAC;QACN,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEO,uBAAuB,CAC3B,aAAyB,EACzB,aAAqB;QAErB,OAAO,IAAI,CAAC,GAAG,CACX,aAAa,CAAC,MAAM,EACpB,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;cACpD,IAAI,CAAC,cAAc,CAC5B,CAAC;IACN,CAAC;CACJ","sourcesContent":["import { scaleLinear } from 'd3-scale';\nimport { ticks } from 'd3-array';\nimport { WaferMapColorScaleMode } from '../../types';\nimport type { ColorScale, Dimensions } from '../../types';\nimport type { WaferMap } from '../..';\n\n/**\n * Prerendering prepares render-ready dies data to be used by the rendering module\n */\nexport class Prerendering {\n public get labelsFontSize(): number {\n return this._labelsFontSize;\n }\n\n public get colorScale(): ColorScale {\n return this._colorScale;\n }\n\n private _colorScale!: ColorScale;\n\n private _labelsFontSize!: number;\n\n private readonly fontSizeFactor = 0.8;\n private readonly colorScaleResolution = 10;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public update(): void {\n this._labelsFontSize = this.calculateLabelsFontSize(\n this.wafermap.experimentalDataManager.dieDimensions,\n this.wafermap.maxCharacters\n );\n this._colorScale = this.calculateColorScale();\n }\n\n private calculateColorScale(): ColorScale {\n if (this.wafermap.colorScaleMode === WaferMapColorScaleMode.linear) {\n const values = this.wafermap.colorScale.values.map(item => +item);\n const d3ColorScale = scaleLinear<string, string>()\n .domain(values)\n .range(this.wafermap.colorScale.colors);\n let min = values[0]!;\n let max = values[0]!;\n values.forEach(value => {\n if (value < min) {\n min = value;\n }\n if (value > max) {\n max = value;\n }\n });\n // the linear color scale will not be infinite but will be limited by the color scale resolution\n const valueSamples = ticks(\n min,\n max,\n values.length * this.colorScaleResolution\n );\n return valueSamples.map(value => {\n return {\n color: d3ColorScale(value),\n value\n };\n });\n }\n // ordinal color categories have to be sorted by value\n return this.wafermap.colorScale.colors\n .map((color, index) => {\n return {\n color,\n value: +this.wafermap.colorScale.values[index]!\n };\n })\n .sort((a, b) => a.value - b.value);\n }\n\n private calculateLabelsFontSize(\n dieDimensions: Dimensions,\n maxCharacters: number\n ): number {\n return Math.min(\n dieDimensions.height,\n (dieDimensions.width / (Math.max(2, maxCharacters) * 0.5))\n * this.fontSizeFactor\n );\n }\n}\n"]}
@@ -1,13 +0,0 @@
1
- import type { WaferMap } from '../..';
2
- /**
3
- * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas
4
- */
5
- export declare class WorkerRenderer {
6
- private readonly wafermap;
7
- private matrixRenderer;
8
- constructor(wafermap: WaferMap);
9
- setupWafer(): Promise<void>;
10
- drawWafer(): Promise<void>;
11
- renderHover(): void;
12
- private calculateHoverTransform;
13
- }
@@ -1,96 +0,0 @@
1
- import { transfer } from 'comlink';
2
- import { HoverDieOpacity } from '../../types';
3
- import { createMatrixRenderer } from '../create-matrix-renderer';
4
- /**
5
- * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas
6
- */
7
- export class WorkerRenderer {
8
- constructor(wafermap) {
9
- this.wafermap = wafermap;
10
- }
11
- async setupWafer() {
12
- if (this.matrixRenderer === undefined) {
13
- const { matrixRenderer } = await createMatrixRenderer();
14
- this.matrixRenderer = matrixRenderer;
15
- const offscreenCanvas = this.wafermap.workerCanvas.transferControlToOffscreen();
16
- await this.matrixRenderer.setCanvas(transfer(offscreenCanvas, [offscreenCanvas]));
17
- }
18
- await this.matrixRenderer.setCanvasDimensions({
19
- width: this.wafermap.canvasWidth ?? 0,
20
- height: this.wafermap.canvasHeight ?? 0
21
- });
22
- await this.matrixRenderer.setDiesDimensions(this.wafermap.experimentalDataManager.dieDimensions);
23
- const scaleX = this.wafermap.experimentalDataManager.horizontalScale(1)
24
- - this.wafermap.experimentalDataManager.horizontalScale(0);
25
- const scaleY = this.wafermap.experimentalDataManager.verticalScale(1)
26
- - this.wafermap.experimentalDataManager.verticalScale(0);
27
- await this.matrixRenderer.setScaling(scaleX, scaleY);
28
- await this.matrixRenderer.setBases(this.wafermap.experimentalDataManager.horizontalScale(0), this.wafermap.experimentalDataManager.verticalScale(0));
29
- await this.matrixRenderer.setMargin(this.wafermap.experimentalDataManager.margin);
30
- if (this.wafermap.diesTable === undefined) {
31
- await this.matrixRenderer.setColumnIndexes(Int32Array.from([]));
32
- await this.matrixRenderer.setRowIndexes(Int32Array.from([]));
33
- return;
34
- }
35
- const columnIndexes = this.wafermap.diesTable
36
- .getChild('colIndex')
37
- .toArray();
38
- await this.matrixRenderer.setColumnIndexes(columnIndexes);
39
- const rowIndexes = this.wafermap.diesTable
40
- .getChild('rowIndex')
41
- .toArray();
42
- await this.matrixRenderer.setRowIndexes(rowIndexes);
43
- }
44
- async drawWafer() {
45
- await this.matrixRenderer.setTransform(this.wafermap.transform);
46
- const topLeftCanvasCorner = this.wafermap.transform.invert([0, 0]);
47
- const bottomRightCanvasCorner = this.wafermap.transform.invert([
48
- this.wafermap.canvasWidth,
49
- this.wafermap.canvasHeight
50
- ]);
51
- await this.matrixRenderer.setCanvasCorners({
52
- x: topLeftCanvasCorner[0]
53
- - this.wafermap.experimentalDataManager.dieDimensions.width,
54
- y: topLeftCanvasCorner[1]
55
- - this.wafermap.experimentalDataManager.dieDimensions.height
56
- }, {
57
- x: bottomRightCanvasCorner[0],
58
- y: bottomRightCanvasCorner[1]
59
- });
60
- await this.matrixRenderer.drawWafer();
61
- this.renderHover();
62
- }
63
- renderHover() {
64
- if (this.wafermap.experimentalDataManager.dieDimensions === undefined
65
- || this.wafermap.transform === undefined) {
66
- return;
67
- }
68
- this.wafermap.hoverWidth = this.wafermap.experimentalDataManager.dieDimensions.width
69
- * this.wafermap.transform.k;
70
- this.wafermap.hoverHeight = this.wafermap.experimentalDataManager.dieDimensions.height
71
- * this.wafermap.transform.k;
72
- this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined
73
- ? HoverDieOpacity.hide
74
- : HoverDieOpacity.show;
75
- this.wafermap.hoverTransform = this.calculateHoverTransform();
76
- }
77
- calculateHoverTransform() {
78
- if (this.wafermap.hoverDie !== undefined) {
79
- const scaledX = this.wafermap.experimentalDataManager.horizontalScale(this.wafermap.hoverDie.x);
80
- if (scaledX === undefined) {
81
- return '';
82
- }
83
- const scaledY = this.wafermap.experimentalDataManager.verticalScale(this.wafermap.hoverDie.y);
84
- if (scaledY === undefined) {
85
- return '';
86
- }
87
- const transformedPoint = this.wafermap.transform.apply([
88
- scaledX + this.wafermap.experimentalDataManager.margin.left,
89
- scaledY + this.wafermap.experimentalDataManager.margin.top
90
- ]);
91
- return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;
92
- }
93
- return '';
94
- }
95
- }
96
- //# sourceMappingURL=worker-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-renderer.js","sourceRoot":"","sources":["../../../../../src/wafer-map/modules/experimental/worker-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Remote, transfer } from 'comlink';\nimport type { WaferMap } from '../..';\nimport { HoverDieOpacity } from '../../types';\nimport { createMatrixRenderer } from '../create-matrix-renderer';\nimport type { MatrixRenderer } from '../../../../build/generate-workers/dist/esm/source/matrix-renderer';\n\n/**\n * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas\n */\nexport class WorkerRenderer {\n private matrixRenderer!: Remote<MatrixRenderer>;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public async setupWafer(): Promise<void> {\n if (this.matrixRenderer === undefined) {\n const { matrixRenderer } = await createMatrixRenderer();\n this.matrixRenderer = matrixRenderer;\n const offscreenCanvas = this.wafermap.workerCanvas.transferControlToOffscreen();\n await this.matrixRenderer.setCanvas(\n transfer(offscreenCanvas, [offscreenCanvas])\n );\n }\n\n await this.matrixRenderer.setCanvasDimensions({\n width: this.wafermap.canvasWidth ?? 0,\n height: this.wafermap.canvasHeight ?? 0\n });\n await this.matrixRenderer.setDiesDimensions(\n this.wafermap.experimentalDataManager.dieDimensions\n );\n const scaleX = this.wafermap.experimentalDataManager.horizontalScale(1)!\n - this.wafermap.experimentalDataManager.horizontalScale(0)!;\n const scaleY = this.wafermap.experimentalDataManager.verticalScale(1)!\n - this.wafermap.experimentalDataManager.verticalScale(0)!;\n await this.matrixRenderer.setScaling(scaleX, scaleY);\n await this.matrixRenderer.setBases(\n this.wafermap.experimentalDataManager.horizontalScale(0)!,\n this.wafermap.experimentalDataManager.verticalScale(0)!\n );\n await this.matrixRenderer.setMargin(\n this.wafermap.experimentalDataManager.margin\n );\n\n if (this.wafermap.diesTable === undefined) {\n await this.matrixRenderer.setColumnIndexes(Int32Array.from([]));\n await this.matrixRenderer.setRowIndexes(Int32Array.from([]));\n return;\n }\n\n const columnIndexes = this.wafermap.diesTable\n .getChild('colIndex')!\n .toArray();\n await this.matrixRenderer.setColumnIndexes(columnIndexes);\n\n const rowIndexes = this.wafermap.diesTable\n .getChild('rowIndex')!\n .toArray();\n await this.matrixRenderer.setRowIndexes(rowIndexes);\n }\n\n public async drawWafer(): Promise<void> {\n await this.matrixRenderer.setTransform(this.wafermap.transform);\n const topLeftCanvasCorner = this.wafermap.transform.invert([0, 0]);\n const bottomRightCanvasCorner = this.wafermap.transform.invert([\n this.wafermap.canvasWidth,\n this.wafermap.canvasHeight\n ]);\n await this.matrixRenderer.setCanvasCorners(\n {\n x:\n topLeftCanvasCorner[0]\n - this.wafermap.experimentalDataManager.dieDimensions.width,\n y:\n topLeftCanvasCorner[1]\n - this.wafermap.experimentalDataManager.dieDimensions.height\n },\n {\n x: bottomRightCanvasCorner[0],\n y: bottomRightCanvasCorner[1]\n }\n );\n await this.matrixRenderer.drawWafer();\n this.renderHover();\n }\n\n public renderHover(): void {\n if (\n this.wafermap.experimentalDataManager.dieDimensions === undefined\n || this.wafermap.transform === undefined\n ) {\n return;\n }\n this.wafermap.hoverWidth = this.wafermap.experimentalDataManager.dieDimensions.width\n * this.wafermap.transform.k;\n this.wafermap.hoverHeight = this.wafermap.experimentalDataManager.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.experimentalDataManager.horizontalScale(\n this.wafermap.hoverDie.x\n );\n if (scaledX === undefined) {\n return '';\n }\n const scaledY = this.wafermap.experimentalDataManager.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.experimentalDataManager.margin.left,\n scaledY + this.wafermap.experimentalDataManager.margin.top\n ]);\n return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;\n }\n return '';\n }\n}\n"]}