@ni/nimble-components 21.9.0 → 21.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-components-bundle.js +908 -205
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +3889 -3843
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/patterns/button/styles.js +2 -1
- package/dist/esm/patterns/button/styles.js.map +1 -1
- package/dist/esm/switch/styles.js +3 -2
- package/dist/esm/switch/styles.js.map +1 -1
- package/dist/esm/wafer-map/index.d.ts +11 -1
- package/dist/esm/wafer-map/index.js +31 -2
- package/dist/esm/wafer-map/index.js.map +1 -1
- package/dist/esm/wafer-map/modules/prerendering.js +2 -1
- package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
- package/dist/esm/wafer-map/modules/wafer-map-validator.d.ts +2 -0
- package/dist/esm/wafer-map/modules/wafer-map-validator.js +34 -1
- package/dist/esm/wafer-map/modules/wafer-map-validator.js.map +1 -1
- package/dist/esm/wafer-map/modules/worker-renderer.d.ts +12 -0
- package/dist/esm/wafer-map/modules/worker-renderer.js +46 -0
- package/dist/esm/wafer-map/modules/worker-renderer.js.map +1 -0
- package/dist/esm/wafer-map/types.d.ts +1 -7
- package/dist/esm/wafer-map/types.js.map +1 -1
- package/package.json +19 -16
|
@@ -48,7 +48,8 @@ export const styles = css `
|
|
|
48
48
|
margin: 0;
|
|
49
49
|
padding: 0 ${standardPadding};
|
|
50
50
|
position: relative;
|
|
51
|
-
transition:
|
|
51
|
+
transition:
|
|
52
|
+
box-shadow ${smallDelay} ease-in-out,
|
|
52
53
|
border-color ${smallDelay} ease-in-out,
|
|
53
54
|
background-size ${smallDelay} ease-in-out;
|
|
54
55
|
background-size: 100% 100%;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/patterns/button/styles.ts"],"names":[],"mappings":"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","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '@microsoft/fast-foundation';\nimport { focusVisible } from '../../utilities/style/focus';\nimport {\n actionRgbPartialColor,\n borderHoverColor,\n borderRgbPartialColor,\n borderWidth,\n buttonLabelFont,\n buttonLabelFontColor,\n buttonLabelDisabledFontColor,\n controlHeight,\n fillSelectedColor,\n iconColor,\n smallDelay,\n standardPadding,\n buttonPrimaryFontColor,\n buttonFillPrimaryColor,\n buttonFillActivePrimaryColor,\n buttonFillAccentColor,\n buttonAccentBlockFontColor,\n buttonFillAccentActiveColor,\n buttonBorderAccentOutlineColor,\n buttonAccentOutlineFontColor\n} from '../../theme-provider/design-tokens';\nimport { appearanceBehavior } from '../../utilities/style/appearance';\nimport { ButtonAppearance } from './types';\nimport { accessiblyHidden } from '../../utilities/style/accessibly-hidden';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-flex')}\n\n :host {\n background-color: transparent;\n height: ${controlHeight};\n color: ${buttonLabelFontColor};\n font: ${buttonLabelFont};\n cursor: pointer;\n outline: none;\n border: none;\n box-sizing: border-box;\n ${\n /*\n Not sure why but this is needed to get buttons with icons and buttons\n without icons to align on the same line when the button is inline-flex\n See: https://github.com/ni/nimble/issues/503\n */ ''\n }\n vertical-align: middle;\n }\n\n .control {\n background-color: transparent;\n height: 100%;\n width: 100%;\n border: ${borderWidth} solid transparent;\n box-sizing: border-box;\n color: inherit;\n border-radius: inherit;\n fill: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n cursor: inherit;\n font: inherit;\n outline: none;\n margin: 0;\n padding: 0 ${standardPadding};\n position: relative;\n transition: box-shadow ${smallDelay} ease-in-out,\n border-color ${smallDelay} ease-in-out,\n background-size ${smallDelay} ease-in-out;\n background-size: 100% 100%;\n background-repeat: no-repeat;\n background-position: center;\n }\n\n :host([content-hidden]) .control {\n aspect-ratio: 1 / 1;\n padding: 0px;\n }\n\n .control::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n box-sizing: border-box;\n outline: 0px solid transparent;\n color: transparent;\n background-clip: content-box;\n transition: outline ${smallDelay} ease-in-out;\n }\n\n .content {\n display: contents;\n }\n\n :host([content-hidden]) .content {\n ${accessiblyHidden}\n }\n\n [part='start'] {\n display: contents;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n\n [part='end'] {\n display: contents;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n }\n\n @layer hover {\n .control:hover {\n border-color: ${borderHoverColor};\n box-shadow: 0px 0px 0px ${borderWidth} ${borderHoverColor} inset;\n }\n }\n\n @layer focusVisible {\n .control${focusVisible} {\n border-color: ${borderHoverColor};\n box-shadow: 0px 0px 0px ${borderWidth} ${borderHoverColor} inset;\n }\n\n .control${focusVisible}::before {\n outline: ${borderWidth} solid ${borderHoverColor};\n outline-offset: -3px;\n }\n }\n\n @layer active {\n .control:active {\n box-shadow: none;\n background-image: linear-gradient(\n ${fillSelectedColor},\n ${fillSelectedColor}\n );\n background-size: calc(100% - 2px) calc(100% - 2px);\n }\n\n .control:active::before {\n outline: none;\n }\n }\n\n @layer disabled {\n :host([disabled]) {\n color: ${buttonLabelDisabledFontColor};\n cursor: default;\n }\n\n :host([disabled]) .control {\n box-shadow: none;\n background-image: none;\n color: rgba(${actionRgbPartialColor}, 0.3);\n }\n\n :host([disabled]) .control::before {\n box-shadow: none;\n }\n\n :host([disabled]) slot[name='start']::slotted(*) {\n opacity: 0.3;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n\n :host([disabled]) slot[name='end']::slotted(*) {\n opacity: 0.3;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n }\n\n @layer top {\n @media (prefers-reduced-motion) {\n .control {\n transition-duration: 0s;\n }\n }\n\n :host([content-hidden]) [part='end'] {\n display: none;\n }\n }\n`.withBehaviors(\n appearanceBehavior(\n ButtonAppearance.outline,\n css`\n @layer base {\n .control {\n border-color: rgba(${actionRgbPartialColor}, 0.3);\n }\n }\n\n @layer disabled {\n :host([disabled]) .control {\n border-color: rgba(${borderRgbPartialColor}, 0.3);\n }\n }\n `\n ),\n appearanceBehavior(\n ButtonAppearance.ghost,\n css`\n @layer disabled {\n :host([disabled]) .control {\n border-color: transparent;\n }\n }\n `\n ),\n appearanceBehavior(\n ButtonAppearance.block,\n css`\n @layer base {\n .control {\n background-image: linear-gradient(\n rgba(${borderRgbPartialColor}, 0.1),\n rgba(${borderRgbPartialColor}, 0.1)\n );\n border-color: rgba(${borderRgbPartialColor}, 0.1);\n }\n }\n\n @layer hover {\n .control:hover {\n background-size: calc(100% - 4px) calc(100% - 4px);\n }\n }\n\n @layer focusVisible {\n .control${focusVisible} {\n background-size: calc(100% - 4px) calc(100% - 4px);\n }\n }\n\n @layer disabled {\n :host([disabled]) .control {\n background-image: linear-gradient(\n rgba(${borderRgbPartialColor}, 0.1),\n rgba(${borderRgbPartialColor}, 0.1)\n );\n background-size: 100% 100%;\n border-color: rgba(${borderRgbPartialColor}, 0.1);\n }\n }\n `\n )\n);\n\nexport const buttonAppearanceVariantStyles = css``.withBehaviors(\n appearanceBehavior(\n ButtonAppearance.outline,\n css`\n @layer base {\n :host([appearance-variant='primary']) .control {\n border-color: ${actionRgbPartialColor};\n }\n\n :host([appearance-variant='accent']) .control {\n border-color: ${buttonBorderAccentOutlineColor};\n color: ${buttonAccentOutlineFontColor};\n }\n }\n `\n ),\n appearanceBehavior(\n ButtonAppearance.block,\n css`\n @layer base {\n :host([appearance-variant='primary']) [part='start'] {\n ${iconColor.cssCustomProperty}: white;\n }\n\n :host([appearance-variant='primary']) .control {\n background-image: linear-gradient(\n ${buttonFillPrimaryColor},\n ${buttonFillPrimaryColor}\n );\n color: ${buttonPrimaryFontColor};\n border-color: ${buttonFillPrimaryColor};\n }\n\n :host([appearance-variant='primary']) [part='end'] {\n ${iconColor.cssCustomProperty}: white;\n }\n\n :host([appearance-variant='accent']) [part='start'] {\n ${iconColor.cssCustomProperty}: white;\n }\n\n :host([appearance-variant='accent']) .control {\n background-image: linear-gradient(\n ${buttonFillAccentColor},\n ${buttonFillAccentColor}\n );\n color: ${buttonAccentBlockFontColor};\n border-color: ${buttonFillAccentColor};\n }\n\n :host([appearance-variant='accent']) [part='end'] {\n ${iconColor.cssCustomProperty}: white;\n }\n }\n\n @layer active {\n :host([appearance-variant='primary']) .control:active {\n background-image: linear-gradient(\n ${buttonFillActivePrimaryColor},\n ${buttonFillActivePrimaryColor}\n );\n }\n\n :host([appearance-variant='accent']) .control:active {\n background-image: linear-gradient(\n ${buttonFillAccentActiveColor},\n ${buttonFillAccentActiveColor}\n );\n }\n }\n `\n )\n);\n"]}
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/patterns/button/styles.ts"],"names":[],"mappings":"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","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '@microsoft/fast-foundation';\nimport { focusVisible } from '../../utilities/style/focus';\nimport {\n actionRgbPartialColor,\n borderHoverColor,\n borderRgbPartialColor,\n borderWidth,\n buttonLabelFont,\n buttonLabelFontColor,\n buttonLabelDisabledFontColor,\n controlHeight,\n fillSelectedColor,\n iconColor,\n smallDelay,\n standardPadding,\n buttonPrimaryFontColor,\n buttonFillPrimaryColor,\n buttonFillActivePrimaryColor,\n buttonFillAccentColor,\n buttonAccentBlockFontColor,\n buttonFillAccentActiveColor,\n buttonBorderAccentOutlineColor,\n buttonAccentOutlineFontColor\n} from '../../theme-provider/design-tokens';\nimport { appearanceBehavior } from '../../utilities/style/appearance';\nimport { ButtonAppearance } from './types';\nimport { accessiblyHidden } from '../../utilities/style/accessibly-hidden';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-flex')}\n\n :host {\n background-color: transparent;\n height: ${controlHeight};\n color: ${buttonLabelFontColor};\n font: ${buttonLabelFont};\n cursor: pointer;\n outline: none;\n border: none;\n box-sizing: border-box;\n ${\n /*\n Not sure why but this is needed to get buttons with icons and buttons\n without icons to align on the same line when the button is inline-flex\n See: https://github.com/ni/nimble/issues/503\n */ ''\n }\n vertical-align: middle;\n }\n\n .control {\n background-color: transparent;\n height: 100%;\n width: 100%;\n border: ${borderWidth} solid transparent;\n box-sizing: border-box;\n color: inherit;\n border-radius: inherit;\n fill: inherit;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n cursor: inherit;\n font: inherit;\n outline: none;\n margin: 0;\n padding: 0 ${standardPadding};\n position: relative;\n transition:\n box-shadow ${smallDelay} ease-in-out,\n border-color ${smallDelay} ease-in-out,\n background-size ${smallDelay} ease-in-out;\n background-size: 100% 100%;\n background-repeat: no-repeat;\n background-position: center;\n }\n\n :host([content-hidden]) .control {\n aspect-ratio: 1 / 1;\n padding: 0px;\n }\n\n .control::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n pointer-events: none;\n box-sizing: border-box;\n outline: 0px solid transparent;\n color: transparent;\n background-clip: content-box;\n transition: outline ${smallDelay} ease-in-out;\n }\n\n .content {\n display: contents;\n }\n\n :host([content-hidden]) .content {\n ${accessiblyHidden}\n }\n\n [part='start'] {\n display: contents;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n\n [part='end'] {\n display: contents;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n }\n\n @layer hover {\n .control:hover {\n border-color: ${borderHoverColor};\n box-shadow: 0px 0px 0px ${borderWidth} ${borderHoverColor} inset;\n }\n }\n\n @layer focusVisible {\n .control${focusVisible} {\n border-color: ${borderHoverColor};\n box-shadow: 0px 0px 0px ${borderWidth} ${borderHoverColor} inset;\n }\n\n .control${focusVisible}::before {\n outline: ${borderWidth} solid ${borderHoverColor};\n outline-offset: -3px;\n }\n }\n\n @layer active {\n .control:active {\n box-shadow: none;\n background-image: linear-gradient(\n ${fillSelectedColor},\n ${fillSelectedColor}\n );\n background-size: calc(100% - 2px) calc(100% - 2px);\n }\n\n .control:active::before {\n outline: none;\n }\n }\n\n @layer disabled {\n :host([disabled]) {\n color: ${buttonLabelDisabledFontColor};\n cursor: default;\n }\n\n :host([disabled]) .control {\n box-shadow: none;\n background-image: none;\n color: rgba(${actionRgbPartialColor}, 0.3);\n }\n\n :host([disabled]) .control::before {\n box-shadow: none;\n }\n\n :host([disabled]) slot[name='start']::slotted(*) {\n opacity: 0.3;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n\n :host([disabled]) slot[name='end']::slotted(*) {\n opacity: 0.3;\n ${iconColor.cssCustomProperty}: ${buttonLabelFontColor};\n }\n }\n\n @layer top {\n @media (prefers-reduced-motion) {\n .control {\n transition-duration: 0s;\n }\n }\n\n :host([content-hidden]) [part='end'] {\n display: none;\n }\n }\n`.withBehaviors(\n appearanceBehavior(\n ButtonAppearance.outline,\n css`\n @layer base {\n .control {\n border-color: rgba(${actionRgbPartialColor}, 0.3);\n }\n }\n\n @layer disabled {\n :host([disabled]) .control {\n border-color: rgba(${borderRgbPartialColor}, 0.3);\n }\n }\n `\n ),\n appearanceBehavior(\n ButtonAppearance.ghost,\n css`\n @layer disabled {\n :host([disabled]) .control {\n border-color: transparent;\n }\n }\n `\n ),\n appearanceBehavior(\n ButtonAppearance.block,\n css`\n @layer base {\n .control {\n background-image: linear-gradient(\n rgba(${borderRgbPartialColor}, 0.1),\n rgba(${borderRgbPartialColor}, 0.1)\n );\n border-color: rgba(${borderRgbPartialColor}, 0.1);\n }\n }\n\n @layer hover {\n .control:hover {\n background-size: calc(100% - 4px) calc(100% - 4px);\n }\n }\n\n @layer focusVisible {\n .control${focusVisible} {\n background-size: calc(100% - 4px) calc(100% - 4px);\n }\n }\n\n @layer disabled {\n :host([disabled]) .control {\n background-image: linear-gradient(\n rgba(${borderRgbPartialColor}, 0.1),\n rgba(${borderRgbPartialColor}, 0.1)\n );\n background-size: 100% 100%;\n border-color: rgba(${borderRgbPartialColor}, 0.1);\n }\n }\n `\n )\n);\n\nexport const buttonAppearanceVariantStyles = css``.withBehaviors(\n appearanceBehavior(\n ButtonAppearance.outline,\n css`\n @layer base {\n :host([appearance-variant='primary']) .control {\n border-color: ${actionRgbPartialColor};\n }\n\n :host([appearance-variant='accent']) .control {\n border-color: ${buttonBorderAccentOutlineColor};\n color: ${buttonAccentOutlineFontColor};\n }\n }\n `\n ),\n appearanceBehavior(\n ButtonAppearance.block,\n css`\n @layer base {\n :host([appearance-variant='primary']) [part='start'] {\n ${iconColor.cssCustomProperty}: white;\n }\n\n :host([appearance-variant='primary']) .control {\n background-image: linear-gradient(\n ${buttonFillPrimaryColor},\n ${buttonFillPrimaryColor}\n );\n color: ${buttonPrimaryFontColor};\n border-color: ${buttonFillPrimaryColor};\n }\n\n :host([appearance-variant='primary']) [part='end'] {\n ${iconColor.cssCustomProperty}: white;\n }\n\n :host([appearance-variant='accent']) [part='start'] {\n ${iconColor.cssCustomProperty}: white;\n }\n\n :host([appearance-variant='accent']) .control {\n background-image: linear-gradient(\n ${buttonFillAccentColor},\n ${buttonFillAccentColor}\n );\n color: ${buttonAccentBlockFontColor};\n border-color: ${buttonFillAccentColor};\n }\n\n :host([appearance-variant='accent']) [part='end'] {\n ${iconColor.cssCustomProperty}: white;\n }\n }\n\n @layer active {\n :host([appearance-variant='primary']) .control:active {\n background-image: linear-gradient(\n ${buttonFillActivePrimaryColor},\n ${buttonFillActivePrimaryColor}\n );\n }\n\n :host([appearance-variant='accent']) .control:active {\n background-image: linear-gradient(\n ${buttonFillAccentActiveColor},\n ${buttonFillAccentActiveColor}\n );\n }\n }\n `\n )\n);\n"]}
|
|
@@ -89,8 +89,9 @@ export const styles = css `
|
|
|
89
89
|
border-radius: calc(var(--ni-private-switch-indicator-size) / 2);
|
|
90
90
|
margin: calc(
|
|
91
91
|
calc(
|
|
92
|
-
var(--ni-private-switch-height) -
|
|
93
|
-
|
|
92
|
+
var(--ni-private-switch-height) - var(
|
|
93
|
+
--ni-private-switch-indicator-size
|
|
94
|
+
)
|
|
94
95
|
) / 2
|
|
95
96
|
);
|
|
96
97
|
border: ${borderWidth} solid
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/switch/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EACH,OAAO,EACP,MAAM,EACN,OAAO,EACP,KAAK,EACR,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EACH,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,6BAA6B,EAC7B,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,UAAU,EACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;;gBAIZ,QAAQ;iBACP,oBAAoB;;;;;;cAMvB,aAAa;;;;;;iBAMV,4BAA4B;;;;iBAI5B,qBAAqB;gBACtB,gBAAgB;;;;iBAIf,6BAA6B;;;;;;;;;;;;;;;;;;;;;;4BAsBlB,cAAc;;;uBAGnB,WAAW;;;;;;;YAOtB,YAAY;wBACA,gBAAgB;;;;;gCAKR,UAAU
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/switch/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EACH,OAAO,EACP,MAAM,EACN,OAAO,EACP,KAAK,EACR,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EACH,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,6BAA6B,EAC7B,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,UAAU,EACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;;gBAIZ,QAAQ;iBACP,oBAAoB;;;;;;cAMvB,aAAa;;;;;;iBAMV,4BAA4B;;;;iBAI5B,qBAAqB;gBACtB,gBAAgB;;;;iBAIf,6BAA6B;;;;;;;;;;;;;;;;;;;;;;4BAsBlB,cAAc;;;uBAGnB,WAAW;;;;;;;YAOtB,YAAY;wBACA,gBAAgB;;;;;gCAKR,UAAU;;;;;;;;;;;;;;;;;;;;;;;kBAuBxB,WAAW;;;;;uBAKN,WAAW,eAAe,gBAAgB;;;;;;;kBAO/C,WAAW;;;;YAIjB,YAAY;kBACN,WAAW,UAAU,gBAAgB;;;;;;;;;8BASzB,UAAU;;;;;;;;;;;;;;;;;;;;;;;CAuBvC,CAAC,aAAa,CACX,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;iEAEsD,iBAAiB,CAC9D,OAAO,EACP,IAAI,CACP;kEACiD,KAAK;2EACI,iBAAiB,CACxE,KAAK,EACL,GAAG,CACN;8DAC6C,OAAO;uEACE,iBAAiB,CACpE,OAAO,EACP,GAAG,CACN;;SAER,CACJ,EACD,aAAa,CACT,KAAK,CAAC,IAAI,EACV,GAAG,CAAA;;iEAEsD,iBAAiB,CAC9D,OAAO,EACP,IAAI,CACP;kEACiD,iBAAiB,CAC/D,OAAO,EACP,GAAG,CACN;2EAC0D,iBAAiB,CACxE,OAAO,EACP,GAAG,CACN;8DAC6C,MAAM;uEACG,iBAAiB,CACpE,MAAM,EACN,GAAG,CACN;;SAER,CACJ,EACD,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;iEAEsD,iBAAiB,CAC9D,KAAK,EACL,IAAI,CACP;kEACiD,iBAAiB,CAC/D,KAAK,EACL,GAAG,CACN;2EAC0D,iBAAiB,CACxE,KAAK,EACL,GAAG,CACN;8DAC6C,KAAK;uEACI,iBAAiB,CACpE,KAAK,EACL,GAAG,CACN;;SAER,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '@microsoft/fast-foundation';\nimport {\n Black15,\n Black7,\n Black91,\n White\n} from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport {\n bodyFont,\n borderHoverColor,\n borderWidth,\n buttonLabelDisabledFontColor,\n buttonLabelFontColor,\n controlHeight,\n controlLabelDisabledFontColor,\n controlLabelFont,\n controlLabelFontColor,\n fillHoverColor,\n smallDelay\n} from '../theme-provider/design-tokens';\nimport { Theme } from '../theme-provider/types';\nimport { hexToRgbaCssColor } from '../utilities/style/colors';\nimport { focusVisible } from '../utilities/style/focus';\nimport { themeBehavior } from '../utilities/style/theme';\n\nexport const styles = css`\n ${display('inline-flex')}\n\n :host {\n outline: none;\n font: ${bodyFont};\n color: ${buttonLabelFontColor};\n flex-direction: column;\n cursor: pointer;\n --ni-private-switch-height: 24px;\n --ni-private-switch-indicator-size: 16px;\n padding-bottom: calc(\n ${controlHeight} - var(--ni-private-switch-height)\n );\n }\n\n :host([disabled]) {\n cursor: default;\n color: ${buttonLabelDisabledFontColor};\n }\n\n .label {\n color: ${controlLabelFontColor};\n font: ${controlLabelFont};\n }\n\n :host([disabled]) .label {\n color: ${controlLabelDisabledFontColor};\n }\n\n .label__hidden {\n display: none;\n visibility: hidden;\n }\n\n .switch-container {\n display: flex;\n align-items: center;\n }\n\n slot[name='unchecked-message']::slotted(*) {\n margin-inline-end: 8px;\n }\n\n .switch {\n display: flex;\n height: var(--ni-private-switch-height);\n width: calc(var(--ni-private-switch-height) * 2);\n box-sizing: border-box;\n background-color: ${fillHoverColor};\n border-radius: calc(var(--ni-private-switch-height) / 2);\n align-items: center;\n border: calc(${borderWidth} * 2) solid transparent;\n }\n\n :host([disabled]) .switch {\n background-color: var(--ni-private-switch-background-disabled-color);\n }\n\n :host(${focusVisible}) .switch {\n border-color: ${borderHoverColor};\n }\n\n .checked-indicator-spacer {\n flex-grow: 0;\n transition: flex-grow ${smallDelay} ease-in-out;\n }\n\n :host([aria-checked='true']) .checked-indicator-spacer {\n flex-grow: 1;\n }\n\n .checked-indicator {\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: var(--ni-private-switch-indicator-background-color);\n box-sizing: border-box;\n width: var(--ni-private-switch-indicator-size);\n height: var(--ni-private-switch-indicator-size);\n border-radius: calc(var(--ni-private-switch-indicator-size) / 2);\n margin: calc(\n calc(\n var(--ni-private-switch-height) - var(\n --ni-private-switch-indicator-size\n )\n ) / 2\n );\n border: ${borderWidth} solid\n var(--ni-private-switch-indicator-border-color);\n }\n\n :host(:hover) .checked-indicator {\n border: calc(${borderWidth} * 2) solid ${borderHoverColor};\n }\n\n :host([disabled]) .checked-indicator {\n background-color: var(\n --ni-private-switch-indicator-background-disabled-color\n );\n border: ${borderWidth} solid\n var(--ni-private-switch-indicator-border-disabled-color);\n }\n\n :host(${focusVisible}) .checked-indicator {\n border: ${borderWidth} solid ${borderHoverColor};\n }\n\n .checked-indicator-inner {\n width: calc(var(--ni-private-switch-indicator-size) / 2);\n height: calc(var(--ni-private-switch-indicator-size) / 2);\n border-radius: calc(var(--ni-private-switch-indicator-size) / 4);\n background-color: var(--ni-private-switch-indicator-border-color);\n opacity: 0;\n transition: opacity ${smallDelay} ease-in-out;\n }\n\n :host([disabled]) .checked-indicator-inner {\n background-color: var(\n --ni-private-switch-indicator-border-disabled-color\n );\n }\n\n :host([aria-checked='true']) .checked-indicator-inner {\n opacity: 1;\n }\n\n slot[name='checked-message']::slotted(*) {\n margin-inline-start: 8px;\n }\n\n @media (prefers-reduced-motion) {\n .checked-indicator-inner,\n .checked-indicator-spacer {\n transition-duration: 0s;\n }\n }\n`.withBehaviors(\n themeBehavior(\n Theme.light,\n css`\n :host {\n --ni-private-switch-background-disabled-color: ${hexToRgbaCssColor(\n Black91,\n 0.07\n )};\n --ni-private-switch-indicator-background-color: ${White};\n --ni-private-switch-indicator-background-disabled-color: ${hexToRgbaCssColor(\n White,\n 0.1\n )};\n --ni-private-switch-indicator-border-color: ${Black91};\n --ni-private-switch-indicator-border-disabled-color: ${hexToRgbaCssColor(\n Black91,\n 0.3\n )};\n }\n `\n ),\n themeBehavior(\n Theme.dark,\n css`\n :host {\n --ni-private-switch-background-disabled-color: ${hexToRgbaCssColor(\n Black15,\n 0.07\n )};\n --ni-private-switch-indicator-background-color: ${hexToRgbaCssColor(\n Black91,\n 0.3\n )};\n --ni-private-switch-indicator-background-disabled-color: ${hexToRgbaCssColor(\n Black91,\n 0.1\n )};\n --ni-private-switch-indicator-border-color: ${Black7};\n --ni-private-switch-indicator-border-disabled-color: ${hexToRgbaCssColor(\n Black7,\n 0.3\n )};\n }\n `\n ),\n themeBehavior(\n Theme.color,\n css`\n :host {\n --ni-private-switch-background-disabled-color: ${hexToRgbaCssColor(\n White,\n 0.07\n )};\n --ni-private-switch-indicator-background-color: ${hexToRgbaCssColor(\n White,\n 0.1\n )};\n --ni-private-switch-indicator-background-disabled-color: ${hexToRgbaCssColor(\n White,\n 0.1\n )};\n --ni-private-switch-indicator-border-color: ${White};\n --ni-private-switch-indicator-border-disabled-color: ${hexToRgbaCssColor(\n White,\n 0.3\n )};\n }\n `\n )\n);\n"]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
2
2
|
import { ZoomTransform } from 'd3-zoom';
|
|
3
|
+
import type { Table } from 'apache-arrow';
|
|
3
4
|
import { DataManager } from './modules/data-manager';
|
|
4
5
|
import { RenderingModule } from './modules/rendering';
|
|
5
6
|
import { HoverDieOpacity, WaferMapColorScale, WaferMapColorScaleMode, WaferMapDie, WaferMapOrientation, WaferMapOriginLocation, WaferMapValidity } from './types';
|
|
6
7
|
import { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';
|
|
8
|
+
import { WorkerRenderer } from './modules/worker-renderer';
|
|
7
9
|
declare global {
|
|
8
10
|
interface HTMLElementTagNameMap {
|
|
9
11
|
'nimble-wafer-map': WaferMap;
|
|
@@ -47,7 +49,12 @@ export declare class WaferMap extends FoundationElement {
|
|
|
47
49
|
/**
|
|
48
50
|
* @internal
|
|
49
51
|
*/
|
|
50
|
-
readonly
|
|
52
|
+
readonly mainRenderer: RenderingModule;
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
readonly workerRenderer: WorkerRenderer;
|
|
57
|
+
renderer: RenderingModule | WorkerRenderer;
|
|
51
58
|
/**
|
|
52
59
|
* @internal
|
|
53
60
|
*/
|
|
@@ -86,6 +93,7 @@ export declare class WaferMap extends FoundationElement {
|
|
|
86
93
|
hoverDie: WaferMapDie | undefined;
|
|
87
94
|
highlightedTags: string[];
|
|
88
95
|
dies: WaferMapDie[];
|
|
96
|
+
diesTable: Table | undefined;
|
|
89
97
|
colorScale: WaferMapColorScale;
|
|
90
98
|
private readonly eventCoordinator;
|
|
91
99
|
private readonly resizeObserver;
|
|
@@ -102,6 +110,7 @@ export declare class WaferMap extends FoundationElement {
|
|
|
102
110
|
* The hover does not require an event update, but it's also the last update in the sequence.
|
|
103
111
|
*/
|
|
104
112
|
update(): void;
|
|
113
|
+
private validate;
|
|
105
114
|
private createResizeObserver;
|
|
106
115
|
private originLocationChanged;
|
|
107
116
|
private gridMinXChanged;
|
|
@@ -114,6 +123,7 @@ export declare class WaferMap extends FoundationElement {
|
|
|
114
123
|
private colorScaleModeChanged;
|
|
115
124
|
private highlightedTagsChanged;
|
|
116
125
|
private diesChanged;
|
|
126
|
+
private diesTableChanged;
|
|
117
127
|
private colorScaleChanged;
|
|
118
128
|
private transformChanged;
|
|
119
129
|
private canvasWidthChanged;
|
|
@@ -10,6 +10,7 @@ import { EventCoordinator } from './modules/event-coordinator';
|
|
|
10
10
|
import { HoverDieOpacity, WaferMapColorScaleMode, WaferMapOrientation, WaferMapOriginLocation } from './types';
|
|
11
11
|
import { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';
|
|
12
12
|
import { WaferMapValidator } from './modules/wafer-map-validator';
|
|
13
|
+
import { WorkerRenderer } from './modules/worker-renderer';
|
|
13
14
|
/**
|
|
14
15
|
* A nimble-styled WaferMap
|
|
15
16
|
*/
|
|
@@ -38,7 +39,12 @@ export class WaferMap extends FoundationElement {
|
|
|
38
39
|
/**
|
|
39
40
|
* @internal
|
|
40
41
|
*/
|
|
41
|
-
this.
|
|
42
|
+
this.mainRenderer = new RenderingModule(this);
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
this.workerRenderer = new WorkerRenderer(this);
|
|
47
|
+
this.renderer = this.mainRenderer;
|
|
42
48
|
/**
|
|
43
49
|
* @internal
|
|
44
50
|
*/
|
|
@@ -97,9 +103,12 @@ export class WaferMap extends FoundationElement {
|
|
|
97
103
|
* The hover does not require an event update, but it's also the last update in the sequence.
|
|
98
104
|
*/
|
|
99
105
|
update() {
|
|
106
|
+
this.validate();
|
|
107
|
+
if (this.validity.invalidDiesTableSchema) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
100
110
|
if (this.waferMapUpdateTracker.requiresEventsUpdate) {
|
|
101
111
|
this.eventCoordinator.detachEvents();
|
|
102
|
-
this.waferMapValidator.validateGridDimensions();
|
|
103
112
|
if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {
|
|
104
113
|
this.dataManager.updateContainerDimensions();
|
|
105
114
|
this.renderer.updateSortedDiesAndDrawWafer();
|
|
@@ -125,6 +134,10 @@ export class WaferMap extends FoundationElement {
|
|
|
125
134
|
this.renderer.renderHover();
|
|
126
135
|
}
|
|
127
136
|
}
|
|
137
|
+
validate() {
|
|
138
|
+
this.waferMapValidator.validateGridDimensions();
|
|
139
|
+
this.waferMapValidator.validateDiesTableSchema();
|
|
140
|
+
}
|
|
128
141
|
createResizeObserver() {
|
|
129
142
|
const resizeObserver = new ResizeObserver(entries => {
|
|
130
143
|
const entry = entries[0];
|
|
@@ -183,6 +196,16 @@ export class WaferMap extends FoundationElement {
|
|
|
183
196
|
}
|
|
184
197
|
diesChanged() {
|
|
185
198
|
this.waferMapUpdateTracker.track('dies');
|
|
199
|
+
this.renderer = this.diesTable === undefined
|
|
200
|
+
? this.mainRenderer
|
|
201
|
+
: this.workerRenderer;
|
|
202
|
+
this.waferMapUpdateTracker.queueUpdate();
|
|
203
|
+
}
|
|
204
|
+
diesTableChanged() {
|
|
205
|
+
this.waferMapUpdateTracker.track('dies');
|
|
206
|
+
this.renderer = this.diesTable === undefined
|
|
207
|
+
? this.mainRenderer
|
|
208
|
+
: this.workerRenderer;
|
|
186
209
|
this.waferMapUpdateTracker.queueUpdate();
|
|
187
210
|
}
|
|
188
211
|
colorScaleChanged() {
|
|
@@ -237,6 +260,9 @@ __decorate([
|
|
|
237
260
|
__decorate([
|
|
238
261
|
attr({ attribute: 'color-scale-mode' })
|
|
239
262
|
], WaferMap.prototype, "colorScaleMode", void 0);
|
|
263
|
+
__decorate([
|
|
264
|
+
observable
|
|
265
|
+
], WaferMap.prototype, "renderer", void 0);
|
|
240
266
|
__decorate([
|
|
241
267
|
observable
|
|
242
268
|
], WaferMap.prototype, "canvasWidth", void 0);
|
|
@@ -267,6 +293,9 @@ __decorate([
|
|
|
267
293
|
__decorate([
|
|
268
294
|
observable
|
|
269
295
|
], WaferMap.prototype, "dies", void 0);
|
|
296
|
+
__decorate([
|
|
297
|
+
observable
|
|
298
|
+
], WaferMap.prototype, "diesTable", void 0);
|
|
270
299
|
__decorate([
|
|
271
300
|
observable
|
|
272
301
|
], WaferMap.prototype, "colorScale", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":";AAAA,OAAO,EACH,IAAI,EACJ,uBAAuB,EACvB,UAAU,EACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAiB,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EACH,eAAe,EAEf,sBAAsB,EAEtB,mBAAmB,EACnB,sBAAsB,EAEzB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAQlE;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,iBAAiB;IAA/C;;QACI;;;WAGG;QACa,0BAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAGjE,mBAAc,GAA2B,sBAAsB,CAAC,UAAU,CAAC;QAG3E,aAAQ,GAAY,SAAS,CAAC;QAG9B,aAAQ,GAAY,SAAS,CAAC;QAG9B,aAAQ,GAAY,SAAS,CAAC;QAG9B,aAAQ,GAAY,SAAS,CAAC;QAG9B,gBAAW,GAAwB,mBAAmB,CAAC,GAAG,CAAC;QAG3D,kBAAa,GAAG,CAAC,CAAC;QAGlB,oBAAe,GAAG,KAAK,CAAC;QAGxB,oBAAe,GAAG,EAAE,CAAC;QAGrB,mBAAc,GAA2B,sBAAsB,CAAC,MAAM,CAAC;QAiB9E;;WAEG;QACa,gBAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QACpD;;WAEG;QACa,aAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAErD;;WAEG;QACI,iBAAY,GAAG,KAAK,CAAC;QAY5B;;WAEG;QACgB,cAAS,GAAkB,YAAY,CAAC;QAE3D;;WAEG;QACgB,mBAAc,GAAG,EAAE,CAAC;QAEvC;;WAEG;QACgB,iBAAY,GAAoB,eAAe,CAAC,IAAI,CAAC;QAExE;;WAEG;QACgB,eAAU,GAAG,CAAC,CAAC;QAElC;;WAEG;QACgB,gBAAW,GAAG,CAAC,CAAC;QAOhB,oBAAe,GAAa,EAAE,CAAC;QAC/B,SAAI,GAAkB,EAAE,CAAC;QACzB,eAAU,GAAuB;YAChD,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;SACb,CAAC;QAEe,qBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,mBAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC7C,sBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IA0JrE,CAAC;IAxJG,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC;IAEe,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;YAC9C,kBAAkB,EAAE,IAAI;SAC3B,CAAE,CAAC;QACJ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAEe,oBAAoB;QAChC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACI,MAAM;QACT,IAAI,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;YACjD,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,qBAAqB,CAAC,iCAAiC,EAAE;gBAC9D,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;gBAC7C,IAAI,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAC;aAChD;iBAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;gBACxD,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAC;aAChD;iBAAM,IACH,IAAI,CAAC,qBAAqB,CAAC,4BAA4B,EACzD;gBACE,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;gBACxC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAC;aAChD;iBAAM,IACH,IAAI,CAAC,qBAAqB,CAAC,4BAA4B,EACzD;gBACE,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;gBACxC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAC;aAChD;iBAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,EAAE;gBAC5D,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;aAC7B;YACD,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;SACxC;aAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE;YAC7D,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;SAC/B;IACL,CAAC;IAEO,oBAAoB;QACxB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;YAChD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,OAAO;aACV;YACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC;YAC5C,kFAAkF;YAClF,wEAAwE;YACxE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEO,qBAAqB;QACzB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,sBAAsB;QAC1B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,sBAAsB;QAC1B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,qBAAqB;QACzB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,sBAAsB;QAC1B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,iBAAiB;QACrB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,kBAAkB;QACtB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,mBAAmB;QACvB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;CACJ;AArQG;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;gDAC2C;AAGlF;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC;0CACjC;AAGrC;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC;0CACjC;AAGrC;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC;0CACjC;AAGrC;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC;0CACjC;AAGrC;IADC,IAAI;6CAC6D;AAGlE;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC;+CACjD;AAGzB;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iDAC3B;AAG/B;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;iDACb;AAG5B;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;gDACsC;AAkClE;IAAX,UAAU;6CAA6B;AAK5B;IAAX,UAAU;8CAA8B;AAK7B;IAAX,UAAU;2CAAgD;AAK/C;IAAX,UAAU;gDAA4B;AAK3B;IAAX,UAAU;8CAA6D;AAK5D;IAAX,UAAU;4CAAuB;AAKtB;IAAX,UAAU;6CAAwB;AAKvB;IAAX,UAAU;0CAA0C;AAEzC;IAAX,UAAU;iDAAuC;AACtC;IAAX,UAAU;sCAAiC;AAChC;IAAX,UAAU;4CAGT;AAgKN,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC;IACpC,QAAQ,EAAE,WAAW;IACrB,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC","sourcesContent":["import {\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport { EventCoordinator } from './modules/event-coordinator';\nimport {\n HoverDieOpacity,\n WaferMapColorScale,\n WaferMapColorScaleMode,\n WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n WaferMapValidity\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap extends FoundationElement {\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker = new WaferMapUpdateTracker(this);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly dataManager = new DataManager(this);\n /**\n * @internal\n */\n public readonly renderer = new RenderingModule(this);\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly eventCoordinator = new EventCoordinator(this);\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator = new WaferMapValidator(this);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n this.eventCoordinator.detachEvents();\n this.waferMapValidator.validateGridDimensions();\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n this.eventCoordinator.attachEvents();\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n private 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 colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport type { Table } from 'apache-arrow';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport { EventCoordinator } from './modules/event-coordinator';\nimport {\n HoverDieOpacity,\n WaferMapColorScale,\n WaferMapColorScaleMode,\n WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n WaferMapValidity\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\nimport { WorkerRenderer } from './modules/worker-renderer';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap extends FoundationElement {\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker = new WaferMapUpdateTracker(this);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n /**\n * @internal\n */\n public readonly dataManager = new DataManager(this);\n /**\n * @internal\n */\n public readonly mainRenderer = new RenderingModule(this);\n /**\n * @internal\n */\n public readonly workerRenderer = new WorkerRenderer(this);\n\n @observable\n public renderer: RenderingModule | WorkerRenderer = this.mainRenderer;\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public diesTable: Table | undefined;\n\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly eventCoordinator = new EventCoordinator(this);\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator = new WaferMapValidator(this);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n this.validate();\n if (this.validity.invalidDiesTableSchema) {\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n this.eventCoordinator.detachEvents();\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n this.eventCoordinator.attachEvents();\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n private validate(): void {\n this.waferMapValidator.validateGridDimensions();\n this.waferMapValidator.validateDiesTableSchema();\n }\n\n private createResizeObserver(): ResizeObserver {\n const resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry === undefined) {\n return;\n }\n const { height, width } = entry.contentRect;\n // Updating the canvas size clears its contents so update it explicitly instead of\n // via template bindings so we can confirm that it happens before render\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvasWidth = width;\n this.canvasHeight = height;\n });\n return resizeObserver;\n }\n\n private originLocationChanged(): void {\n this.waferMapUpdateTracker.track('originLocation');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinXChanged(): void {\n this.waferMapUpdateTracker.track('gridMinX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxXChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinYChanged(): void {\n this.waferMapUpdateTracker.track('gridMinY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxYChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private maxCharactersChanged(): void {\n this.waferMapUpdateTracker.track('maxCharacters');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsHiddenChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsHidden');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsSuffixChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsSuffix');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleModeChanged(): void {\n this.waferMapUpdateTracker.track('colorScaleMode');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private highlightedTagsChanged(): void {\n this.waferMapUpdateTracker.track('highlightedTags');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.renderer = this.diesTable === undefined\n ? this.mainRenderer\n : this.workerRenderer;\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesTableChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.renderer = this.diesTable === undefined\n ? this.mainRenderer\n : this.workerRenderer;\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}
|
|
@@ -25,9 +25,10 @@ export class Prerendering {
|
|
|
25
25
|
}
|
|
26
26
|
updateDiesRenderInfo() {
|
|
27
27
|
this.d3ColorScale = this.createD3ColorScale(this.wafermap.colorScale, this.wafermap.colorScaleMode);
|
|
28
|
+
const isDieRenderInfo = (info) => info !== null;
|
|
28
29
|
this._diesRenderInfo = this.wafermap.dies
|
|
29
30
|
.map(die => this.computeDieRenderInfo(die))
|
|
30
|
-
.filter(
|
|
31
|
+
.filter(isDieRenderInfo);
|
|
31
32
|
}
|
|
32
33
|
computeDieRenderInfo(die) {
|
|
33
34
|
const margin = this.dataManager.margin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerendering.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/prerendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAgB,YAAY,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAUlD;;GAEG;AACH,MAAM,OAAO,YAAY;IAqBrB,YACqB,QAAkB,EAClB,WAAkC;QADlC,aAAQ,GAAR,QAAQ,CAAU;QAClB,gBAAW,GAAX,WAAW,CAAuB;QAPtC,mBAAc,GAAG,GAAG,CAAC;QACrB,0BAAqB,GAAG,GAAG,CAAC;QAC5B,kBAAa,GAAG,qBAAqB,CAAC;QACtC,gBAAW,GAAG,qBAAqB,CAAC;IAKlD,CAAC;IAvBJ,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAmBM,oBAAoB;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAC/C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAC9B,CAAC;QACF,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,EACxB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC/B,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;aACpC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;aAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAoB,CAAC;IAC1D,CAAC;IAEO,oBAAoB,CAAC,GAAgB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE;YAChD,OAAO,IAAI,CAAC;SACf;QAED,OAAO;YACH,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,KAAK;YACzB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;YACvB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAC9B,GAAG,CAAC,KAAK,EACT,IAAI,CAAC,QAAQ,CAAC,cAAc,EAC5B,IAAI,CAAC,QAAQ,CAAC,eAAe,EAC7B,GAAG,CAAC,IAAI,CACX;YACD,IAAI,EAAE,IAAI,CAAC,UAAU,CACjB,GAAG,CAAC,KAAK,EACT,IAAI,CAAC,QAAQ,CAAC,aAAa,EAC3B,IAAI,CAAC,QAAQ,CAAC,eAAe,EAC7B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAChC;SACJ,CAAC;IACN,CAAC;IAEO,uBAAuB,CAC3B,aAAyB,EACzB,aAAqB;QAErB,OAAO,IAAI,CAAC,GAAG,CACX,aAAa,CAAC,MAAM,EACpB,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;cACpD,IAAI,CAAC,cAAc,CAC5B,CAAC;IACN,CAAC;IAEO,kBAAkB,CACtB,UAA8B,EAC9B,cAAsC;QAEtC,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE;YACzC,OAAO,WAAW,EAAkB;iBAC/B,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC5C,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SACjC;QACD,OAAO,YAAY,EAAkB;aAChC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;aACzB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAEO,UAAU,CAAC,OAAe;QAC9B,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC;IACvE,CAAC;IAEO,UAAU,CACd,KAAa,EACb,aAAqB,EACrB,eAAwB,EACxB,eAAuB;QAEvB,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAC5C,OAAO,EAAE,CAAC;SACb;QACD,MAAM,KAAK,GAAG,GAAG,KAAK,GAAG,eAAe,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,EAAE;YAC9B,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC;SAClD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,gBAAgB,CACpB,OAAkB,EAClB,eAA0B;QAE1B,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YAClD,OAAO,CAAC,CAAC;SACZ;QACD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QAEhD,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;YACrD,OAAO,CAAC,CAAC;SACZ;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;IAEO,kBAAkB,CACtB,cAAsC;QAEtC,OAAO,cAAc,KAAK,sBAAsB,CAAC,MAAM,CAAC;IAC5D,CAAC;IAEO,mBAAmB,CACvB,cAAsC;QAEtC,OAAO,cAAc,KAAK,sBAAsB,CAAC,OAAO,CAAC;IAC7D,CAAC;IAEO,kBAAkB,CACtB,KAAa,EACb,cAAsC,EACtC,eAA0B,EAC1B,OAAkB;QAElB,IAAI,UAAU,GAAW,IAAI,CAAC,aAAa,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;gBACf,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;aACjC;iBAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,EAAE;gBAChD,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;aAC1C;iBAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE;gBACjD,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aACzC;SACJ;QACD,IAAI,UAAU,KAAK,SAAS,EAAE;YAC1B,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QACD,IAAI,QAAQ,GAAuB,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,QAAQ,GAAG,IAAI,WAAW,CACtB,QAAQ,CAAC,CAAC,EACV,QAAQ,CAAC,CAAC,EACV,QAAQ,CAAC,CAAC,EACV,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAClD,CAAC;QACF,OAAO,QAAQ,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC;CACJ","sourcesContent":["import { ScaleLinear, scaleLinear, ScaleOrdinal, scaleOrdinal } from 'd3-scale';\nimport { ColorRGBA64, parseColor } from '@microsoft/fast-colors';\nimport { WaferMapColorScaleMode } from '../types';\nimport type {\n Dimensions,\n DieRenderInfo,\n WaferMapColorScale,\n WaferMapDie\n} from '../types';\nimport type { WaferMap } from '..';\nimport type { DataManager } from './data-manager';\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(\n private readonly wafermap: WaferMap,\n private readonly dataManager: Readonly<DataManager>\n ) {}\n\n public updateLabelsFontSize(): void {\n this._labelsFontSize = this.calculateLabelsFontSize(\n this.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 this._diesRenderInfo = this.wafermap.dies\n .map(die => this.computeDieRenderInfo(die))\n .filter(info => info !== null) as DieRenderInfo[];\n }\n\n private computeDieRenderInfo(die: WaferMapDie): DieRenderInfo | null {\n const margin = this.dataManager.margin;\n\n const scaledX = this.dataManager.horizontalScale(die.x);\n const scaledY = this.dataManager.verticalScale(die.y);\n\n if (scaledX === undefined || scaledY === undefined) {\n return null;\n }\n\n return {\n x: scaledX + margin.right,\n y: scaledY + margin.top,\n fillStyle: this.calculateFillStyle(\n die.value,\n this.wafermap.colorScaleMode,\n this.wafermap.highlightedTags,\n die.tags\n ),\n text: this.buildLabel(\n die.value,\n this.wafermap.maxCharacters,\n this.wafermap.dieLabelsHidden,\n this.wafermap.dieLabelsSuffix\n )\n };\n }\n\n private calculateLabelsFontSize(\n dieDimensions: Dimensions,\n maxCharacters: number\n ): number {\n return Math.min(\n dieDimensions.height,\n (dieDimensions.width / (Math.max(2, maxCharacters) * 0.5))\n * this.fontSizeFactor\n );\n }\n\n private createD3ColorScale(\n colorScale: WaferMapColorScale,\n colorScaleMode: WaferMapColorScaleMode\n ): ScaleOrdinal<string, string> | ScaleLinear<string, string> {\n if (this.isColorScaleLinear(colorScaleMode)) {\n return scaleLinear<string, string>()\n .domain(colorScale.values.map(item => +item))\n .range(colorScale.colors);\n }\n return scaleOrdinal<string, string>()\n .domain(colorScale.values)\n .range(colorScale.colors);\n }\n\n private dieHasData(dieData: string): boolean {\n return dieData !== null && dieData !== undefined && dieData !== '';\n }\n\n private buildLabel(\n value: string,\n maxCharacters: number,\n dieLabelsHidden: boolean,\n dieLabelsSuffix: string\n ): string {\n if (dieLabelsHidden || !this.dieHasData(value)) {\n return '';\n }\n const label = `${value}${dieLabelsSuffix}`;\n if (label.length > maxCharacters) {\n return `${label.substring(0, maxCharacters)}…`;\n }\n return label;\n }\n\n private calculateOpacity(\n dieTags?: string[],\n highlightedTags?: string[]\n ): number {\n if (!highlightedTags || highlightedTags.length === 0) {\n return 1;\n }\n const highlightedSet = new Set(highlightedTags);\n\n if (dieTags?.some(dieTag => highlightedSet.has(dieTag))) {\n return 1;\n }\n\n return this.nonHighlightedOpacity;\n }\n\n private isColorScaleLinear(\n colorScaleMode: WaferMapColorScaleMode\n ): this is { d3ColorScale: ScaleLinear<string, string> } {\n return colorScaleMode === WaferMapColorScaleMode.linear;\n }\n\n private isColorScaleOrdinal(\n colorScaleMode: WaferMapColorScaleMode\n ): this is { d3ColorScale: ScaleOrdinal<string, string> } {\n return colorScaleMode === WaferMapColorScaleMode.ordinal;\n }\n\n private calculateFillStyle(\n value: string,\n colorScaleMode: WaferMapColorScaleMode,\n highlightedTags?: string[],\n dieTags?: string[]\n ): string {\n let colorValue: string = this.emptyDieColor;\n if (this.dieHasData(value)) {\n if (isNaN(+value)) {\n colorValue = this.nanDieColor;\n } else if (this.isColorScaleLinear(colorScaleMode)) {\n colorValue = this.d3ColorScale(+value);\n } else if (this.isColorScaleOrdinal(colorScaleMode)) {\n colorValue = this.d3ColorScale(value);\n }\n }\n if (colorValue === undefined) {\n return this.emptyDieColor;\n }\n let rgbColor: ColorRGBA64 | null = parseColor(colorValue);\n if (rgbColor === null) {\n return this.emptyDieColor;\n }\n\n rgbColor = new ColorRGBA64(\n rgbColor.r,\n rgbColor.g,\n rgbColor.b,\n this.calculateOpacity(dieTags, highlightedTags)\n );\n return rgbColor.toStringWebRGBA();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"prerendering.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/prerendering.ts"],"names":[],"mappings":"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","sourcesContent":["import { ScaleLinear, scaleLinear, ScaleOrdinal, scaleOrdinal } from 'd3-scale';\nimport { ColorRGBA64, parseColor } from '@microsoft/fast-colors';\nimport { WaferMapColorScaleMode } from '../types';\nimport type {\n Dimensions,\n DieRenderInfo,\n WaferMapColorScale,\n WaferMapDie\n} from '../types';\nimport type { WaferMap } from '..';\nimport type { DataManager } from './data-manager';\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(\n private readonly wafermap: WaferMap,\n private readonly dataManager: Readonly<DataManager>\n ) {}\n\n public updateLabelsFontSize(): void {\n this._labelsFontSize = this.calculateLabelsFontSize(\n this.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 this._diesRenderInfo = this.wafermap.dies\n .map(die => this.computeDieRenderInfo(die))\n .filter(isDieRenderInfo);\n }\n\n private computeDieRenderInfo(die: WaferMapDie): DieRenderInfo | null {\n const margin = this.dataManager.margin;\n\n const scaledX = this.dataManager.horizontalScale(die.x);\n const scaledY = this.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"]}
|
|
@@ -7,8 +7,10 @@ import type { WaferMapValidity } from '../types';
|
|
|
7
7
|
export declare class WaferMapValidator {
|
|
8
8
|
private readonly wafermap;
|
|
9
9
|
private invalidGridDimensions;
|
|
10
|
+
private invalidDiesTableSchema;
|
|
10
11
|
constructor(wafermap: WaferMap);
|
|
11
12
|
getValidity(): WaferMapValidity;
|
|
12
13
|
isValid(): boolean;
|
|
13
14
|
validateGridDimensions(): boolean;
|
|
15
|
+
validateDiesTableSchema(): boolean;
|
|
14
16
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DataType, Precision } from 'apache-arrow';
|
|
1
2
|
/**
|
|
2
3
|
* Helper class for the nimble-wafer-map to validate that the wafer maps's grid dimensions
|
|
3
4
|
* configuration is valid and report which aspects of the configuration are valid or invalid.
|
|
@@ -6,10 +7,12 @@ export class WaferMapValidator {
|
|
|
6
7
|
constructor(wafermap) {
|
|
7
8
|
this.wafermap = wafermap;
|
|
8
9
|
this.invalidGridDimensions = false;
|
|
10
|
+
this.invalidDiesTableSchema = false;
|
|
9
11
|
}
|
|
10
12
|
getValidity() {
|
|
11
13
|
return {
|
|
12
|
-
invalidGridDimensions: this.invalidGridDimensions
|
|
14
|
+
invalidGridDimensions: this.invalidGridDimensions,
|
|
15
|
+
invalidDiesTableSchema: this.invalidDiesTableSchema
|
|
13
16
|
};
|
|
14
17
|
}
|
|
15
18
|
isValid() {
|
|
@@ -33,5 +36,35 @@ export class WaferMapValidator {
|
|
|
33
36
|
}
|
|
34
37
|
return !this.invalidGridDimensions;
|
|
35
38
|
}
|
|
39
|
+
validateDiesTableSchema() {
|
|
40
|
+
this.invalidDiesTableSchema = false;
|
|
41
|
+
if (this.wafermap.diesTable === undefined) {
|
|
42
|
+
this.invalidDiesTableSchema = false;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const colIndexField = this.wafermap.diesTable.schema.fields.findIndex(f => f.name === 'colIndex');
|
|
46
|
+
const rowIndexField = this.wafermap.diesTable.schema.fields.findIndex(f => f.name === 'rowIndex');
|
|
47
|
+
const valueField = this.wafermap.diesTable.schema.fields.findIndex(f => f.name === 'value');
|
|
48
|
+
if (this.wafermap.diesTable.numCols < 3
|
|
49
|
+
|| colIndexField === -1
|
|
50
|
+
|| rowIndexField === -1
|
|
51
|
+
|| valueField === -1
|
|
52
|
+
|| !DataType.isInt(this.wafermap.diesTable.schema.fields[colIndexField].type)
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
54
|
+
|| this.wafermap.diesTable.schema.fields[colIndexField].type
|
|
55
|
+
.bitWidth !== 32
|
|
56
|
+
|| !DataType.isInt(this.wafermap.diesTable.schema.fields[rowIndexField].type)
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
58
|
+
|| this.wafermap.diesTable.schema.fields[rowIndexField].type
|
|
59
|
+
.bitWidth !== 32
|
|
60
|
+
|| !DataType.isFloat(this.wafermap.diesTable.schema.fields[valueField].type)
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
62
|
+
|| this.wafermap.diesTable.schema.fields[valueField].type
|
|
63
|
+
.precision !== Precision.DOUBLE) {
|
|
64
|
+
this.invalidDiesTableSchema = true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return !this.invalidDiesTableSchema;
|
|
68
|
+
}
|
|
36
69
|
}
|
|
37
70
|
//# sourceMappingURL=wafer-map-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wafer-map-validator.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/wafer-map-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wafer-map-validator.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/wafer-map-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataType, Precision } from 'apache-arrow';\nimport type { WaferMap } from '..';\nimport type { WaferMapValidity } from '../types';\n\n/**\n * Helper class for the nimble-wafer-map to validate that the wafer maps's grid dimensions\n * configuration is valid and report which aspects of the configuration are valid or invalid.\n */\nexport class WaferMapValidator {\n private invalidGridDimensions = false;\n private invalidDiesTableSchema = false;\n\n public constructor(private readonly wafermap: WaferMap) {}\n public getValidity(): WaferMapValidity {\n return {\n invalidGridDimensions: this.invalidGridDimensions,\n invalidDiesTableSchema: this.invalidDiesTableSchema\n };\n }\n\n public isValid(): boolean {\n return Object.values(this.getValidity()).every(x => x === false);\n }\n\n public validateGridDimensions(): boolean {\n this.invalidGridDimensions = false;\n if (\n typeof this.wafermap.gridMinX === 'undefined'\n && typeof this.wafermap.gridMaxX === 'undefined'\n && typeof this.wafermap.gridMinY === 'undefined'\n && typeof this.wafermap.gridMaxY === 'undefined'\n ) {\n this.invalidGridDimensions = false;\n } else if (\n typeof this.wafermap.gridMinX !== 'number'\n || typeof this.wafermap.gridMaxX !== 'number'\n || typeof this.wafermap.gridMinY !== 'number'\n || typeof this.wafermap.gridMaxY !== 'number'\n || this.wafermap.gridMaxX < this.wafermap.gridMinX\n || this.wafermap.gridMaxY < this.wafermap.gridMinY\n ) {\n this.invalidGridDimensions = true;\n }\n return !this.invalidGridDimensions;\n }\n\n public validateDiesTableSchema(): boolean {\n this.invalidDiesTableSchema = false;\n if (this.wafermap.diesTable === undefined) {\n this.invalidDiesTableSchema = false;\n } else {\n const colIndexField = this.wafermap.diesTable.schema.fields.findIndex(\n f => f.name === 'colIndex'\n );\n const rowIndexField = this.wafermap.diesTable.schema.fields.findIndex(\n f => f.name === 'rowIndex'\n );\n const valueField = this.wafermap.diesTable.schema.fields.findIndex(\n f => f.name === 'value'\n );\n if (\n this.wafermap.diesTable.numCols < 3\n || colIndexField === -1\n || rowIndexField === -1\n || valueField === -1\n || !DataType.isInt(\n this.wafermap.diesTable.schema.fields[colIndexField]!.type\n )\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n || this.wafermap.diesTable.schema.fields[colIndexField]!.type\n .bitWidth !== 32\n || !DataType.isInt(\n this.wafermap.diesTable.schema.fields[rowIndexField]!.type\n )\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n || this.wafermap.diesTable.schema.fields[rowIndexField]!.type\n .bitWidth !== 32\n || !DataType.isFloat(\n this.wafermap.diesTable.schema.fields[valueField]!.type\n )\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n || this.wafermap.diesTable.schema.fields[valueField]!.type\n .precision !== Precision.DOUBLE\n ) {\n this.invalidDiesTableSchema = true;\n }\n }\n return !this.invalidDiesTableSchema;\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { WaferMap } from '..';
|
|
2
|
+
/**
|
|
3
|
+
* Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas
|
|
4
|
+
*/
|
|
5
|
+
export declare class WorkerRenderer {
|
|
6
|
+
private readonly wafermap;
|
|
7
|
+
constructor(wafermap: WaferMap);
|
|
8
|
+
updateSortedDiesAndDrawWafer(): void;
|
|
9
|
+
drawWafer(): void;
|
|
10
|
+
renderHover(): void;
|
|
11
|
+
private calculateHoverTransform;
|
|
12
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { HoverDieOpacity } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas
|
|
4
|
+
*/
|
|
5
|
+
export class WorkerRenderer {
|
|
6
|
+
constructor(wafermap) {
|
|
7
|
+
this.wafermap = wafermap;
|
|
8
|
+
}
|
|
9
|
+
updateSortedDiesAndDrawWafer() {
|
|
10
|
+
// redundant function for backwards compatibility
|
|
11
|
+
this.drawWafer();
|
|
12
|
+
}
|
|
13
|
+
drawWafer() {
|
|
14
|
+
// rendering will be implemented in a future PR
|
|
15
|
+
this.renderHover();
|
|
16
|
+
}
|
|
17
|
+
renderHover() {
|
|
18
|
+
this.wafermap.hoverWidth = this.wafermap.dataManager.dieDimensions.width
|
|
19
|
+
* this.wafermap.transform.k;
|
|
20
|
+
this.wafermap.hoverHeight = this.wafermap.dataManager.dieDimensions.height
|
|
21
|
+
* this.wafermap.transform.k;
|
|
22
|
+
this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined
|
|
23
|
+
? HoverDieOpacity.hide
|
|
24
|
+
: HoverDieOpacity.show;
|
|
25
|
+
this.wafermap.hoverTransform = this.calculateHoverTransform();
|
|
26
|
+
}
|
|
27
|
+
calculateHoverTransform() {
|
|
28
|
+
if (this.wafermap.hoverDie !== undefined) {
|
|
29
|
+
const scaledX = this.wafermap.dataManager.horizontalScale(this.wafermap.hoverDie.x);
|
|
30
|
+
if (scaledX === undefined) {
|
|
31
|
+
return '';
|
|
32
|
+
}
|
|
33
|
+
const scaledY = this.wafermap.dataManager.verticalScale(this.wafermap.hoverDie.y);
|
|
34
|
+
if (scaledY === undefined) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
const transformedPoint = this.wafermap.transform.apply([
|
|
38
|
+
scaledX + this.wafermap.dataManager.margin.left,
|
|
39
|
+
scaledY + this.wafermap.dataManager.margin.top
|
|
40
|
+
]);
|
|
41
|
+
return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;
|
|
42
|
+
}
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=worker-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/worker-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,cAAc;IACvB,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,4BAA4B;QAC/B,iDAAiD;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAEM,SAAS;QACZ,+CAA+C;QAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;cAClE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM;cACpE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAC7D,CAAC,CAAC,eAAe,CAAC,IAAI;YACtB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAClE,CAAC;IAEO,uBAAuB;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAC3B,CAAC;YACF,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,OAAO,EAAE,CAAC;aACb;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAC3B,CAAC;YACF,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,OAAO,EAAE,CAAC;aACb;YACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;gBACnD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI;gBAC/C,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG;aACjD,CAAC,CAAC;YACH,OAAO,aAAa,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;SACtE;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ","sourcesContent":["import type { WaferMap } from '..';\nimport { HoverDieOpacity } from '../types';\n\n/**\n * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas\n */\nexport class WorkerRenderer {\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateSortedDiesAndDrawWafer(): void {\n // redundant function for backwards compatibility\n this.drawWafer();\n }\n\n public drawWafer(): void {\n // rendering will be implemented in a future PR\n this.renderHover();\n }\n\n public renderHover(): void {\n this.wafermap.hoverWidth = this.wafermap.dataManager.dieDimensions.width\n * this.wafermap.transform.k;\n this.wafermap.hoverHeight = this.wafermap.dataManager.dieDimensions.height\n * this.wafermap.transform.k;\n this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined\n ? HoverDieOpacity.hide\n : HoverDieOpacity.show;\n this.wafermap.hoverTransform = this.calculateHoverTransform();\n }\n\n private calculateHoverTransform(): string {\n if (this.wafermap.hoverDie !== undefined) {\n const scaledX = this.wafermap.dataManager.horizontalScale(\n this.wafermap.hoverDie.x\n );\n if (scaledX === undefined) {\n return '';\n }\n const scaledY = this.wafermap.dataManager.verticalScale(\n this.wafermap.hoverDie.y\n );\n if (scaledY === undefined) {\n return '';\n }\n const transformedPoint = this.wafermap.transform.apply([\n scaledX + this.wafermap.dataManager.margin.left,\n scaledY + this.wafermap.dataManager.margin.top\n ]);\n return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;\n }\n return '';\n }\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { DataManager } from './modules/data-manager';
|
|
2
1
|
export declare const WaferMapOriginLocation: {
|
|
3
2
|
readonly bottomLeft: "bottom-left";
|
|
4
3
|
readonly bottomRight: "bottom-right";
|
|
@@ -34,12 +33,6 @@ export interface WaferMapColorScale {
|
|
|
34
33
|
colors: string[];
|
|
35
34
|
values: string[];
|
|
36
35
|
}
|
|
37
|
-
export interface HoverHandlerData {
|
|
38
|
-
canvas: HTMLCanvasElement;
|
|
39
|
-
rect: HTMLElement;
|
|
40
|
-
dataManager: DataManager;
|
|
41
|
-
originLocation: WaferMapOriginLocation;
|
|
42
|
-
}
|
|
43
36
|
export interface Dimensions {
|
|
44
37
|
readonly width: number;
|
|
45
38
|
readonly height: number;
|
|
@@ -65,4 +58,5 @@ export interface ValidityObject {
|
|
|
65
58
|
}
|
|
66
59
|
export interface WaferMapValidity extends ValidityObject {
|
|
67
60
|
readonly invalidGridDimensions: boolean;
|
|
61
|
+
readonly invalidDiesTableSchema: boolean;
|
|
68
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/wafer-map/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/wafer-map/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,cAAc;IAC3B,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,WAAW;CACf,CAAC;AAKX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACR,CAAC;AAKX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACN,CAAC;AAKX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACZ,CAAC","sourcesContent":["export const WaferMapOriginLocation = {\n bottomLeft: 'bottom-left',\n bottomRight: 'bottom-right',\n topLeft: 'top-left',\n topRight: 'top-right'\n} as const;\n\nexport type WaferMapOriginLocation =\n (typeof WaferMapOriginLocation)[keyof typeof WaferMapOriginLocation];\n\nexport const WaferMapOrientation = {\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right'\n} as const;\n\nexport type WaferMapOrientation =\n (typeof WaferMapOrientation)[keyof typeof WaferMapOrientation];\n\nexport const HoverDieOpacity = {\n show: 'show',\n hide: 'hide'\n} as const;\n\nexport type HoverDieOpacity =\n (typeof HoverDieOpacity)[keyof typeof HoverDieOpacity];\n\nexport const WaferMapColorScaleMode = {\n linear: 'linear',\n ordinal: 'ordinal'\n} as const;\n\nexport type WaferMapColorScaleMode =\n (typeof WaferMapColorScaleMode)[keyof typeof WaferMapColorScaleMode];\n\nexport interface WaferMapDie {\n value: string;\n x: number;\n y: number;\n // The metadata field is not used by the wafer-map and is only for optionally storing arbitrary metadata.\n metadata?: unknown;\n tags?: string[];\n}\n\nexport interface WaferMapColorScale {\n colors: string[];\n values: string[];\n}\n\nexport interface Dimensions {\n readonly width: number;\n readonly height: number;\n}\n\nexport interface Margin {\n readonly top: number;\n readonly right: number;\n readonly bottom: number;\n readonly left: number;\n}\n\nexport interface DieRenderInfo {\n readonly x: number;\n readonly y: number;\n readonly fillStyle: string;\n readonly text: string;\n}\n\nexport interface PointCoordinates {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface ValidityObject {\n [key: string]: boolean;\n}\nexport interface WaferMapValidity extends ValidityObject {\n readonly invalidGridDimensions: boolean;\n readonly invalidDiesTableSchema: boolean;\n}\n"]}
|