@ni/nimble-components 20.7.0 → 20.9.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.
Files changed (35) hide show
  1. package/dist/all-components-bundle.js +49 -9
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +7 -4
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.d.ts +3 -9
  6. package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js +2 -24
  7. package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js.map +1 -1
  8. package/dist/esm/table-column/duration-text/cell-view/index.d.ts +16 -0
  9. package/dist/esm/table-column/duration-text/cell-view/index.js +28 -0
  10. package/dist/esm/table-column/duration-text/cell-view/index.js.map +1 -0
  11. package/dist/esm/table-column/duration-text/group-header-view/index.d.ts +17 -0
  12. package/dist/esm/table-column/duration-text/group-header-view/index.js +33 -0
  13. package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -0
  14. package/dist/esm/table-column/duration-text/index.d.ts +24 -0
  15. package/dist/esm/table-column/duration-text/index.js +62 -0
  16. package/dist/esm/table-column/duration-text/index.js.map +1 -0
  17. package/dist/esm/table-column/duration-text/models/duration-formatter.d.ts +14 -0
  18. package/dist/esm/table-column/duration-text/models/duration-formatter.js +79 -0
  19. package/dist/esm/table-column/duration-text/models/duration-formatter.js.map +1 -0
  20. package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.d.ts +8 -0
  21. package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js +14 -0
  22. package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js.map +1 -0
  23. package/dist/esm/table-column/number-text/index.d.ts +2 -0
  24. package/dist/esm/table-column/number-text/index.js +23 -3
  25. package/dist/esm/table-column/number-text/index.js.map +1 -1
  26. package/dist/esm/table-column/number-text/models/decimal-formatter.d.ts +1 -1
  27. package/dist/esm/table-column/number-text/models/decimal-formatter.js +4 -4
  28. package/dist/esm/table-column/number-text/models/decimal-formatter.js.map +1 -1
  29. package/dist/esm/table-column/number-text/models/table-column-number-text-validator.d.ts +3 -1
  30. package/dist/esm/table-column/number-text/models/table-column-number-text-validator.js +21 -1
  31. package/dist/esm/table-column/number-text/models/table-column-number-text-validator.js.map +1 -1
  32. package/dist/esm/table-column/testing/table-column-formatted-text.pageobject.d.ts +14 -0
  33. package/dist/esm/table-column/testing/table-column-formatted-text.pageobject.js +30 -0
  34. package/dist/esm/table-column/testing/table-column-formatted-text.pageobject.js.map +1 -0
  35. package/package.json +1 -1
@@ -1,14 +1,8 @@
1
- import type { TablePageObject } from '../../../table/testing/table.pageobject';
2
1
  import type { TableRecord } from '../../../table/types';
2
+ import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
3
3
  /**
4
4
  * Page object for date text table column.
5
5
  */
