@ni/nimble-components 30.0.7 → 30.0.8

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 (107) hide show
  1. package/dist/all-components-bundle.js +19 -14
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +1195 -1191
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/anchor-menu-item/index.js.map +1 -1
  6. package/dist/esm/anchor-tabs/index.js.map +1 -1
  7. package/dist/esm/anchor-tree-item/index.js.map +1 -1
  8. package/dist/esm/combobox/index.js.map +1 -1
  9. package/dist/esm/dialog/index.js.map +1 -1
  10. package/dist/esm/drawer/index.js.map +1 -1
  11. package/dist/esm/label-provider/base/index.js.map +1 -1
  12. package/dist/esm/list-option/index.js.map +1 -1
  13. package/dist/esm/list-option-group/index.js.map +1 -1
  14. package/dist/esm/mapping/icon/index.js.map +1 -1
  15. package/dist/esm/menu-button/index.js.map +1 -1
  16. package/dist/esm/menu-button/testing/menu-button.pageobject.js.map +1 -1
  17. package/dist/esm/rich-text/base/index.js.map +1 -1
  18. package/dist/esm/rich-text/editor/index.js.map +1 -1
  19. package/dist/esm/rich-text/editor/models/create-tiptap-editor.js.map +1 -1
  20. package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
  21. package/dist/esm/rich-text/mention-listbox/index.js.map +1 -1
  22. package/dist/esm/rich-text/models/markdown-parser.js +12 -12
  23. package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
  24. package/dist/esm/rich-text/models/rich-text-tracker.js.map +1 -1
  25. package/dist/esm/rich-text/models/testing/markdown-parser-utils.js.map +1 -1
  26. package/dist/esm/rich-text/viewer/index.js.map +1 -1
  27. package/dist/esm/rich-text/viewer/testing/rich-text-viewer.pageobject.js.map +1 -1
  28. package/dist/esm/rich-text-mention/base/index.js.map +1 -1
  29. package/dist/esm/rich-text-mention/base/models/mention-validator.js.map +1 -1
  30. package/dist/esm/rich-text-mention/users/index.js.map +1 -1
  31. package/dist/esm/select/index.js.map +1 -1
  32. package/dist/esm/select/testing/select.pageobject.js.map +1 -1
  33. package/dist/esm/table/components/group-row/index.js.map +1 -1
  34. package/dist/esm/table/components/header/index.js.map +1 -1
  35. package/dist/esm/table/components/row/index.js.map +1 -1
  36. package/dist/esm/table/index.js.map +1 -1
  37. package/dist/esm/table/models/array-to-tree.js.map +1 -1
  38. package/dist/esm/table/models/data-hierarchy-manager.js.map +1 -1
  39. package/dist/esm/table/models/expansion-manager.js.map +1 -1
  40. package/dist/esm/table/models/interactive-selection-manager.js.map +1 -1
  41. package/dist/esm/table/models/keyboard-navigation-manager.js.map +1 -1
  42. package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
  43. package/dist/esm/table/models/selection-managers/selection-manager-base.js.map +1 -1
  44. package/dist/esm/table/models/sort-operations.js.map +1 -1
  45. package/dist/esm/table/models/table-layout-manager.js.map +1 -1
  46. package/dist/esm/table/models/table-update-tracker.js.map +1 -1
  47. package/dist/esm/table/models/table-validator.js.map +1 -1
  48. package/dist/esm/table/models/virtualizer.js.map +1 -1
  49. package/dist/esm/table/testing/table.pageobject.js.map +1 -1
  50. package/dist/esm/table-column/anchor/cell-view/index.js.map +1 -1
  51. package/dist/esm/table-column/anchor/cell-view/template.js.map +1 -1
  52. package/dist/esm/table-column/base/cell-view/index.js.map +1 -1
  53. package/dist/esm/table-column/base/cell-view/template.js.map +1 -1
  54. package/dist/esm/table-column/base/group-header-view/template.js.map +1 -1
  55. package/dist/esm/table-column/base/models/column-internals.js.map +1 -1
  56. package/dist/esm/table-column/base/models/column-validator.js.map +1 -1
  57. package/dist/esm/table-column/date-text/cell-view/index.js.map +1 -1
  58. package/dist/esm/table-column/date-text/group-header-view/index.js.map +1 -1
  59. package/dist/esm/table-column/date-text/index.js.map +1 -1
  60. package/dist/esm/table-column/date-text/models/format-helper.js.map +1 -1
  61. package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js.map +1 -1
  62. package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -1
  63. package/dist/esm/table-column/duration-text/models/duration-formatter.js.map +1 -1
  64. package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js.map +1 -1
  65. package/dist/esm/table-column/enum-base/index.js.map +1 -1
  66. package/dist/esm/table-column/enum-base/models/mapping-key-resolver.js.map +1 -1
  67. package/dist/esm/table-column/mapping/cell-view/index.js.map +1 -1
  68. package/dist/esm/table-column/mapping/group-header-view/index.js.map +1 -1
  69. package/dist/esm/table-column/mapping/index.js.map +1 -1
  70. package/dist/esm/table-column/mapping/testing/table-column-mapping.pageobject.js.map +1 -1
  71. package/dist/esm/table-column/menu-button/cell-view/index.js.map +1 -1
  72. package/dist/esm/table-column/menu-button/index.js.map +1 -1
  73. package/dist/esm/table-column/mixins/custom-sort-order.js.map +1 -1
  74. package/dist/esm/table-column/mixins/sortable-column.js.map +1 -1
  75. package/dist/esm/table-column/number-text/index.js.map +1 -1
  76. package/dist/esm/table-column/number-text/models/number-text-unit-format.js.map +1 -1
  77. package/dist/esm/table-column/text-base/cell-view/index.js.map +1 -1
  78. package/dist/esm/table-column/text-base/group-header-view/index.js.map +1 -1
  79. package/dist/esm/text-area/index.js.map +1 -1
  80. package/dist/esm/theme-provider/design-tokens.js.map +1 -1
  81. package/dist/esm/theme-provider/index.js.map +1 -1
  82. package/dist/esm/tree-view/index.js.map +1 -1
  83. package/dist/esm/utilities/models/converter.js.map +1 -1
  84. package/dist/esm/utilities/models/document-element-lang.js.map +1 -1
  85. package/dist/esm/utilities/models/tracker.js.map +1 -1
  86. package/dist/esm/utilities/style/direction.js.map +1 -1
  87. package/dist/esm/utilities/style/multivalue-property-stylesheet-behavior.js.map +1 -1
  88. package/dist/esm/utilities/style/theme.js.map +1 -1
  89. package/dist/esm/utilities/testing/component.js.map +1 -1
  90. package/dist/esm/utilities/unit-format/decimal-unit-format.js.map +1 -1
  91. package/dist/esm/utilities/unit-format/default-unit-format.js.map +1 -1
  92. package/dist/esm/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.js.map +1 -1
  93. package/dist/esm/utilities/unit-format/unit-format.js.map +1 -1
  94. package/dist/esm/utilities/unit-format/unit-scale/unit-scale.js.map +1 -1
  95. package/dist/esm/wafer-map/experimental/computations.js.map +1 -1
  96. package/dist/esm/wafer-map/experimental/hover-handler.js.map +1 -1
  97. package/dist/esm/wafer-map/experimental/worker-renderer.js.map +1 -1
  98. package/dist/esm/wafer-map/index.js.map +1 -1
  99. package/dist/esm/wafer-map/modules/computations.js.map +1 -1
  100. package/dist/esm/wafer-map/modules/create-matrix-renderer.js.map +1 -1
  101. package/dist/esm/wafer-map/modules/hover-handler.js.map +1 -1
  102. package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
  103. package/dist/esm/wafer-map/modules/rendering.js.map +1 -1
  104. package/dist/esm/wafer-map/modules/wafer-map-update-tracker.js.map +1 -1
  105. package/dist/esm/wafer-map/modules/wafer-map-validator.js.map +1 -1
  106. package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
  107. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { range } from 'd3-array';\nimport { ScaleBand, scaleBand, scaleQuantile, ScaleQuantile } from 'd3-scale';\nimport type { WaferMap } from '..';\nimport type { WaferMapDie } from '../types';\nimport { WaferMapOriginLocation } from '../types';\nimport type { Dimensions, Margin } from '../workers/types';\n\ninterface GridDimensions {\n origin: {\n x: number,\n y: number\n };\n rows: number;\n cols: number;\n}\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get containerDimensions(): Dimensions {\n return this._containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this._dieDimensions;\n }\n\n public get radius(): number {\n return this._radius;\n }\n\n public get margin(): Margin {\n return this._margin;\n }\n\n public get horizontalScale(): ScaleBand<number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleBand<number> {\n return this._verticalScale;\n }\n\n public get invertedHorizontalScale(): ScaleQuantile<number, number> {\n return this._invertedHorizontalScale;\n }\n\n public get invertedVerticalScale(): ScaleQuantile<number, number> {\n return this._invertedVerticalScale;\n }\n\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _radius!: number;\n private _margin!: Margin;\n private _horizontalScale!: ScaleBand<number>;\n private _verticalScale!: ScaleBand<number>;\n private _invertedHorizontalScale!: ScaleQuantile<number, number>;\n private _invertedVerticalScale!: ScaleQuantile<number, number>;\n private readonly defaultPadding = 0;\n private readonly baseMarginPercentage = 0.04;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateContainerDimensions(): void {\n const canvasDimensions = {\n width: this.wafermap.canvasWidth,\n height: this.wafermap.canvasHeight\n };\n const canvasDiameter = Math.min(\n canvasDimensions.width,\n canvasDimensions.height\n );\n const canvasMargin = {\n top: (canvasDimensions.height - canvasDiameter) / 2,\n right: (canvasDimensions.width - canvasDiameter) / 2,\n bottom: (canvasDimensions.height - canvasDiameter) / 2,\n left: (canvasDimensions.width - canvasDiameter) / 2\n };\n const baseMargin = {\n top: canvasDiameter * this.baseMarginPercentage,\n right: canvasDiameter * this.baseMarginPercentage,\n bottom: canvasDiameter * this.baseMarginPercentage,\n left: canvasDiameter * this.baseMarginPercentage\n };\n this._margin = this.calculateMarginAddition(baseMargin, canvasMargin);\n this._containerDimensions = this.calculateContainerDimensions(\n canvasDimensions,\n this._margin\n );\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n this._radius = containerDiameter / 2;\n this.updateScales();\n }\n\n public updateScales(): void {\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n const gridDimensions = this.gridDimensionsValidAndDefined()\n ? this.calculateGridDimensionsFromBoundingBox()\n : this.calculateGridDimensionsFromDies(this.wafermap.dies);\n // this scale is used for positioning the dies on the canvas\n const originLocation = this.wafermap.originLocation;\n this._horizontalScale = this.createHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedHorizontalScale = this.createInvertedHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedVerticalScale = this.createInvertedVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n const dieWidth = this.horizontalScale.bandwidth();\n const dieHeight = this.verticalScale.bandwidth();\n this._dieDimensions = {\n width: isNaN(dieWidth) ? 0 : dieWidth,\n height: isNaN(dieHeight) ? 0 : dieHeight\n };\n }\n\n private gridDimensionsValidAndDefined(): boolean {\n return (\n !this.wafermap.validity.invalidGridDimensions\n && typeof this.wafermap.gridMinX === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n );\n }\n\n private calculateGridDimensionsFromBoundingBox(): GridDimensions {\n const gridDimensions = { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n if (\n typeof this.wafermap.gridMaxY === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n ) {\n gridDimensions.origin.x = this.wafermap.gridMinX;\n gridDimensions.origin.y = this.wafermap.gridMinY;\n gridDimensions.rows = this.wafermap.gridMaxY - this.wafermap.gridMinY + 1;\n gridDimensions.cols = this.wafermap.gridMaxX - this.wafermap.gridMinX + 1;\n }\n return gridDimensions;\n }\n\n private calculateGridDimensionsFromDies(\n dies: Readonly<Readonly<WaferMapDie>[]>\n ): GridDimensions {\n if (dies.length === 0 || dies[0] === undefined) {\n return { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n }\n\n const minPoint = { x: dies[0].x, y: dies[0].y };\n const maxPoint = { x: dies[0].x, y: dies[0].y };\n\n for (const die of dies) {\n if (die.x < minPoint.x) {\n minPoint.x = die.x;\n }\n if (die.y < minPoint.y) {\n minPoint.y = die.y;\n }\n if (die.x > maxPoint.x) {\n maxPoint.x = die.x;\n }\n if (die.y > maxPoint.y) {\n maxPoint.y = die.y;\n }\n }\n\n return {\n origin: minPoint,\n rows: maxPoint.y - minPoint.y + 1,\n cols: maxPoint.x - minPoint.x + 1\n };\n }\n\n private calculateContainerDimensions(\n canvasDimensions: Dimensions,\n margin: Margin\n ): Dimensions {\n return {\n width: canvasDimensions.width - margin.left - margin.right,\n height: canvasDimensions.height - margin.top - margin.bottom\n };\n }\n\n private createHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.x, grid.origin.x + grid.cols))\n .paddingInner(0)\n .paddingOuter(0)\n .align(0)\n .round(false);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range([0, containerWidth]);\n }\n return scale.range([containerWidth, 0]);\n }\n\n private createInvertedHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerWidth]);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range(range(grid.origin.x, grid.origin.x + grid.cols));\n }\n return scale.range(\n range(grid.origin.x, grid.origin.x + grid.cols).reverse()\n );\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.y, grid.origin.y + grid.rows))\n .paddingInner(this.defaultPadding)\n .paddingOuter(0)\n .align(0)\n .round(false);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range([containerHeight, 0]);\n }\n return scale.range([0, containerHeight]);\n }\n\n private createInvertedVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerHeight]);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the inverted vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range(\n range(grid.origin.y, grid.origin.y + grid.rows).reverse()\n );\n }\n return scale.range(range(grid.origin.y, grid.origin.y + grid.rows));\n }\n\n private calculateMarginAddition(\n baseMargin: Margin,\n addedMargin: Margin\n ): Margin {\n return {\n top: baseMargin.top + addedMargin.top,\n right: baseMargin.right + addedMargin.right,\n bottom: baseMargin.bottom + addedMargin.bottom,\n left: baseMargin.left + addedMargin.left\n };\n }\n}\n"]}
1
+ {"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { range } from 'd3-array';\nimport { ScaleBand, scaleBand, scaleQuantile, ScaleQuantile } from 'd3-scale';\nimport type { WaferMap } from '..';\nimport type { WaferMapDie } from '../types';\nimport { WaferMapOriginLocation } from '../types';\nimport type { Dimensions, Margin } from '../workers/types';\n\ninterface GridDimensions {\n origin: {\n x: number,\n y: number\n };\n rows: number;\n cols: number;\n}\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get containerDimensions(): Dimensions {\n return this._containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this._dieDimensions;\n }\n\n public get radius(): number {\n return this._radius;\n }\n\n public get margin(): Margin {\n return this._margin;\n }\n\n public get horizontalScale(): ScaleBand<number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleBand<number> {\n return this._verticalScale;\n }\n\n public get invertedHorizontalScale(): ScaleQuantile<number, number> {\n return this._invertedHorizontalScale;\n }\n\n public get invertedVerticalScale(): ScaleQuantile<number, number> {\n return this._invertedVerticalScale;\n }\n\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _radius!: number;\n private _margin!: Margin;\n private _horizontalScale!: ScaleBand<number>;\n private _verticalScale!: ScaleBand<number>;\n private _invertedHorizontalScale!: ScaleQuantile<number, number>;\n private _invertedVerticalScale!: ScaleQuantile<number, number>;\n private readonly defaultPadding = 0;\n private readonly baseMarginPercentage = 0.04;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateContainerDimensions(): void {\n const canvasDimensions = {\n width: this.wafermap.canvasWidth,\n height: this.wafermap.canvasHeight\n };\n const canvasDiameter = Math.min(\n canvasDimensions.width,\n canvasDimensions.height\n );\n const canvasMargin = {\n top: (canvasDimensions.height - canvasDiameter) / 2,\n right: (canvasDimensions.width - canvasDiameter) / 2,\n bottom: (canvasDimensions.height - canvasDiameter) / 2,\n left: (canvasDimensions.width - canvasDiameter) / 2\n };\n const baseMargin = {\n top: canvasDiameter * this.baseMarginPercentage,\n right: canvasDiameter * this.baseMarginPercentage,\n bottom: canvasDiameter * this.baseMarginPercentage,\n left: canvasDiameter * this.baseMarginPercentage\n };\n this._margin = this.calculateMarginAddition(baseMargin, canvasMargin);\n this._containerDimensions = this.calculateContainerDimensions(\n canvasDimensions,\n this._margin\n );\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n this._radius = containerDiameter / 2;\n this.updateScales();\n }\n\n public updateScales(): void {\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n const gridDimensions = this.gridDimensionsValidAndDefined()\n ? this.calculateGridDimensionsFromBoundingBox()\n : this.calculateGridDimensionsFromDies(this.wafermap.dies);\n // this scale is used for positioning the dies on the canvas\n const originLocation = this.wafermap.originLocation;\n this._horizontalScale = this.createHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedHorizontalScale = this.createInvertedHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedVerticalScale = this.createInvertedVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n const dieWidth = this.horizontalScale.bandwidth();\n const dieHeight = this.verticalScale.bandwidth();\n this._dieDimensions = {\n width: isNaN(dieWidth) ? 0 : dieWidth,\n height: isNaN(dieHeight) ? 0 : dieHeight\n };\n }\n\n private gridDimensionsValidAndDefined(): boolean {\n return (\n !this.wafermap.validity.invalidGridDimensions\n && typeof this.wafermap.gridMinX === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n );\n }\n\n private calculateGridDimensionsFromBoundingBox(): GridDimensions {\n const gridDimensions = { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n if (\n typeof this.wafermap.gridMaxY === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n ) {\n gridDimensions.origin.x = this.wafermap.gridMinX;\n gridDimensions.origin.y = this.wafermap.gridMinY;\n gridDimensions.rows = this.wafermap.gridMaxY - this.wafermap.gridMinY + 1;\n gridDimensions.cols = this.wafermap.gridMaxX - this.wafermap.gridMinX + 1;\n }\n return gridDimensions;\n }\n\n private calculateGridDimensionsFromDies(\n dies: Readonly<Readonly<WaferMapDie>[]>\n ): GridDimensions {\n if (dies.length === 0 || dies[0] === undefined) {\n return { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n }\n\n const minPoint = { x: dies[0].x, y: dies[0].y };\n const maxPoint = { x: dies[0].x, y: dies[0].y };\n\n for (const die of dies) {\n if (die.x < minPoint.x) {\n minPoint.x = die.x;\n }\n if (die.y < minPoint.y) {\n minPoint.y = die.y;\n }\n if (die.x > maxPoint.x) {\n maxPoint.x = die.x;\n }\n if (die.y > maxPoint.y) {\n maxPoint.y = die.y;\n }\n }\n\n return {\n origin: minPoint,\n rows: maxPoint.y - minPoint.y + 1,\n cols: maxPoint.x - minPoint.x + 1\n };\n }\n\n private calculateContainerDimensions(\n canvasDimensions: Dimensions,\n margin: Margin\n ): Dimensions {\n return {\n width: canvasDimensions.width - margin.left - margin.right,\n height: canvasDimensions.height - margin.top - margin.bottom\n };\n }\n\n private createHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.x, grid.origin.x + grid.cols))\n .paddingInner(0)\n .paddingOuter(0)\n .align(0)\n .round(false);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range([0, containerWidth]);\n }\n return scale.range([containerWidth, 0]);\n }\n\n private createInvertedHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerWidth]);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range(range(grid.origin.x, grid.origin.x + grid.cols));\n }\n return scale.range(\n range(grid.origin.x, grid.origin.x + grid.cols).reverse()\n );\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.y, grid.origin.y + grid.rows))\n .paddingInner(this.defaultPadding)\n .paddingOuter(0)\n .align(0)\n .round(false);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range([containerHeight, 0]);\n }\n return scale.range([0, containerHeight]);\n }\n\n private createInvertedVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerHeight]);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the inverted vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range(\n range(grid.origin.y, grid.origin.y + grid.rows).reverse()\n );\n }\n return scale.range(range(grid.origin.y, grid.origin.y + grid.rows));\n }\n\n private calculateMarginAddition(\n baseMargin: Margin,\n addedMargin: Margin\n ): Margin {\n return {\n top: baseMargin.top + addedMargin.top,\n right: baseMargin.right + addedMargin.right,\n bottom: baseMargin.bottom + addedMargin.bottom,\n left: baseMargin.left + addedMargin.left\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"create-matrix-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/create-matrix-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,IAAI,GAAW,CAAC;AAEhB;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAGtC,EAAE;IACD,IAAI,GAAG,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACjE,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACnC;IACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,gEAAgE;IAChE,MAAM,oBAAoB,GAAG,IAAI,CAA0B,MAAM,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACjD,OAAO;QACH,cAAc;QACd,SAAS;KACZ,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { wrap, Remote } from 'comlink';\nimport { workerCode } from '../workers/worker-code';\nimport type { MatrixRenderer } from '../workers/matrix-renderer';\n\nlet url: string;\n\n/**\n * Asynchronously creates and returns a Remote<MatrixRenderer> instance.\n * This function simplifies the process of creating and accessing MatrixRenderer instances.\n */\nexport const createMatrixRenderer = async (): Promise<{\n matrixRenderer: Remote<MatrixRenderer>,\n terminate: () => void\n}> => {\n if (url === undefined) {\n const blob = new Blob([workerCode], { type: 'text/javascript' });\n url = URL.createObjectURL(blob);\n }\n const worker = new Worker(url);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const RemoteMatrixRenderer = wrap<new() => MatrixRenderer>(worker);\n const matrixRenderer = await new RemoteMatrixRenderer();\n const terminate = (): void => worker.terminate();\n return {\n matrixRenderer,\n terminate\n };\n};\n"]}
1
+ {"version":3,"file":"create-matrix-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/create-matrix-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,IAAI,GAAW,CAAC;AAEhB;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAGtC,EAAE;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACjE,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,gEAAgE;IAChE,MAAM,oBAAoB,GAAG,IAAI,CAA0B,MAAM,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACjD,OAAO;QACH,cAAc;QACd,SAAS;KACZ,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { wrap, Remote } from 'comlink';\nimport { workerCode } from '../workers/worker-code';\nimport type { MatrixRenderer } from '../workers/matrix-renderer';\n\nlet url: string;\n\n/**\n * Asynchronously creates and returns a Remote<MatrixRenderer> instance.\n * This function simplifies the process of creating and accessing MatrixRenderer instances.\n */\nexport const createMatrixRenderer = async (): Promise<{\n matrixRenderer: Remote<MatrixRenderer>,\n terminate: () => void\n}> => {\n if (url === undefined) {\n const blob = new Blob([workerCode], { type: 'text/javascript' });\n url = URL.createObjectURL(blob);\n }\n const worker = new Worker(url);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const RemoteMatrixRenderer = wrap<new() => MatrixRenderer>(worker);\n const matrixRenderer = await new RemoteMatrixRenderer();\n const terminate = (): void => worker.terminate();\n return {\n matrixRenderer,\n terminate\n };\n};\n"]}
@@ -1 +1 @@
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.isExperimentalUpdate()) {\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 if (dieCoordinates === undefined) {\n this.wafermap.hoverDie = undefined;\n return;\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 | undefined {\n if (!this.wafermap.isExperimentalUpdate()) {\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 return undefined;\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
+ {"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.isExperimentalUpdate()) {\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 if (dieCoordinates === undefined) {\n this.wafermap.hoverDie = undefined;\n return;\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 | undefined {\n if (!this.wafermap.isExperimentalUpdate()) {\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 return undefined;\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 +1 @@
1
- {"version":3,"file":"prerendering.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/prerendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScaleLinear, scaleLinear, ScaleOrdinal, scaleOrdinal } from 'd3-scale';\nimport { ColorRGBA64, parseColor } from '@microsoft/fast-colors';\nimport { WaferMapColorScaleMode } from '../types';\nimport type { DieRenderInfo, WaferMapColorScale, WaferMapDie } from '../types';\nimport type { WaferMap } from '..';\nimport type { Dimensions } from '../workers/types';\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 diesRenderInfo(): DieRenderInfo[] {\n return this._diesRenderInfo;\n }\n\n public d3ColorScale!:\n | ScaleOrdinal<string, string>\n | ScaleLinear<string, string>;\n\n private _labelsFontSize!: number;\n private _diesRenderInfo!: DieRenderInfo[];\n\n private readonly fontSizeFactor = 0.8;\n private readonly nonHighlightedOpacity = 0.3;\n private readonly emptyDieColor = 'rgba(218,223,236,1)';\n private readonly nanDieColor = 'rgba(122,122,122,1)';\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateLabelsFontSize(): void {\n this._labelsFontSize = this.calculateLabelsFontSize(\n this.wafermap.dataManager.dieDimensions,\n this.wafermap.maxCharacters\n );\n this.updateDiesRenderInfo();\n }\n\n public updateDiesRenderInfo(): void {\n this.d3ColorScale = this.createD3ColorScale(\n this.wafermap.colorScale,\n this.wafermap.colorScaleMode\n );\n const isDieRenderInfo = (\n info: DieRenderInfo | null\n ): info is DieRenderInfo => info !== null;\n if (this.wafermap.diesTable === undefined) {\n this._diesRenderInfo = this.wafermap.dies\n .map(die => this.computeDieRenderInfo(die))\n .filter(isDieRenderInfo);\n }\n }\n\n private computeDieRenderInfo(die: WaferMapDie): DieRenderInfo | null {\n const margin = this.wafermap.dataManager.margin;\n\n const scaledX = this.wafermap.dataManager.horizontalScale(die.x);\n const scaledY = this.wafermap.dataManager.verticalScale(die.y);\n\n if (scaledX === undefined || scaledY === undefined) {\n return null;\n }\n\n return {\n x: scaledX + margin.right,\n y: scaledY + margin.top,\n fillStyle: this.calculateFillStyle(\n die.value,\n this.wafermap.colorScaleMode,\n this.wafermap.highlightedTags,\n die.tags\n ),\n text: this.buildLabel(\n die.value,\n this.wafermap.maxCharacters,\n this.wafermap.dieLabelsHidden,\n this.wafermap.dieLabelsSuffix\n )\n };\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 private createD3ColorScale(\n colorScale: WaferMapColorScale,\n colorScaleMode: WaferMapColorScaleMode\n ): ScaleOrdinal<string, string> | ScaleLinear<string, string> {\n if (this.isColorScaleLinear(colorScaleMode)) {\n return scaleLinear<string, string>()\n .domain(colorScale.values.map(item => +item))\n .range(colorScale.colors);\n }\n return scaleOrdinal<string, string>()\n .domain(colorScale.values)\n .range(colorScale.colors);\n }\n\n private dieHasData(dieData: string): boolean {\n return dieData !== null && dieData !== undefined && dieData !== '';\n }\n\n private buildLabel(\n value: string,\n maxCharacters: number,\n dieLabelsHidden: boolean,\n dieLabelsSuffix: string\n ): string {\n if (dieLabelsHidden || !this.dieHasData(value)) {\n return '';\n }\n const label = `${value}${dieLabelsSuffix}`;\n if (label.length >= maxCharacters) {\n return `${label.substring(0, maxCharacters)}…`;\n }\n return label;\n }\n\n private calculateOpacity(\n dieTags?: string[],\n highlightedTags?: string[]\n ): number {\n if (!highlightedTags || highlightedTags.length === 0) {\n return 1;\n }\n const highlightedSet = new Set(highlightedTags);\n\n if (dieTags?.some(dieTag => highlightedSet.has(dieTag))) {\n return 1;\n }\n\n return this.nonHighlightedOpacity;\n }\n\n private isColorScaleLinear(\n colorScaleMode: WaferMapColorScaleMode\n ): this is { d3ColorScale: ScaleLinear<string, string> } {\n return colorScaleMode === WaferMapColorScaleMode.linear;\n }\n\n private isColorScaleOrdinal(\n colorScaleMode: WaferMapColorScaleMode\n ): this is { d3ColorScale: ScaleOrdinal<string, string> } {\n return colorScaleMode === WaferMapColorScaleMode.ordinal;\n }\n\n private calculateFillStyle(\n value: string,\n colorScaleMode: WaferMapColorScaleMode,\n highlightedTags?: string[],\n dieTags?: string[]\n ): string {\n let colorValue: string = this.emptyDieColor;\n if (this.dieHasData(value)) {\n if (isNaN(+value)) {\n colorValue = this.nanDieColor;\n } else if (this.isColorScaleLinear(colorScaleMode)) {\n colorValue = this.d3ColorScale(+value);\n } else if (this.isColorScaleOrdinal(colorScaleMode)) {\n colorValue = this.d3ColorScale(value);\n }\n }\n if (colorValue === undefined) {\n return this.emptyDieColor;\n }\n let rgbColor: ColorRGBA64 | null = parseColor(colorValue);\n if (rgbColor === null) {\n return this.emptyDieColor;\n }\n\n rgbColor = new ColorRGBA64(\n rgbColor.r,\n rgbColor.g,\n rgbColor.b,\n this.calculateOpacity(dieTags, highlightedTags)\n );\n return rgbColor.toStringWebRGBA();\n }\n}\n"]}
1
+ {"version":3,"file":"prerendering.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/prerendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScaleLinear, scaleLinear, ScaleOrdinal, scaleOrdinal } from 'd3-scale';\nimport { ColorRGBA64, parseColor } from '@microsoft/fast-colors';\nimport { WaferMapColorScaleMode } from '../types';\nimport type { DieRenderInfo, WaferMapColorScale, WaferMapDie } from '../types';\nimport type { WaferMap } from '..';\nimport type { Dimensions } from '../workers/types';\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 diesRenderInfo(): DieRenderInfo[] {\n return this._diesRenderInfo;\n }\n\n public d3ColorScale!:\n | ScaleOrdinal<string, string>\n | ScaleLinear<string, string>;\n\n private _labelsFontSize!: number;\n private _diesRenderInfo!: DieRenderInfo[];\n\n private readonly fontSizeFactor = 0.8;\n private readonly nonHighlightedOpacity = 0.3;\n private readonly emptyDieColor = 'rgba(218,223,236,1)';\n private readonly nanDieColor = 'rgba(122,122,122,1)';\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateLabelsFontSize(): void {\n this._labelsFontSize = this.calculateLabelsFontSize(\n this.wafermap.dataManager.dieDimensions,\n this.wafermap.maxCharacters\n );\n this.updateDiesRenderInfo();\n }\n\n public updateDiesRenderInfo(): void {\n this.d3ColorScale = this.createD3ColorScale(\n this.wafermap.colorScale,\n this.wafermap.colorScaleMode\n );\n const isDieRenderInfo = (\n info: DieRenderInfo | null\n ): info is DieRenderInfo => info !== null;\n if (this.wafermap.diesTable === undefined) {\n this._diesRenderInfo = this.wafermap.dies\n .map(die => this.computeDieRenderInfo(die))\n .filter(isDieRenderInfo);\n }\n }\n\n private computeDieRenderInfo(die: WaferMapDie): DieRenderInfo | null {\n const margin = this.wafermap.dataManager.margin;\n\n const scaledX = this.wafermap.dataManager.horizontalScale(die.x);\n const scaledY = this.wafermap.dataManager.verticalScale(die.y);\n\n if (scaledX === undefined || scaledY === undefined) {\n return null;\n }\n\n return {\n x: scaledX + margin.right,\n y: scaledY + margin.top,\n fillStyle: this.calculateFillStyle(\n die.value,\n this.wafermap.colorScaleMode,\n this.wafermap.highlightedTags,\n die.tags\n ),\n text: this.buildLabel(\n die.value,\n this.wafermap.maxCharacters,\n this.wafermap.dieLabelsHidden,\n this.wafermap.dieLabelsSuffix\n )\n };\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 private createD3ColorScale(\n colorScale: WaferMapColorScale,\n colorScaleMode: WaferMapColorScaleMode\n ): ScaleOrdinal<string, string> | ScaleLinear<string, string> {\n if (this.isColorScaleLinear(colorScaleMode)) {\n return scaleLinear<string, string>()\n .domain(colorScale.values.map(item => +item))\n .range(colorScale.colors);\n }\n return scaleOrdinal<string, string>()\n .domain(colorScale.values)\n .range(colorScale.colors);\n }\n\n private dieHasData(dieData: string): boolean {\n return dieData !== null && dieData !== undefined && dieData !== '';\n }\n\n private buildLabel(\n value: string,\n maxCharacters: number,\n dieLabelsHidden: boolean,\n dieLabelsSuffix: string\n ): string {\n if (dieLabelsHidden || !this.dieHasData(value)) {\n return '';\n }\n const label = `${value}${dieLabelsSuffix}`;\n if (label.length >= maxCharacters) {\n return `${label.substring(0, maxCharacters)}…`;\n }\n return label;\n }\n\n private calculateOpacity(\n dieTags?: string[],\n highlightedTags?: string[]\n ): number {\n if (!highlightedTags || highlightedTags.length === 0) {\n return 1;\n }\n const highlightedSet = new Set(highlightedTags);\n\n if (dieTags?.some(dieTag => highlightedSet.has(dieTag))) {\n return 1;\n }\n\n return this.nonHighlightedOpacity;\n }\n\n private isColorScaleLinear(\n colorScaleMode: WaferMapColorScaleMode\n ): this is { d3ColorScale: ScaleLinear<string, string> } {\n return colorScaleMode === WaferMapColorScaleMode.linear;\n }\n\n private isColorScaleOrdinal(\n colorScaleMode: WaferMapColorScaleMode\n ): this is { d3ColorScale: ScaleOrdinal<string, string> } {\n return colorScaleMode === WaferMapColorScaleMode.ordinal;\n }\n\n private calculateFillStyle(\n value: string,\n colorScaleMode: WaferMapColorScaleMode,\n highlightedTags?: string[],\n dieTags?: string[]\n ): string {\n let colorValue: string = this.emptyDieColor;\n if (this.dieHasData(value)) {\n if (isNaN(+value)) {\n colorValue = this.nanDieColor;\n } else if (this.isColorScaleLinear(colorScaleMode)) {\n colorValue = this.d3ColorScale(+value);\n } else if (this.isColorScaleOrdinal(colorScaleMode)) {\n colorValue = this.d3ColorScale(value);\n }\n }\n if (colorValue === undefined) {\n return this.emptyDieColor;\n }\n let rgbColor: ColorRGBA64 | null = parseColor(colorValue);\n if (rgbColor === null) {\n return this.emptyDieColor;\n }\n\n rgbColor = new ColorRGBA64(\n rgbColor.r,\n rgbColor.g,\n rgbColor.b,\n this.calculateOpacity(dieTags, highlightedTags)\n );\n return rgbColor.toStringWebRGBA();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rendering.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WaferMap } from '..';\r\nimport { DieRenderInfo, HoverDieOpacity } from '../types';\r\n\r\n/**\r\n * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas\r\n */\r\nexport class RenderingModule {\r\n private dies!: DieRenderInfo[];\r\n private readonly minDieDim = 50;\r\n\r\n public constructor(private readonly wafermap: WaferMap) {}\r\n\r\n public updateSortedDiesAndDrawWafer(): void {\r\n this.dies = this.wafermap.dataManager.diesRenderInfo.sort((a, b) => {\r\n if (a.fillStyle > b.fillStyle) {\r\n return 1;\r\n }\r\n if (b.fillStyle > a.fillStyle) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n this.drawWafer();\r\n }\r\n\r\n public drawWafer(): void {\r\n this.wafermap.canvasContext.save();\r\n this.clearCanvas();\r\n this.scaleCanvas();\r\n this.renderDies();\r\n this.renderText();\r\n this.wafermap.canvasContext.restore();\r\n this.renderHover();\r\n }\r\n\r\n public renderHover(): void {\r\n if (\r\n this.wafermap.dataManager.dieDimensions === undefined\r\n || this.wafermap.transform === undefined\r\n ) {\r\n return;\r\n }\r\n this.wafermap.hoverWidth = this.wafermap.dataManager.dieDimensions.width\r\n * this.wafermap.transform.k;\r\n this.wafermap.hoverHeight = this.wafermap.dataManager.dieDimensions.height\r\n * this.wafermap.transform.k;\r\n this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined\r\n ? HoverDieOpacity.hide\r\n : HoverDieOpacity.show;\r\n this.wafermap.hoverTransform = this.calculateHoverTransform();\r\n }\r\n\r\n private calculateHoverTransform(): string {\r\n if (this.wafermap.hoverDie !== undefined) {\r\n const scaledX = this.wafermap.dataManager.horizontalScale(\r\n this.wafermap.hoverDie.x\r\n );\r\n if (scaledX === undefined) {\r\n return '';\r\n }\r\n const scaledY = this.wafermap.dataManager.verticalScale(\r\n this.wafermap.hoverDie.y\r\n );\r\n if (scaledY === undefined) {\r\n return '';\r\n }\r\n const transformedPoint = this.wafermap.transform.apply([\r\n scaledX + this.wafermap.dataManager.margin.left,\r\n scaledY + this.wafermap.dataManager.margin.top\r\n ]);\r\n return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;\r\n }\r\n return '';\r\n }\r\n\r\n private renderDies(): void {\r\n const context = this.wafermap.canvasContext;\r\n const dieWidth = this.wafermap.dataManager.dieDimensions.width;\r\n const dieHeight = this.wafermap.dataManager.dieDimensions.height;\r\n const transformedCanvasMinPoint = this.wafermap.transform.invert([\r\n 0, 0\r\n ]);\r\n const transformedCanvasMaxPoint = this.wafermap.transform.invert([\r\n this.wafermap.canvas.width,\r\n this.wafermap.canvas.height\r\n ]);\r\n transformedCanvasMinPoint[0] -= dieWidth;\r\n transformedCanvasMinPoint[1] -= dieHeight;\r\n\r\n for (const die of this.dies) {\r\n if (\r\n this.isDieVisible(\r\n die,\r\n transformedCanvasMinPoint,\r\n transformedCanvasMaxPoint\r\n )\r\n ) {\r\n context.fillStyle = die.fillStyle;\r\n context.fillRect(die.x, die.y, dieWidth, dieHeight);\r\n }\r\n }\r\n }\r\n\r\n private renderText(): void {\r\n if (this.wafermap.dieLabelsHidden) {\r\n return;\r\n }\r\n const dieWidth = this.wafermap.dataManager.dieDimensions.width;\r\n const dieHeight = this.wafermap.dataManager.dieDimensions.height;\r\n const dieSize = dieWidth * dieHeight * (this.wafermap.transform.k || 1);\r\n if (dieSize >= this.minDieDim) {\r\n const fontsize = this.wafermap.dataManager.labelsFontSize;\r\n const context = this.wafermap.canvasContext;\r\n context.font = `${fontsize.toString()}px sans-serif`;\r\n context.fillStyle = '#ffffff';\r\n context.textAlign = 'center';\r\n context.lineCap = 'butt';\r\n const approximateTextHeight = context.measureText('M');\r\n\r\n const transformedCanvasMinPoint = this.wafermap.transform.invert([\r\n 0, 0\r\n ]);\r\n const transformedCanvasMaxPoint = this.wafermap.transform.invert([\r\n this.wafermap.canvas.width,\r\n this.wafermap.canvas.height\r\n ]);\r\n transformedCanvasMinPoint[0] -= dieWidth;\r\n transformedCanvasMinPoint[1] -= dieHeight;\r\n\r\n for (const die of this.dies) {\r\n if (\r\n this.isDieVisible(\r\n die,\r\n transformedCanvasMinPoint,\r\n transformedCanvasMaxPoint\r\n )\r\n ) {\r\n context.fillText(\r\n die.text,\r\n die.x + dieWidth / 2,\r\n die.y + dieHeight / 2 + approximateTextHeight.width / 2,\r\n dieWidth - (dieWidth / 100) * 20\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private clearCanvas(): void {\r\n this.wafermap.canvasContext.clearRect(\r\n 0,\r\n 0,\r\n this.wafermap.canvas.width,\r\n this.wafermap.canvas.height\r\n );\r\n }\r\n\r\n private scaleCanvas(): void {\r\n this.wafermap.canvasContext.translate(\r\n this.wafermap.transform.x,\r\n this.wafermap.transform.y\r\n );\r\n this.wafermap.canvasContext.scale(\r\n this.wafermap.transform.k,\r\n this.wafermap.transform.k\r\n );\r\n }\r\n\r\n private isDieVisible(\r\n die: DieRenderInfo,\r\n minPoint: [number, number],\r\n maxPoint: [number, number]\r\n ): boolean {\r\n return (\r\n die.x >= minPoint[0]\r\n && die.x < maxPoint[0]\r\n && die.y >= minPoint[1]\r\n && die.y < maxPoint[1]\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"rendering.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/rendering.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WaferMap } from '..';\r\nimport { DieRenderInfo, HoverDieOpacity } from '../types';\r\n\r\n/**\r\n * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas\r\n */\r\nexport class RenderingModule {\r\n private dies!: DieRenderInfo[];\r\n private readonly minDieDim = 50;\r\n\r\n public constructor(private readonly wafermap: WaferMap) {}\r\n\r\n public updateSortedDiesAndDrawWafer(): void {\r\n this.dies = this.wafermap.dataManager.diesRenderInfo.sort((a, b) => {\r\n if (a.fillStyle > b.fillStyle) {\r\n return 1;\r\n }\r\n if (b.fillStyle > a.fillStyle) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n this.drawWafer();\r\n }\r\n\r\n public drawWafer(): void {\r\n this.wafermap.canvasContext.save();\r\n this.clearCanvas();\r\n this.scaleCanvas();\r\n this.renderDies();\r\n this.renderText();\r\n this.wafermap.canvasContext.restore();\r\n this.renderHover();\r\n }\r\n\r\n public renderHover(): void {\r\n if (\r\n this.wafermap.dataManager.dieDimensions === undefined\r\n || this.wafermap.transform === undefined\r\n ) {\r\n return;\r\n }\r\n this.wafermap.hoverWidth = this.wafermap.dataManager.dieDimensions.width\r\n * this.wafermap.transform.k;\r\n this.wafermap.hoverHeight = this.wafermap.dataManager.dieDimensions.height\r\n * this.wafermap.transform.k;\r\n this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined\r\n ? HoverDieOpacity.hide\r\n : HoverDieOpacity.show;\r\n this.wafermap.hoverTransform = this.calculateHoverTransform();\r\n }\r\n\r\n private calculateHoverTransform(): string {\r\n if (this.wafermap.hoverDie !== undefined) {\r\n const scaledX = this.wafermap.dataManager.horizontalScale(\r\n this.wafermap.hoverDie.x\r\n );\r\n if (scaledX === undefined) {\r\n return '';\r\n }\r\n const scaledY = this.wafermap.dataManager.verticalScale(\r\n this.wafermap.hoverDie.y\r\n );\r\n if (scaledY === undefined) {\r\n return '';\r\n }\r\n const transformedPoint = this.wafermap.transform.apply([\r\n scaledX + this.wafermap.dataManager.margin.left,\r\n scaledY + this.wafermap.dataManager.margin.top\r\n ]);\r\n return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;\r\n }\r\n return '';\r\n }\r\n\r\n private renderDies(): void {\r\n const context = this.wafermap.canvasContext;\r\n const dieWidth = this.wafermap.dataManager.dieDimensions.width;\r\n const dieHeight = this.wafermap.dataManager.dieDimensions.height;\r\n const transformedCanvasMinPoint = this.wafermap.transform.invert([\r\n 0, 0\r\n ]);\r\n const transformedCanvasMaxPoint = this.wafermap.transform.invert([\r\n this.wafermap.canvas.width,\r\n this.wafermap.canvas.height\r\n ]);\r\n transformedCanvasMinPoint[0] -= dieWidth;\r\n transformedCanvasMinPoint[1] -= dieHeight;\r\n\r\n for (const die of this.dies) {\r\n if (\r\n this.isDieVisible(\r\n die,\r\n transformedCanvasMinPoint,\r\n transformedCanvasMaxPoint\r\n )\r\n ) {\r\n context.fillStyle = die.fillStyle;\r\n context.fillRect(die.x, die.y, dieWidth, dieHeight);\r\n }\r\n }\r\n }\r\n\r\n private renderText(): void {\r\n if (this.wafermap.dieLabelsHidden) {\r\n return;\r\n }\r\n const dieWidth = this.wafermap.dataManager.dieDimensions.width;\r\n const dieHeight = this.wafermap.dataManager.dieDimensions.height;\r\n const dieSize = dieWidth * dieHeight * (this.wafermap.transform.k || 1);\r\n if (dieSize >= this.minDieDim) {\r\n const fontsize = this.wafermap.dataManager.labelsFontSize;\r\n const context = this.wafermap.canvasContext;\r\n context.font = `${fontsize.toString()}px sans-serif`;\r\n context.fillStyle = '#ffffff';\r\n context.textAlign = 'center';\r\n context.lineCap = 'butt';\r\n const approximateTextHeight = context.measureText('M');\r\n\r\n const transformedCanvasMinPoint = this.wafermap.transform.invert([\r\n 0, 0\r\n ]);\r\n const transformedCanvasMaxPoint = this.wafermap.transform.invert([\r\n this.wafermap.canvas.width,\r\n this.wafermap.canvas.height\r\n ]);\r\n transformedCanvasMinPoint[0] -= dieWidth;\r\n transformedCanvasMinPoint[1] -= dieHeight;\r\n\r\n for (const die of this.dies) {\r\n if (\r\n this.isDieVisible(\r\n die,\r\n transformedCanvasMinPoint,\r\n transformedCanvasMaxPoint\r\n )\r\n ) {\r\n context.fillText(\r\n die.text,\r\n die.x + dieWidth / 2,\r\n die.y + dieHeight / 2 + approximateTextHeight.width / 2,\r\n dieWidth - (dieWidth / 100) * 20\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private clearCanvas(): void {\r\n this.wafermap.canvasContext.clearRect(\r\n 0,\r\n 0,\r\n this.wafermap.canvas.width,\r\n this.wafermap.canvas.height\r\n );\r\n }\r\n\r\n private scaleCanvas(): void {\r\n this.wafermap.canvasContext.translate(\r\n this.wafermap.transform.x,\r\n this.wafermap.transform.y\r\n );\r\n this.wafermap.canvasContext.scale(\r\n this.wafermap.transform.k,\r\n this.wafermap.transform.k\r\n );\r\n }\r\n\r\n private isDieVisible(\r\n die: DieRenderInfo,\r\n minPoint: [number, number],\r\n maxPoint: [number, number]\r\n ): boolean {\r\n return (\r\n die.x >= minPoint[0]\r\n && die.x < maxPoint[0]\r\n && die.y >= minPoint[1]\r\n && die.y < maxPoint[1]\r\n );\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wafer-map-update-tracker.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/wafer-map-update-tracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { DOM } from '@microsoft/fast-element';\nimport type { WaferMap } from '..';\nimport { UpdateTracker } from '../../utilities/models/update-tracker';\n\nconst trackedItems = [\n 'highlightedTags',\n 'canvasWidth',\n 'canvasHeight',\n 'originLocation',\n 'gridMinX',\n 'gridMaxX',\n 'gridMinY',\n 'gridMaxY',\n 'dies',\n 'maxCharacters',\n 'colorScale',\n 'colorScaleMode',\n 'dieLabelsHidden',\n 'dieLabelsSuffix',\n 'transform',\n 'hoverDie'\n] as const;\n\n/**\n * Helper class to track what updates are needed to the wafer based on configuration\n * changes.\n */\nexport class WaferMapUpdateTracker extends UpdateTracker<typeof trackedItems> {\n private updateQueued = false;\n public constructor(private readonly wafermap: WaferMap) {\n super(trackedItems);\n }\n\n public get requiresEventsUpdate(): boolean {\n return (\n this.isTracked('canvasWidth')\n || this.isTracked('canvasHeight')\n || this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n || this.isTracked('maxCharacters')\n || this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n || this.isTracked('transform')\n );\n }\n\n public get requiresWorkerWaferSetup(): boolean {\n return (\n this.isTracked('canvasWidth')\n || this.isTracked('canvasHeight')\n || this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n || this.isTracked('maxCharacters')\n || this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n );\n }\n\n public get requiresContainerDimensionsUpdate(): boolean {\n return this.isTracked('canvasWidth') || this.isTracked('canvasHeight');\n }\n\n public get requiresComponentResizeUpdate(): boolean {\n return this.isTracked('canvasWidth') || this.isTracked('canvasHeight');\n }\n\n public get requiresScalesUpdate(): boolean {\n return (\n this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n );\n }\n\n public get requiresInputDataUpdate(): boolean {\n return (\n this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n );\n }\n\n public get requiresLabelsFontSizeUpdate(): boolean {\n return this.isTracked('maxCharacters');\n }\n\n public get requiresDiesRenderInfoUpdate(): boolean {\n return (\n this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n );\n }\n\n public get requiresColorAndTextUpdate(): boolean {\n return (\n this.isTracked('maxCharacters')\n || this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n );\n }\n\n public get requiresDrawnWaferUpdate(): boolean {\n return this.isTracked('transform');\n }\n\n public get requiresRenderHoverUpdate(): boolean {\n return this.isTracked('hoverDie');\n }\n\n /**\n * Queues an update using the DOM and until the update is run no other updates are queued.\n * After the update is finished, all the tracked items are reset.\n */\n public override queueUpdate(): void {\n if (!this.wafermap.$fastController.isConnected || this.updateQueued) {\n return;\n }\n this.updateQueued = true;\n if (this.wafermap.currentTask === undefined) {\n DOM.queueUpdate(() => {\n this.wafermap.update();\n this.untrackAll();\n this.updateQueued = false;\n });\n } else {\n void (async () => {\n await this.wafermap.currentTask;\n DOM.queueUpdate(() => {\n this.wafermap.update();\n this.untrackAll();\n this.updateQueued = false;\n this.wafermap.currentTask = undefined;\n });\n })();\n }\n }\n}\n"]}
1
+ {"version":3,"file":"wafer-map-update-tracker.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/wafer-map-update-tracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { DOM } from '@microsoft/fast-element';\nimport type { WaferMap } from '..';\nimport { UpdateTracker } from '../../utilities/models/update-tracker';\n\nconst trackedItems = [\n 'highlightedTags',\n 'canvasWidth',\n 'canvasHeight',\n 'originLocation',\n 'gridMinX',\n 'gridMaxX',\n 'gridMinY',\n 'gridMaxY',\n 'dies',\n 'maxCharacters',\n 'colorScale',\n 'colorScaleMode',\n 'dieLabelsHidden',\n 'dieLabelsSuffix',\n 'transform',\n 'hoverDie'\n] as const;\n\n/**\n * Helper class to track what updates are needed to the wafer based on configuration\n * changes.\n */\nexport class WaferMapUpdateTracker extends UpdateTracker<typeof trackedItems> {\n private updateQueued = false;\n public constructor(private readonly wafermap: WaferMap) {\n super(trackedItems);\n }\n\n public get requiresEventsUpdate(): boolean {\n return (\n this.isTracked('canvasWidth')\n || this.isTracked('canvasHeight')\n || this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n || this.isTracked('maxCharacters')\n || this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n || this.isTracked('transform')\n );\n }\n\n public get requiresWorkerWaferSetup(): boolean {\n return (\n this.isTracked('canvasWidth')\n || this.isTracked('canvasHeight')\n || this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n || this.isTracked('maxCharacters')\n || this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n );\n }\n\n public get requiresContainerDimensionsUpdate(): boolean {\n return this.isTracked('canvasWidth') || this.isTracked('canvasHeight');\n }\n\n public get requiresComponentResizeUpdate(): boolean {\n return this.isTracked('canvasWidth') || this.isTracked('canvasHeight');\n }\n\n public get requiresScalesUpdate(): boolean {\n return (\n this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n );\n }\n\n public get requiresInputDataUpdate(): boolean {\n return (\n this.isTracked('originLocation')\n || this.isTracked('gridMinX')\n || this.isTracked('gridMaxX')\n || this.isTracked('gridMinY')\n || this.isTracked('gridMaxY')\n || this.isTracked('dies')\n );\n }\n\n public get requiresLabelsFontSizeUpdate(): boolean {\n return this.isTracked('maxCharacters');\n }\n\n public get requiresDiesRenderInfoUpdate(): boolean {\n return (\n this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n );\n }\n\n public get requiresColorAndTextUpdate(): boolean {\n return (\n this.isTracked('maxCharacters')\n || this.isTracked('highlightedTags')\n || this.isTracked('colorScale')\n || this.isTracked('colorScaleMode')\n || this.isTracked('dieLabelsHidden')\n || this.isTracked('dieLabelsSuffix')\n );\n }\n\n public get requiresDrawnWaferUpdate(): boolean {\n return this.isTracked('transform');\n }\n\n public get requiresRenderHoverUpdate(): boolean {\n return this.isTracked('hoverDie');\n }\n\n /**\n * Queues an update using the DOM and until the update is run no other updates are queued.\n * After the update is finished, all the tracked items are reset.\n */\n public override queueUpdate(): void {\n if (!this.wafermap.$fastController.isConnected || this.updateQueued) {\n return;\n }\n this.updateQueued = true;\n if (this.wafermap.currentTask === undefined) {\n DOM.queueUpdate(() => {\n this.wafermap.update();\n this.untrackAll();\n this.updateQueued = false;\n });\n } else {\n void (async () => {\n await this.wafermap.currentTask;\n DOM.queueUpdate(() => {\n this.wafermap.update();\n this.untrackAll();\n this.updateQueued = false;\n this.wafermap.currentTask = undefined;\n });\n })();\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wafer-map-validator.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/wafer-map-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataType, Precision } from 'apache-arrow';\nimport type { WaferMap } from '..';\nimport type { WaferMapValidity } from '../types';\n\n/**\n * Helper class for the nimble-wafer-map to validate that the wafer maps's grid dimensions\n * configuration is valid and report which aspects of the configuration are valid or invalid.\n */\nexport class WaferMapValidator {\n private invalidGridDimensions = false;\n private invalidDiesTableSchema = false;\n\n public constructor(private readonly wafermap: WaferMap) {}\n public getValidity(): WaferMapValidity {\n return {\n invalidGridDimensions: this.invalidGridDimensions,\n invalidDiesTableSchema: this.invalidDiesTableSchema\n };\n }\n\n public isValid(): boolean {\n return Object.values(this.getValidity()).every(x => x === false);\n }\n\n public validateGridDimensions(): boolean {\n this.invalidGridDimensions = false;\n if (\n this.wafermap.gridMinX === undefined\n && this.wafermap.gridMaxX === undefined\n && this.wafermap.gridMinY === undefined\n && this.wafermap.gridMaxY === undefined\n ) {\n this.invalidGridDimensions = false;\n } else if (\n typeof this.wafermap.gridMinX !== 'number'\n || typeof this.wafermap.gridMaxX !== 'number'\n || typeof this.wafermap.gridMinY !== 'number'\n || typeof this.wafermap.gridMaxY !== 'number'\n || this.wafermap.gridMaxX < this.wafermap.gridMinX\n || this.wafermap.gridMaxY < this.wafermap.gridMinY\n ) {\n this.invalidGridDimensions = true;\n }\n return !this.invalidGridDimensions;\n }\n\n public validateDiesTableSchema(): boolean {\n this.invalidDiesTableSchema = false;\n if (this.wafermap.diesTable === undefined) {\n this.invalidDiesTableSchema = false;\n } else {\n const fields = this.wafermap.diesTable.schema.fields;\n const colField = fields.find(field => field.name === 'colIndex');\n const rowField = fields.find(field => field.name === 'rowIndex');\n const valueField = fields.find(field => field.name === 'value');\n if (\n !colField\n || !rowField\n || !valueField\n || !DataType.isInt(colField.type)\n || colField.type.bitWidth !== 32\n || !DataType.isInt(rowField.type)\n || rowField.type.bitWidth !== 32\n || !DataType.isFloat(valueField.type)\n || valueField.type.precision !== Precision.DOUBLE\n ) {\n this.invalidDiesTableSchema = true;\n }\n }\n return !this.invalidDiesTableSchema;\n }\n}\n"]}
1
+ {"version":3,"file":"wafer-map-validator.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/wafer-map-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataType, Precision } from 'apache-arrow';\nimport type { WaferMap } from '..';\nimport type { WaferMapValidity } from '../types';\n\n/**\n * Helper class for the nimble-wafer-map to validate that the wafer maps's grid dimensions\n * configuration is valid and report which aspects of the configuration are valid or invalid.\n */\nexport class WaferMapValidator {\n private invalidGridDimensions = false;\n private invalidDiesTableSchema = false;\n\n public constructor(private readonly wafermap: WaferMap) {}\n public getValidity(): WaferMapValidity {\n return {\n invalidGridDimensions: this.invalidGridDimensions,\n invalidDiesTableSchema: this.invalidDiesTableSchema\n };\n }\n\n public isValid(): boolean {\n return Object.values(this.getValidity()).every(x => x === false);\n }\n\n public validateGridDimensions(): boolean {\n this.invalidGridDimensions = false;\n if (\n this.wafermap.gridMinX === undefined\n && this.wafermap.gridMaxX === undefined\n && this.wafermap.gridMinY === undefined\n && this.wafermap.gridMaxY === undefined\n ) {\n this.invalidGridDimensions = false;\n } else if (\n typeof this.wafermap.gridMinX !== 'number'\n || typeof this.wafermap.gridMaxX !== 'number'\n || typeof this.wafermap.gridMinY !== 'number'\n || typeof this.wafermap.gridMaxY !== 'number'\n || this.wafermap.gridMaxX < this.wafermap.gridMinX\n || this.wafermap.gridMaxY < this.wafermap.gridMinY\n ) {\n this.invalidGridDimensions = true;\n }\n return !this.invalidGridDimensions;\n }\n\n public validateDiesTableSchema(): boolean {\n this.invalidDiesTableSchema = false;\n if (this.wafermap.diesTable === undefined) {\n this.invalidDiesTableSchema = false;\n } else {\n const fields = this.wafermap.diesTable.schema.fields;\n const colField = fields.find(field => field.name === 'colIndex');\n const rowField = fields.find(field => field.name === 'rowIndex');\n const valueField = fields.find(field => field.name === 'value');\n if (\n !colField\n || !rowField\n || !valueField\n || !DataType.isInt(colField.type)\n || colField.type.bitWidth !== 32\n || !DataType.isInt(rowField.type)\n || rowField.type.bitWidth !== 32\n || !DataType.isFloat(valueField.type)\n || valueField.type.precision !== Precision.DOUBLE\n ) {\n this.invalidDiesTableSchema = true;\n }\n }\n return !this.invalidDiesTableSchema;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"zoom-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/zoom-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,IAAI,EAAiB,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;AAOpE;;GAEG;AACH,MAAM,OAAO,WAAW;IAKpB,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAJrC,gBAAW,GAAqB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,mBAAc,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAkD1C,gBAAW,GAAG,CAAC,KAAY,EAAQ,EAAE;YAClD,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC,CAAC;QAhDE,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;YACtD,OAAO,EAAE,KAAK;SACjB,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,UAAU;QACb,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAmB,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;IAEM,YAAY,CAAC,MAAgB,EAAE,YAAoB;QACtD,IACI,MAAM,KAAK,IAAI,CAAC,QAAQ;eACrB,CAAC,YAAY,KAAK,aAAa,IAAI,YAAY,KAAK,cAAc,CAAC,EACxE;YACE,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;IACL,CAAC;IAEO,kBAAkB;QACtB,IAAI,EAAE;aACD,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;aAC7B,eAAe,CAAC;YACb,IAAI,CAAC,cAAc;YACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;SAC1D,CAAC;aACD,EAAE,CAAC,MAAM,EAAE,CAAC,KAAgB,EAAE,EAAE;YAC7B,sEAAsE;YACtE,mEAAmE;YACnE,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9C,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAmB,CAAC,CAAC,CAAC;IAC7C,CAAC;CAKJ","sourcesContent":["import { select } from 'd3-selection';\nimport { zoom, ZoomTransform } from 'd3-zoom';\nimport { Observable, type Notifier } from '@microsoft/fast-element';\nimport type { WaferMap } from '..';\n\ninterface ZoomEvent {\n transform: ZoomTransform;\n}\n\n/**\n * ZoomHandler deals with user interactions and events like zooming\n */\nexport class ZoomHandler {\n private readonly scaleExtent: [number, number] = [1, 100];\n private readonly minExtentPoint: [number, number] = [0, 0];\n private readonly wafermapNotifier: Notifier;\n\n public constructor(private readonly wafermap: WaferMap) {\n this.wafermapNotifier = Observable.getNotifier(this.wafermap);\n this.wafermapNotifier.subscribe(this, 'canvasWidth');\n this.wafermapNotifier.subscribe(this, 'canvasHeight');\n }\n\n /**\n * @internal\n */\n public connect(): void {\n this.createZoomBehavior();\n this.wafermap.addEventListener('wheel', this.onWheelMove, {\n passive: false\n });\n }\n\n /**\n * @internal\n */\n public disconnect(): void {\n zoom().on('zoom', null)(select(this.wafermap as Element));\n this.wafermap.removeEventListener('wheel', this.onWheelMove);\n }\n\n public handleChange(source: WaferMap, propertyName: string): void {\n if (\n source === this.wafermap\n && (propertyName === 'canvasWidth' || propertyName === 'canvasHeight')\n ) {\n this.createZoomBehavior();\n }\n }\n\n private createZoomBehavior(): void {\n zoom()\n .scaleExtent(this.scaleExtent)\n .translateExtent([\n this.minExtentPoint,\n [this.wafermap.canvasWidth, this.wafermap.canvasHeight]\n ])\n .on('zoom', (event: ZoomEvent) => {\n // D3 will automatically remove existing handlers when adding new ones\n // See: https://github.com/d3/d3-zoom/blob/v3.0.0/README.md#zoom_on\n this.wafermap.transform = event.transform;\n })(select(this.wafermap as Element));\n }\n\n private readonly onWheelMove = (event: Event): void => {\n event.preventDefault();\n };\n}\n"]}
1
+ {"version":3,"file":"zoom-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/zoom-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,IAAI,EAAiB,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;AAOpE;;GAEG;AACH,MAAM,OAAO,WAAW;IAKpB,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAJrC,gBAAW,GAAqB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,mBAAc,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAkD1C,gBAAW,GAAG,CAAC,KAAY,EAAQ,EAAE;YAClD,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC,CAAC;QAhDE,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;YACtD,OAAO,EAAE,KAAK;SACjB,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,UAAU;QACb,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAmB,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;IAEM,YAAY,CAAC,MAAgB,EAAE,YAAoB;QACtD,IACI,MAAM,KAAK,IAAI,CAAC,QAAQ;eACrB,CAAC,YAAY,KAAK,aAAa,IAAI,YAAY,KAAK,cAAc,CAAC,EACxE,CAAC;YACC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAEO,kBAAkB;QACtB,IAAI,EAAE;aACD,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;aAC7B,eAAe,CAAC;YACb,IAAI,CAAC,cAAc;YACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;SAC1D,CAAC;aACD,EAAE,CAAC,MAAM,EAAE,CAAC,KAAgB,EAAE,EAAE;YAC7B,sEAAsE;YACtE,mEAAmE;YACnE,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9C,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAmB,CAAC,CAAC,CAAC;IAC7C,CAAC;CAKJ","sourcesContent":["import { select } from 'd3-selection';\nimport { zoom, ZoomTransform } from 'd3-zoom';\nimport { Observable, type Notifier } from '@microsoft/fast-element';\nimport type { WaferMap } from '..';\n\ninterface ZoomEvent {\n transform: ZoomTransform;\n}\n\n/**\n * ZoomHandler deals with user interactions and events like zooming\n */\nexport class ZoomHandler {\n private readonly scaleExtent: [number, number] = [1, 100];\n private readonly minExtentPoint: [number, number] = [0, 0];\n private readonly wafermapNotifier: Notifier;\n\n public constructor(private readonly wafermap: WaferMap) {\n this.wafermapNotifier = Observable.getNotifier(this.wafermap);\n this.wafermapNotifier.subscribe(this, 'canvasWidth');\n this.wafermapNotifier.subscribe(this, 'canvasHeight');\n }\n\n /**\n * @internal\n */\n public connect(): void {\n this.createZoomBehavior();\n this.wafermap.addEventListener('wheel', this.onWheelMove, {\n passive: false\n });\n }\n\n /**\n * @internal\n */\n public disconnect(): void {\n zoom().on('zoom', null)(select(this.wafermap as Element));\n this.wafermap.removeEventListener('wheel', this.onWheelMove);\n }\n\n public handleChange(source: WaferMap, propertyName: string): void {\n if (\n source === this.wafermap\n && (propertyName === 'canvasWidth' || propertyName === 'canvasHeight')\n ) {\n this.createZoomBehavior();\n }\n }\n\n private createZoomBehavior(): void {\n zoom()\n .scaleExtent(this.scaleExtent)\n .translateExtent([\n this.minExtentPoint,\n [this.wafermap.canvasWidth, this.wafermap.canvasHeight]\n ])\n .on('zoom', (event: ZoomEvent) => {\n // D3 will automatically remove existing handlers when adding new ones\n // See: https://github.com/d3/d3-zoom/blob/v3.0.0/README.md#zoom_on\n this.wafermap.transform = event.transform;\n })(select(this.wafermap as Element));\n }\n\n private readonly onWheelMove = (event: Event): void => {\n event.preventDefault();\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ni/nimble-components",
3
- "version": "30.0.7",
3
+ "version": "30.0.8",
4
4
  "description": "Styled web components for the NI Nimble Design System",
5
5
  "scripts": {
6
6
  "build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run bundle-components && npm run generate-scss",
@@ -66,7 +66,7 @@
66
66
  "@microsoft/fast-element": "^1.12.0",
67
67
  "@microsoft/fast-foundation": "^2.49.6",
68
68
  "@microsoft/fast-web-utilities": "^6.0.0",
69
- "@ni/nimble-tokens": "^7.0.0",
69
+ "@ni/nimble-tokens": "^7.0.1",
70
70
  "@tanstack/table-core": "8.19.2",
71
71
  "@tanstack/virtual-core": "^3.8.3",
72
72
  "@tiptap/core": "^2.2.2",
@@ -105,7 +105,7 @@
105
105
  },
106
106
  "devDependencies": {
107
107
  "@ni-private/eslint-config-nimble": "*",
108
- "@ni/jasmine-parameterized": "^0.3.0",
108
+ "@ni/jasmine-parameterized": "^0.3.1",
109
109
  "@rollup/plugin-commonjs": "^25.0.7",
110
110
  "@rollup/plugin-node-resolve": "^15.0.1",
111
111
  "@rollup/plugin-replace": "^5.0.1",
@@ -133,7 +133,7 @@
133
133
  "rollup-plugin-sourcemaps": "^0.6.3",
134
134
  "source-map-loader": "^5.0.0",
135
135
  "terser-webpack-plugin": "^5.3.10",
136
- "typescript": "~5.1.6",
136
+ "typescript": "~5.4.5",
137
137
  "webpack": "^5.75.0",
138
138
  "webpack-cli": "^5.0.1",
139
139
  "webpack-dev-middleware": "^7.0.0"