@ni/nimble-components 32.11.1 → 32.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/anchor/index.js.map +1 -1
- package/dist/esm/anchor/template.js +1 -1
- package/dist/esm/anchor/template.js.map +1 -1
- package/dist/esm/anchor-button/index.d.ts +1 -1
- package/dist/esm/anchor-button/index.js +1 -1
- package/dist/esm/anchor-button/index.js.map +1 -1
- package/dist/esm/anchor-button/template.d.ts +1 -1
- package/dist/esm/anchor-button/template.js +1 -1
- package/dist/esm/anchor-button/template.js.map +1 -1
- package/dist/esm/anchor-menu-item/index.d.ts +1 -1
- package/dist/esm/anchor-menu-item/index.js.map +1 -1
- package/dist/esm/anchor-menu-item/template.d.ts +1 -1
- package/dist/esm/anchor-menu-item/template.js +1 -1
- package/dist/esm/anchor-menu-item/template.js.map +1 -1
- package/dist/esm/anchor-tab/index.d.ts +1 -1
- package/dist/esm/anchor-tab/index.js.map +1 -1
- package/dist/esm/anchor-tab/template.d.ts +1 -1
- package/dist/esm/anchor-tab/template.js +1 -1
- package/dist/esm/anchor-tab/template.js.map +1 -1
- package/dist/esm/anchor-tabs/index.d.ts +1 -1
- package/dist/esm/anchor-tabs/index.js.map +1 -1
- package/dist/esm/anchor-tree-item/index.js.map +1 -1
- package/dist/esm/anchor-tree-item/template.d.ts +1 -1
- package/dist/esm/anchor-tree-item/template.js +1 -1
- package/dist/esm/anchor-tree-item/template.js.map +1 -1
- package/dist/esm/banner/index.js.map +1 -1
- package/dist/esm/breadcrumb-item/index.js.map +1 -1
- package/dist/esm/button/index.js +1 -1
- package/dist/esm/button/index.js.map +1 -1
- package/dist/esm/button/template.d.ts +1 -1
- package/dist/esm/button/template.js.map +1 -1
- package/dist/esm/checkbox/index.js.map +1 -1
- package/dist/esm/combobox/index.js +2 -2
- package/dist/esm/combobox/index.js.map +1 -1
- package/dist/esm/label-provider/base/index.js +1 -1
- package/dist/esm/label-provider/base/index.js.map +1 -1
- package/dist/esm/label-provider/core/index.d.ts +1 -1
- package/dist/esm/label-provider/core/index.js.map +1 -1
- package/dist/esm/label-provider/rich-text/index.d.ts +1 -1
- package/dist/esm/label-provider/rich-text/index.js.map +1 -1
- package/dist/esm/label-provider/table/index.d.ts +1 -1
- package/dist/esm/label-provider/table/index.js.map +1 -1
- package/dist/esm/menu/menu.foundation.js.map +1 -1
- package/dist/esm/menu-button/index.js +1 -1
- package/dist/esm/menu-button/index.js.map +1 -1
- package/dist/esm/menu-item/index.js.map +1 -1
- package/dist/esm/number-field/index.js.map +1 -1
- package/dist/esm/number-field/template.d.ts +1 -1
- package/dist/esm/number-field/template.js.map +1 -1
- package/dist/esm/patterns/error/types.js +1 -1
- package/dist/esm/patterns/error/types.js.map +1 -1
- package/dist/esm/patterns/required-visible/template.js +1 -1
- package/dist/esm/patterns/required-visible/template.js.map +1 -1
- package/dist/esm/patterns/required-visible/types.js +1 -1
- package/dist/esm/patterns/required-visible/types.js.map +1 -1
- package/dist/esm/patterns/tabs/template.d.ts +1 -1
- package/dist/esm/patterns/tabs/template.js.map +1 -1
- package/dist/esm/radio/index.js.map +1 -1
- package/dist/esm/rich-text/editor/index.d.ts +1 -1
- package/dist/esm/rich-text/editor/index.js +1 -1
- package/dist/esm/rich-text/editor/index.js.map +1 -1
- package/dist/esm/rich-text/editor/models/create-tiptap-editor.d.ts +1 -1
- package/dist/esm/rich-text/editor/models/create-tiptap-editor.js +2 -2
- package/dist/esm/rich-text/editor/models/create-tiptap-editor.js.map +1 -1
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.d.ts +1 -1
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js +1 -1
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
- package/dist/esm/rich-text/mention-listbox/index.js +1 -1
- package/dist/esm/rich-text/mention-listbox/index.js.map +1 -1
- package/dist/esm/rich-text/models/markdown-serializer.js +1 -1
- package/dist/esm/rich-text/models/markdown-serializer.js.map +1 -1
- package/dist/esm/rich-text-mention/base/index.d.ts +2 -2
- package/dist/esm/rich-text-mention/base/index.js.map +1 -1
- package/dist/esm/rich-text-mention/base/models/mention-internals.js +1 -1
- package/dist/esm/rich-text-mention/base/models/mention-internals.js.map +1 -1
- package/dist/esm/rich-text-mention/base/models/mention-validator.d.ts +1 -1
- package/dist/esm/rich-text-mention/base/models/mention-validator.js.map +1 -1
- package/dist/esm/select/index.d.ts +1 -1
- package/dist/esm/select/index.js +1 -1
- package/dist/esm/select/index.js.map +1 -1
- package/dist/esm/select/template.d.ts +1 -1
- package/dist/esm/select/template.js +1 -1
- package/dist/esm/select/template.js.map +1 -1
- package/dist/esm/switch/index.js.map +1 -1
- package/dist/esm/table/components/cell/index.js +1 -1
- package/dist/esm/table/components/cell/index.js.map +1 -1
- package/dist/esm/table/components/cell/template.js.map +1 -1
- package/dist/esm/table/components/group-row/index.d.ts +1 -1
- package/dist/esm/table/components/group-row/index.js.map +1 -1
- package/dist/esm/table/components/row/index.d.ts +1 -1
- package/dist/esm/table/components/row/index.js.map +1 -1
- package/dist/esm/table/index.d.ts +3 -2
- package/dist/esm/table/index.js +1 -1
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/interactive-selection-manager.d.ts +2 -1
- package/dist/esm/table/models/interactive-selection-manager.js.map +1 -1
- package/dist/esm/table/models/keyboard-navigation-manager.d.ts +2 -2
- package/dist/esm/table/models/keyboard-navigation-manager.js.map +1 -1
- package/dist/esm/table/models/selection-managers/multi-selection-manager.d.ts +1 -1
- package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
- package/dist/esm/table/models/selection-managers/selection-manager-base.d.ts +1 -1
- package/dist/esm/table/models/selection-managers/selection-manager-base.js.map +1 -1
- package/dist/esm/table/models/table-validator.d.ts +1 -1
- package/dist/esm/table/models/table-validator.js.map +1 -1
- package/dist/esm/table/models/virtualizer.d.ts +1 -1
- package/dist/esm/table/models/virtualizer.js.map +1 -1
- package/dist/esm/table/template.js +1 -1
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table/testing/table.pageobject.d.ts +1 -1
- package/dist/esm/table/testing/table.pageobject.js +1 -1
- package/dist/esm/table/testing/table.pageobject.js.map +1 -1
- package/dist/esm/table-column/base/group-header-view/template.js +1 -1
- package/dist/esm/table-column/base/group-header-view/template.js.map +1 -1
- package/dist/esm/table-column/base/index.d.ts +1 -1
- package/dist/esm/table-column/base/index.js.map +1 -1
- package/dist/esm/table-column/base/models/column-internals.d.ts +1 -1
- package/dist/esm/table-column/base/models/column-internals.js +1 -1
- package/dist/esm/table-column/base/models/column-internals.js.map +1 -1
- package/dist/esm/table-column/date-text/index.d.ts +2 -1
- package/dist/esm/table-column/date-text/index.js.map +1 -1
- package/dist/esm/table-column/duration-text/index.js.map +1 -1
- package/dist/esm/table-column/enum-base/index.d.ts +1 -1
- package/dist/esm/table-column/enum-base/index.js.map +1 -1
- package/dist/esm/table-column/mapping/cell-view/index.d.ts +2 -2
- package/dist/esm/table-column/mapping/cell-view/index.js +1 -1
- package/dist/esm/table-column/mapping/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/group-header-view/index.d.ts +1 -1
- package/dist/esm/table-column/mapping/group-header-view/index.js +1 -1
- package/dist/esm/table-column/mapping/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/index.d.ts +1 -1
- package/dist/esm/table-column/mapping/index.js.map +1 -1
- package/dist/esm/table-column/menu-button/index.js.map +1 -1
- package/dist/esm/table-column/mixins/custom-sort-order.d.ts +1 -1
- package/dist/esm/table-column/mixins/custom-sort-order.js.map +1 -1
- package/dist/esm/table-column/number-text/index.js.map +1 -1
- package/dist/esm/table-column/text-base/cell-view/index.d.ts +1 -1
- package/dist/esm/table-column/text-base/cell-view/index.js.map +1 -1
- package/dist/esm/tabs/index.js.map +1 -1
- package/dist/esm/text-area/template.js +1 -1
- package/dist/esm/text-area/template.js.map +1 -1
- package/dist/esm/text-field/index.js.map +1 -1
- package/dist/esm/text-field/template.d.ts +1 -1
- package/dist/esm/text-field/template.js.map +1 -1
- package/dist/esm/theme-provider/design-tokens.d.ts +1 -1
- package/dist/esm/theme-provider/design-tokens.js.map +1 -1
- package/dist/esm/toggle-button/index.js +1 -1
- package/dist/esm/toggle-button/index.js.map +1 -1
- package/dist/esm/toggle-button/template.d.ts +1 -1
- package/dist/esm/toggle-button/template.js +1 -1
- package/dist/esm/toggle-button/template.js.map +1 -1
- package/dist/esm/toolbar/index.js.map +1 -1
- package/dist/esm/tree-item/index.js.map +1 -1
- package/dist/esm/utilities/style/multivalue-property-stylesheet-behavior.d.ts +1 -1
- package/dist/esm/utilities/style/multivalue-property-stylesheet-behavior.js +1 -1
- package/dist/esm/utilities/style/multivalue-property-stylesheet-behavior.js.map +1 -1
- package/dist/esm/utilities/unit-format/decimal-unit-format.d.ts +1 -1
- package/dist/esm/utilities/unit-format/decimal-unit-format.js.map +1 -1
- package/dist/esm/utilities/unit-format/default-unit-format.d.ts +1 -1
- package/dist/esm/utilities/unit-format/default-unit-format.js.map +1 -1
- package/dist/esm/utilities/unit-format/unit-scale/byte-1024-unit-scale.js.map +1 -1
- package/dist/esm/utilities/unit-format/unit-scale/volt-unit-scale.js.map +1 -1
- package/dist/esm/wafer-map/experimental/computations.d.ts +1 -1
- package/dist/esm/wafer-map/experimental/computations.js.map +1 -1
- package/dist/esm/wafer-map/experimental/hover-handler.js.map +1 -1
- package/dist/esm/wafer-map/index.d.ts +1 -1
- package/dist/esm/wafer-map/index.js +1 -1
- package/dist/esm/wafer-map/index.js.map +1 -1
- package/dist/esm/wafer-map/modules/computations.d.ts +1 -1
- package/dist/esm/wafer-map/modules/computations.js.map +1 -1
- package/dist/esm/wafer-map/modules/create-matrix-renderer.d.ts +1 -1
- package/dist/esm/wafer-map/modules/create-matrix-renderer.js.map +1 -1
- package/dist/esm/wafer-map/modules/hover-handler.js.map +1 -1
- package/dist/esm/wafer-map/modules/prerendering.d.ts +1 -1
- package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
- package/dist/esm/wafer-map/modules/rendering.js.map +1 -1
- package/dist/esm/wafer-map/modules/zoom-handler.js +1 -1
- package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"byte-1024-unit-scale.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/unit-scale/byte-1024-unit-scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACH,kCAAkC,EAElC,eAAe,EAClB,MAAM,8DAA8D,CAAC;AAEtE,MAAM,gBAAgB,GAAqB,IAAI,GAAG,CAAC;IAC/C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG;IACrB,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IACf,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;CACX,CAAC;AAEX;;GAEG;AACH,MAAM,iBAAkB,SAAQ,SAAS;IACrC;QACI,KAAK,CACD,gBAAgB,CAAC,GAAG,CAChB,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAC/C,WAAW,EACX,kCAAkC,CAAC,aAAa,CAAC;YAC7C,gBAAgB;YAChB,gBAAgB;SACnB,CAAC,CACL,CACJ,CACJ,CAAC;IACN,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC","sourcesContent":["import { ScaledUnit } from '../scaled-unit/scaled-unit';\nimport { UnitScale } from './unit-scale';\nimport {\n ManuallyTranslatedScaledUnitFormat,\n UnitTranslations,\n UnitTranslation\n} from '../scaled-unit-format/manually-translated-scaled-unit-format';\n\nconst unitTranslations: UnitTranslations = new Map([\n ['en', new UnitTranslation('byte', 'bytes', 'B')],\n ['fr', new UnitTranslation('octet', 'octets', 'o')],\n ['de', new UnitTranslation('Byte', 'Byte', 'B')],\n ['ja', new UnitTranslation('バイト', 'バイト', 'B')],\n ['zh', new UnitTranslation('字节', '字节', 'B')]\n]);\n\nconst byte1024Prefixes = [\n [1024 ** 0, ''],\n [1024 ** 1, 'Ki'],\n [1024 ** 2, 'Mi'],\n [1024 ** 3, 'Gi'],\n [1024 ** 4, 'Ti'],\n [1024 ** 5, 'Pi']\n] as const;\n\n/**\n * Byte units (1024-based)\n */\nclass Byte1024UnitScale extends UnitScale {\n public constructor() {\n super(\n byte1024Prefixes.map(\n ([scaleFactor, scaledPrefixText]) => new ScaledUnit(\n scaleFactor,\n ManuallyTranslatedScaledUnitFormat.createFactory({\n unitTranslations,\n scaledPrefixText\n })\n )\n )\n );\n }\n}\n\nexport const byte1024UnitScale = new Byte1024UnitScale();\n"]}
|
|
1
|
+
{"version":3,"file":"byte-1024-unit-scale.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/unit-scale/byte-1024-unit-scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACH,kCAAkC,EAElC,eAAe,EAClB,MAAM,8DAA8D,CAAC;AAEtE,MAAM,gBAAgB,GAAqB,IAAI,GAAG,CAAC;IAC/C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG;IACrB,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IACf,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;IACjB,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;CACX,CAAC;AAEX;;GAEG;AACH,MAAM,iBAAkB,SAAQ,SAAS;IACrC;QACI,KAAK,CACD,gBAAgB,CAAC,GAAG,CAChB,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAC/C,WAAW,EACX,kCAAkC,CAAC,aAAa,CAAC;YAC7C,gBAAgB;YAChB,gBAAgB;SACnB,CAAC,CACL,CACJ,CACJ,CAAC;IACN,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC","sourcesContent":["import { ScaledUnit } from '../scaled-unit/scaled-unit';\nimport { UnitScale } from './unit-scale';\nimport {\n ManuallyTranslatedScaledUnitFormat,\n type UnitTranslations,\n UnitTranslation\n} from '../scaled-unit-format/manually-translated-scaled-unit-format';\n\nconst unitTranslations: UnitTranslations = new Map([\n ['en', new UnitTranslation('byte', 'bytes', 'B')],\n ['fr', new UnitTranslation('octet', 'octets', 'o')],\n ['de', new UnitTranslation('Byte', 'Byte', 'B')],\n ['ja', new UnitTranslation('バイト', 'バイト', 'B')],\n ['zh', new UnitTranslation('字节', '字节', 'B')]\n]);\n\nconst byte1024Prefixes = [\n [1024 ** 0, ''],\n [1024 ** 1, 'Ki'],\n [1024 ** 2, 'Mi'],\n [1024 ** 3, 'Gi'],\n [1024 ** 4, 'Ti'],\n [1024 ** 5, 'Pi']\n] as const;\n\n/**\n * Byte units (1024-based)\n */\nclass Byte1024UnitScale extends UnitScale {\n public constructor() {\n super(\n byte1024Prefixes.map(\n ([scaleFactor, scaledPrefixText]) => new ScaledUnit(\n scaleFactor,\n ManuallyTranslatedScaledUnitFormat.createFactory({\n unitTranslations,\n scaledPrefixText\n })\n )\n )\n );\n }\n}\n\nexport const byte1024UnitScale = new Byte1024UnitScale();\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volt-unit-scale.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/unit-scale/volt-unit-scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACH,kCAAkC,EAElC,eAAe,EAClB,MAAM,8DAA8D,CAAC;AAEtE,MAAM,gBAAgB,GAAqB,IAAI,GAAG,CAAC;IAC/C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,aAAc,SAAQ,SAAS;IACjC;QACI,KAAK,CACD,cAAc,CAAC,GAAG,CACd,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAC/C,WAAW,EACX,kCAAkC,CAAC,aAAa,CAAC;YAC7C,gBAAgB;YAChB,gBAAgB;SACnB,CAAC,CACL,CACJ,CACJ,CAAC;IACN,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC","sourcesContent":["import { ScaledUnit } from '../scaled-unit/scaled-unit';\nimport { UnitScale } from './unit-scale';\nimport { metricPrefixes } from './utilities/metrix-prefixes';\nimport {\n ManuallyTranslatedScaledUnitFormat,\n UnitTranslations,\n UnitTranslation\n} from '../scaled-unit-format/manually-translated-scaled-unit-format';\n\nconst unitTranslations: UnitTranslations = new Map([\n ['en', new UnitTranslation('volt', 'volts', 'V')],\n ['fr', new UnitTranslation('volt', 'volts', 'V')],\n ['de', new UnitTranslation('Volt', 'Volt', 'V')],\n ['ja', new UnitTranslation('ボルト', 'ボルト', 'V')],\n ['zh', new UnitTranslation('伏特', '伏特', 'V')]\n]);\n\n/**\n * Voltage unit scale\n */\nclass VoltUnitScale extends UnitScale {\n public constructor() {\n super(\n metricPrefixes.map(\n ([scaleFactor, scaledPrefixText]) => new ScaledUnit(\n scaleFactor,\n ManuallyTranslatedScaledUnitFormat.createFactory({\n unitTranslations,\n scaledPrefixText\n })\n )\n )\n );\n }\n}\n\nexport const voltUnitScale = new VoltUnitScale();\n"]}
|
|
1
|
+
{"version":3,"file":"volt-unit-scale.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/unit-scale/volt-unit-scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACH,kCAAkC,EAElC,eAAe,EAClB,MAAM,8DAA8D,CAAC;AAEtE,MAAM,gBAAgB,GAAqB,IAAI,GAAG,CAAC;IAC/C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;CAC/C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,aAAc,SAAQ,SAAS;IACjC;QACI,KAAK,CACD,cAAc,CAAC,GAAG,CACd,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAC/C,WAAW,EACX,kCAAkC,CAAC,aAAa,CAAC;YAC7C,gBAAgB;YAChB,gBAAgB;SACnB,CAAC,CACL,CACJ,CACJ,CAAC;IACN,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC","sourcesContent":["import { ScaledUnit } from '../scaled-unit/scaled-unit';\nimport { UnitScale } from './unit-scale';\nimport { metricPrefixes } from './utilities/metrix-prefixes';\nimport {\n ManuallyTranslatedScaledUnitFormat,\n type UnitTranslations,\n UnitTranslation\n} from '../scaled-unit-format/manually-translated-scaled-unit-format';\n\nconst unitTranslations: UnitTranslations = new Map([\n ['en', new UnitTranslation('volt', 'volts', 'V')],\n ['fr', new UnitTranslation('volt', 'volts', 'V')],\n ['de', new UnitTranslation('Volt', 'Volt', 'V')],\n ['ja', new UnitTranslation('ボルト', 'ボルト', 'V')],\n ['zh', new UnitTranslation('伏特', '伏特', 'V')]\n]);\n\n/**\n * Voltage unit scale\n */\nclass VoltUnitScale extends UnitScale {\n public constructor() {\n super(\n metricPrefixes.map(\n ([scaleFactor, scaledPrefixText]) => new ScaledUnit(\n scaleFactor,\n ManuallyTranslatedScaledUnitFormat.createFactory({\n unitTranslations,\n scaledPrefixText\n })\n )\n )\n );\n }\n}\n\nexport const voltUnitScale = new VoltUnitScale();\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { scaleLinear, ScaleLinear } from 'd3-scale';\nimport { range } from 'd3-array';\nimport type { WaferMap } from '..';\nimport { WaferMapColorScaleMode, WaferMapOriginLocation } from '../types';\nimport type { ColorScale, Dimensions, Margin } from '../workers/types';\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get horizontalScale(): ScaleLinear<number, number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleLinear<number, number> {\n return this._verticalScale;\n }\n\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 margin(): Margin {\n return this._margin;\n }\n\n public get verticalCoefficient(): number {\n return this._verticalCoefficient;\n }\n\n public get horizontalCoefficient(): number {\n return this._horizontalCoefficient;\n }\n\n public get horizontalConstant(): number {\n return this._horizontalConstant;\n }\n\n public get verticalConstant(): number {\n return this._verticalConstant;\n }\n\n public get gridMinX(): number {\n return this._gridMinX;\n }\n\n public get gridMaxX(): number {\n return this._gridMaxX;\n }\n\n public get gridMinY(): number {\n return this._gridMinY;\n }\n\n public get gridMaxY(): number {\n return this._gridMaxY;\n }\n\n public get labelsFontSize(): number {\n return this._labelsFontSize;\n }\n\n public get colorScale(): ColorScale {\n return this._colorScale;\n }\n\n private _horizontalScale!: ScaleLinear<number, number>;\n private _verticalScale!: ScaleLinear<number, number>;\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _margin!: Margin;\n private _verticalCoefficient!: number;\n private _horizontalCoefficient!: number;\n private _horizontalConstant!: number;\n private _verticalConstant!: number;\n private _gridMinX!: number;\n private _gridMaxX!: number;\n private _gridMinY!: number;\n private _gridMaxY!: number;\n private _labelsFontSize!: number;\n private _colorScale!: ColorScale;\n\n private readonly baseMarginPercentage = 0.04;\n private readonly fontSizeFactor = 0.8;\n private readonly colorScaleResolution = 10;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public componentResizeUpdate(): 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 this.inputDataUpdate();\n }\n\n public inputDataUpdate(): void {\n if (this._containerDimensions === undefined) {\n this.componentResizeUpdate();\n return;\n }\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n if (this.gridDimensionsValidAndDefined()) {\n this.setGridDimensionsFromBoundingBox();\n } else {\n this.setGridDimensionsFromDies();\n }\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 containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n containerDiameter\n );\n this._horizontalCoefficient = this._horizontalScale(1) - this._horizontalScale(0);\n this._verticalCoefficient = this._verticalScale(1) - this._verticalScale(0);\n this._horizontalConstant = this._horizontalScale(0);\n this._verticalConstant = this._verticalScale(0);\n\n this._dieDimensions = {\n width: Math.abs(\n this._horizontalScale(0) - this._horizontalScale(1)\n ),\n height: Math.abs(this._verticalScale(0) - this._verticalScale(1))\n };\n this.colorAndTextUpdate();\n }\n\n public colorAndTextUpdate(): void {\n if (this._dieDimensions === undefined) {\n this.inputDataUpdate();\n return;\n }\n this._labelsFontSize = this.calculateLabelsFontSize(\n this._dieDimensions,\n this.wafermap.maxCharacters\n );\n this._colorScale = this.calculateColorScale();\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 setGridDimensionsFromBoundingBox(): void {\n this._gridMinX = this.wafermap.gridMinX!;\n this._gridMinY = this.wafermap.gridMinY!;\n this._gridMaxX = this.wafermap.gridMaxX!;\n this._gridMaxY = this.wafermap.gridMaxY!;\n }\n\n private setGridDimensionsFromDies(): void {\n if (this.wafermap.diesTable === undefined) {\n return;\n }\n\n const colIndex = this.wafermap.diesTable\n .getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap.diesTable\n .getChild('rowIndex')!\n .toArray();\n\n const minPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n const maxPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n\n // will replace iterating with arquero after fixing issues: https://github.com/uwdata/arquero/pull/346\n for (let i = 0; i < colIndex.length; i++) {\n if (colIndex[i]! < minPoint.x) {\n minPoint.x = colIndex[i]!;\n }\n if (colIndex[i]! > maxPoint.x) {\n maxPoint.x = colIndex[i]!;\n }\n if (rowIndex[i]! < minPoint.y) {\n minPoint.y = rowIndex[i]!;\n }\n if (rowIndex[i]! > maxPoint.y) {\n maxPoint.y = rowIndex[i]!;\n }\n }\n this._gridMinX = minPoint.x;\n this._gridMinY = minPoint.y;\n this._gridMaxX = maxPoint.x;\n this._gridMaxY = maxPoint.y;\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 containerWidth: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale\n .domain([this._gridMinX, this._gridMaxX + 1])\n .range([0, containerWidth]);\n }\n return scale\n .domain([this._gridMinX - 1, this._gridMaxX])\n .range([containerWidth, 0]);\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n containerHeight: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\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\n .domain([this._gridMinY - 1, this._gridMaxY])\n .range([containerHeight, 0]);\n }\n return scale\n .domain([this._gridMinY, this._gridMaxY + 1])\n .range([0, containerHeight]);\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 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 = range(\n min,\n max,\n (max - min) / (values.length * this.colorScaleResolution)\n ).concat(max);\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
|
+
{"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { scaleLinear, type ScaleLinear } from 'd3-scale';\nimport { range } from 'd3-array';\nimport type { WaferMap } from '..';\nimport { WaferMapColorScaleMode, WaferMapOriginLocation } from '../types';\nimport type { ColorScale, Dimensions, Margin } from '../workers/types';\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get horizontalScale(): ScaleLinear<number, number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleLinear<number, number> {\n return this._verticalScale;\n }\n\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 margin(): Margin {\n return this._margin;\n }\n\n public get verticalCoefficient(): number {\n return this._verticalCoefficient;\n }\n\n public get horizontalCoefficient(): number {\n return this._horizontalCoefficient;\n }\n\n public get horizontalConstant(): number {\n return this._horizontalConstant;\n }\n\n public get verticalConstant(): number {\n return this._verticalConstant;\n }\n\n public get gridMinX(): number {\n return this._gridMinX;\n }\n\n public get gridMaxX(): number {\n return this._gridMaxX;\n }\n\n public get gridMinY(): number {\n return this._gridMinY;\n }\n\n public get gridMaxY(): number {\n return this._gridMaxY;\n }\n\n public get labelsFontSize(): number {\n return this._labelsFontSize;\n }\n\n public get colorScale(): ColorScale {\n return this._colorScale;\n }\n\n private _horizontalScale!: ScaleLinear<number, number>;\n private _verticalScale!: ScaleLinear<number, number>;\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _margin!: Margin;\n private _verticalCoefficient!: number;\n private _horizontalCoefficient!: number;\n private _horizontalConstant!: number;\n private _verticalConstant!: number;\n private _gridMinX!: number;\n private _gridMaxX!: number;\n private _gridMinY!: number;\n private _gridMaxY!: number;\n private _labelsFontSize!: number;\n private _colorScale!: ColorScale;\n\n private readonly baseMarginPercentage = 0.04;\n private readonly fontSizeFactor = 0.8;\n private readonly colorScaleResolution = 10;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public componentResizeUpdate(): 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 this.inputDataUpdate();\n }\n\n public inputDataUpdate(): void {\n if (this._containerDimensions === undefined) {\n this.componentResizeUpdate();\n return;\n }\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n if (this.gridDimensionsValidAndDefined()) {\n this.setGridDimensionsFromBoundingBox();\n } else {\n this.setGridDimensionsFromDies();\n }\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 containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n containerDiameter\n );\n this._horizontalCoefficient = this._horizontalScale(1) - this._horizontalScale(0);\n this._verticalCoefficient = this._verticalScale(1) - this._verticalScale(0);\n this._horizontalConstant = this._horizontalScale(0);\n this._verticalConstant = this._verticalScale(0);\n\n this._dieDimensions = {\n width: Math.abs(\n this._horizontalScale(0) - this._horizontalScale(1)\n ),\n height: Math.abs(this._verticalScale(0) - this._verticalScale(1))\n };\n this.colorAndTextUpdate();\n }\n\n public colorAndTextUpdate(): void {\n if (this._dieDimensions === undefined) {\n this.inputDataUpdate();\n return;\n }\n this._labelsFontSize = this.calculateLabelsFontSize(\n this._dieDimensions,\n this.wafermap.maxCharacters\n );\n this._colorScale = this.calculateColorScale();\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 setGridDimensionsFromBoundingBox(): void {\n this._gridMinX = this.wafermap.gridMinX!;\n this._gridMinY = this.wafermap.gridMinY!;\n this._gridMaxX = this.wafermap.gridMaxX!;\n this._gridMaxY = this.wafermap.gridMaxY!;\n }\n\n private setGridDimensionsFromDies(): void {\n if (this.wafermap.diesTable === undefined) {\n return;\n }\n\n const colIndex = this.wafermap.diesTable\n .getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap.diesTable\n .getChild('rowIndex')!\n .toArray();\n\n const minPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n const maxPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n\n // will replace iterating with arquero after fixing issues: https://github.com/uwdata/arquero/pull/346\n for (let i = 0; i < colIndex.length; i++) {\n if (colIndex[i]! < minPoint.x) {\n minPoint.x = colIndex[i]!;\n }\n if (colIndex[i]! > maxPoint.x) {\n maxPoint.x = colIndex[i]!;\n }\n if (rowIndex[i]! < minPoint.y) {\n minPoint.y = rowIndex[i]!;\n }\n if (rowIndex[i]! > maxPoint.y) {\n maxPoint.y = rowIndex[i]!;\n }\n }\n this._gridMinX = minPoint.x;\n this._gridMinY = minPoint.y;\n this._gridMaxX = maxPoint.x;\n this._gridMaxY = maxPoint.y;\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 containerWidth: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale\n .domain([this._gridMinX, this._gridMaxX + 1])\n .range([0, containerWidth]);\n }\n return scale\n .domain([this._gridMinX - 1, this._gridMaxX])\n .range([containerWidth, 0]);\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n containerHeight: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\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\n .domain([this._gridMinY - 1, this._gridMaxY])\n .range([containerHeight, 0]);\n }\n return scale\n .domain([this._gridMinY, this._gridMaxY + 1])\n .range([0, containerHeight]);\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 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 = range(\n min,\n max,\n (max - min) / (values.length * this.colorScaleResolution)\n ).concat(max);\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/hover-handler.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"hover-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/hover-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WaferMap } from '..';\nimport { type 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 // get original mouse position in case we are in zoom.\n const invertedPoint = this.wafermap.transform.invert([\n event.offsetX,\n event.offsetY\n ]);\n const dieCoordinates = this.calculateDieCoordinates({\n x: invertedPoint[0],\n y: invertedPoint[1]\n });\n if (\n dieCoordinates === undefined\n || !this.isDieInGrid(dieCoordinates.x, dieCoordinates.y)\n ) {\n this.wafermap.hoverDie = undefined;\n return;\n }\n const colIndex = this.wafermap\n .diesTable!.getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap\n .diesTable!.getChild('rowIndex')!\n .toArray();\n\n // will replace iterating with arquero filtering after fixing errors\n for (let i = 0; i < colIndex.length; i++) {\n if (\n colIndex[i] === dieCoordinates.x\n && rowIndex[i] === dieCoordinates.y\n ) {\n this.wafermap.hoverDie = {\n index: i,\n x: dieCoordinates.x,\n y: dieCoordinates.y\n };\n return;\n }\n }\n this.wafermap.hoverDie = undefined;\n };\n\n private readonly onMouseOut = (_event: MouseEvent): void => {\n this.wafermap.hoverDie = undefined;\n };\n\n private calculateDieCoordinates(\n mousePosition: PointCoordinates\n ): PointCoordinates | 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.ceil\n : Math.floor;\n // go to x and y scale to get the x,y values of the die.\n const x = xRoundFunction(\n this.wafermap.computations.horizontalScale.invert(\n mousePosition.x - this.wafermap.computations.margin.left\n )\n );\n const y = yRoundFunction(\n this.wafermap.computations.verticalScale.invert(\n mousePosition.y - this.wafermap.computations.margin.top\n )\n );\n return { x, y };\n }\n return undefined;\n }\n\n private isDieInGrid(x: number, y: number): boolean {\n return (\n x >= this.wafermap.computations.gridMinX\n && x <= this.wafermap.computations.gridMaxX\n && y >= this.wafermap.computations.gridMinY\n && y <= this.wafermap.computations.gridMaxY\n );\n }\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import { ZoomTransform } from 'd3-zoom';
|
|
|
3
3
|
import { type Table, tableFromIPC } from 'apache-arrow';
|
|
4
4
|
import { DataManager } from './modules/data-manager';
|
|
5
5
|
import { RenderingModule } from './modules/rendering';
|
|
6
|
-
import { HoverDie, HoverDieOpacity, WaferMapColorScale, WaferMapColorScaleMode, WaferMapDie, WaferMapOrientation, WaferMapOriginLocation, WaferMapValidity, type WaferRequiredFields } from './types';
|
|
6
|
+
import { type HoverDie, HoverDieOpacity, type WaferMapColorScale, WaferMapColorScaleMode, type WaferMapDie, WaferMapOrientation, WaferMapOriginLocation, type WaferMapValidity, type WaferRequiredFields } from './types';
|
|
7
7
|
import { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';
|
|
8
8
|
import { WorkerRenderer } from './experimental/worker-renderer';
|
|
9
9
|
import { Computations } from './experimental/computations';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { DOM, attr, nullableNumberConverter, observable } from '@microsoft/fast-element';
|
|
3
3
|
import { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';
|
|
4
|
-
import { zoomIdentity } from 'd3-zoom';
|
|
4
|
+
import { zoomIdentity, ZoomTransform } from 'd3-zoom';
|
|
5
5
|
import { tableFromIPC } from 'apache-arrow';
|
|
6
6
|
import { template } from './template';
|
|
7
7
|
import { styles } from './styles';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DOM,\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport { type Table, tableFromIPC } from 'apache-arrow';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport {\n HoverDie,\n HoverDieOpacity,\n WaferMapColorScale,\n WaferMapColorScaleMode,\n WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n WaferMapValidity,\n type WaferRequiredFields\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\nimport { WorkerRenderer } from './experimental/worker-renderer';\nimport { HoverHandler } from './modules/hover-handler';\nimport { HoverHandler as ExperimentalHoverHandler } from './experimental/hover-handler';\nimport { ZoomHandler } from './modules/zoom-handler';\nimport { Computations } from './experimental/computations';\nimport type { Dimensions, RenderConfig } from './workers/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap<\n T extends WaferRequiredFields = WaferRequiredFields\n> extends FoundationElement {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public static readonly Arrow = {\n tableFromIPC\n };\n\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker: WaferMapUpdateTracker = new WaferMapUpdateTracker(this.asRequiredFieldsWaferMap);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public currentTask: Promise<void> | undefined;\n\n /**\n * @internal\n */\n public workerCanvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n public readonly computations: Computations = new Computations(\n this.asRequiredFieldsWaferMap\n );\n\n public dataManager: DataManager = new DataManager(\n this.asRequiredFieldsWaferMap\n );\n\n public readonly workerRenderer = new WorkerRenderer(\n this.asRequiredFieldsWaferMap\n );\n\n @observable\n public renderer: RenderingModule = new RenderingModule(\n this.asRequiredFieldsWaferMap\n );\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | HoverDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public diesTable: Table<T> | undefined;\n\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly hoverHandler: HoverHandler = new HoverHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly experimentalHoverHandler: ExperimentalHoverHandler = new ExperimentalHoverHandler(this.asRequiredFieldsWaferMap);\n\n private readonly zoomHandler: ZoomHandler = new ZoomHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator: WaferMapValidator = new WaferMapValidator(this.asRequiredFieldsWaferMap);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.hoverHandler.connect();\n this.experimentalHoverHandler.connect();\n this.zoomHandler.connect();\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.hoverHandler.disconnect();\n this.experimentalHoverHandler.disconnect();\n this.zoomHandler.disconnect();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Experimental update function called when an update is queued.\n */\n public async experimentalUpdate(): Promise<void> {\n if (this.validity.invalidDiesTableSchema) {\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresComponentResizeUpdate) {\n this.computations.componentResizeUpdate();\n } else if (this.waferMapUpdateTracker.requiresInputDataUpdate) {\n this.computations.inputDataUpdate();\n } else if (this.waferMapUpdateTracker.requiresColorAndTextUpdate) {\n this.computations.colorAndTextUpdate();\n }\n const snapshot = this.createSnapshot();\n if (this.waferMapUpdateTracker.requiresWorkerWaferSetup) {\n await this.workerRenderer.setupWafer(snapshot);\n }\n await this.workerRenderer.drawWafer(snapshot);\n }\n this.workerRenderer.renderHover();\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n this.validate();\n if (this.isExperimentalUpdate()) {\n this.currentTask = this.experimentalUpdate();\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n /**\n * @internal\n */\n public isExperimentalUpdate(): boolean {\n return this.diesTable !== undefined;\n }\n\n public async setData(data: Table | WaferMapDie[]): Promise<void> {\n if (Array.isArray(data)) {\n this.dies = data;\n } else {\n this.diesTable = data;\n }\n await DOM.nextUpdate();\n if (this.currentTask !== undefined) {\n await this.currentTask;\n }\n }\n\n private createSnapshot(): {\n canvasDimensions: Dimensions,\n renderConfig: RenderConfig,\n dieDimensions: Dimensions,\n transform: ZoomTransform,\n dieLabelsHidden: boolean,\n columnIndices: Int32Array,\n rowIndices: Int32Array,\n values: Float64Array\n } {\n const canvasDimensions = {\n width: this.canvasWidth ?? 0,\n height: this.canvasHeight ?? 0\n };\n const renderConfig: RenderConfig = {\n dieDimensions: this.computations.dieDimensions,\n margin: this.computations.margin,\n verticalCoefficient: this.computations.verticalCoefficient,\n horizontalCoefficient: this.computations.horizontalCoefficient,\n horizontalConstant: this.computations.horizontalConstant,\n verticalConstant: this.computations.verticalConstant,\n gridMinX: this.computations.gridMinX,\n gridMaxX: this.computations.gridMaxX,\n gridMinY: this.computations.gridMinY,\n gridMaxY: this.computations.gridMaxY,\n labelsFontSize: this.computations.labelsFontSize,\n colorScale: this.computations.colorScale,\n dieLabelsSuffix: this.dieLabelsSuffix,\n maxCharacters: this.maxCharacters\n };\n const dieDimensions = this.computations.dieDimensions;\n const transform = this.transform;\n const dieLabelsHidden = this.dieLabelsHidden;\n if (this.diesTable === undefined) {\n return {\n canvasDimensions,\n renderConfig,\n dieDimensions,\n transform,\n dieLabelsHidden,\n columnIndices: Int32Array.from([]),\n rowIndices: Int32Array.from([]),\n values: Float64Array.from([])\n };\n }\n const columnIndices = this.diesTable.getChild('colIndex')!.toArray();\n const rowIndices = this.diesTable.getChild('rowIndex')!.toArray();\n const values = this.diesTable.getChild('value')!.toArray();\n return {\n canvasDimensions,\n renderConfig,\n columnIndices,\n rowIndices,\n values,\n dieDimensions,\n transform,\n dieLabelsHidden\n };\n }\n\n private validate(): void {\n this.waferMapValidator.validateGridDimensions();\n this.waferMapValidator.validateDiesTableSchema();\n }\n\n private createResizeObserver(): ResizeObserver {\n const resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry === undefined) {\n return;\n }\n const { height, width } = entry.contentRect;\n // Updating the canvas size clears its contents so update it explicitly instead of\n // via template bindings so we can confirm that it happens before render\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvasWidth = width;\n this.canvasHeight = height;\n });\n return resizeObserver;\n }\n\n private originLocationChanged(): void {\n this.waferMapUpdateTracker.track('originLocation');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinXChanged(): void {\n this.waferMapUpdateTracker.track('gridMinX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxXChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinYChanged(): void {\n this.waferMapUpdateTracker.track('gridMinY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxYChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private maxCharactersChanged(): void {\n this.waferMapUpdateTracker.track('maxCharacters');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsHiddenChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsHidden');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsSuffixChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsSuffix');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleModeChanged(): void {\n this.waferMapUpdateTracker.track('colorScaleMode');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private highlightedTagsChanged(): void {\n this.waferMapUpdateTracker.track('highlightedTags');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesTableChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private get asRequiredFieldsWaferMap(): WaferMap {\n return this as WaferMap;\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DOM,\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport { type Table, tableFromIPC } from 'apache-arrow';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport {\n type HoverDie,\n HoverDieOpacity,\n type WaferMapColorScale,\n WaferMapColorScaleMode,\n type WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n type WaferMapValidity,\n type WaferRequiredFields\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\nimport { WorkerRenderer } from './experimental/worker-renderer';\nimport { HoverHandler } from './modules/hover-handler';\nimport { HoverHandler as ExperimentalHoverHandler } from './experimental/hover-handler';\nimport { ZoomHandler } from './modules/zoom-handler';\nimport { Computations } from './experimental/computations';\nimport type { Dimensions, RenderConfig } from './workers/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap<\n T extends WaferRequiredFields = WaferRequiredFields\n> extends FoundationElement {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public static readonly Arrow = {\n tableFromIPC\n };\n\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker: WaferMapUpdateTracker = new WaferMapUpdateTracker(this.asRequiredFieldsWaferMap);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public currentTask: Promise<void> | undefined;\n\n /**\n * @internal\n */\n public workerCanvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n public readonly computations: Computations = new Computations(\n this.asRequiredFieldsWaferMap\n );\n\n public dataManager: DataManager = new DataManager(\n this.asRequiredFieldsWaferMap\n );\n\n public readonly workerRenderer = new WorkerRenderer(\n this.asRequiredFieldsWaferMap\n );\n\n @observable\n public renderer: RenderingModule = new RenderingModule(\n this.asRequiredFieldsWaferMap\n );\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | HoverDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public diesTable: Table<T> | undefined;\n\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly hoverHandler: HoverHandler = new HoverHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly experimentalHoverHandler: ExperimentalHoverHandler = new ExperimentalHoverHandler(this.asRequiredFieldsWaferMap);\n\n private readonly zoomHandler: ZoomHandler = new ZoomHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator: WaferMapValidator = new WaferMapValidator(this.asRequiredFieldsWaferMap);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.hoverHandler.connect();\n this.experimentalHoverHandler.connect();\n this.zoomHandler.connect();\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.hoverHandler.disconnect();\n this.experimentalHoverHandler.disconnect();\n this.zoomHandler.disconnect();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Experimental update function called when an update is queued.\n */\n public async experimentalUpdate(): Promise<void> {\n if (this.validity.invalidDiesTableSchema) {\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresComponentResizeUpdate) {\n this.computations.componentResizeUpdate();\n } else if (this.waferMapUpdateTracker.requiresInputDataUpdate) {\n this.computations.inputDataUpdate();\n } else if (this.waferMapUpdateTracker.requiresColorAndTextUpdate) {\n this.computations.colorAndTextUpdate();\n }\n const snapshot = this.createSnapshot();\n if (this.waferMapUpdateTracker.requiresWorkerWaferSetup) {\n await this.workerRenderer.setupWafer(snapshot);\n }\n await this.workerRenderer.drawWafer(snapshot);\n }\n this.workerRenderer.renderHover();\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n this.validate();\n if (this.isExperimentalUpdate()) {\n this.currentTask = this.experimentalUpdate();\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n /**\n * @internal\n */\n public isExperimentalUpdate(): boolean {\n return this.diesTable !== undefined;\n }\n\n public async setData(data: Table | WaferMapDie[]): Promise<void> {\n if (Array.isArray(data)) {\n this.dies = data;\n } else {\n this.diesTable = data;\n }\n await DOM.nextUpdate();\n if (this.currentTask !== undefined) {\n await this.currentTask;\n }\n }\n\n private createSnapshot(): {\n canvasDimensions: Dimensions,\n renderConfig: RenderConfig,\n dieDimensions: Dimensions,\n transform: ZoomTransform,\n dieLabelsHidden: boolean,\n columnIndices: Int32Array,\n rowIndices: Int32Array,\n values: Float64Array\n } {\n const canvasDimensions = {\n width: this.canvasWidth ?? 0,\n height: this.canvasHeight ?? 0\n };\n const renderConfig: RenderConfig = {\n dieDimensions: this.computations.dieDimensions,\n margin: this.computations.margin,\n verticalCoefficient: this.computations.verticalCoefficient,\n horizontalCoefficient: this.computations.horizontalCoefficient,\n horizontalConstant: this.computations.horizontalConstant,\n verticalConstant: this.computations.verticalConstant,\n gridMinX: this.computations.gridMinX,\n gridMaxX: this.computations.gridMaxX,\n gridMinY: this.computations.gridMinY,\n gridMaxY: this.computations.gridMaxY,\n labelsFontSize: this.computations.labelsFontSize,\n colorScale: this.computations.colorScale,\n dieLabelsSuffix: this.dieLabelsSuffix,\n maxCharacters: this.maxCharacters\n };\n const dieDimensions = this.computations.dieDimensions;\n const transform = this.transform;\n const dieLabelsHidden = this.dieLabelsHidden;\n if (this.diesTable === undefined) {\n return {\n canvasDimensions,\n renderConfig,\n dieDimensions,\n transform,\n dieLabelsHidden,\n columnIndices: Int32Array.from([]),\n rowIndices: Int32Array.from([]),\n values: Float64Array.from([])\n };\n }\n const columnIndices = this.diesTable.getChild('colIndex')!.toArray();\n const rowIndices = this.diesTable.getChild('rowIndex')!.toArray();\n const values = this.diesTable.getChild('value')!.toArray();\n return {\n canvasDimensions,\n renderConfig,\n columnIndices,\n rowIndices,\n values,\n dieDimensions,\n transform,\n dieLabelsHidden\n };\n }\n\n private validate(): void {\n this.waferMapValidator.validateGridDimensions();\n this.waferMapValidator.validateDiesTableSchema();\n }\n\n private createResizeObserver(): ResizeObserver {\n const resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry === undefined) {\n return;\n }\n const { height, width } = entry.contentRect;\n // Updating the canvas size clears its contents so update it explicitly instead of\n // via template bindings so we can confirm that it happens before render\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvasWidth = width;\n this.canvasHeight = height;\n });\n return resizeObserver;\n }\n\n private originLocationChanged(): void {\n this.waferMapUpdateTracker.track('originLocation');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinXChanged(): void {\n this.waferMapUpdateTracker.track('gridMinX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxXChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinYChanged(): void {\n this.waferMapUpdateTracker.track('gridMinY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxYChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private maxCharactersChanged(): void {\n this.waferMapUpdateTracker.track('maxCharacters');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsHiddenChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsHidden');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsSuffixChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsSuffix');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleModeChanged(): void {\n this.waferMapUpdateTracker.track('colorScaleMode');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private highlightedTagsChanged(): void {\n this.waferMapUpdateTracker.track('highlightedTags');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesTableChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private get asRequiredFieldsWaferMap(): WaferMap {\n return this as WaferMap;\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/computations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAa,SAAS,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAG9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAYlD;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IAED,IAAW,qBAAqB;QAC5B,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAaD,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAHrC,mBAAc,GAAG,CAAC,CAAC;QACnB,yBAAoB,GAAG,IAAI,CAAC;IAEY,CAAC;IAEnD,yBAAyB;QAC5B,MAAM,gBAAgB,GAAG;YACrB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;YAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;SACrC,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC3B,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,MAAM,CAC1B,CAAC;QACF,MAAM,YAAY,GAAG;YACjB,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC;YACnD,KAAK,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC;YACpD,MAAM,EAAE,CAAC,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC;YACtD,IAAI,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC;SACtD,CAAC;QACF,MAAM,UAAU,GAAG;YACf,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;YAC/C,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;YACjD,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;YAClD,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;SACnD,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACtE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,4BAA4B,CACzD,gBAAgB,EAChB,IAAI,CAAC,OAAO,CACf,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAC/B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACnC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,iBAAiB,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,YAAY;QACf,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAC/B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACnC,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,EAAE;YACvD,CAAC,CAAC,IAAI,CAAC,sCAAsC,EAAE;YAC/C,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/D,4DAA4D;QAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAC9C,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,6BAA6B,CAC9D,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,4DAA4D;QAC5D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAC1C,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,CAC1D,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG;YAClB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;YACrC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC;IACN,CAAC;IAEO,6BAA6B;QACjC,OAAO,CACH,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAChD,CAAC;IACN,CAAC;IAEO,sCAAsC;QAC1C,MAAM,cAAc,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,IACI,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAC/C,CAAC;YACC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjD,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjD,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC1E,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEO,+BAA+B,CACnC,IAAuC;QAEvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;QAED,OAAO;YACH,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC;YACjC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC;SACpC,CAAC;IACN,CAAC;IAEO,4BAA4B,CAChC,gBAA4B,EAC5B,MAAc;QAEd,OAAO;YACH,KAAK,EAAE,gBAAgB,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;YAC1D,MAAM,EAAE,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM;SAC/D,CAAC;IACN,CAAC;IAEO,qBAAqB,CACzB,cAAsC,EACtC,IAAoB,EACpB,cAAsB;QAEtB,MAAM,KAAK,GAAG,SAAS,EAAU;aAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACvD,YAAY,CAAC,CAAC,CAAC;aACf,YAAY,CAAC,CAAC,CAAC;aACf,KAAK,CAAC,CAAC,CAAC;aACR,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,OAAO,EACtD,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,6BAA6B,CACjC,cAAsC,EACtC,IAAoB,EACpB,cAAsB;QAEtB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1D,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,OAAO,EACtD,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAC5D,CAAC;IACN,CAAC;IAEO,mBAAmB,CACvB,cAAsC,EACtC,IAAoB,EACpB,eAAuB;QAEvB,MAAM,KAAK,GAAG,SAAS,EAAU;aAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACvD,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;aACjC,YAAY,CAAC,CAAC,CAAC;aACf,KAAK,CAAC,CAAC,CAAC;aACR,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,+HAA+H;QAC/H,qCAAqC;QACrC,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,WAAW,EAC1D,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,2BAA2B,CAC/B,cAAsC,EACtC,IAAoB,EACpB,eAAuB;QAEvB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;QAC3D,+HAA+H;QAC/H,8CAA8C;QAC9C,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,WAAW,EAC1D,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAC5D,CAAC;QACN,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAEO,uBAAuB,CAC3B,UAAkB,EAClB,WAAmB;QAEnB,OAAO;YACH,GAAG,EAAE,UAAU,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG;YACrC,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;YAC3C,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;YAC9C,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI;SAC3C,CAAC;IACN,CAAC;CACJ","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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAEH,SAAS,EACT,aAAa,EAEhB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAYlD;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IAED,IAAW,qBAAqB;QAC5B,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAaD,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAHrC,mBAAc,GAAG,CAAC,CAAC;QACnB,yBAAoB,GAAG,IAAI,CAAC;IAEY,CAAC;IAEnD,yBAAyB;QAC5B,MAAM,gBAAgB,GAAG;YACrB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;YAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;SACrC,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC3B,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,MAAM,CAC1B,CAAC;QACF,MAAM,YAAY,GAAG;YACjB,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC;YACnD,KAAK,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC;YACpD,MAAM,EAAE,CAAC,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC;YACtD,IAAI,EAAE,CAAC,gBAAgB,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC;SACtD,CAAC;QACF,MAAM,UAAU,GAAG;YACf,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;YAC/C,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;YACjD,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;YAClD,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC,oBAAoB;SACnD,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACtE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,4BAA4B,CACzD,gBAAgB,EAChB,IAAI,CAAC,OAAO,CACf,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAC/B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACnC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,iBAAiB,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,YAAY;QACf,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAC/B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CACnC,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,EAAE;YACvD,CAAC,CAAC,IAAI,CAAC,sCAAsC,EAAE;YAC/C,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/D,4DAA4D;QAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAC9C,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,6BAA6B,CAC9D,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,4DAA4D;QAC5D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAC1C,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,CAC1D,cAAc,EACd,cAAc,EACd,iBAAiB,CACpB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG;YAClB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;YACrC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC;IACN,CAAC;IAEO,6BAA6B;QACjC,OAAO,CACH,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAChD,CAAC;IACN,CAAC;IAEO,sCAAsC;QAC1C,MAAM,cAAc,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,IACI,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;eAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAC/C,CAAC;YACC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjD,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjD,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC1E,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEO,+BAA+B,CACnC,IAAuC;QAEvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;QAED,OAAO;YACH,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC;YACjC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC;SACpC,CAAC;IACN,CAAC;IAEO,4BAA4B,CAChC,gBAA4B,EAC5B,MAAc;QAEd,OAAO;YACH,KAAK,EAAE,gBAAgB,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;YAC1D,MAAM,EAAE,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM;SAC/D,CAAC;IACN,CAAC;IAEO,qBAAqB,CACzB,cAAsC,EACtC,IAAoB,EACpB,cAAsB;QAEtB,MAAM,KAAK,GAAG,SAAS,EAAU;aAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACvD,YAAY,CAAC,CAAC,CAAC;aACf,YAAY,CAAC,CAAC,CAAC;aACf,KAAK,CAAC,CAAC,CAAC;aACR,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,OAAO,EACtD,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,6BAA6B,CACjC,cAAsC,EACtC,IAAoB,EACpB,cAAsB;QAEtB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1D,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,OAAO,EACtD,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAC5D,CAAC;IACN,CAAC;IAEO,mBAAmB,CACvB,cAAsC,EACtC,IAAoB,EACpB,eAAuB;QAEvB,MAAM,KAAK,GAAG,SAAS,EAAU;aAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACvD,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;aACjC,YAAY,CAAC,CAAC,CAAC;aACf,KAAK,CAAC,CAAC,CAAC;aACR,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,+HAA+H;QAC/H,qCAAqC;QACrC,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,WAAW,EAC1D,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,2BAA2B,CAC/B,cAAsC,EACtC,IAAoB,EACpB,eAAuB;QAEvB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;QAC3D,+HAA+H;QAC/H,8CAA8C;QAC9C,IACI,cAAc,KAAK,sBAAsB,CAAC,UAAU;eACjD,cAAc,KAAK,sBAAsB,CAAC,WAAW,EAC1D,CAAC;YACC,OAAO,KAAK,CAAC,KAAK,CACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAC5D,CAAC;QACN,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAEO,uBAAuB,CAC3B,UAAkB,EAClB,WAAmB;QAEnB,OAAO;YACH,GAAG,EAAE,UAAU,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG;YACrC,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;YAC3C,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;YAC9C,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI;SAC3C,CAAC;IACN,CAAC;CACJ","sourcesContent":["import { range } from 'd3-array';\nimport {\n type ScaleBand,\n scaleBand,\n scaleQuantile,\n type ScaleQuantile\n} 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,
|
|
1
|
+
{"version":3,"file":"create-matrix-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/create-matrix-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAC5C,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, type 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":"AACA,OAAO,
|
|
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 { type 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 {\n type ScaleLinear,\n scaleLinear,\n type ScaleOrdinal,\n scaleOrdinal\n} 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"]}
|