6
- export declare class TableColumnDateTextPageObject<T extends TableRecord> {
7
- private readonly tablePageObject;
8
- private readonly narrowNonBreakingSpace;
9
- constructor(tablePageObject: TablePageObject<T>);
10
- getRenderedCellContent(rowIndex: number, columnIndex: number): string;
11
- getRenderedGroupHeaderContent(groupRowIndex: number): string;
12
- getCellTitle(rowIndex: number, columnIndex: number): string;
13
- private verifyCellType;
6
+ export declare class TableColumnDateTextPageObject<T extends TableRecord> extends TableColumnFormattedTextPageObject<T> {
7
+ protected verifyCellType(rowIndex: number, columnIndex: number): void;
14
8
  }
@@ -1,31 +1,9 @@
1
+ import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
1
2
  import { TableColumnDateTextCellView } from '../cell-view';
2
3
  /**
3
4
  * Page object for date text table column.
4
5
  */
5
- export class TableColumnDateTextPageObject {
6
- constructor(tablePageObject) {
7
- this.tablePageObject = tablePageObject;
8
- // On Chrome, in a formatted date, the space before AM/PM is a narrow non-breaking space.
9
- // For testing consistency across browsers, replace it with a regular space.
10
- this.narrowNonBreakingSpace = '\u202f';
11
- }
12
- getRenderedCellContent(rowIndex, columnIndex) {
13
- this.verifyCellType(rowIndex, columnIndex);
14
- return this.tablePageObject
15
- .getRenderedCellTextContent(rowIndex, columnIndex)
16
- .replace(this.narrowNonBreakingSpace, ' ');
17
- }
18
- getRenderedGroupHeaderContent(groupRowIndex) {
19
- return this.tablePageObject
20
- .getRenderedGroupHeaderTextContent(groupRowIndex)
21
- .replace(this.narrowNonBreakingSpace, ' ');
22
- }
23
- getCellTitle(rowIndex, columnIndex) {
24
- this.verifyCellType(rowIndex, columnIndex);
25
- return this.tablePageObject
26
- .getCellTitle(rowIndex, columnIndex)
27
- .replace(this.narrowNonBreakingSpace, ' ');
28
- }
6
+ export class TableColumnDateTextPageObject extends TableColumnFormattedTextPageObject {
29
7
  verifyCellType(rowIndex, columnIndex) {
30
8
  const cell = this.tablePageObject.getRenderedCellView(rowIndex, columnIndex);
31
9
  if (!(cell instanceof TableColumnDateTextCellView)) {
@@ -1 +1 @@
1
- {"version":3,"file":"table-column-date-text.pageobject.js","sourceRoot":"","sources":["../../../../../src/table-column/date-text/testing/table-column-date-text.pageobject.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,6BAA6B;IAKtC,YAAoC,eAAmC;QAAnC,oBAAe,GAAf,eAAe,CAAoB;QAJvE,yFAAyF;QACzF,4EAA4E;QAC3D,2BAAsB,GAAG,QAAQ,CAAC;IAEuB,CAAC;IAEpE,sBAAsB,CACzB,QAAgB,EAChB,WAAmB;QAEnB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,eAAe;aACtB,0BAA0B,CAAC,QAAQ,EAAE,WAAW,CAAC;aACjD,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAEM,6BAA6B,CAAC,aAAqB;QACtD,OAAO,IAAI,CAAC,eAAe;aACtB,iCAAiC,CAAC,aAAa,CAAC;aAChD,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAEM,YAAY,CAAC,QAAgB,EAAE,WAAmB;QACrD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,eAAe;aACtB,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC;aACnC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAEO,cAAc,CAAC,QAAgB,EAAE,WAAmB;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CACjD,QAAQ,EACR,WAAW,CACd,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,YAAY,2BAA2B,CAAC,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACxD;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"table-column-date-text.pageobject.js","sourceRoot":"","sources":["../../../../../src/table-column/date-text/testing/table-column-date-text.pageobject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sDAAsD,CAAC;AAC1G,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,6BAEX,SAAQ,kCAAqC;IACxB,cAAc,CAC7B,QAAgB,EAChB,WAAmB;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CACjD,QAAQ,EACR,WAAW,CACd,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,YAAY,2BAA2B,CAAC,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACxD;IACL,CAAC;CACJ"}
@@ -0,0 +1,16 @@
1
+ import type { TableColumnDurationTextCellRecord, TableColumnDurationTextColumnConfig } from '..';
2
+ import { TableColumnTextCellViewBase } from '../../text-base/cell-view';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'nimble-table-column-duration-text-cell-view': TableColumnDurationTextCellView;
6
+ }
7
+ }
8
+ /**
9
+ * A cell view for displaying duration fields as text
10
+ */
11
+ export declare class TableColumnDurationTextCellView extends TableColumnTextCellViewBase<TableColumnDurationTextCellRecord, TableColumnDurationTextColumnConfig> {
12
+ private columnConfigChanged;
13
+ private cellRecordChanged;
14
+ private updateText;
15
+ }
16
+ export declare const tableColumnDurationTextCellViewTag: string;
@@ -0,0 +1,28 @@
1
+ import { DesignSystem } from '@microsoft/fast-foundation';
2
+ import { template } from '../../text-base/cell-view/template';
3
+ import { styles } from '../../text-base/cell-view/styles';
4
+ import { TableColumnTextCellViewBase } from '../../text-base/cell-view';
5
+ /**
6
+ * A cell view for displaying duration fields as text
7
+ */
8
+ export class TableColumnDurationTextCellView extends TableColumnTextCellViewBase {
9
+ columnConfigChanged() {
10
+ this.updateText();
11
+ }
12
+ cellRecordChanged() {
13
+ this.updateText();
14
+ }
15
+ updateText() {
16
+ this.text = this.columnConfig?.formatter.format(this.cellRecord?.value) ?? '';
17
+ }
18
+ }
19
+ const durationTextCellView = TableColumnDurationTextCellView.compose({
20
+ baseName: 'table-column-duration-text-cell-view',
21
+ template,
22
+ styles
23
+ });
24
+ DesignSystem.getOrCreate()
25
+ .withPrefix('nimble')
26
+ .register(durationTextCellView());
27
+ export const tableColumnDurationTextCellViewTag = DesignSystem.tagFor(TableColumnDurationTextCellView);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/cell-view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAK9D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAQxE;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,2BAGpD;IACW,mBAAmB;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,iBAAiB;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAClF,CAAC;CACJ;AAED,MAAM,oBAAoB,GAAG,+BAA+B,CAAC,OAAO,CAAC;IACjE,QAAQ,EAAE,sCAAsC;IAChD,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AACH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,kCAAkC,GAAG,YAAY,CAAC,MAAM,CACjE,+BAA+B,CAClC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { TableNumberFieldValue } from '../../../table/types';
2
+ import { TableColumnTextGroupHeaderViewBase } from '../../text-base/group-header-view';
3
+ import type { TableColumnDurationTextColumnConfig } from '..';
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'nimble-table-duration-text-group-header': TableColumnDurationTextGroupHeaderView;
7
+ }
8
+ }
9
+ /**
10
+ * The group header view for displaying duration fields as text.
11
+ */
12
+ export declare class TableColumnDurationTextGroupHeaderView extends TableColumnTextGroupHeaderViewBase<TableNumberFieldValue, TableColumnDurationTextColumnConfig> {
13
+ private columnConfigChanged;
14
+ private groupHeaderValueChanged;
15
+ private updateText;
16
+ }
17
+ export declare const tableColumnDurationTextGroupHeaderViewTag: string;
@@ -0,0 +1,33 @@
1
+ import { DesignSystem } from '@microsoft/fast-foundation';
2
+ import { TableColumnTextGroupHeaderViewBase } from '../../text-base/group-header-view';
3
+ import { template } from '../../text-base/group-header-view/template';
4
+ import { styles } from '../../text-base/group-header-view/styles';
5
+ /**
6
+ * The group header view for displaying duration fields as text.
7
+ */
8
+ export class TableColumnDurationTextGroupHeaderView extends TableColumnTextGroupHeaderViewBase {
9
+ columnConfigChanged() {
10
+ this.updateText();
11
+ }
12
+ groupHeaderValueChanged() {
13
+ this.updateText();
14
+ }
15
+ updateText() {
16
+ if (this.columnConfig) {
17
+ this.text = this.columnConfig.formatter.format(this.groupHeaderValue);
18
+ }
19
+ else {
20
+ this.text = '';
21
+ }
22
+ }
23
+ }
24
+ const tableColumnDurationTextGroupHeaderView = TableColumnDurationTextGroupHeaderView.compose({
25
+ baseName: 'table-column-duration-text-group-header-view',
26
+ template,
27
+ styles
28
+ });
29
+ DesignSystem.getOrCreate()
30
+ .withPrefix('nimble')
31
+ .register(tableColumnDurationTextGroupHeaderView());
32
+ export const tableColumnDurationTextGroupHeaderViewTag = DesignSystem.tagFor(TableColumnDurationTextGroupHeaderView);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/group-header-view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AAQlE;;GAEG;AACH,MAAM,OAAO,sCAAuC,SAAQ,kCAG3D;IACW,mBAAmB;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,uBAAuB;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,UAAU;QACd,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAC1C,IAAI,CAAC,gBAAgB,CACxB,CAAC;SACL;aAAM;YACH,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;SAClB;IACL,CAAC;CACJ;AAED,MAAM,sCAAsC,GAAG,sCAAsC,CAAC,OAAO,CAAC;IAC1F,QAAQ,EAAE,8CAA8C;IACxD,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AACH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,sCAAsC,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,yCAAyC,GAAG,YAAY,CAAC,MAAM,CACxE,sCAAsC,CACzC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { TableNumberField } from '../../table/types';
2
+ import { TableColumnTextBase } from '../text-base';
3
+ import type { ColumnInternalsOptions } from '../base/models/column-internals';
4
+ import { DurationFormatter } from './models/duration-formatter';
5
+ export declare type TableColumnDurationTextCellRecord = TableNumberField<'value'>;
6
+ export interface TableColumnDurationTextColumnConfig {
7
+ formatter: DurationFormatter;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ 'nimble-table-column-duration-text': TableColumnDurationText;
12
+ }
13
+ }
14
+ /**
15
+ * The table column for displaying a duration value as text.
16
+ */
17
+ export declare class TableColumnDurationText extends TableColumnTextBase {
18
+ private readonly langSubscriber;
19
+ connectedCallback(): void;
20
+ disconnectedCallback(): void;
21
+ protected getColumnInternalsOptions(): ColumnInternalsOptions;
22
+ private updateColumnConfig;
23
+ }
24
+ export declare const tableColumnDurationTextTag: string;
@@ -0,0 +1,62 @@
1
+ import { DesignSystem } from '@microsoft/fast-foundation';
2
+ import { styles } from '../base/styles';
3
+ import { template } from '../base/template';
4
+ import { TableColumnTextBase } from '../text-base';
5
+ import { TableColumnSortOperation } from '../base/types';
6
+ import { tableColumnDurationTextCellViewTag } from './cell-view';
7
+ import { lang } from '../../theme-provider';
8
+ import { DurationFormatter } from './models/duration-formatter';
9
+ import { tableColumnDurationTextGroupHeaderViewTag } from './group-header-view';
10
+ /**
11
+ * The table column for displaying a duration value as text.
12
+ */
13
+ export class TableColumnDurationText extends TableColumnTextBase {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.langSubscriber = {
17
+ handleChange: () => {
18
+ this.updateColumnConfig();
19
+ }
20
+ };
21
+ }
22
+ connectedCallback() {
23
+ super.connectedCallback();
24
+ lang.subscribe(this.langSubscriber, this);
25
+ this.updateColumnConfig();
26
+ }
27
+ disconnectedCallback() {
28
+ super.disconnectedCallback();
29
+ lang.unsubscribe(this.langSubscriber, this);
30
+ }
31
+ getColumnInternalsOptions() {
32
+ return {
33
+ cellRecordFieldNames: ['value'],
34
+ cellViewTag: tableColumnDurationTextCellViewTag,
35
+ groupHeaderViewTag: tableColumnDurationTextGroupHeaderViewTag,
36
+ delegatedEvents: [],
37
+ sortOperation: TableColumnSortOperation.basic
38
+ };
39
+ }
40
+ updateColumnConfig() {
41
+ const formatter = new DurationFormatter(lang.getValueFor(this));
42
+ if (formatter) {
43
+ const columnConfig = {
44
+ formatter
45
+ };
46
+ this.columnInternals.columnConfig = columnConfig;
47
+ }
48
+ else {
49
+ this.columnInternals.columnConfig = undefined;
50
+ }
51
+ }
52
+ }
53
+ const nimbleTableColumnDurationText = TableColumnDurationText.compose({
54
+ baseName: 'table-column-duration-text',
55
+ template,
56
+ styles
57
+ });
58
+ DesignSystem.getOrCreate()
59
+ .withPrefix('nimble')
60
+ .register(nimbleTableColumnDurationText());
61
+ export const tableColumnDurationTextTag = DesignSystem.tagFor(TableColumnDurationText);
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/duration-text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,yCAAyC,EAAE,MAAM,qBAAqB,CAAC;AAahF;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAAhE;;QACqB,mBAAc,GAAuC;YAClE,YAAY,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC;SACJ,CAAC;IAmCN,CAAC;IAjCmB,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEe,oBAAoB;QAChC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEkB,yBAAyB;QACxC,OAAO;YACH,oBAAoB,EAAE,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,kCAAkC;YAC/C,kBAAkB,EAAE,yCAAyC;YAC7D,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,wBAAwB,CAAC,KAAK;SAChD,CAAC;IACN,CAAC;IAEO,kBAAkB;QACtB,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhE,IAAI,SAAS,EAAE;YACX,MAAM,YAAY,GAAwC;gBACtD,SAAS;aACZ,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC;SACpD;aAAM;YACH,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;SACjD;IACL,CAAC;CACJ;AAED,MAAM,6BAA6B,GAAG,uBAAuB,CAAC,OAAO,CAAC;IAClE,QAAQ,EAAE,4BAA4B;IACtC,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,6BAA6B,EAAE,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC,MAAM,CACzD,uBAAuB,CAC1B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A class for formatting a numeric value in the unit of milliseconds into a display value representing its
3
+ * days, hours, minutes, and seconds.
4
+ */
5
+ export declare class DurationFormatter {
6
+ private readonly lang;
7
+ private readonly daysFormatter;
8
+ private readonly hoursFormatter;
9
+ private readonly minutesFormatter;
10
+ private readonly secondsFormatter;
11
+ private readonly scientificSecondsFormatter;
12
+ constructor(lang: string);
13
+ format(milliseconds: number | null | undefined): string;
14
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * A class for formatting a numeric value in the unit of milliseconds into a display value representing its
3
+ * days, hours, minutes, and seconds.
4
+ */
5
+ export class DurationFormatter {
6
+ constructor(lang) {
7
+ this.lang = lang;
8
+ this.daysFormatter = new Intl.NumberFormat(this.lang, {
9
+ style: 'unit',
10
+ unit: 'day'
11
+ });
12
+ this.hoursFormatter = new Intl.NumberFormat(this.lang, {
13
+ style: 'unit',
14
+ unit: 'hour'
15
+ });
16
+ this.minutesFormatter = new Intl.NumberFormat(this.lang, {
17
+ style: 'unit',
18
+ unit: 'minute'
19
+ });
20
+ this.secondsFormatter = new Intl.NumberFormat(this.lang, {
21
+ style: 'unit',
22
+ unit: 'second'
23
+ });
24
+ this.scientificSecondsFormatter = new Intl.NumberFormat(this.lang, {
25
+ style: 'unit',
26
+ unit: 'second',
27
+ notation: 'scientific',
28
+ maximumFractionDigits: 3
29
+ });
30
+ }
31
+ format(milliseconds) {
32
+ if (typeof milliseconds !== 'number'
33
+ || milliseconds < 0
34
+ || !Number.isFinite(milliseconds)) {
35
+ return '';
36
+ }
37
+ const result = [];
38
+ const millisecondsPerSecond = 1000;
39
+ const millisecondsPerMinute = millisecondsPerSecond * 60;
40
+ const millisecondsPerHour = millisecondsPerMinute * 60;
41
+ const millisecondsPerDay = millisecondsPerHour * 24;
42
+ const fractionalDays = milliseconds / millisecondsPerDay;
43
+ const maximumDays = 999;
44
+ let remainingTime = milliseconds;
45
+ const days = Math.floor(fractionalDays);
46
+ if (days <= maximumDays && days > 0) {
47
+ const formattedDays = this.daysFormatter.format(days);
48
+ result.push(formattedDays);
49
+ remainingTime -= days * millisecondsPerDay;
50
+ }
51
+ else if (days > maximumDays) {
52
+ return this.scientificSecondsFormatter.format(milliseconds / millisecondsPerSecond);
53
+ }
54
+ const hours = Math.floor((milliseconds / millisecondsPerHour) % 24);
55
+ remainingTime -= hours * millisecondsPerHour;
56
+ if (hours) {
57
+ const formattedHours = this.hoursFormatter.format(hours);
58
+ result.push(formattedHours);
59
+ }
60
+ const minutes = Math.floor((milliseconds / millisecondsPerMinute) % 60);
61
+ remainingTime -= minutes * millisecondsPerMinute;
62
+ if (minutes) {
63
+ const formattedMinutes = this.minutesFormatter.format(minutes);
64
+ result.push(formattedMinutes);
65
+ }
66
+ const valueInSeconds = remainingTime / millisecondsPerSecond;
67
+ // if -0, coerce to 0
68
+ const seconds = valueInSeconds === 0 ? 0 : valueInSeconds % 60;
69
+ if (milliseconds < 1 && valueInSeconds !== 0) {
70
+ return this.scientificSecondsFormatter.format(valueInSeconds);
71
+ }
72
+ if (seconds >= 0.0005 || (seconds === 0 && result.length === 0)) {
73
+ const formattedSeconds = this.secondsFormatter.format(seconds);
74
+ result.push(formattedSeconds);
75
+ }
76
+ return result.join(', ');
77
+ }
78
+ }
79
+ //# sourceMappingURL=duration-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration-formatter.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/models/duration-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { TableRecord } from '../../../table/types';
2
+ import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
3
+ /**
4
+ * Page object for duration text table column.
5
+ */
6
+ export declare class TableColumnDurationTextPageObject<T extends TableRecord> extends TableColumnFormattedTextPageObject<T> {
7
+ protected verifyCellType(rowIndex: number, columnIndex: number): void;
8
+ }
@@ -0,0 +1,14 @@
1
+ import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
2
+ import { TableColumnDurationTextCellView } from '../cell-view';
3
+ /**
4
+ * Page object for duration text table column.
5
+ */
6
+ export class TableColumnDurationTextPageObject extends TableColumnFormattedTextPageObject {
7
+ verifyCellType(rowIndex, columnIndex) {
8
+ const cell = this.tablePageObject.getRenderedCellView(rowIndex, columnIndex);
9
+ if (!(cell instanceof TableColumnDurationTextCellView)) {
10
+ throw new Error('Cell is not in a duration text column');
11
+ }
12
+ }
13
+ }
14
+ //# sourceMappingURL=table-column-duration-text.pageobject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-column-duration-text.pageobject.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/testing/table-column-duration-text.pageobject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sDAAsD,CAAC;AAC1G,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D;;GAEG;AACH,MAAM,OAAO,iCAEX,SAAQ,kCAAqC;IACxB,cAAc,CAC7B,QAAgB,EAChB,WAAmB;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CACjD,QAAQ,EACR,WAAW,CACd,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,YAAY,+BAA+B,CAAC,EAAE;YACpD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC5D;IACL,CAAC;CACJ"}
@@ -25,6 +25,7 @@ export declare class TableColumnNumberText extends TableColumnTextBase {
25
25
  format: NumberTextFormat;
26
26
  alignment: NumberTextAlignment;
27
27
  decimalDigits?: number;
28
+ decimalMaximumDigits?: number;
28
29
  private readonly langSubscriber;
29
30
  connectedCallback(): void;
30
31
  disconnectedCallback(): void;
@@ -33,6 +34,7 @@ export declare class TableColumnNumberText extends TableColumnTextBase {
33
34
  private formatChanged;
34
35
  private alignmentChanged;
35
36
  private decimalDigitsChanged;
37
+ private decimalMaximumDigitsChanged;
36
38
  private updateColumnConfig;
37
39
  private createFormatter;
38
40
  private determineCellContentAlignment;
@@ -58,8 +58,13 @@ export class TableColumnNumberText extends TableColumnTextBase {
58
58
  decimalDigitsChanged() {
59
59
  this.updateColumnConfig();
60
60
  }
61
+ decimalMaximumDigitsChanged() {
62
+ this.updateColumnConfig();
63
+ }
61
64
  updateColumnConfig() {
62
65
  this.validator.validateDecimalDigits(this.format, this.decimalDigits);
66
+ this.validator.validateDecimalMaximumDigits(this.format, this.decimalMaximumDigits);
67
+ this.validator.validateNoMutuallyExclusiveProperties(this.format, this.decimalDigits, this.decimalMaximumDigits);
63
68
  if (this.validator.isValid()) {
64
69
  const columnConfig = {
65
70
  formatter: this.createFormatter(),
@@ -72,9 +77,17 @@ export class TableColumnNumberText extends TableColumnTextBase {
72
77
  }
73
78
  }
74
79
  createFormatter() {
80
+ let minimumDigits;
81
+ let maximumDigits;
75
82
  switch (this.format) {
76
83
  case NumberTextFormat.decimal:
77
- return new DecimalFormatter(lang.getValueFor(this), this.decimalDigits ?? defaultDecimalDigits);
84
+ minimumDigits = typeof this.decimalMaximumDigits === 'number'
85
+ ? 0
86
+ : this.decimalDigits ?? defaultDecimalDigits;
87
+ maximumDigits = this.decimalMaximumDigits
88
+ ?? this.decimalDigits
89
+ ?? defaultDecimalDigits;
90
+ return new DecimalFormatter(lang.getValueFor(this), minimumDigits, maximumDigits);
78
91
  default:
79
92
  return new DefaultFormatter(lang.getValueFor(this));
80
93
  }
@@ -86,8 +99,9 @@ export class TableColumnNumberText extends TableColumnTextBase {
86
99
  if (this.alignment === NumberTextAlignment.right) {
87
100
  return TextCellViewBaseAlignment.right;
88
101
  }
89
- // Look at format to determine the default alignment
90
- if (this.format === NumberTextFormat.decimal) {
102
+ // Look at format and decimal max digits to determine the default alignment
103
+ if (this.format === NumberTextFormat.decimal
104
+ && typeof this.decimalMaximumDigits !== 'number') {
91
105
  return TextCellViewBaseAlignment.right;
92
106
  }
93
107
  return TextCellViewBaseAlignment.left;
@@ -102,6 +116,12 @@ __decorate([
102
116
  __decorate([
103
117
  attr({ attribute: 'decimal-digits', converter: nullableNumberConverter })
104
118
  ], TableColumnNumberText.prototype, "decimalDigits", void 0);
119
+ __decorate([
120
+ attr({
121
+ attribute: 'decimal-maximum-digits',
122
+ converter: nullableNumberConverter
123
+ })
124
+ ], TableColumnNumberText.prototype, "decimalMaximumDigits", void 0);
105
125
  const nimbleTableColumnNumberText = TableColumnNumberText.compose({
106
126
  baseName: 'table-column-number-text',
107
127
  template,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/number-text/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/number-text/index.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { NumberFormatter } from './number-formatter';
5
5
  export declare class DecimalFormatter extends NumberFormatter {
6
6
  private readonly formatter;
7
7
  private readonly tenPowDecimalDigits;
8
- constructor(locale: string, decimalsToDisplay: number);
8
+ constructor(locale: string, minimumFractionDigits: number, maximumFractionDigits: number);
9
9
  protected format(number: number): string;
10
10
  private willRoundToZero;
11
11
  }
@@ -3,14 +3,14 @@ import { NumberFormatter } from './number-formatter';
3
3
  * The formatter for a number-text column whose format is configured to be 'decimal'.
4
4
  */
5
5
  export class DecimalFormatter extends NumberFormatter {
6
- constructor(locale, decimalsToDisplay) {
6
+ constructor(locale, minimumFractionDigits, maximumFractionDigits) {
7
7
  super();
8
8
  this.formatter = new Intl.NumberFormat(locale, {
9
- maximumFractionDigits: decimalsToDisplay,
10
- minimumFractionDigits: decimalsToDisplay,
9
+ maximumFractionDigits,
10
+ minimumFractionDigits,
11
11
  useGrouping: true
12
12
  });
13
- this.tenPowDecimalDigits = 10 ** decimalsToDisplay;
13
+ this.tenPowDecimalDigits = 10 ** maximumFractionDigits;
14
14
  }
15
15
  format(number) {
16
16
  // The NumberFormat option of `signDisplay: "negative"` is not supported in all browsers nimble supports.
@@ -1 +1 @@
1
- {"version":3,"file":"decimal-formatter.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/decimal-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IAIjD,YAAmB,MAAc,EAAE,iBAAyB;QACxD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC3C,qBAAqB,EAAE,iBAAiB;YACxC,qBAAqB,EAAE,iBAAiB;YACxC,WAAW,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,GAAG,EAAE,IAAI,iBAAiB,CAAC;IACvD,CAAC;IAES,MAAM,CAAC,MAAc;QAC3B,yGAAyG;QACzG,4GAA4G;QAC5G,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAEO,eAAe,CAAC,MAAc;QAClC,0GAA0G;QAC1G,2GAA2G;QAC3G,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;CACJ"}
1
+ {"version":3,"file":"decimal-formatter.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/decimal-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IAIjD,YACI,MAAc,EACd,qBAA6B,EAC7B,qBAA6B;QAE7B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC3C,qBAAqB;YACrB,qBAAqB;YACrB,WAAW,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,GAAG,EAAE,IAAI,qBAAqB,CAAC;IAC3D,CAAC;IAES,MAAM,CAAC,MAAc;QAC3B,yGAAyG;QACzG,4GAA4G;QAC5G,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAEO,eAAe,CAAC,MAAc;QAClC,0GAA0G;QAC1G,2GAA2G;QAC3G,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;CACJ"}
@@ -1,13 +1,15 @@
1
1
  import type { ColumnInternals } from '../../base/models/column-internals';
2
2
  import { ColumnValidator } from '../../base/models/column-validator';
3
3
  import { NumberTextFormat } from '../types';
4
- declare const numberTextValidityFlagNames: readonly ["invalidDecimalDigits"];
4
+ declare const numberTextValidityFlagNames: readonly ["invalidDecimalDigits", "invalidDecimalMaximumDigits", "decimalDigitsMutuallyExclusiveWithDecimalMaximumDigits"];
5
5
  /**
6
6
  * Validator for TableColumnNumberText.
7
7
  */
8
8
  export declare class TableColumnNumberTextValidator extends ColumnValidator<typeof numberTextValidityFlagNames> {
9
9
  constructor(columnInternals: ColumnInternals<unknown>);
10
10
  validateDecimalDigits(format: NumberTextFormat, decimalDigits: number | undefined): void;
11
+ validateDecimalMaximumDigits(format: NumberTextFormat, decimalMaximumDigits: number | undefined): void;
12
+ validateNoMutuallyExclusiveProperties(format: NumberTextFormat, decimalDigits: number | undefined, decimalMaximumDigits: number | undefined): void;
11
13
  private isInvalidDecimalDigitsValue;
12
14
  }
13
15
  export {};
@@ -1,6 +1,10 @@
1
1
  import { ColumnValidator } from '../../base/models/column-validator';
2
2
  import { NumberTextFormat } from '../types';
3
- const numberTextValidityFlagNames = ['invalidDecimalDigits'];
3
+ const numberTextValidityFlagNames = [
4
+ 'invalidDecimalDigits',
5
+ 'invalidDecimalMaximumDigits',
6
+ 'decimalDigitsMutuallyExclusiveWithDecimalMaximumDigits'
7
+ ];
4
8
  // The maximum and minimum allowed configuration for 'maximumFractionDigits'
5
9
  // and 'minimumFractionDigits' on the NumberFormat.
6
10
  const minimumValidDecimalDigits = 0;
@@ -20,6 +24,22 @@ export class TableColumnNumberTextValidator extends ColumnValidator {
20
24
  : false;
21
25
  this.setConditionValue('invalidDecimalDigits', invalid);
22
26
  }
27
+ validateDecimalMaximumDigits(format, decimalMaximumDigits) {
28
+ const shouldValidateDecimalDigitsValue = format === NumberTextFormat.decimal
29
+ && typeof decimalMaximumDigits === 'number';
30
+ const invalid = shouldValidateDecimalDigitsValue
31
+ ? this.isInvalidDecimalDigitsValue(decimalMaximumDigits)
32
+ : false;
33
+ this.setConditionValue('invalidDecimalMaximumDigits', invalid);
34
+ }
35
+ validateNoMutuallyExclusiveProperties(format, decimalDigits, decimalMaximumDigits) {
36
+ const shouldValidateMutuallyExclusiveProperties = format === NumberTextFormat.decimal;
37
+ const invalid = shouldValidateMutuallyExclusiveProperties
38
+ ? typeof decimalDigits === 'number'
39
+ && typeof decimalMaximumDigits === 'number'
40
+ : false;
41
+ this.setConditionValue('decimalDigitsMutuallyExclusiveWithDecimalMaximumDigits', invalid);
42
+ }
23
43
  isInvalidDecimalDigitsValue(decimalDigits) {
24
44
  return (decimalDigits < minimumValidDecimalDigits
25
45
  || decimalDigits > maximumValidDecimalDigits);
@@ -1 +1 @@
1
- {"version":3,"file":"table-column-number-text-validator.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/table-column-number-text-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,2BAA2B,GAAG,CAAC,sBAAsB,CAAU,CAAC;AAEtE,4EAA4E;AAC5E,mDAAmD;AACnD,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,eAEnD;IACG,YAAmB,eAAyC;QACxD,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IACxD,CAAC;IAEM,qBAAqB,CACxB,MAAwB,EACxB,aAAiC;QAEjC,MAAM,gCAAgC,GAAG,MAAM,KAAK,gBAAgB,CAAC,OAAO;eACrE,OAAO,aAAa,KAAK,QAAQ,CAAC;QACzC,MAAM,OAAO,GAAG,gCAAgC;YAC5C,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC;YACjD,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEO,2BAA2B,CAAC,aAAqB;QACrD,OAAO,CACH,aAAa,GAAG,yBAAyB;eACtC,aAAa,GAAG,yBAAyB,CAC/C,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"table-column-number-text-validator.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/table-column-number-text-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,2BAA2B,GAAG;IAChC,sBAAsB;IACtB,6BAA6B;IAC7B,wDAAwD;CAClD,CAAC;AAEX,4EAA4E;AAC5E,mDAAmD;AACnD,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,eAEnD;IACG,YAAmB,eAAyC;QACxD,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IACxD,CAAC;IAEM,qBAAqB,CACxB,MAAwB,EACxB,aAAiC;QAEjC,MAAM,gCAAgC,GAAG,MAAM,KAAK,gBAAgB,CAAC,OAAO;eACrE,OAAO,aAAa,KAAK,QAAQ,CAAC;QACzC,MAAM,OAAO,GAAG,gCAAgC;YAC5C,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC;YACjD,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEM,4BAA4B,CAC/B,MAAwB,EACxB,oBAAwC;QAExC,MAAM,gCAAgC,GAAG,MAAM,KAAK,gBAAgB,CAAC,OAAO;eACrE,OAAO,oBAAoB,KAAK,QAAQ,CAAC;QAChD,MAAM,OAAO,GAAG,gCAAgC;YAC5C,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAEM,qCAAqC,CACxC,MAAwB,EACxB,aAAiC,EACjC,oBAAwC;QAExC,MAAM,yCAAyC,GAAG,MAAM,KAAK,gBAAgB,CAAC,OAAO,CAAC;QACtF,MAAM,OAAO,GAAG,yCAAyC;YACrD,CAAC,CAAC,OAAO,aAAa,KAAK,QAAQ;mBAC9B,OAAO,oBAAoB,KAAK,QAAQ;YAC7C,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,iBAAiB,CAClB,wDAAwD,EACxD,OAAO,CACV,CAAC;IACN,CAAC;IAEO,2BAA2B,CAAC,aAAqB;QACrD,OAAO,CACH,aAAa,GAAG,yBAAyB;eACtC,aAAa,GAAG,yBAAyB,CAC/C,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import type { TablePageObject } from '../../table/testing/table.pageobject';
2
+ import type { TableRecord } from '../../table/types';
3
+ /**
4
+ * Page object for table columns that format their text for display.
5
+ */
6
+ export declare abstract class TableColumnFormattedTextPageObject<T extends TableRecord> {
7
+ protected readonly tablePageObject: TablePageObject<T>;
8
+ private readonly spaceUnicodeCharsRegEx;
9
+ constructor(tablePageObject: TablePageObject<T>);
10
+ getRenderedCellContent(rowIndex: number, columnIndex: number): string;
11
+ getRenderedGroupHeaderContent(groupRowIndex: number): string;
12
+ getCellTitle(rowIndex: number, columnIndex: number): string;
13
+ protected abstract verifyCellType(rowIndex: number, columnIndex: number): void;
14
+ }