@ni/nimble-components 21.7.0 → 21.8.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 +25 -14
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +353 -352
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table-column/enum-base/models/mapping-icon-config.d.ts +1 -1
- package/dist/esm/table-column/enum-base/models/mapping-icon-config.js +19 -9
- package/dist/esm/table-column/enum-base/models/mapping-icon-config.js.map +1 -1
- package/dist/esm/table-column/icon/index.js +0 -3
- package/dist/esm/table-column/icon/index.js.map +1 -1
- package/dist/esm/table-column/icon/models/table-column-icon-validator.d.ts +1 -0
- package/dist/esm/table-column/icon/models/table-column-icon-validator.js +5 -1
- package/dist/esm/table-column/icon/models/table-column-icon-validator.js.map +1 -1
- package/dist/esm/wafer-map/modules/create-matrix-renderer.d.ts +10 -0
- package/dist/esm/wafer-map/modules/create-matrix-renderer.js +23 -0
- package/dist/esm/wafer-map/modules/create-matrix-renderer.js.map +1 -0
- package/dist/esm/wafer-map/workers/matrix-renderer.d.ts +1 -0
- package/dist/esm/wafer-map/workers/matrix-renderer.js +3 -0
- package/dist/esm/wafer-map/workers/matrix-renderer.js.map +1 -0
- package/package.json +7 -2
|
@@ -11,5 +11,5 @@ export interface IconView {
|
|
|
11
11
|
export declare class MappingIconConfig extends MappingConfig {
|
|
12
12
|
readonly severity: IconSeverity;
|
|
13
13
|
readonly iconTemplate: ViewTemplate<IconView>;
|
|
14
|
-
constructor(resolvedIcon: string, severity: IconSeverity, text: string | undefined);
|
|
14
|
+
constructor(resolvedIcon: string | undefined, severity: IconSeverity, text: string | undefined);
|
|
15
15
|
}
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { html } from '@microsoft/fast-element';
|
|
2
2
|
import { MappingConfig } from './mapping-config';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
// Create an empty template containing only a space because creating a ViewTemplate
|
|
4
|
+
// with an empty string throws an exception at runtime.
|
|
5
|
+
// prettier-ignore
|
|
6
|
+
const emptyTemplate = html ` `;
|
|
7
|
+
const createIconTemplate = (icon) => {
|
|
8
|
+
if (icon === undefined) {
|
|
9
|
+
return emptyTemplate;
|
|
10
|
+
}
|
|
11
|
+
return html `
|
|
12
|
+
<${icon}
|
|
13
|
+
title="${x => x.text}"
|
|
14
|
+
role="img"
|
|
15
|
+
aria-label="${x => x.text}"
|
|
16
|
+
severity="${x => x.severity}"
|
|
17
|
+
class="no-shrink"
|
|
18
|
+
>
|
|
19
|
+
</${icon}>
|
|
20
|
+
`;
|
|
21
|
+
};
|
|
12
22
|
/**
|
|
13
23
|
* Mapping configuration corresponding to a icon mapping
|
|
14
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping-icon-config.js","sourceRoot":"","sources":["../../../../../src/table-column/enum-base/models/mapping-icon-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAqB,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mapping-icon-config.js","sourceRoot":"","sources":["../../../../../src/table-column/enum-base/models/mapping-icon-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAqB,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOjD,mFAAmF;AACnF,uDAAuD;AACvD,kBAAkB;AAClB,MAAM,aAAa,GAAG,IAAI,CAAU,GAAG,CAAC;AAExC,MAAM,kBAAkB,GAAG,CACvB,IAAwB,EACF,EAAE;IACxB,IAAI,IAAI,KAAK,SAAS,EAAE;QACpB,OAAO,aAAa,CAAC;KACxB;IAED,OAAO,IAAI,CAAA;WACJ,IAAI;qBACM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;;0BAEN,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;wBACb,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;;;YAG3B,IAAI;KACX,CAAC;AACN,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAEhD,YACI,YAAgC,EAChB,QAAsB,EACtC,IAAwB;QAExB,KAAK,CAAC,IAAI,CAAC,CAAC;QAHI,aAAQ,GAAR,QAAQ,CAAc;QAItC,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;CACJ","sourcesContent":["import { html, type ViewTemplate } from '@microsoft/fast-element';\nimport type { IconSeverity } from '../../../icon-base/types';\nimport { MappingConfig } from './mapping-config';\n\nexport interface IconView {\n severity: IconSeverity;\n text?: string;\n}\n\n// Create an empty template containing only a space because creating a ViewTemplate\n// with an empty string throws an exception at runtime.\n// prettier-ignore\nconst emptyTemplate = html<IconView>` `;\n\nconst createIconTemplate = (\n icon: string | undefined\n): ViewTemplate<IconView> => {\n if (icon === undefined) {\n return emptyTemplate;\n }\n\n return html`\n <${icon}\n title=\"${x => x.text}\"\n role=\"img\"\n aria-label=\"${x => x.text}\"\n severity=\"${x => x.severity}\"\n class=\"no-shrink\"\n >\n </${icon}>\n `;\n};\n\n/**\n * Mapping configuration corresponding to a icon mapping\n */\nexport class MappingIconConfig extends MappingConfig {\n public readonly iconTemplate: ViewTemplate<IconView>;\n public constructor(\n resolvedIcon: string | undefined,\n public readonly severity: IconSeverity,\n text: string | undefined\n ) {\n super(text);\n this.iconTemplate = createIconTemplate(resolvedIcon);\n }\n}\n"]}
|
|
@@ -38,9 +38,6 @@ export class TableColumnIcon extends mixinGroupableColumnAPI(mixinFractionalWidt
|
|
|
38
38
|
}
|
|
39
39
|
createMappingConfig(mapping) {
|
|
40
40
|
if (mapping instanceof MappingIcon) {
|
|
41
|
-
if (!mapping.resolvedIcon) {
|
|
42
|
-
throw Error('Unresolved icon');
|
|
43
|
-
}
|
|
44
41
|
return new MappingIconConfig(mapping.resolvedIcon, mapping.severity, mapping.text);
|
|
45
42
|
}
|
|
46
43
|
if (mapping instanceof MappingSpinner) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/icon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAEH,mBAAmB,EAEtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAuB,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAQlF;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,uBAAuB,CACxD,6BAA6B,CACzB,CAAA,mBAGC,CAAA,CACJ,CACJ;IACmB,eAAe;QAC3B,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,IAAoB,QAAQ;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAEkB,yBAAyB;QACxC,OAAO;YACH,oBAAoB,EAAE,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,0BAA0B;YACvC,kBAAkB,EAAE,iCAAiC;YACrD,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,wBAAwB,CAAC,KAAK;SAChD,CAAC;IACN,CAAC;IAEkB,kBAAkB,CACjC,cAA8B;QAE9B,OAAO;YACH,cAAc;SACjB,CAAC;IACN,CAAC;IAES,mBAAmB,CAAC,OAAyB;QACnD,IAAI,OAAO,YAAY,WAAW,EAAE;YAChC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/icon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAEH,mBAAmB,EAEtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAuB,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAQlF;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,uBAAuB,CACxD,6BAA6B,CACzB,CAAA,mBAGC,CAAA,CACJ,CACJ;IACmB,eAAe;QAC3B,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,IAAoB,QAAQ;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAEkB,yBAAyB;QACxC,OAAO;YACH,oBAAoB,EAAE,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,0BAA0B;YACvC,kBAAkB,EAAE,iCAAiC;YACrD,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,wBAAwB,CAAC,KAAK;SAChD,CAAC;IACN,CAAC;IAEkB,kBAAkB,CACjC,cAA8B;QAE9B,OAAO;YACH,cAAc;SACjB,CAAC;IACN,CAAC;IAES,mBAAmB,CAAC,OAAyB;QACnD,IAAI,OAAO,YAAY,WAAW,EAAE;YAChC,OAAO,IAAI,iBAAiB,CACxB,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CACf,CAAC;SACL;QACD,IAAI,OAAO,YAAY,cAAc,EAAE;YACnC,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACjD;QACD,+EAA+E;QAC/E,mEAAmE;QACnE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;CACJ;AAED,MAAM,qBAAqB,GAAG,eAAe,CAAC,OAAO,CAAC;IAClD,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,qBAAqB,EAAE,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC","sourcesContent":["import { DesignSystem } from '@microsoft/fast-foundation';\nimport {\n MappingConfigs,\n TableColumnEnumBase,\n TableColumnEnumColumnConfig\n} from '../enum-base';\nimport { styles } from '../enum-base/styles';\nimport { template } from '../enum-base/template';\nimport { TableColumnSortOperation, TableColumnValidity } from '../base/types';\nimport { mixinGroupableColumnAPI } from '../mixins/groupable-column';\nimport { mixinFractionalWidthColumnAPI } from '../mixins/fractional-width-column';\nimport { MappingSpinner } from '../../mapping/spinner';\nimport { MappingIcon } from '../../mapping/icon';\nimport { TableColumnIconValidator } from './models/table-column-icon-validator';\nimport type { ColumnInternalsOptions } from '../base/models/column-internals';\nimport { tableColumnIconGroupHeaderViewTag } from './group-header-view';\nimport { tableColumnIconCellViewTag } from './cell-view';\nimport type { Mapping } from '../../mapping/base';\nimport type { MappingConfig } from '../enum-base/models/mapping-config';\nimport { MappingIconConfig } from '../enum-base/models/mapping-icon-config';\nimport { MappingSpinnerConfig } from '../enum-base/models/mapping-spinner-config';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-column-icon': TableColumnIcon;\n }\n}\n\n/**\n * Table column that maps values to icons / spinners\n */\nexport class TableColumnIcon extends mixinGroupableColumnAPI(\n mixinFractionalWidthColumnAPI(\n TableColumnEnumBase<\n TableColumnEnumColumnConfig,\n TableColumnIconValidator\n >\n )\n) {\n public override createValidator(): TableColumnIconValidator {\n return new TableColumnIconValidator(this.columnInternals);\n }\n\n public override get validity(): TableColumnValidity {\n return this.validator.getValidity();\n }\n\n protected override getColumnInternalsOptions(): ColumnInternalsOptions {\n return {\n cellRecordFieldNames: ['value'],\n cellViewTag: tableColumnIconCellViewTag,\n groupHeaderViewTag: tableColumnIconGroupHeaderViewTag,\n delegatedEvents: [],\n sortOperation: TableColumnSortOperation.basic\n };\n }\n\n protected override createColumnConfig(\n mappingConfigs: MappingConfigs\n ): TableColumnEnumColumnConfig {\n return {\n mappingConfigs\n };\n }\n\n protected createMappingConfig(mapping: Mapping<unknown>): MappingConfig {\n if (mapping instanceof MappingIcon) {\n return new MappingIconConfig(\n mapping.resolvedIcon,\n mapping.severity,\n mapping.text\n );\n }\n if (mapping instanceof MappingSpinner) {\n return new MappingSpinnerConfig(mapping.text);\n }\n // Getting here would indicate a programming error, b/c validation will prevent\n // this function from running when there is an unsupported mapping.\n throw new Error('Unsupported mapping');\n }\n}\n\nconst nimbleTableColumnIcon = TableColumnIcon.compose({\n baseName: 'table-column-icon',\n template,\n styles\n});\n\nDesignSystem.getOrCreate()\n .withPrefix('nimble')\n .register(nimbleTableColumnIcon());\nexport const tableColumnIconTag = 'nimble-table-column-icon';\n"]}
|
|
@@ -10,6 +10,7 @@ export declare class TableColumnIconValidator extends TableColumnEnumBaseValidat
|
|
|
10
10
|
constructor(columnInternals: ColumnInternals<unknown>);
|
|
11
11
|
private static isIconMappingElement;
|
|
12
12
|
private static isSupportedMappingElement;
|
|
13
|
+
private static hasUnresolvedIcon;
|
|
13
14
|
validate(mappings: Mapping<unknown>[], keyType: MappingKeyType): void;
|
|
14
15
|
private validateIconNames;
|
|
15
16
|
private validateNoMissingText;
|
|
@@ -20,6 +20,10 @@ export class TableColumnIconValidator extends TableColumnEnumBaseValidator {
|
|
|
20
20
|
static isSupportedMappingElement(mapping) {
|
|
21
21
|
return (mapping instanceof MappingIcon || mapping instanceof MappingSpinner);
|
|
22
22
|
}
|
|
23
|
+
static hasUnresolvedIcon(mappingIcon) {
|
|
24
|
+
return (typeof mappingIcon.icon === 'string'
|
|
25
|
+
&& mappingIcon.resolvedIcon === undefined);
|
|
26
|
+
}
|
|
23
27
|
validate(mappings, keyType) {
|
|
24
28
|
super.validate(mappings, keyType);
|
|
25
29
|
this.validateMappingTypes(mappings);
|
|
@@ -29,7 +33,7 @@ export class TableColumnIconValidator extends TableColumnEnumBaseValidator {
|
|
|
29
33
|
validateIconNames(mappings) {
|
|
30
34
|
const invalid = mappings
|
|
31
35
|
.filter(TableColumnIconValidator.isIconMappingElement)
|
|
32
|
-
.some(
|
|
36
|
+
.some(TableColumnIconValidator.hasUnresolvedIcon);
|
|
33
37
|
this.setConditionValue('invalidIconName', invalid);
|
|
34
38
|
}
|
|
35
39
|
validateNoMissingText(mappings) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-column-icon-validator.js","sourceRoot":"","sources":["../../../../../src/table-column/icon/models/table-column-icon-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACH,4BAA4B,EAC5B,yBAAyB,EAC5B,MAAM,yDAAyD,CAAC;AAGjE,MAAM,qBAAqB,GAAG;IAC1B,GAAG,yBAAyB;IAC5B,wBAAwB;IACxB,iBAAiB;IACjB,kBAAkB;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,4BAE7C;IACG,YAAmB,eAAyC;QACxD,KAAK,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAClD,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAC/B,OAAyB;QAEzB,OAAO,OAAO,YAAY,WAAW,CAAC;IAC1C,CAAC;IAEO,MAAM,CAAC,yBAAyB,CACpC,OAAyB;QAEzB,OAAO,CACH,OAAO,YAAY,WAAW,IAAI,OAAO,YAAY,cAAc,CACtE,CAAC;IACN,CAAC;IAEe,QAAQ,CACpB,QAA4B,EAC5B,OAAuB;QAEvB,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEO,iBAAiB,CAAC,QAA4B;QAClD,MAAM,OAAO,GAAG,QAAQ;aACnB,MAAM,CAAC,wBAAwB,CAAC,oBAAoB,CAAC;aACrD,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"table-column-icon-validator.js","sourceRoot":"","sources":["../../../../../src/table-column/icon/models/table-column-icon-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACH,4BAA4B,EAC5B,yBAAyB,EAC5B,MAAM,yDAAyD,CAAC;AAGjE,MAAM,qBAAqB,GAAG;IAC1B,GAAG,yBAAyB;IAC5B,wBAAwB;IACxB,iBAAiB;IACjB,kBAAkB;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,4BAE7C;IACG,YAAmB,eAAyC;QACxD,KAAK,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAClD,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAC/B,OAAyB;QAEzB,OAAO,OAAO,YAAY,WAAW,CAAC;IAC1C,CAAC;IAEO,MAAM,CAAC,yBAAyB,CACpC,OAAyB;QAEzB,OAAO,CACH,OAAO,YAAY,WAAW,IAAI,OAAO,YAAY,cAAc,CACtE,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,WAAwB;QACrD,OAAO,CACH,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;eACjC,WAAW,CAAC,YAAY,KAAK,SAAS,CAC5C,CAAC;IACN,CAAC;IAEe,QAAQ,CACpB,QAA4B,EAC5B,OAAuB;QAEvB,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEO,iBAAiB,CAAC,QAA4B;QAClD,MAAM,OAAO,GAAG,QAAQ;aACnB,MAAM,CAAC,wBAAwB,CAAC,oBAAoB,CAAC;aACrD,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAEO,qBAAqB,CAAC,QAA4B;QACtD,MAAM,OAAO,GAAG,QAAQ;aACnB,MAAM,CAAC,wBAAwB,CAAC,yBAAyB,CAAC;aAC1D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,oBAAoB,CAAC,QAA4B;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CACxB,wBAAwB,CAAC,yBAAyB,CACrD,CAAC;QACF,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;CACJ","sourcesContent":["import type { Mapping } from '../../../mapping/base';\nimport { MappingIcon } from '../../../mapping/icon';\nimport { MappingSpinner } from '../../../mapping/spinner';\nimport type { ColumnInternals } from '../../base/models/column-internals';\nimport {\n TableColumnEnumBaseValidator,\n enumBaseValidityFlagNames\n} from '../../enum-base/models/table-column-enum-base-validator';\nimport type { MappingKeyType } from '../../enum-base/types';\n\nconst iconValidityFlagNames = [\n ...enumBaseValidityFlagNames,\n 'unsupportedMappingType',\n 'invalidIconName',\n 'missingTextValue'\n] as const;\n\n/**\n * Validator for TableColumnIcon\n */\nexport class TableColumnIconValidator extends TableColumnEnumBaseValidator<\n typeof iconValidityFlagNames\n> {\n public constructor(columnInternals: ColumnInternals<unknown>) {\n super(columnInternals, iconValidityFlagNames);\n }\n\n private static isIconMappingElement(\n mapping: Mapping<unknown>\n ): mapping is MappingIcon {\n return mapping instanceof MappingIcon;\n }\n\n private static isSupportedMappingElement(\n mapping: Mapping<unknown>\n ): mapping is MappingIcon | MappingSpinner {\n return (\n mapping instanceof MappingIcon || mapping instanceof MappingSpinner\n );\n }\n\n private static hasUnresolvedIcon(mappingIcon: MappingIcon): boolean {\n return (\n typeof mappingIcon.icon === 'string'\n && mappingIcon.resolvedIcon === undefined\n );\n }\n\n public override validate(\n mappings: Mapping<unknown>[],\n keyType: MappingKeyType\n ): void {\n super.validate(mappings, keyType);\n this.validateMappingTypes(mappings);\n this.validateIconNames(mappings);\n this.validateNoMissingText(mappings);\n }\n\n private validateIconNames(mappings: Mapping<unknown>[]): void {\n const invalid = mappings\n .filter(TableColumnIconValidator.isIconMappingElement)\n .some(TableColumnIconValidator.hasUnresolvedIcon);\n this.setConditionValue('invalidIconName', invalid);\n }\n\n private validateNoMissingText(mappings: Mapping<unknown>[]): void {\n const invalid = mappings\n .filter(TableColumnIconValidator.isSupportedMappingElement)\n .some(mapping => mapping.text === undefined);\n this.setConditionValue('missingTextValue', invalid);\n }\n\n private validateMappingTypes(mappings: Mapping<unknown>[]): void {\n const valid = mappings.every(\n TableColumnIconValidator.isSupportedMappingElement\n );\n this.setConditionValue('unsupportedMappingType', !valid);\n }\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Remote } from 'comlink';
|
|
2
|
+
import type { MatrixRenderer } from '../../../build/generate-workers/dist/esm/source/matrix-renderer';
|
|
3
|
+
/**
|
|
4
|
+
* Asynchronously creates and returns a Remote<MatrixRenderer> instance.
|
|
5
|
+
* This function simplifies the process of creating and accessing MatrixRenderer instances.
|
|
6
|
+
*/
|
|
7
|
+
export declare const createMatrixRenderer: () => Promise<{
|
|
8
|
+
matrixRenderer: Remote<MatrixRenderer>;
|
|
9
|
+
terminate: () => void;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { wrap } from 'comlink';
|
|
2
|
+
import { workerCode } from '../workers/matrix-renderer';
|
|
3
|
+
let url;
|
|
4
|
+
/**
|
|
5
|
+
* Asynchronously creates and returns a Remote<MatrixRenderer> instance.
|
|
6
|
+
* This function simplifies the process of creating and accessing MatrixRenderer instances.
|
|
7
|
+
*/
|
|
8
|
+
export const createMatrixRenderer = async () => {
|
|
9
|
+
if (url === undefined) {
|
|
10
|
+
const blob = new Blob([workerCode], { type: 'text/javascript' });
|
|
11
|
+
url = URL.createObjectURL(blob);
|
|
12
|
+
}
|
|
13
|
+
const worker = new Worker(url);
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
15
|
+
const RemoteMatrixRenderer = wrap(worker);
|
|
16
|
+
const matrixRenderer = await new RemoteMatrixRenderer();
|
|
17
|
+
const terminate = () => worker.terminate();
|
|
18
|
+
return {
|
|
19
|
+
matrixRenderer,
|
|
20
|
+
terminate
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=create-matrix-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-matrix-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/create-matrix-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,IAAI,GAAW,CAAC;AAEhB;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAGtC,EAAE;IACD,IAAI,GAAG,KAAK,SAAS,EAAE;QACnB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACjE,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACnC;IACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,gEAAgE;IAChE,MAAM,oBAAoB,GAAG,IAAI,CAA0B,MAAM,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACjD,OAAO;QACH,cAAc;QACd,SAAS;KACZ,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { wrap, Remote } from 'comlink';\nimport { workerCode } from '../workers/matrix-renderer';\nimport type { MatrixRenderer } from '../../../build/generate-workers/dist/esm/source/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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const workerCode = "var MatrixRenderer = (function (exports) {\n 'use strict';\n\n /**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n const proxyMarker = Symbol(\"Comlink.proxy\");\n const createEndpoint = Symbol(\"Comlink.endpoint\");\n const releaseProxy = Symbol(\"Comlink.releaseProxy\");\n const finalizer = Symbol(\"Comlink.finalizer\");\n const throwMarker = Symbol(\"Comlink.thrown\");\n const isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n /**\n * Internal transfer handle to handle objects marked to proxy.\n */\n const proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n };\n /**\n * Internal transfer handler to handle thrown exceptions.\n */\n const throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n };\n /**\n * Allows customizing the serialization of certain values.\n */\n const transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n ]);\n function isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n }\n function expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n }\n function isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n }\n function closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n }\n function wrap(ep, target) {\n return createProxy(ep, [], target);\n }\n function throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n }\n function releaseEndpoint(ep) {\n return requestResponseMessage(ep, {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n }\n const proxyCounter = new WeakMap();\n const proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\n function registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n }\n function unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n }\n function createProxy(ep, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously \u00AF\\_(\u30C4)_/\u00AF\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn\u2019t happen.\n if (last === \"bind\") {\n return createProxy(ep, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n }\n function myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n }\n function processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n }\n const transferCache = new WeakMap();\n function transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n }\n function proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n }\n function toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n }\n function fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n }\n function requestResponseMessage(ep, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n ep.addEventListener(\"message\", function l(ev) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener(\"message\", l);\n resolve(ev.data);\n });\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n }\n function generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n }\n\n /**\n * MatrixRenderer class is meant to be used within a Web Worker context,\n * using Comlink to facilitate communication between the main thread and the worker.\n * The MatrixRenderer class manages a matrix of dies, once an instance of MatrixRenderer is created,\n * it is exposed to the main thread using Comlink's `expose` method.\n * This setup is used in the wafer-map component to perform heavy computational duties\n */\n class MatrixRenderer {\n constructor() {\n this.dieMatrix = Uint8Array.from([]);\n }\n emptyMatrix() {\n this.dieMatrix = Uint8Array.from([]);\n }\n updateMatrix(data) {\n this.dieMatrix = Uint8Array.from(data);\n }\n }\n expose(MatrixRenderer);\n\n exports.MatrixRenderer = MatrixRenderer;\n\n return exports;\n\n})({});\n";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// eslint-disable-next-line no-template-curly-in-string
|
|
2
|
+
export const workerCode = "var MatrixRenderer = (function (exports) {\n 'use strict';\n\n /**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n const proxyMarker = Symbol(\"Comlink.proxy\");\n const createEndpoint = Symbol(\"Comlink.endpoint\");\n const releaseProxy = Symbol(\"Comlink.releaseProxy\");\n const finalizer = Symbol(\"Comlink.finalizer\");\n const throwMarker = Symbol(\"Comlink.thrown\");\n const isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n /**\n * Internal transfer handle to handle objects marked to proxy.\n */\n const proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n };\n /**\n * Internal transfer handler to handle thrown exceptions.\n */\n const throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n };\n /**\n * Allows customizing the serialization of certain values.\n */\n const transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n ]);\n function isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n }\n function expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n }\n function isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n }\n function closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n }\n function wrap(ep, target) {\n return createProxy(ep, [], target);\n }\n function throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n }\n function releaseEndpoint(ep) {\n return requestResponseMessage(ep, {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n }\n const proxyCounter = new WeakMap();\n const proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\n function registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n }\n function unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n }\n function createProxy(ep, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n }\n function myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n }\n function processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n }\n const transferCache = new WeakMap();\n function transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n }\n function proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n }\n function toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n }\n function fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n }\n function requestResponseMessage(ep, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n ep.addEventListener(\"message\", function l(ev) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener(\"message\", l);\n resolve(ev.data);\n });\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n }\n function generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n }\n\n /**\n * MatrixRenderer class is meant to be used within a Web Worker context,\n * using Comlink to facilitate communication between the main thread and the worker.\n * The MatrixRenderer class manages a matrix of dies, once an instance of MatrixRenderer is created,\n * it is exposed to the main thread using Comlink's `expose` method.\n * This setup is used in the wafer-map component to perform heavy computational duties\n */\n class MatrixRenderer {\n constructor() {\n this.dieMatrix = Uint8Array.from([]);\n }\n emptyMatrix() {\n this.dieMatrix = Uint8Array.from([]);\n }\n updateMatrix(data) {\n this.dieMatrix = Uint8Array.from(data);\n }\n }\n expose(MatrixRenderer);\n\n exports.MatrixRenderer = MatrixRenderer;\n\n return exports;\n\n})({});\n";
|
|
3
|
+
//# sourceMappingURL=matrix-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/workers/matrix-renderer.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG,yhcAAyhc,CAAC","sourcesContent":["// eslint-disable-next-line no-template-curly-in-string\nexport const workerCode = \"var MatrixRenderer = (function (exports) {\\n 'use strict';\\n\\n /**\\n * @license\\n * Copyright 2019 Google LLC\\n * SPDX-License-Identifier: Apache-2.0\\n */\\n const proxyMarker = Symbol(\\\"Comlink.proxy\\\");\\n const createEndpoint = Symbol(\\\"Comlink.endpoint\\\");\\n const releaseProxy = Symbol(\\\"Comlink.releaseProxy\\\");\\n const finalizer = Symbol(\\\"Comlink.finalizer\\\");\\n const throwMarker = Symbol(\\\"Comlink.thrown\\\");\\n const isObject = (val) => (typeof val === \\\"object\\\" && val !== null) || typeof val === \\\"function\\\";\\n /**\\n * Internal transfer handle to handle objects marked to proxy.\\n */\\n const proxyTransferHandler = {\\n canHandle: (val) => isObject(val) && val[proxyMarker],\\n serialize(obj) {\\n const { port1, port2 } = new MessageChannel();\\n expose(obj, port1);\\n return [port2, [port2]];\\n },\\n deserialize(port) {\\n port.start();\\n return wrap(port);\\n },\\n };\\n /**\\n * Internal transfer handler to handle thrown exceptions.\\n */\\n const throwTransferHandler = {\\n canHandle: (value) => isObject(value) && throwMarker in value,\\n serialize({ value }) {\\n let serialized;\\n if (value instanceof Error) {\\n serialized = {\\n isError: true,\\n value: {\\n message: value.message,\\n name: value.name,\\n stack: value.stack,\\n },\\n };\\n }\\n else {\\n serialized = { isError: false, value };\\n }\\n return [serialized, []];\\n },\\n deserialize(serialized) {\\n if (serialized.isError) {\\n throw Object.assign(new Error(serialized.value.message), serialized.value);\\n }\\n throw serialized.value;\\n },\\n };\\n /**\\n * Allows customizing the serialization of certain values.\\n */\\n const transferHandlers = new Map([\\n [\\\"proxy\\\", proxyTransferHandler],\\n [\\\"throw\\\", throwTransferHandler],\\n ]);\\n function isAllowedOrigin(allowedOrigins, origin) {\\n for (const allowedOrigin of allowedOrigins) {\\n if (origin === allowedOrigin || allowedOrigin === \\\"*\\\") {\\n return true;\\n }\\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\\n return true;\\n }\\n }\\n return false;\\n }\\n function expose(obj, ep = globalThis, allowedOrigins = [\\\"*\\\"]) {\\n ep.addEventListener(\\\"message\\\", function callback(ev) {\\n if (!ev || !ev.data) {\\n return;\\n }\\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\\n return;\\n }\\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\\n let returnValue;\\n try {\\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\\n switch (type) {\\n case \\\"GET\\\" /* MessageType.GET */:\\n {\\n returnValue = rawValue;\\n }\\n break;\\n case \\\"SET\\\" /* MessageType.SET */:\\n {\\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\\n returnValue = true;\\n }\\n break;\\n case \\\"APPLY\\\" /* MessageType.APPLY */:\\n {\\n returnValue = rawValue.apply(parent, argumentList);\\n }\\n break;\\n case \\\"CONSTRUCT\\\" /* MessageType.CONSTRUCT */:\\n {\\n const value = new rawValue(...argumentList);\\n returnValue = proxy(value);\\n }\\n break;\\n case \\\"ENDPOINT\\\" /* MessageType.ENDPOINT */:\\n {\\n const { port1, port2 } = new MessageChannel();\\n expose(obj, port2);\\n returnValue = transfer(port1, [port1]);\\n }\\n break;\\n case \\\"RELEASE\\\" /* MessageType.RELEASE */:\\n {\\n returnValue = undefined;\\n }\\n break;\\n default:\\n return;\\n }\\n }\\n catch (value) {\\n returnValue = { value, [throwMarker]: 0 };\\n }\\n Promise.resolve(returnValue)\\n .catch((value) => {\\n return { value, [throwMarker]: 0 };\\n })\\n .then((returnValue) => {\\n const [wireValue, transferables] = toWireValue(returnValue);\\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\\n if (type === \\\"RELEASE\\\" /* MessageType.RELEASE */) {\\n // detach and deactive after sending release response above.\\n ep.removeEventListener(\\\"message\\\", callback);\\n closeEndPoint(ep);\\n if (finalizer in obj && typeof obj[finalizer] === \\\"function\\\") {\\n obj[finalizer]();\\n }\\n }\\n })\\n .catch((error) => {\\n // Send Serialization Error To Caller\\n const [wireValue, transferables] = toWireValue({\\n value: new TypeError(\\\"Unserializable return value\\\"),\\n [throwMarker]: 0,\\n });\\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\\n });\\n });\\n if (ep.start) {\\n ep.start();\\n }\\n }\\n function isMessagePort(endpoint) {\\n return endpoint.constructor.name === \\\"MessagePort\\\";\\n }\\n function closeEndPoint(endpoint) {\\n if (isMessagePort(endpoint))\\n endpoint.close();\\n }\\n function wrap(ep, target) {\\n return createProxy(ep, [], target);\\n }\\n function throwIfProxyReleased(isReleased) {\\n if (isReleased) {\\n throw new Error(\\\"Proxy has been released and is not useable\\\");\\n }\\n }\\n function releaseEndpoint(ep) {\\n return requestResponseMessage(ep, {\\n type: \\\"RELEASE\\\" /* MessageType.RELEASE */,\\n }).then(() => {\\n closeEndPoint(ep);\\n });\\n }\\n const proxyCounter = new WeakMap();\\n const proxyFinalizers = \\\"FinalizationRegistry\\\" in globalThis &&\\n new FinalizationRegistry((ep) => {\\n const newCount = (proxyCounter.get(ep) || 0) - 1;\\n proxyCounter.set(ep, newCount);\\n if (newCount === 0) {\\n releaseEndpoint(ep);\\n }\\n });\\n function registerProxy(proxy, ep) {\\n const newCount = (proxyCounter.get(ep) || 0) + 1;\\n proxyCounter.set(ep, newCount);\\n if (proxyFinalizers) {\\n proxyFinalizers.register(proxy, ep, proxy);\\n }\\n }\\n function unregisterProxy(proxy) {\\n if (proxyFinalizers) {\\n proxyFinalizers.unregister(proxy);\\n }\\n }\\n function createProxy(ep, path = [], target = function () { }) {\\n let isProxyReleased = false;\\n const proxy = new Proxy(target, {\\n get(_target, prop) {\\n throwIfProxyReleased(isProxyReleased);\\n if (prop === releaseProxy) {\\n return () => {\\n unregisterProxy(proxy);\\n releaseEndpoint(ep);\\n isProxyReleased = true;\\n };\\n }\\n if (prop === \\\"then\\\") {\\n if (path.length === 0) {\\n return { then: () => proxy };\\n }\\n const r = requestResponseMessage(ep, {\\n type: \\\"GET\\\" /* MessageType.GET */,\\n path: path.map((p) => p.toString()),\\n }).then(fromWireValue);\\n return r.then.bind(r);\\n }\\n return createProxy(ep, [...path, prop]);\\n },\\n set(_target, prop, rawValue) {\\n throwIfProxyReleased(isProxyReleased);\\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\\n // boolean. To show good will, we return true asynchronously ¯\\\\_(ツ)_/¯\\n const [value, transferables] = toWireValue(rawValue);\\n return requestResponseMessage(ep, {\\n type: \\\"SET\\\" /* MessageType.SET */,\\n path: [...path, prop].map((p) => p.toString()),\\n value,\\n }, transferables).then(fromWireValue);\\n },\\n apply(_target, _thisArg, rawArgumentList) {\\n throwIfProxyReleased(isProxyReleased);\\n const last = path[path.length - 1];\\n if (last === createEndpoint) {\\n return requestResponseMessage(ep, {\\n type: \\\"ENDPOINT\\\" /* MessageType.ENDPOINT */,\\n }).then(fromWireValue);\\n }\\n // We just pretend that `bind()` didn’t happen.\\n if (last === \\\"bind\\\") {\\n return createProxy(ep, path.slice(0, -1));\\n }\\n const [argumentList, transferables] = processArguments(rawArgumentList);\\n return requestResponseMessage(ep, {\\n type: \\\"APPLY\\\" /* MessageType.APPLY */,\\n path: path.map((p) => p.toString()),\\n argumentList,\\n }, transferables).then(fromWireValue);\\n },\\n construct(_target, rawArgumentList) {\\n throwIfProxyReleased(isProxyReleased);\\n const [argumentList, transferables] = processArguments(rawArgumentList);\\n return requestResponseMessage(ep, {\\n type: \\\"CONSTRUCT\\\" /* MessageType.CONSTRUCT */,\\n path: path.map((p) => p.toString()),\\n argumentList,\\n }, transferables).then(fromWireValue);\\n },\\n });\\n registerProxy(proxy, ep);\\n return proxy;\\n }\\n function myFlat(arr) {\\n return Array.prototype.concat.apply([], arr);\\n }\\n function processArguments(argumentList) {\\n const processed = argumentList.map(toWireValue);\\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\\n }\\n const transferCache = new WeakMap();\\n function transfer(obj, transfers) {\\n transferCache.set(obj, transfers);\\n return obj;\\n }\\n function proxy(obj) {\\n return Object.assign(obj, { [proxyMarker]: true });\\n }\\n function toWireValue(value) {\\n for (const [name, handler] of transferHandlers) {\\n if (handler.canHandle(value)) {\\n const [serializedValue, transferables] = handler.serialize(value);\\n return [\\n {\\n type: \\\"HANDLER\\\" /* WireValueType.HANDLER */,\\n name,\\n value: serializedValue,\\n },\\n transferables,\\n ];\\n }\\n }\\n return [\\n {\\n type: \\\"RAW\\\" /* WireValueType.RAW */,\\n value,\\n },\\n transferCache.get(value) || [],\\n ];\\n }\\n function fromWireValue(value) {\\n switch (value.type) {\\n case \\\"HANDLER\\\" /* WireValueType.HANDLER */:\\n return transferHandlers.get(value.name).deserialize(value.value);\\n case \\\"RAW\\\" /* WireValueType.RAW */:\\n return value.value;\\n }\\n }\\n function requestResponseMessage(ep, msg, transfers) {\\n return new Promise((resolve) => {\\n const id = generateUUID();\\n ep.addEventListener(\\\"message\\\", function l(ev) {\\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\\n return;\\n }\\n ep.removeEventListener(\\\"message\\\", l);\\n resolve(ev.data);\\n });\\n if (ep.start) {\\n ep.start();\\n }\\n ep.postMessage(Object.assign({ id }, msg), transfers);\\n });\\n }\\n function generateUUID() {\\n return new Array(4)\\n .fill(0)\\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\\n .join(\\\"-\\\");\\n }\\n\\n /**\\n * MatrixRenderer class is meant to be used within a Web Worker context,\\n * using Comlink to facilitate communication between the main thread and the worker.\\n * The MatrixRenderer class manages a matrix of dies, once an instance of MatrixRenderer is created,\\n * it is exposed to the main thread using Comlink's `expose` method.\\n * This setup is used in the wafer-map component to perform heavy computational duties\\n */\\n class MatrixRenderer {\\n constructor() {\\n this.dieMatrix = Uint8Array.from([]);\\n }\\n emptyMatrix() {\\n this.dieMatrix = Uint8Array.from([]);\\n }\\n updateMatrix(data) {\\n this.dieMatrix = Uint8Array.from(data);\\n }\\n }\\n expose(MatrixRenderer);\\n\\n exports.MatrixRenderer = MatrixRenderer;\\n\\n return exports;\\n\\n})({});\\n\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni/nimble-components",
|
|
3
|
-
"version": "21.
|
|
3
|
+
"version": "21.8.0",
|
|
4
4
|
"description": "Styled web components for the NI Nimble Design System",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"build": "npm run generate-icons && npm run build-components && npm run bundle-components && npm run generate-scss && npm run build-storybook",
|
|
6
|
+
"build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run bundle-components && npm run generate-scss && npm run build-storybook",
|
|
7
7
|
"lint": "npm run eslint && npm run prettier",
|
|
8
8
|
"format": "npm run eslint-fix && npm run prettier-fix",
|
|
9
9
|
"eslint": "eslint .",
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
"generate-scss": "npm run generate-scss:bundle && npm run generate-scss:run",
|
|
25
25
|
"generate-scss:bundle": "rollup --bundleConfigAsCjs --config build/generate-scss/rollup.config.js",
|
|
26
26
|
"generate-scss:run": "node build/generate-scss/dist/index.js",
|
|
27
|
+
"generate-workers": "npm run generate-workers:build && npm run generate-workers:bundle && npm run generate-workers:run",
|
|
28
|
+
"generate-workers:build": "tsc -p build/generate-workers/tsconfig.json",
|
|
29
|
+
"generate-workers:bundle": "rollup --bundleConfigAsCjs --config build/generate-workers/rollup.config.js",
|
|
30
|
+
"generate-workers:run": "node build/generate-workers/dist/esm/index.js",
|
|
27
31
|
"tdd": "npm run build-components && npm run test-chrome",
|
|
28
32
|
"tdd:watch": "npm run build-components:watch & npm run test-chrome:watch",
|
|
29
33
|
"tdd-firefox": "npm run build-components && npm run test-firefox",
|
|
@@ -87,6 +91,7 @@
|
|
|
87
91
|
"@types/d3-selection": "^3.0.0",
|
|
88
92
|
"@types/d3-zoom": "^3.0.0",
|
|
89
93
|
"@types/markdown-it": "^13.0.0",
|
|
94
|
+
"comlink": "4.4.1",
|
|
90
95
|
"d3-array": "^3.2.2",
|
|
91
96
|
"d3-random": "^3.0.1",
|
|
92
97
|
"d3-scale": "^4.0.2",
|