@ni/nimble-components 21.10.0 → 21.10.1
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 +27 -27
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +5 -5
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/anchor/types.d.ts +1 -1
- package/dist/esm/anchor-tab/index.d.ts +1 -1
- package/dist/esm/anchor-tabs/index.d.ts +1 -1
- package/dist/esm/banner/types.d.ts +1 -1
- package/dist/esm/breadcrumb/types.d.ts +1 -1
- package/dist/esm/button/types.d.ts +1 -1
- package/dist/esm/drawer/types.d.ts +1 -1
- package/dist/esm/icon-base/index.d.ts +1 -1
- package/dist/esm/icon-base/types.d.ts +1 -1
- package/dist/esm/label-provider/base/index.d.ts +1 -1
- package/dist/esm/label-provider/core/label-token-defaults.d.ts +1 -1
- package/dist/esm/label-provider/rich-text/label-token-defaults.d.ts +1 -1
- package/dist/esm/label-provider/table/label-token-defaults.d.ts +1 -1
- package/dist/esm/mapping/base/types.d.ts +2 -2
- package/dist/esm/menu-button/types.d.ts +1 -1
- package/dist/esm/number-field/types.d.ts +1 -1
- package/dist/esm/patterns/button/types.d.ts +2 -2
- package/dist/esm/patterns/dialog/types.d.ts +1 -1
- package/dist/esm/patterns/dropdown/types.d.ts +2 -2
- package/dist/esm/rich-text/editor/testing/types.d.ts +4 -4
- package/dist/esm/rich-text/editor/types.d.ts +3 -3
- package/dist/esm/rich-text-mention/base/models/mention-validator.d.ts +1 -1
- package/dist/esm/rich-text-mention/base/types.d.ts +2 -2
- package/dist/esm/select/index.d.ts +1 -1
- package/dist/esm/select/types.d.ts +1 -1
- package/dist/esm/spinner/types.d.ts +1 -1
- package/dist/esm/table/index.js +10 -10
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/array-to-tree.d.ts +1 -1
- package/dist/esm/table/types.d.ts +12 -12
- package/dist/esm/table-column/anchor/index.d.ts +1 -1
- package/dist/esm/table-column/base/types.d.ts +1 -1
- package/dist/esm/table-column/date-text/index.d.ts +1 -1
- package/dist/esm/table-column/date-text/types.d.ts +16 -16
- package/dist/esm/table-column/duration-text/index.d.ts +1 -1
- package/dist/esm/table-column/enum-base/index.d.ts +2 -2
- package/dist/esm/table-column/enum-base/types.d.ts +1 -1
- package/dist/esm/table-column/mixins/fractional-width-column.d.ts +2 -2
- package/dist/esm/table-column/mixins/groupable-column.d.ts +2 -2
- package/dist/esm/table-column/number-text/index.d.ts +1 -1
- package/dist/esm/table-column/number-text/models/number-text-unit-format.d.ts +1 -1
- package/dist/esm/table-column/number-text/types.d.ts +2 -2
- package/dist/esm/table-column/text/index.d.ts +1 -1
- package/dist/esm/table-column/text-base/cell-view/types.d.ts +1 -1
- package/dist/esm/text-area/types.d.ts +1 -1
- package/dist/esm/text-field/types.d.ts +1 -1
- package/dist/esm/theme-provider/design-token-comments.d.ts +1 -1
- package/dist/esm/theme-provider/design-token-names.d.ts +2 -2
- package/dist/esm/theme-provider/types.d.ts +1 -1
- package/dist/esm/tooltip/types.d.ts +1 -1
- package/dist/esm/tree-view/types.d.ts +1 -1
- package/dist/esm/utilities/models/tracker.d.ts +1 -1
- package/dist/esm/utilities/style/types.d.ts +1 -1
- package/dist/esm/utilities/unit-format/decimal-unit-format.d.ts +1 -1
- package/dist/esm/utilities/unit-format/default-unit-format.d.ts +1 -1
- package/dist/esm/utilities/unit-format/scaled-unit/scaled-unit.d.ts +1 -1
- package/dist/esm/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.d.ts +1 -1
- package/dist/esm/wafer-map/modules/computations.js +5 -5
- package/dist/esm/wafer-map/modules/computations.js.map +1 -1
- package/dist/esm/wafer-map/modules/data-manager.js +5 -5
- package/dist/esm/wafer-map/modules/data-manager.js.map +1 -1
- package/dist/esm/wafer-map/modules/prerendering.js +6 -6
- package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
- package/dist/esm/wafer-map/types.d.ts +4 -4
- package/package.json +5 -5
|
@@ -4,27 +4,27 @@ import type { ValidityObject } from '../utilities/models/validator';
|
|
|
4
4
|
* TableFieldName describes the type associated with keys within
|
|
5
5
|
* a table's records.
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
7
|
+
export type TableFieldName = string;
|
|
8
8
|
/**
|
|
9
9
|
* TableFieldValue describes the type associated with values within
|
|
10
10
|
* a table's records.
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export type TableFieldValue = string | number | boolean | null | undefined;
|
|
13
13
|
/**
|
|
14
14
|
* TableStringFieldValue describes the type associated with values within
|
|
15
15
|
* a table's string records.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export type TableStringFieldValue = string | null | undefined;
|
|
18
18
|
/**
|
|
19
19
|
* TableBooleanFieldValue describes the type associated with values within
|
|
20
20
|
* a table's boolean records.
|
|
21
21
|
*/
|
|
22
|
-
export
|
|
22
|
+
export type TableBooleanFieldValue = boolean | null | undefined;
|
|
23
23
|
/**
|
|
24
24
|
* TableNumberFieldValue describes the type associated with values within
|
|
25
25
|
* a table's number records.
|
|
26
26
|
*/
|
|
27
|
-
export
|
|
27
|
+
export type TableNumberFieldValue = number | null | undefined;
|
|
28
28
|
/**
|
|
29
29
|
* TableRecord describes the data structure that backs a single row in a table.
|
|
30
30
|
* It is made up of fields, which are key/value pairs that have a key of type
|
|
@@ -45,13 +45,13 @@ export interface TableNode<TRecord extends TableRecord = TableRecord> {
|
|
|
45
45
|
originalIndex: number;
|
|
46
46
|
clientRecord: TRecord;
|
|
47
47
|
}
|
|
48
|
-
export
|
|
48
|
+
export type TableStringField<FieldName extends TableFieldName> = {
|
|
49
49
|
[name in FieldName]: TableStringFieldValue;
|
|
50
50
|
};
|
|
51
|
-
export
|
|
51
|
+
export type TableBooleanField<FieldName extends TableFieldName> = {
|
|
52
52
|
[name in FieldName]: TableBooleanFieldValue;
|
|
53
53
|
};
|
|
54
|
-
export
|
|
54
|
+
export type TableNumberField<FieldName extends TableFieldName> = {
|
|
55
55
|
[name in FieldName]: TableNumberFieldValue;
|
|
56
56
|
};
|
|
57
57
|
export interface TableValidity extends ValidityObject {
|
|
@@ -84,7 +84,7 @@ export declare const TableRecordDelayedHierarchyState: {
|
|
|
84
84
|
readonly canLoadChildren: "can-load-children";
|
|
85
85
|
readonly loadingChildren: "loading-children";
|
|
86
86
|
};
|
|
87
|
-
export
|
|
87
|
+
export type TableRecordDelayedHierarchyState = (typeof TableRecordDelayedHierarchyState)[keyof typeof TableRecordDelayedHierarchyState];
|
|
88
88
|
export interface TableActionMenuToggleEventDetail {
|
|
89
89
|
newState: boolean;
|
|
90
90
|
oldState: boolean;
|
|
@@ -99,7 +99,7 @@ export declare const TableColumnSortDirection: {
|
|
|
99
99
|
readonly ascending: "ascending";
|
|
100
100
|
readonly descending: "descending";
|
|
101
101
|
};
|
|
102
|
-
export
|
|
102
|
+
export type TableColumnSortDirection = (typeof TableColumnSortDirection)[keyof typeof TableColumnSortDirection];
|
|
103
103
|
/**
|
|
104
104
|
* The selection modes of rows in the table.
|
|
105
105
|
*/
|
|
@@ -108,7 +108,7 @@ export declare const TableRowSelectionMode: {
|
|
|
108
108
|
readonly single: "single";
|
|
109
109
|
readonly multiple: "multiple";
|
|
110
110
|
};
|
|
111
|
-
export
|
|
111
|
+
export type TableRowSelectionMode = (typeof TableRowSelectionMode)[keyof typeof TableRowSelectionMode];
|
|
112
112
|
/**
|
|
113
113
|
* @internal
|
|
114
114
|
*
|
|
@@ -119,7 +119,7 @@ export declare const TableRowSelectionState: {
|
|
|
119
119
|
readonly selected: "selected";
|
|
120
120
|
readonly partiallySelected: "partially-selected";
|
|
121
121
|
};
|
|
122
|
-
export
|
|
122
|
+
export type TableRowSelectionState = (typeof TableRowSelectionState)[keyof typeof TableRowSelectionState];
|
|
123
123
|
/**
|
|
124
124
|
* @internal
|
|
125
125
|
*
|
|
@@ -2,7 +2,7 @@ import { TableColumn } from '../base';
|
|
|
2
2
|
import type { TableStringField } from '../../table/types';
|
|
3
3
|
import type { AnchorAppearance } from '../../anchor/types';
|
|
4
4
|
import type { ColumnInternalsOptions } from '../base/models/column-internals';
|
|
5
|
-
export
|
|
5
|
+
export type TableColumnAnchorCellRecord = TableStringField<'label' | 'href'>;
|
|
6
6
|
export interface TableColumnAnchorColumnConfig {
|
|
7
7
|
appearance: AnchorAppearance;
|
|
8
8
|
underlineHidden?: boolean;
|
|
@@ -31,7 +31,7 @@ export declare const TableColumnSortOperation: {
|
|
|
31
31
|
*/
|
|
32
32
|
readonly localeAwareCaseSensitive: "localeAwareCaseSensitive";
|
|
33
33
|
};
|
|
34
|
-
export
|
|
34
|
+
export type TableColumnSortOperation = (typeof TableColumnSortOperation)[keyof typeof TableColumnSortOperation];
|
|
35
35
|
export interface TableColumnValidity extends ValidityObject {
|
|
36
36
|
}
|
|
37
37
|
export declare const defaultMinPixelWidth: number;
|
|
@@ -4,7 +4,7 @@ import { TableColumnValidity } from '../base/types';
|
|
|
4
4
|
import type { ColumnInternalsOptions } from '../base/models/column-internals';
|
|
5
5
|
import { DateTextFormat, LocaleMatcherAlgorithm, EraFormat, YearFormat, DayFormat, HourFormat, MinuteFormat, SecondFormat, TimeZoneNameFormat, FormatMatcherAlgorithm, DayPeriodFormat, DateStyle, TimeStyle, HourCycleFormat, MonthFormat, WeekdayFormat } from './types';
|
|
6
6
|
import { TableColumnDateTextValidator } from './models/table-column-date-text-validator';
|
|
7
|
-
export
|
|
7
|
+
export type TableColumnDateTextCellRecord = TableNumberField<'value'>;
|
|
8
8
|
export interface TableColumnDateTextColumnConfig {
|
|
9
9
|
formatter: Intl.DateTimeFormat;
|
|
10
10
|
}
|
|
@@ -5,19 +5,19 @@ export declare const DateTextFormat: {
|
|
|
5
5
|
readonly default: undefined;
|
|
6
6
|
readonly custom: "custom";
|
|
7
7
|
};
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
export
|
|
19
|
-
export
|
|
20
|
-
export
|
|
21
|
-
export
|
|
22
|
-
export
|
|
23
|
-
export
|
|
8
|
+
export type DateTextFormat = (typeof DateTextFormat)[keyof typeof DateTextFormat];
|
|
9
|
+
export type LocaleMatcherAlgorithm = Intl.DateTimeFormatOptions['localeMatcher'];
|
|
10
|
+
export type WeekdayFormat = Intl.DateTimeFormatOptions['weekday'];
|
|
11
|
+
export type EraFormat = Intl.DateTimeFormatOptions['era'];
|
|
12
|
+
export type YearFormat = Intl.DateTimeFormatOptions['year'];
|
|
13
|
+
export type MonthFormat = Intl.DateTimeFormatOptions['month'];
|
|
14
|
+
export type DayFormat = Intl.DateTimeFormatOptions['day'];
|
|
15
|
+
export type HourFormat = Intl.DateTimeFormatOptions['hour'];
|
|
16
|
+
export type MinuteFormat = Intl.DateTimeFormatOptions['minute'];
|
|
17
|
+
export type SecondFormat = Intl.DateTimeFormatOptions['second'];
|
|
18
|
+
export type TimeZoneNameFormat = Intl.DateTimeFormatOptions['timeZoneName'];
|
|
19
|
+
export type FormatMatcherAlgorithm = Intl.DateTimeFormatOptions['formatMatcher'];
|
|
20
|
+
export type DayPeriodFormat = Intl.DateTimeFormatOptions['dayPeriod'];
|
|
21
|
+
export type DateStyle = Intl.DateTimeFormatOptions['dateStyle'];
|
|
22
|
+
export type TimeStyle = Intl.DateTimeFormatOptions['timeStyle'];
|
|
23
|
+
export type HourCycleFormat = Intl.DateTimeFormatOptions['hourCycle'];
|
|
@@ -2,7 +2,7 @@ import type { TableNumberField } from '../../table/types';
|
|
|
2
2
|
import { TableColumnTextBase } from '../text-base';
|
|
3
3
|
import type { ColumnInternalsOptions } from '../base/models/column-internals';
|
|
4
4
|
import { DurationFormatter } from './models/duration-formatter';
|
|
5
|
-
export
|
|
5
|
+
export type TableColumnDurationTextCellRecord = TableNumberField<'value'>;
|
|
6
6
|
export interface TableColumnDurationTextColumnConfig {
|
|
7
7
|
formatter: DurationFormatter;
|
|
8
8
|
}
|
|
@@ -6,8 +6,8 @@ import type { MappingKeyType } from './types';
|
|
|
6
6
|
import type { MappingConfig } from './models/mapping-config';
|
|
7
7
|
import type { MappingKey } from '../../mapping/base/types';
|
|
8
8
|
import type { TableColumnEnumBaseValidator } from './models/table-column-enum-base-validator';
|
|
9
|
-
export
|
|
10
|
-
export
|
|
9
|
+
export type TableColumnEnumCellRecord = TableStringField<'value'> | TableBooleanField<'value'> | TableNumberField<'value'>;
|
|
10
|
+
export type MappingConfigs = Map<MappingKey, MappingConfig>;
|
|
11
11
|
export interface TableColumnEnumColumnConfig {
|
|
12
12
|
mappingConfigs: MappingConfigs;
|
|
13
13
|
}
|
|
@@ -7,4 +7,4 @@ export declare const MappingKeyType: {
|
|
|
7
7
|
readonly number: "number";
|
|
8
8
|
readonly boolean: "boolean";
|
|
9
9
|
};
|
|
10
|
-
export
|
|
10
|
+
export type MappingKeyType = (typeof MappingKeyType)[keyof typeof MappingKeyType];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TableColumn } from '../base';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
type SizedTableColumn = Pick<TableColumn, 'columnInternals'>;
|
|
3
|
+
type SizedTableColumnConstructor = abstract new (...args: any[]) => SizedTableColumn;
|
|
4
4
|
export declare function mixinFractionalWidthColumnAPI<TBase extends SizedTableColumnConstructor>(base: TBase): (abstract new (...args: any[]) => {
|
|
5
5
|
fractionalWidth?: number | null | undefined;
|
|
6
6
|
minPixelWidth?: number | null | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TableColumn } from '../base';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
type GroupableTableColumn = Pick<TableColumn, 'columnInternals'>;
|
|
3
|
+
type GroupableTableColumnConstructor = abstract new (...args: any[]) => GroupableTableColumn;
|
|
4
4
|
export declare function mixinGroupableColumnAPI<TBase extends GroupableTableColumnConstructor>(base: TBase): (abstract new (...args: any[]) => {
|
|
5
5
|
groupingDisabled: boolean;
|
|
6
6
|
groupIndex?: number | null | undefined;
|
|
@@ -6,7 +6,7 @@ import { NumberTextAlignment, NumberTextFormat } from './types';
|
|
|
6
6
|
import type { UnitFormat } from '../../utilities/unit-format/unit-format';
|
|
7
7
|
import { TableColumnNumberTextValidator } from './models/table-column-number-text-validator';
|
|
8
8
|
import { TextCellViewBaseAlignment } from '../text-base/cell-view/types';
|
|
9
|
-
export
|
|
9
|
+
export type TableColumnNumberTextCellRecord = TableNumberField<'value'>;
|
|
10
10
|
export interface TableColumnNumberTextColumnConfig {
|
|
11
11
|
formatter: UnitFormat;
|
|
12
12
|
alignment: TextCellViewBaseAlignment;
|
|
@@ -5,7 +5,7 @@ export interface NumberTextUnitFormatOptions extends UnitFormatOptions {
|
|
|
5
5
|
decimalDigits?: number;
|
|
6
6
|
decimalMaximumDigits?: number;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
type ResolvedNumberTextUnitFormatOptions = NumberTextUnitFormatOptions & Required<UnitFormatOptions>;
|
|
9
9
|
/**
|
|
10
10
|
* Format for numbers (with optional units) in a number-text table column.
|
|
11
11
|
*/
|
|
@@ -5,7 +5,7 @@ export declare const NumberTextFormat: {
|
|
|
5
5
|
readonly default: undefined;
|
|
6
6
|
readonly decimal: "decimal";
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export type NumberTextFormat = (typeof NumberTextFormat)[keyof typeof NumberTextFormat];
|
|
9
9
|
/**
|
|
10
10
|
* The aligment of the value in the number-text table column.
|
|
11
11
|
* The `default` alignment is determined by the column's `NumberTextFormat`.
|
|
@@ -15,4 +15,4 @@ export declare const NumberTextAlignment: {
|
|
|
15
15
|
readonly left: "left";
|
|
16
16
|
readonly right: "right";
|
|
17
17
|
};
|
|
18
|
-
export
|
|
18
|
+
export type NumberTextAlignment = (typeof NumberTextAlignment)[keyof typeof NumberTextAlignment];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TableStringField } from '../../table/types';
|
|
2
2
|
import { TableColumnTextBase } from '../text-base';
|
|
3
3
|
import type { ColumnInternalsOptions } from '../base/models/column-internals';
|
|
4
|
-
export
|
|
4
|
+
export type TableColumnTextCellRecord = TableStringField<'value'>;
|
|
5
5
|
export interface TableColumnTextColumnConfig {
|
|
6
6
|
}
|
|
7
7
|
declare global {
|
|
@@ -5,4 +5,4 @@ export declare const TextCellViewBaseAlignment: {
|
|
|
5
5
|
readonly left: "left";
|
|
6
6
|
readonly right: "right";
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export type TextCellViewBaseAlignment = (typeof TextCellViewBaseAlignment)[keyof typeof TextCellViewBaseAlignment];
|
|
@@ -4,4 +4,4 @@ export declare const TextAreaAppearance: {
|
|
|
4
4
|
readonly outline: "outline";
|
|
5
5
|
readonly block: "block";
|
|
6
6
|
};
|
|
7
|
-
export
|
|
7
|
+
export type TextAreaAppearance = (typeof TextAreaAppearance)[keyof typeof TextAreaAppearance];
|
|
@@ -12,4 +12,4 @@ export declare const TextFieldAppearance: {
|
|
|
12
12
|
readonly block: "block";
|
|
13
13
|
readonly frameless: "frameless";
|
|
14
14
|
};
|
|
15
|
-
export
|
|
15
|
+
export type TextFieldAppearance = (typeof TextFieldAppearance)[keyof typeof TextFieldAppearance];
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* See: https://github.com/ni/nimble/blob/main/packages/nimble-components/CONTRIBUTING.md#token-naming
|
|
4
4
|
*/
|
|
5
5
|
import type * as TokensNamespace from './design-tokens';
|
|
6
|
-
|
|
6
|
+
type TokenName = keyof typeof TokensNamespace;
|
|
7
7
|
export declare const tokenNames: {
|
|
8
8
|
readonly [key in TokenName]: string;
|
|
9
9
|
};
|
|
@@ -14,6 +14,6 @@ export declare const scssPropertySetterMarkdown: (tokenName: string, cssProperty
|
|
|
14
14
|
export declare const scssInternalPropertyFromTokenName: (tokenName: string) => string;
|
|
15
15
|
export declare const scssInternalPropertySetterMarkdown: (tokenName: string, property: string) => string;
|
|
16
16
|
declare const tokenSuffixes: readonly ["RgbPartialColor", "FontColor", "FontLineHeight", "FontWeight", "FontSize", "TextTransform", "FontFamily", "BoxShadow", "MaxHeight", "MinWidth", "Font", "Size", "Width", "Height", "Delay", "Padding", "Color"];
|
|
17
|
-
export
|
|
17
|
+
export type TokenSuffix = (typeof tokenSuffixes)[number];
|
|
18
18
|
export declare const suffixFromTokenName: (tokenName: string) => TokenSuffix | undefined;
|
|
19
19
|
export {};
|
|
@@ -7,4 +7,4 @@ export declare const TooltipSeverity: {
|
|
|
7
7
|
readonly error: "error";
|
|
8
8
|
readonly information: "information";
|
|
9
9
|
};
|
|
10
|
-
export
|
|
10
|
+
export type TooltipSeverity = (typeof TooltipSeverity)[keyof typeof TooltipSeverity];
|
|
@@ -5,4 +5,4 @@ export declare const TreeViewSelectionMode: {
|
|
|
5
5
|
readonly leavesOnly: "leaves-only";
|
|
6
6
|
readonly none: "none";
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export type TreeViewSelectionMode = (typeof TreeViewSelectionMode)[keyof typeof TreeViewSelectionMode];
|
|
@@ -3,7 +3,7 @@ interface DecimalUnitFormatOptions extends UnitFormatOptions {
|
|
|
3
3
|
minimumFractionDigits?: number;
|
|
4
4
|
maximumFractionDigits?: number;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
type ResolvedDecimalUnitFormatOptions = Required<DecimalUnitFormatOptions>;
|
|
7
7
|
/**
|
|
8
8
|
* Format for decimal numbers with units.
|
|
9
9
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { UnitFormat, UnitFormatOptions } from './unit-format';
|
|
2
2
|
interface DefaultUnitFormatOptions extends UnitFormatOptions {
|
|
3
3
|
}
|
|
4
|
-
|
|
4
|
+
type ResolvedDefaultUnitFormatOptions = Required<DefaultUnitFormatOptions>;
|
|
5
5
|
/**
|
|
6
6
|
* Format for numbers with units to show in a tabular form.
|
|
7
7
|
* Large and tiny numbers are shown exponentially and the rest as decimal.
|
|
@@ -3,7 +3,7 @@ export interface ScaledUnitFormatFactoryOptions {
|
|
|
3
3
|
readonly locale: string;
|
|
4
4
|
readonly intlNumberFormatOptions?: Intl.NumberFormatOptions;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
type ScaledUnitFormatFactory = (scaledUnitFormatFactoryOptions: ScaledUnitFormatFactoryOptions) => ScaledUnitFormat;
|
|
7
7
|
/**
|
|
8
8
|
* A unit that represents a scaled version of a base unit.
|
|
9
9
|
*/
|
|
@@ -12,7 +12,7 @@ export declare class UnitTranslation {
|
|
|
12
12
|
/**
|
|
13
13
|
* A map of locales of string format "[lang]" or "[lang]-[region]", for example "en" and / or "en-us", to UnitTranslation objects
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
15
|
+
export type UnitTranslations = ReadonlyMap<string, UnitTranslation>;
|
|
16
16
|
export interface ManuallyTranslatedScaledUnitFormatOptions {
|
|
17
17
|
/**
|
|
18
18
|
* Translations for the unit by locale string.
|
|
@@ -5,11 +5,6 @@ import { WaferMapOriginLocation } from '../types';
|
|
|
5
5
|
* Computations calculates and stores different measures which are used in the Wafermap
|
|
6
6
|
*/
|
|
7
7
|
export class Computations {
|
|
8
|
-
constructor(wafermap) {
|
|
9
|
-
this.wafermap = wafermap;
|
|
10
|
-
this.defaultPadding = 0;
|
|
11
|
-
this.baseMarginPercentage = 0.04;
|
|
12
|
-
}
|
|
13
8
|
get containerDimensions() {
|
|
14
9
|
return this._containerDimensions;
|
|
15
10
|
}
|
|
@@ -34,6 +29,11 @@ export class Computations {
|
|
|
34
29
|
get invertedVerticalScale() {
|
|
35
30
|
return this._invertedVerticalScale;
|
|
36
31
|
}
|
|
32
|
+
constructor(wafermap) {
|
|
33
|
+
this.wafermap = wafermap;
|
|
34
|
+
this.defaultPadding = 0;
|
|
35
|
+
this.baseMarginPercentage = 0.04;
|
|
36
|
+
}
|
|
37
37
|
updateContainerDimensions() {
|
|
38
38
|
const canvasDimensions = {
|
|
39
39
|
width: this.wafermap.canvasWidth,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { range } from 'd3-array';\nimport { ScaleBand, scaleBand, scaleQuantile, ScaleQuantile } from 'd3-scale';\nimport type { WaferMap } from '..';\nimport type { WaferMapDie } from '../types';\nimport { Dimensions, Margin, WaferMapOriginLocation } from '../types';\n\ninterface GridDimensions {\n origin: {\n x: number,\n y: number\n };\n rows: number;\n cols: number;\n}\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get containerDimensions(): Dimensions {\n return this._containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this._dieDimensions;\n }\n\n public get radius(): number {\n return this._radius;\n }\n\n public get margin(): Margin {\n return this._margin;\n }\n\n public get horizontalScale(): ScaleBand<number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleBand<number> {\n return this._verticalScale;\n }\n\n public get invertedHorizontalScale(): ScaleQuantile<number, number> {\n return this._invertedHorizontalScale;\n }\n\n public get invertedVerticalScale(): ScaleQuantile<number, number> {\n return this._invertedVerticalScale;\n }\n\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _radius!: number;\n private _margin!: Margin;\n private _horizontalScale!: ScaleBand<number>;\n private _verticalScale!: ScaleBand<number>;\n private _invertedHorizontalScale!: ScaleQuantile<number, number>;\n private _invertedVerticalScale!: ScaleQuantile<number, number>;\n private readonly defaultPadding = 0;\n private readonly baseMarginPercentage = 0.04;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateContainerDimensions(): void {\n const canvasDimensions = {\n width: this.wafermap.canvasWidth,\n height: this.wafermap.canvasHeight\n };\n const canvasDiameter = Math.min(\n canvasDimensions.width,\n canvasDimensions.height\n );\n const canvasMargin = {\n top: (canvasDimensions.height - canvasDiameter) / 2,\n right: (canvasDimensions.width - canvasDiameter) / 2,\n bottom: (canvasDimensions.height - canvasDiameter) / 2,\n left: (canvasDimensions.width - canvasDiameter) / 2\n };\n const baseMargin = {\n top: canvasDiameter * this.baseMarginPercentage,\n right: canvasDiameter * this.baseMarginPercentage,\n bottom: canvasDiameter * this.baseMarginPercentage,\n left: canvasDiameter * this.baseMarginPercentage\n };\n this._margin = this.calculateMarginAddition(baseMargin, canvasMargin);\n this._containerDimensions = this.calculateContainerDimensions(\n canvasDimensions,\n this._margin\n );\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n this._radius = containerDiameter / 2;\n this.updateScales();\n }\n\n public updateScales(): void {\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n const gridDimensions = this.gridDimensionsValidAndDefined()\n ? this.calculateGridDimensionsFromBoundingBox()\n : this.calculateGridDimensionsFromDies(this.wafermap.dies);\n // this scale is used for positioning the dies on the canvas\n const originLocation = this.wafermap.originLocation;\n this._horizontalScale = this.createHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedHorizontalScale = this.createInvertedHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedVerticalScale = this.createInvertedVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._dieDimensions = {\n width: this.horizontalScale.bandwidth(),\n height: this.verticalScale.bandwidth()\n };\n }\n\n private gridDimensionsValidAndDefined(): boolean {\n return (\n !this.wafermap.validity.invalidGridDimensions\n && typeof this.wafermap.gridMinX === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n );\n }\n\n private calculateGridDimensionsFromBoundingBox(): GridDimensions {\n const gridDimensions = { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n if (\n typeof this.wafermap.gridMaxY === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n ) {\n gridDimensions.origin.x = this.wafermap.gridMinX;\n gridDimensions.origin.y = this.wafermap.gridMinY;\n gridDimensions.rows = this.wafermap.gridMaxY - this.wafermap.gridMinY + 1;\n gridDimensions.cols = this.wafermap.gridMaxX - this.wafermap.gridMinX + 1;\n }\n return gridDimensions;\n }\n\n private calculateGridDimensionsFromDies(\n dies: Readonly<Readonly<WaferMapDie>[]>\n ): GridDimensions {\n if (dies.length === 0 || dies[0] === undefined) {\n return { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n }\n\n const minPoint = { x: dies[0].x, y: dies[0].y };\n const maxPoint = { x: dies[0].x, y: dies[0].y };\n\n for (const die of dies) {\n if (die.x < minPoint.x) {\n minPoint.x = die.x;\n }\n if (die.y < minPoint.y) {\n minPoint.y = die.y;\n }\n if (die.x > maxPoint.x) {\n maxPoint.x = die.x;\n }\n if (die.y > maxPoint.y) {\n maxPoint.y = die.y;\n }\n }\n\n return {\n origin: minPoint,\n rows: maxPoint.y - minPoint.y + 1,\n cols: maxPoint.x - minPoint.x + 1\n };\n }\n\n private calculateContainerDimensions(\n canvasDimensions: Dimensions,\n margin: Margin\n ): Dimensions {\n return {\n width: canvasDimensions.width - margin.left - margin.right,\n height: canvasDimensions.height - margin.top - margin.bottom\n };\n }\n\n private createHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.x, grid.origin.x + grid.cols))\n .paddingInner(0)\n .paddingOuter(0)\n .align(0)\n .round(false);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range([0, containerWidth]);\n }\n return scale.range([containerWidth, 0]);\n }\n\n private createInvertedHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerWidth]);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range(range(grid.origin.x, grid.origin.x + grid.cols));\n }\n return scale.range(\n range(grid.origin.x, grid.origin.x + grid.cols).reverse()\n );\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.y, grid.origin.y + grid.rows))\n .paddingInner(this.defaultPadding)\n .paddingOuter(0)\n .align(0)\n .round(false);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range([containerHeight, 0]);\n }\n return scale.range([0, containerHeight]);\n }\n\n private createInvertedVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerHeight]);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the inverted vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range(\n range(grid.origin.y, grid.origin.y + grid.rows).reverse()\n );\n }\n return scale.range(range(grid.origin.y, grid.origin.y + grid.rows));\n }\n\n private calculateMarginAddition(\n baseMargin: Margin,\n addedMargin: Margin\n ): Margin {\n return {\n top: baseMargin.top + addedMargin.top,\n right: baseMargin.right + addedMargin.right,\n bottom: baseMargin.bottom + addedMargin.bottom,\n left: baseMargin.left + addedMargin.left\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { range } from 'd3-array';\nimport { ScaleBand, scaleBand, scaleQuantile, ScaleQuantile } from 'd3-scale';\nimport type { WaferMap } from '..';\nimport type { WaferMapDie } from '../types';\nimport { Dimensions, Margin, WaferMapOriginLocation } from '../types';\n\ninterface GridDimensions {\n origin: {\n x: number,\n y: number\n };\n rows: number;\n cols: number;\n}\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get containerDimensions(): Dimensions {\n return this._containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this._dieDimensions;\n }\n\n public get radius(): number {\n return this._radius;\n }\n\n public get margin(): Margin {\n return this._margin;\n }\n\n public get horizontalScale(): ScaleBand<number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleBand<number> {\n return this._verticalScale;\n }\n\n public get invertedHorizontalScale(): ScaleQuantile<number, number> {\n return this._invertedHorizontalScale;\n }\n\n public get invertedVerticalScale(): ScaleQuantile<number, number> {\n return this._invertedVerticalScale;\n }\n\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _radius!: number;\n private _margin!: Margin;\n private _horizontalScale!: ScaleBand<number>;\n private _verticalScale!: ScaleBand<number>;\n private _invertedHorizontalScale!: ScaleQuantile<number, number>;\n private _invertedVerticalScale!: ScaleQuantile<number, number>;\n private readonly defaultPadding = 0;\n private readonly baseMarginPercentage = 0.04;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public updateContainerDimensions(): void {\n const canvasDimensions = {\n width: this.wafermap.canvasWidth,\n height: this.wafermap.canvasHeight\n };\n const canvasDiameter = Math.min(\n canvasDimensions.width,\n canvasDimensions.height\n );\n const canvasMargin = {\n top: (canvasDimensions.height - canvasDiameter) / 2,\n right: (canvasDimensions.width - canvasDiameter) / 2,\n bottom: (canvasDimensions.height - canvasDiameter) / 2,\n left: (canvasDimensions.width - canvasDiameter) / 2\n };\n const baseMargin = {\n top: canvasDiameter * this.baseMarginPercentage,\n right: canvasDiameter * this.baseMarginPercentage,\n bottom: canvasDiameter * this.baseMarginPercentage,\n left: canvasDiameter * this.baseMarginPercentage\n };\n this._margin = this.calculateMarginAddition(baseMargin, canvasMargin);\n this._containerDimensions = this.calculateContainerDimensions(\n canvasDimensions,\n this._margin\n );\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n this._radius = containerDiameter / 2;\n this.updateScales();\n }\n\n public updateScales(): void {\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n const gridDimensions = this.gridDimensionsValidAndDefined()\n ? this.calculateGridDimensionsFromBoundingBox()\n : this.calculateGridDimensionsFromDies(this.wafermap.dies);\n // this scale is used for positioning the dies on the canvas\n const originLocation = this.wafermap.originLocation;\n this._horizontalScale = this.createHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedHorizontalScale = this.createInvertedHorizontalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._invertedVerticalScale = this.createInvertedVerticalScale(\n originLocation,\n gridDimensions,\n containerDiameter\n );\n this._dieDimensions = {\n width: this.horizontalScale.bandwidth(),\n height: this.verticalScale.bandwidth()\n };\n }\n\n private gridDimensionsValidAndDefined(): boolean {\n return (\n !this.wafermap.validity.invalidGridDimensions\n && typeof this.wafermap.gridMinX === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n );\n }\n\n private calculateGridDimensionsFromBoundingBox(): GridDimensions {\n const gridDimensions = { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n if (\n typeof this.wafermap.gridMaxY === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n ) {\n gridDimensions.origin.x = this.wafermap.gridMinX;\n gridDimensions.origin.y = this.wafermap.gridMinY;\n gridDimensions.rows = this.wafermap.gridMaxY - this.wafermap.gridMinY + 1;\n gridDimensions.cols = this.wafermap.gridMaxX - this.wafermap.gridMinX + 1;\n }\n return gridDimensions;\n }\n\n private calculateGridDimensionsFromDies(\n dies: Readonly<Readonly<WaferMapDie>[]>\n ): GridDimensions {\n if (dies.length === 0 || dies[0] === undefined) {\n return { origin: { x: 0, y: 0 }, rows: 0, cols: 0 };\n }\n\n const minPoint = { x: dies[0].x, y: dies[0].y };\n const maxPoint = { x: dies[0].x, y: dies[0].y };\n\n for (const die of dies) {\n if (die.x < minPoint.x) {\n minPoint.x = die.x;\n }\n if (die.y < minPoint.y) {\n minPoint.y = die.y;\n }\n if (die.x > maxPoint.x) {\n maxPoint.x = die.x;\n }\n if (die.y > maxPoint.y) {\n maxPoint.y = die.y;\n }\n }\n\n return {\n origin: minPoint,\n rows: maxPoint.y - minPoint.y + 1,\n cols: maxPoint.x - minPoint.x + 1\n };\n }\n\n private calculateContainerDimensions(\n canvasDimensions: Dimensions,\n margin: Margin\n ): Dimensions {\n return {\n width: canvasDimensions.width - margin.left - margin.right,\n height: canvasDimensions.height - margin.top - margin.bottom\n };\n }\n\n private createHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.x, grid.origin.x + grid.cols))\n .paddingInner(0)\n .paddingOuter(0)\n .align(0)\n .round(false);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range([0, containerWidth]);\n }\n return scale.range([containerWidth, 0]);\n }\n\n private createInvertedHorizontalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerWidth: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerWidth]);\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale.range(range(grid.origin.x, grid.origin.x + grid.cols));\n }\n return scale.range(\n range(grid.origin.x, grid.origin.x + grid.cols).reverse()\n );\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleBand<number> {\n const scale = scaleBand<number>()\n .domain(range(grid.origin.y, grid.origin.y + grid.rows))\n .paddingInner(this.defaultPadding)\n .paddingOuter(0)\n .align(0)\n .round(false);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range([containerHeight, 0]);\n }\n return scale.range([0, containerHeight]);\n }\n\n private createInvertedVerticalScale(\n originLocation: WaferMapOriginLocation,\n grid: GridDimensions,\n containerHeight: number\n ): ScaleQuantile<number, number> {\n const scale = scaleQuantile().domain([0, containerHeight]);\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the inverted vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale.range(\n range(grid.origin.y, grid.origin.y + grid.rows).reverse()\n );\n }\n return scale.range(range(grid.origin.y, grid.origin.y + grid.rows));\n }\n\n private calculateMarginAddition(\n baseMargin: Margin,\n addedMargin: Margin\n ): Margin {\n return {\n top: baseMargin.top + addedMargin.top,\n right: baseMargin.right + addedMargin.right,\n bottom: baseMargin.bottom + addedMargin.bottom,\n left: baseMargin.left + addedMargin.left\n };\n }\n}\n"]}
|
|
@@ -4,11 +4,6 @@ import { Prerendering } from './prerendering';
|
|
|
4
4
|
* Data Manager uses Computations and Prerendering modules in order and exposes the results
|
|
5
5
|
*/
|
|
6
6
|
export class DataManager {
|
|
7
|
-
constructor(wafermap) {
|
|
8
|
-
this.wafermap = wafermap;
|
|
9
|
-
this.computations = new Computations(wafermap);
|
|
10
|
-
this.prerendering = new Prerendering(wafermap, this);
|
|
11
|
-
}
|
|
12
7
|
get containerDimensions() {
|
|
13
8
|
return this.computations.containerDimensions;
|
|
14
9
|
}
|
|
@@ -42,6 +37,11 @@ export class DataManager {
|
|
|
42
37
|
get data() {
|
|
43
38
|
return this.dataMap;
|
|
44
39
|
}
|
|
40
|
+
constructor(wafermap) {
|
|
41
|
+
this.wafermap = wafermap;
|
|
42
|
+
this.computations = new Computations(wafermap);
|
|
43
|
+
this.prerendering = new Prerendering(wafermap, this);
|
|
44
|
+
}
|
|
45
45
|
updateContainerDimensions() {
|
|
46
46
|
this.computations.updateContainerDimensions();
|
|
47
47
|
this.updateDataMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-manager.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/data-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C;;GAEG;AACH,MAAM,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"data-manager.js","sourceRoot":"","sources":["../../../../src/wafer-map/modules/data-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C;;GAEG;AACH,MAAM,OAAO,WAAW;IACpB,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;IACjD,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IAC3C,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC;IAC7C,CAAC;IAED,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC;IACrD,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IAC3C,CAAC;IAED,IAAW,qBAAqB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IACnD,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IAC5C,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAMD,YAAoC,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAEM,yBAAyB;QAC5B,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,CAAC;QAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEM,YAAY;QACf,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;IAC7C,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;IAC7C,CAAC;IAEM,cAAc,CAAC,KAAuB;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAEO,aAAa;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAC5D,CAAC;IACN,CAAC;CACJ","sourcesContent":["import type { ScaleBand, ScaleQuantile } from 'd3-scale';\nimport { Computations } from './computations';\nimport { Prerendering } from './prerendering';\nimport type { WaferMap } from '..';\nimport type {\n Dimensions,\n Margin,\n DieRenderInfo,\n WaferMapDie,\n PointCoordinates\n} from '../types';\n\n/**\n * Data Manager uses Computations and Prerendering modules in order and exposes the results\n */\nexport class DataManager {\n public get containerDimensions(): Dimensions {\n return this.computations.containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this.computations.dieDimensions;\n }\n\n public get radius(): number {\n return this.computations.radius;\n }\n\n public get margin(): Margin {\n return this.computations.margin;\n }\n\n public get horizontalScale(): ScaleBand<number> {\n return this.computations.horizontalScale;\n }\n\n public get invertedHorizontalScale(): ScaleQuantile<number, number> {\n return this.computations.invertedHorizontalScale;\n }\n\n public get verticalScale(): ScaleBand<number> {\n return this.computations.verticalScale;\n }\n\n public get invertedVerticalScale(): ScaleQuantile<number, number> {\n return this.computations.invertedVerticalScale;\n }\n\n public get labelsFontSize(): number {\n return this.prerendering.labelsFontSize;\n }\n\n public get diesRenderInfo(): DieRenderInfo[] {\n return this.prerendering.diesRenderInfo;\n }\n\n public get data(): Map<string, WaferMapDie> {\n return this.dataMap;\n }\n\n private readonly computations;\n private readonly prerendering;\n private dataMap!: Map<string, WaferMapDie>;\n\n public constructor(private readonly wafermap: WaferMap) {\n this.computations = new Computations(wafermap);\n this.prerendering = new Prerendering(wafermap, this);\n }\n\n public updateContainerDimensions(): void {\n this.computations.updateContainerDimensions();\n this.updateDataMap();\n this.updateLabelsFontSize();\n }\n\n public updateScales(): void {\n this.computations.updateScales();\n this.updateDataMap();\n this.updateLabelsFontSize();\n }\n\n public updateLabelsFontSize(): void {\n this.prerendering.updateLabelsFontSize();\n }\n\n public updateDiesRenderInfo(): void {\n this.prerendering.updateDiesRenderInfo();\n }\n\n public getWaferMapDie(point: PointCoordinates): WaferMapDie | undefined {\n return this.dataMap.get(`${point.x}_${point.y}`);\n }\n\n private updateDataMap(): void {\n this.dataMap = new Map(\n this.wafermap.dies.map(die => [`${die.x}_${die.y}`, die])\n );\n }\n}\n"]}
|
|
@@ -5,6 +5,12 @@ import { WaferMapColorScaleMode } from '../types';
|
|
|
5
5
|
* Prerendering prepares render-ready dies data to be used by the rendering module
|
|
6
6
|
*/
|
|
7
7
|
export class Prerendering {
|
|
8
|
+
get labelsFontSize() {
|
|
9
|
+
return this._labelsFontSize;
|
|
10
|
+
}
|
|
11
|
+
get diesRenderInfo() {
|
|
12
|
+
return this._diesRenderInfo;
|
|
13
|
+
}
|
|
8
14
|
constructor(wafermap, dataManager) {
|
|
9
15
|
this.wafermap = wafermap;
|
|
10
16
|
this.dataManager = dataManager;
|
|
@@ -13,12 +19,6 @@ export class Prerendering {
|
|
|
13
19
|
this.emptyDieColor = 'rgba(218,223,236,1)';
|
|
14
20
|
this.nanDieColor = 'rgba(122,122,122,1)';
|
|
15
21
|
}
|
|
16
|
-
get labelsFontSize() {
|
|
17
|
-
return this._labelsFontSize;
|
|
18
|
-
}
|
|
19
|
-
get diesRenderInfo() {
|
|
20
|
-
return this._diesRenderInfo;
|
|
21
|
-
}
|
|
22
22
|
updateLabelsFontSize() {
|
|
23
23
|
this._labelsFontSize = this.calculateLabelsFontSize(this.dataManager.dieDimensions, this.wafermap.maxCharacters);
|
|
24
24
|
this.updateDiesRenderInfo();
|