@ni/nimble-components 27.0.5 → 27.1.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 +198 -60
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +466 -445
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/menu/index.d.ts +0 -1
- package/dist/esm/menu/index.js +0 -3
- package/dist/esm/menu/index.js.map +1 -1
- package/dist/esm/menu-item/index.d.ts +1 -0
- package/dist/esm/menu-item/index.js +3 -0
- package/dist/esm/menu-item/index.js.map +1 -1
- package/dist/esm/src/menu/index.d.ts +0 -1
- package/dist/esm/src/menu-item/index.d.ts +1 -0
- package/dist/esm/src/table/components/header/index.d.ts +1 -0
- package/dist/esm/src/table/models/table-layout-manager.d.ts +20 -0
- package/dist/esm/src/table-column/base/models/column-internals.d.ts +9 -0
- package/dist/esm/src/table-column/base/types.d.ts +1 -0
- package/dist/esm/src/table-column/icon/index.d.ts +5 -0
- package/dist/esm/src/table-column/icon/types.d.ts +8 -0
- package/dist/esm/table/components/header/index.d.ts +1 -0
- package/dist/esm/table/components/header/index.js +4 -0
- package/dist/esm/table/components/header/index.js.map +1 -1
- package/dist/esm/table/components/header/template.js +25 -22
- package/dist/esm/table/components/header/template.js.map +1 -1
- package/dist/esm/table/models/table-layout-manager.d.ts +20 -0
- package/dist/esm/table/models/table-layout-manager.js +98 -23
- package/dist/esm/table/models/table-layout-manager.js.map +1 -1
- package/dist/esm/table/models/table-update-tracker.js +1 -1
- package/dist/esm/table/models/table-update-tracker.js.map +1 -1
- package/dist/esm/table/styles.js +2 -2
- package/dist/esm/table/styles.js.map +1 -1
- package/dist/esm/table/template.js +3 -0
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table-column/base/models/column-internals.d.ts +9 -0
- package/dist/esm/table-column/base/models/column-internals.js +15 -0
- package/dist/esm/table-column/base/models/column-internals.js.map +1 -1
- package/dist/esm/table-column/base/types.d.ts +1 -0
- package/dist/esm/table-column/base/types.js +13 -11
- package/dist/esm/table-column/base/types.js.map +1 -1
- package/dist/esm/table-column/icon/index.d.ts +5 -0
- package/dist/esm/table-column/icon/index.js +32 -1
- package/dist/esm/table-column/icon/index.js.map +1 -1
- package/dist/esm/table-column/icon/types.d.ts +8 -0
- package/dist/esm/table-column/icon/types.js +8 -0
- package/dist/esm/table-column/icon/types.js.map +1 -0
- package/package.json +1 -1
package/dist/esm/menu/index.d.ts
CHANGED
package/dist/esm/menu/index.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { DesignSystem, Menu as FoundationMenu, menuTemplate as template } from '@microsoft/fast-foundation';
|
|
2
2
|
import { styles } from './styles';
|
|
3
|
-
// FAST menu template requires an anchored region is available using tagFor DI
|
|
4
|
-
// Register anchored region explicitly to make sure it is defined for the template
|
|
5
|
-
import '../anchored-region';
|
|
6
3
|
/**
|
|
7
4
|
* A nimble-styled menu
|
|
8
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,IAAI,IAAI,cAAc,EACtB,YAAY,IAAI,QAAQ,EAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,IAAI,IAAI,cAAc,EACtB,YAAY,IAAI,QAAQ,EAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQlC;;GAEG;AACH,MAAM,OAAO,IAAK,SAAQ,cAAc;CAAG;AAE3C;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,cAAc;IACzB,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC","sourcesContent":["import {\n DesignSystem,\n Menu as FoundationMenu,\n menuTemplate as template\n} from '@microsoft/fast-foundation';\nimport { styles } from './styles';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-menu': Menu;\n }\n}\n\n/**\n * A nimble-styled menu\n */\nexport class Menu extends FoundationMenu {}\n\n/**\n * A function that returns a nimble-menu registration for configuring the component with a DesignSystem.\n * Implements {@link @microsoft/fast-foundation#menuTemplate}\n *\n * @public\n * @remarks\n * Generates HTML Element: \\<nimble-menu\\>\n *\n */\nconst nimbleMenu = Menu.compose({\n baseName: 'menu',\n baseClass: FoundationMenu,\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleMenu());\nexport const menuTag = 'nimble-menu';\n"]}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { DesignSystem, MenuItem as FoundationMenuItem, menuItemTemplate as template } from '@microsoft/fast-foundation';
|
|
2
2
|
import { arrowExpanderRight16X16 } from '@ni/nimble-tokens/dist/icons/js';
|
|
3
3
|
import { styles } from './styles';
|
|
4
|
+
// FAST menu item template requires an anchored region is available using tagFor DI
|
|
5
|
+
// Register anchored region explicitly to make sure it is defined for the template
|
|
6
|
+
import '../anchored-region';
|
|
4
7
|
/**
|
|
5
8
|
* A nimble-styled menu-item
|
|
6
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/menu-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,QAAQ,IAAI,kBAAkB,EAC9B,gBAAgB,IAAI,QAAQ,EAE/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/menu-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,QAAQ,IAAI,kBAAkB,EAC9B,gBAAgB,IAAI,QAAQ,EAE/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,mFAAmF;AACnF,kFAAkF;AAClF,OAAO,oBAAoB,CAAC;AAQ5B;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,kBAAkB;CAAG;AAEnD;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAkB;IACrD,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,kBAAkB;IAC7B,QAAQ;IACR,MAAM;IACN,mBAAmB,EAAE,uBAAuB,CAAC,IAAI;CACpD,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC","sourcesContent":["import {\n DesignSystem,\n MenuItem as FoundationMenuItem,\n menuItemTemplate as template,\n MenuItemOptions\n} from '@microsoft/fast-foundation';\nimport { arrowExpanderRight16X16 } from '@ni/nimble-tokens/dist/icons/js';\nimport { styles } from './styles';\n\n// FAST menu item template requires an anchored region is available using tagFor DI\n// Register anchored region explicitly to make sure it is defined for the template\nimport '../anchored-region';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-menu-item': MenuItem;\n }\n}\n\n/**\n * A nimble-styled menu-item\n */\nexport class MenuItem extends FoundationMenuItem {}\n\n/**\n * A function that returns a nimble-menu-item registration for configuring the component with a DesignSystem.\n * Implements {@link @microsoft/fast-foundation#menuItemTemplate}\n *\n * @public\n * @remarks\n * Generates HTML Element: \\<nimble-menu-item\\>\n *\n */\nconst nimbleMenuItem = MenuItem.compose<MenuItemOptions>({\n baseName: 'menu-item',\n baseClass: FoundationMenuItem,\n template,\n styles,\n expandCollapseGlyph: arrowExpanderRight16X16.data\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleMenuItem());\nexport const menuItemTag = 'nimble-menu-item';\n"]}
|
|
@@ -12,6 +12,7 @@ declare global {
|
|
|
12
12
|
export declare class TableHeader extends FoundationElement {
|
|
13
13
|
sortDirection: TableColumnSortDirection;
|
|
14
14
|
firstSortedColumn: boolean;
|
|
15
|
+
indicatorsHidden: boolean;
|
|
15
16
|
isGrouped: boolean;
|
|
16
17
|
protected sortDirectionChanged(_prev: TableColumnSortDirection | undefined, _next: TableColumnSortDirection): void;
|
|
17
18
|
protected firstSortedColumnChanged(_prev: boolean | undefined, _next: boolean): void;
|
|
@@ -27,11 +27,31 @@ export declare class TableLayoutManager<TData extends TableRecord> {
|
|
|
27
27
|
* @param activeColumnDivider The divider that was clicked on
|
|
28
28
|
*/
|
|
29
29
|
beginColumnInteractiveSize(dragStart: number, activeColumnDivider: number): void;
|
|
30
|
+
/**
|
|
31
|
+
* Determines if the specified column or any columns to the left are resizable.
|
|
32
|
+
*/
|
|
33
|
+
hasResizableColumnToLeft(columnIndex: number): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Determines if the specified column or any columns to the right are resizable.
|
|
36
|
+
*/
|
|
37
|
+
private hasResizableColumnToRight;
|
|
30
38
|
private readonly onDividerMouseMove;
|
|
31
39
|
private readonly onDividerMouseUp;
|
|
32
40
|
private getTotalColumnFixedWidth;
|
|
33
41
|
private setColumnsToFixedSize;
|
|
34
42
|
private getAllowedSizeDelta;
|
|
43
|
+
/**
|
|
44
|
+
* Gets the index of the first resizable column starting with
|
|
45
|
+
* `columnIndex` and moving to the left. If no resizable column
|
|
46
|
+
* is found, returns -1.
|
|
47
|
+
*/
|
|
48
|
+
private getFirstLeftResizableColumnIndex;
|
|
49
|
+
/**
|
|
50
|
+
* Gets the index of the first resizable column starting with
|
|
51
|
+
* `columnIndex` and moving to the right. If no resizable column
|
|
52
|
+
* is found, returns -1.
|
|
53
|
+
*/
|
|
54
|
+
private getFirstRightResizableColumnIndex;
|
|
35
55
|
private performCascadeSizeLeft;
|
|
36
56
|
private performCascadeSizeRight;
|
|
37
57
|
private cacheGridSizedColumns;
|
|
@@ -98,6 +98,15 @@ export declare class ColumnInternals<TColumnConfig, TColumnValidator extends Col
|
|
|
98
98
|
* The minimum size in pixels according to the design doc
|
|
99
99
|
*/
|
|
100
100
|
minPixelWidth: number;
|
|
101
|
+
/**
|
|
102
|
+
* Whether or not resizing the column has been disabled.
|
|
103
|
+
*/
|
|
104
|
+
resizingDisabled: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Whether or not the grouping and sorting indicators should be hidden in the column header
|
|
107
|
+
* when the column is grouped or sorted.
|
|
108
|
+
*/
|
|
109
|
+
hideHeaderIndicators: boolean;
|
|
101
110
|
/**
|
|
102
111
|
* @internal Do not write to this value directly. It is used by the Table in order to store
|
|
103
112
|
* the resolved value of the fractionalWidth after updates programmatic or interactive updates.
|
|
@@ -35,4 +35,5 @@ export type TableColumnSortOperation = (typeof TableColumnSortOperation)[keyof t
|
|
|
35
35
|
export interface TableColumnValidity extends ValidityObject {
|
|
36
36
|
}
|
|
37
37
|
export declare const defaultMinPixelWidth: number;
|
|
38
|
+
export declare const singleIconColumnWidth: number;
|
|
38
39
|
export declare const defaultFractionalWidth = 1;
|
|
@@ -3,6 +3,7 @@ import { TableColumnIconValidator } from './models/table-column-icon-validator';
|
|
|
3
3
|
import type { ColumnInternalsOptions } from '../base/models/column-internals';
|
|
4
4
|
import type { Mapping } from '../../mapping/base';
|
|
5
5
|
import type { MappingConfig } from '../enum-base/models/mapping-config';
|
|
6
|
+
import { TableColumnMappingWidthMode } from './types';
|
|
6
7
|
declare global {
|
|
7
8
|
interface HTMLElementTagNameMap {
|
|
8
9
|
'nimble-table-column-icon': TableColumnIcon;
|
|
@@ -32,9 +33,13 @@ declare const TableColumnIcon_base: (abstract new (...args: any[]) => {
|
|
|
32
33
|
* Table column that maps values to icons / spinners
|
|
33
34
|
*/
|
|
34
35
|
export declare class TableColumnIcon extends TableColumnIcon_base {
|
|
36
|
+
widthMode: TableColumnMappingWidthMode;
|
|
37
|
+
minPixelWidthChanged(): void;
|
|
35
38
|
protected getColumnInternalsOptions(): ColumnInternalsOptions<TableColumnIconValidator>;
|
|
36
39
|
protected createColumnConfig(mappingConfigs: MappingConfigs): TableColumnEnumColumnConfig;
|
|
37
40
|
protected createMappingConfig(mapping: Mapping<unknown>): MappingConfig;
|
|
41
|
+
private widthModeChanged;
|
|
42
|
+
private getConfiguredMinPixelWidth;
|
|
38
43
|
}
|
|
39
44
|
export declare const tableColumnIconTag = "nimble-table-column-icon";
|
|
40
45
|
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Width mode for the icon column
|
|
3
|
+
*/
|
|
4
|
+
export declare const TableColumnMappingWidthMode: {
|
|
5
|
+
readonly default: undefined;
|
|
6
|
+
readonly iconSize: "icon-size";
|
|
7
|
+
};
|
|
8
|
+
export type TableColumnMappingWidthMode = (typeof TableColumnMappingWidthMode)[keyof typeof TableColumnMappingWidthMode];
|
|
@@ -12,6 +12,7 @@ declare global {
|
|
|
12
12
|
export declare class TableHeader extends FoundationElement {
|
|
13
13
|
sortDirection: TableColumnSortDirection;
|
|
14
14
|
firstSortedColumn: boolean;
|
|
15
|
+
indicatorsHidden: boolean;
|
|
15
16
|
isGrouped: boolean;
|
|
16
17
|
protected sortDirectionChanged(_prev: TableColumnSortDirection | undefined, _next: TableColumnSortDirection): void;
|
|
17
18
|
protected firstSortedColumnChanged(_prev: boolean | undefined, _next: boolean): void;
|
|
@@ -13,6 +13,7 @@ export class TableHeader extends FoundationElement {
|
|
|
13
13
|
super(...arguments);
|
|
14
14
|
this.sortDirection = TableColumnSortDirection.none;
|
|
15
15
|
this.firstSortedColumn = false;
|
|
16
|
+
this.indicatorsHidden = false;
|
|
16
17
|
this.isGrouped = false;
|
|
17
18
|
}
|
|
18
19
|
sortDirectionChanged(_prev, _next) {
|
|
@@ -40,6 +41,9 @@ __decorate([
|
|
|
40
41
|
__decorate([
|
|
41
42
|
attr({ attribute: 'first-sorted-column', mode: 'boolean' })
|
|
42
43
|
], TableHeader.prototype, "firstSortedColumn", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
attr({ attribute: 'indicators-hidden', mode: 'boolean' })
|
|
46
|
+
], TableHeader.prototype, "indicatorsHidden", void 0);
|
|
43
47
|
__decorate([
|
|
44
48
|
observable
|
|
45
49
|
], TableHeader.prototype, "isGrouped", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/header/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAAlD;;QAEW,kBAAa,GAA6B,wBAAwB,CAAC,IAAI,CAAC;QAGxE,sBAAiB,GAAG,KAAK,CAAC;QAG1B,cAAS,GAAG,KAAK,CAAC;IA4B7B,CAAC;IA1Ba,oBAAoB,CAC1B,KAA2C,EAC3C,KAA+B;QAE/B,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAES,wBAAwB,CAC9B,KAA0B,EAC1B,KAAc;QAEd,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QAClB,IACI,CAAC,IAAI,CAAC,iBAAiB;eACpB,IAAI,CAAC,aAAa,KAAK,wBAAwB,CAAC,IAAI,EACzD;YACE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACxB;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,wBAAwB,CAAC,SAAS,EAAE;YAClE,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;SAC/B;aAAM;YACH,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;SAChC;IACL,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/header/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAAlD;;QAEW,kBAAa,GAA6B,wBAAwB,CAAC,IAAI,CAAC;QAGxE,sBAAiB,GAAG,KAAK,CAAC;QAG1B,qBAAgB,GAAG,KAAK,CAAC;QAGzB,cAAS,GAAG,KAAK,CAAC;IA4B7B,CAAC;IA1Ba,oBAAoB,CAC1B,KAA2C,EAC3C,KAA+B;QAE/B,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAES,wBAAwB,CAC9B,KAA0B,EAC1B,KAAc;QAEd,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QAClB,IACI,CAAC,IAAI,CAAC,iBAAiB;eACpB,IAAI,CAAC,aAAa,KAAK,wBAAwB,CAAC,IAAI,EACzD;YACE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACxB;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,wBAAwB,CAAC,SAAS,EAAE;YAClE,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;SAC/B;aAAM;YACH,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;SAChC;IACL,CAAC;CACJ;AArCU;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;kDACyC;AAGxE;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;sDAC3B;AAG1B;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;qDAC1B;AAGzB;IADN,UAAU;8CACc;AA8B7B,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,CAAC;IAC1C,QAAQ,EAAE,cAAc;IACxB,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC","sourcesContent":["import { attr, observable } from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { TableColumnSortDirection } from '../../types';\nimport { styles } from './styles';\nimport { template } from './template';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-header': TableHeader;\n }\n}\n\n/**\n * A styled header that is used within the nimble-table.\n * @internal\n */\nexport class TableHeader extends FoundationElement {\n @attr({ attribute: 'sort-direction' })\n public sortDirection: TableColumnSortDirection = TableColumnSortDirection.none;\n\n @attr({ attribute: 'first-sorted-column', mode: 'boolean' })\n public firstSortedColumn = false;\n\n @attr({ attribute: 'indicators-hidden', mode: 'boolean' })\n public indicatorsHidden = false;\n\n @observable\n public isGrouped = false;\n\n protected sortDirectionChanged(\n _prev: TableColumnSortDirection | undefined,\n _next: TableColumnSortDirection\n ): void {\n this.updateAriaSort();\n }\n\n protected firstSortedColumnChanged(\n _prev: boolean | undefined,\n _next: boolean\n ): void {\n this.updateAriaSort();\n }\n\n private updateAriaSort(): void {\n if (\n !this.firstSortedColumn\n || this.sortDirection === TableColumnSortDirection.none\n ) {\n this.ariaSort = null;\n } else if (this.sortDirection === TableColumnSortDirection.ascending) {\n this.ariaSort = 'ascending';\n } else {\n this.ariaSort = 'descending';\n }\n }\n}\n\nconst nimbleTableHeader = TableHeader.compose({\n baseName: 'table-header',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableHeader());\nexport const tableHeaderTag = 'nimble-table-header';\n"]}
|
|
@@ -12,28 +12,31 @@ export const template = html `
|
|
|
12
12
|
@mousedown="${(_x, c) => !(c.event.detail > 1)}"
|
|
13
13
|
>
|
|
14
14
|
<slot></slot>
|
|
15
|
-
|
|
16
|
-
${when(x => x.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
15
|
+
|
|
16
|
+
${when(x => !x.indicatorsHidden, html `
|
|
17
|
+
${'' /* Set aria-hidden="true" on sort indicators because aria-sort is set on the 1st sorted column */}
|
|
18
|
+
${when(x => x.sortDirection === TableColumnSortDirection.ascending, html `
|
|
19
|
+
<${iconArrowUpTag}
|
|
20
|
+
class="sort-indicator"
|
|
21
|
+
title="${x => tableColumnHeaderSortedAscendingLabel.getValueFor(x)}"
|
|
22
|
+
aria-hidden="true"
|
|
23
|
+
></${iconArrowUpTag}>
|
|
24
|
+
`)}
|
|
25
|
+
${when(x => x.sortDirection === TableColumnSortDirection.descending, html `
|
|
26
|
+
<${iconArrowDownTag}
|
|
27
|
+
class="sort-indicator"
|
|
28
|
+
title="${x => tableColumnHeaderSortedDescendingLabel.getValueFor(x)}"
|
|
29
|
+
aria-hidden="true"
|
|
30
|
+
></${iconArrowDownTag}>
|
|
31
|
+
`)}
|
|
32
|
+
${when(x => x.isGrouped, html `
|
|
33
|
+
<${iconTwoSquaresInBracketsTag}
|
|
34
|
+
class="grouped-indicator"
|
|
35
|
+
title="${x => tableColumnHeaderGroupedLabel.getValueFor(x)}"
|
|
36
|
+
role="img"
|
|
37
|
+
aria-label="${x => tableColumnHeaderGroupedLabel.getValueFor(x)}"
|
|
38
|
+
></${iconTwoSquaresInBracketsTag}>
|
|
39
|
+
`)}
|
|
37
40
|
`)}
|
|
38
41
|
</template>
|
|
39
42
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/header/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACH,6BAA6B,EAC7B,qCAAqC,EACrC,sCAAsC,EACzC,MAAM,4CAA4C,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAa;;qBAEpB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;UAC1B,EAAE,CAAC,sDAAsD;sBAC7C,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,KAAoB,CAAC,MAAM,GAAG,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/header/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACH,6BAA6B,EAC7B,qCAAqC,EACrC,sCAAsC,EACzC,MAAM,4CAA4C,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAa;;qBAEpB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;UAC1B,EAAE,CAAC,sDAAsD;sBAC7C,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,KAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;;;;UAI5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAa;cAC5C,EAAE,CAAC,iGAAiG;cACpG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAa;mBAC9E,cAAc;;6BAEJ,CAAC,CAAC,EAAE,CAAC,qCAAqC,CAAC,WAAW,CAAC,CAAC,CAAC;;qBAEjE,cAAc;aACtB,CAAC;cACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAa;mBAC/E,gBAAgB;;6BAEN,CAAC,CAAC,EAAE,CAAC,sCAAsC,CAAC,WAAW,CAAC,CAAC,CAAC;;qBAElE,gBAAgB;aACxB,CAAC;cACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAa;mBACnC,2BAA2B;;6BAEjB,CAAC,CAAC,EAAE,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,CAAC;;kCAE5C,CAAC,CAAC,EAAE,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,CAAC;qBAC9D,2BAA2B;aACnC,CAAC;SACL,CAAC;;CAET,CAAC","sourcesContent":["import { html, when } from '@microsoft/fast-element';\nimport type { TableHeader } from '.';\nimport { iconArrowDownTag } from '../../../icons/arrow-down';\nimport { iconArrowUpTag } from '../../../icons/arrow-up';\nimport { iconTwoSquaresInBracketsTag } from '../../../icons/two-squares-in-brackets';\nimport { TableColumnSortDirection } from '../../types';\nimport {\n tableColumnHeaderGroupedLabel,\n tableColumnHeaderSortedAscendingLabel,\n tableColumnHeaderSortedDescendingLabel\n} from '../../../label-provider/table/label-tokens';\n\n// prettier-ignore\nexport const template = html<TableHeader>`\n <template role=\"columnheader\"\n aria-sort=\"${x => x.ariaSort}\"\n ${'' /* Prevent header double clicks from selecting text */}\n @mousedown=\"${(_x, c) => !((c.event as MouseEvent).detail > 1)}\"\n >\n <slot></slot>\n\n ${when(x => !x.indicatorsHidden, html<TableHeader>`\n ${'' /* Set aria-hidden=\"true\" on sort indicators because aria-sort is set on the 1st sorted column */}\n ${when(x => x.sortDirection === TableColumnSortDirection.ascending, html<TableHeader>`\n <${iconArrowUpTag}\n class=\"sort-indicator\"\n title=\"${x => tableColumnHeaderSortedAscendingLabel.getValueFor(x)}\"\n aria-hidden=\"true\"\n ></${iconArrowUpTag}>\n `)}\n ${when(x => x.sortDirection === TableColumnSortDirection.descending, html<TableHeader>`\n <${iconArrowDownTag}\n class=\"sort-indicator\"\n title=\"${x => tableColumnHeaderSortedDescendingLabel.getValueFor(x)}\"\n aria-hidden=\"true\"\n ></${iconArrowDownTag}>\n `)}\n ${when(x => x.isGrouped, html<TableHeader>`\n <${iconTwoSquaresInBracketsTag}\n class=\"grouped-indicator\"\n title=\"${x => tableColumnHeaderGroupedLabel.getValueFor(x)}\"\n role=\"img\"\n aria-label=\"${x => tableColumnHeaderGroupedLabel.getValueFor(x)}\"\n ></${iconTwoSquaresInBracketsTag}>\n `)}\n `)}\n </template>\n`;\n"]}
|
|
@@ -27,11 +27,31 @@ export declare class TableLayoutManager<TData extends TableRecord> {
|
|
|
27
27
|
* @param activeColumnDivider The divider that was clicked on
|
|
28
28
|
*/
|
|
29
29
|
beginColumnInteractiveSize(dragStart: number, activeColumnDivider: number): void;
|
|
30
|
+
/**
|
|
31
|
+
* Determines if the specified column or any columns to the left are resizable.
|
|
32
|
+
*/
|
|
33
|
+
hasResizableColumnToLeft(columnIndex: number): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Determines if the specified column or any columns to the right are resizable.
|
|
36
|
+
*/
|
|
37
|
+
private hasResizableColumnToRight;
|
|
30
38
|
private readonly onDividerMouseMove;
|
|
31
39
|
private readonly onDividerMouseUp;
|
|
32
40
|
private getTotalColumnFixedWidth;
|
|
33
41
|
private setColumnsToFixedSize;
|
|
34
42
|
private getAllowedSizeDelta;
|
|
43
|
+
/**
|
|
44
|
+
* Gets the index of the first resizable column starting with
|
|
45
|
+
* `columnIndex` and moving to the left. If no resizable column
|
|
46
|
+
* is found, returns -1.
|
|
47
|
+
*/
|
|
48
|
+
private getFirstLeftResizableColumnIndex;
|
|
49
|
+
/**
|
|
50
|
+
* Gets the index of the first resizable column starting with
|
|
51
|
+
* `columnIndex` and moving to the right. If no resizable column
|
|
52
|
+
* is found, returns -1.
|
|
53
|
+
*/
|
|
54
|
+
private getFirstRightResizableColumnIndex;
|
|
35
55
|
private performCascadeSizeLeft;
|
|
36
56
|
private performCascadeSizeRight;
|
|
37
57
|
private cacheGridSizedColumns;
|
|
@@ -35,6 +35,7 @@ export class TableLayoutManager {
|
|
|
35
35
|
this.isColumnBeingSized = false;
|
|
36
36
|
this.activeColumnIndex = undefined;
|
|
37
37
|
this.activeColumnDivider = undefined;
|
|
38
|
+
this.visibleColumns = [];
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
getGridTemplateColumns() {
|
|
@@ -70,6 +71,18 @@ export class TableLayoutManager {
|
|
|
70
71
|
document.addEventListener('mousemove', this.onDividerMouseMove);
|
|
71
72
|
document.addEventListener('mouseup', this.onDividerMouseUp);
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Determines if the specified column or any columns to the left are resizable.
|
|
76
|
+
*/
|
|
77
|
+
hasResizableColumnToLeft(columnIndex) {
|
|
78
|
+
return this.getFirstLeftResizableColumnIndex(columnIndex) !== -1;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Determines if the specified column or any columns to the right are resizable.
|
|
82
|
+
*/
|
|
83
|
+
hasResizableColumnToRight(columnIndex) {
|
|
84
|
+
return this.getFirstRightResizableColumnIndex(columnIndex) !== -1;
|
|
85
|
+
}
|
|
73
86
|
getTotalColumnFixedWidth() {
|
|
74
87
|
let totalColumnFixedWidth = 0;
|
|
75
88
|
for (const column of this.visibleColumns) {
|
|
@@ -90,49 +103,112 @@ export class TableLayoutManager {
|
|
|
90
103
|
let availableSpace = 0;
|
|
91
104
|
if (requestedResizeAmount > 0) {
|
|
92
105
|
// size right
|
|
93
|
-
return
|
|
106
|
+
return this.hasResizableColumnToLeft(this.leftColumnIndex)
|
|
107
|
+
? requestedResizeAmount
|
|
108
|
+
: 0;
|
|
94
109
|
}
|
|
95
110
|
// size left
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
111
|
+
if (!this.hasResizableColumnToRight(this.rightColumnIndex)) {
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
for (let i = this.leftColumnIndex; i >= 0; i--) {
|
|
115
|
+
const columnInitialWidths = this.initialColumnWidths[i];
|
|
116
|
+
const column = this.visibleColumns[i];
|
|
117
|
+
if (!column.columnInternals.resizingDisabled) {
|
|
118
|
+
availableSpace
|
|
119
|
+
+= columnInitialWidths.initialPixelWidth
|
|
120
|
+
- column.columnInternals.minPixelWidth;
|
|
121
|
+
}
|
|
103
122
|
}
|
|
104
123
|
return Math.max(requestedResizeAmount, -availableSpace);
|
|
105
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Gets the index of the first resizable column starting with
|
|
127
|
+
* `columnIndex` and moving to the left. If no resizable column
|
|
128
|
+
* is found, returns -1.
|
|
129
|
+
*/
|
|
130
|
+
getFirstLeftResizableColumnIndex(columnIndex) {
|
|
131
|
+
const visibleColumns = this.visibleColumns.length === 0
|
|
132
|
+
? this.getVisibleColumns()
|
|
133
|
+
: this.visibleColumns;
|
|
134
|
+
for (let i = columnIndex; i >= 0; i--) {
|
|
135
|
+
const column = visibleColumns[i];
|
|
136
|
+
if (!column) {
|
|
137
|
+
return -1;
|
|
138
|
+
}
|
|
139
|
+
if (!column.columnInternals.resizingDisabled) {
|
|
140
|
+
return i;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return -1;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Gets the index of the first resizable column starting with
|
|
147
|
+
* `columnIndex` and moving to the right. If no resizable column
|
|
148
|
+
* is found, returns -1.
|
|
149
|
+
*/
|
|
150
|
+
getFirstRightResizableColumnIndex(columnIndex) {
|
|
151
|
+
const visibleColumns = this.visibleColumns.length === 0
|
|
152
|
+
? this.getVisibleColumns()
|
|
153
|
+
: this.visibleColumns;
|
|
154
|
+
for (let i = columnIndex; i < visibleColumns.length; i++) {
|
|
155
|
+
const column = visibleColumns[i];
|
|
156
|
+
if (!column) {
|
|
157
|
+
return -1;
|
|
158
|
+
}
|
|
159
|
+
if (!column.columnInternals.resizingDisabled) {
|
|
160
|
+
return i;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return -1;
|
|
164
|
+
}
|
|
106
165
|
performCascadeSizeLeft(leftColumnIndex, delta) {
|
|
166
|
+
const firstLeftResizableColumn = this.getFirstLeftResizableColumnIndex(leftColumnIndex);
|
|
167
|
+
if (firstLeftResizableColumn === -1) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
107
170
|
let currentDelta = delta;
|
|
108
|
-
const
|
|
171
|
+
const leftColumn = this.visibleColumns[firstLeftResizableColumn];
|
|
172
|
+
const leftColumnInitialWidths = this.initialColumnWidths[firstLeftResizableColumn];
|
|
109
173
|
const allowedDelta = delta < 0
|
|
110
|
-
? Math.max(
|
|
174
|
+
? Math.max(leftColumn.columnInternals.minPixelWidth
|
|
111
175
|
- leftColumnInitialWidths.initialPixelWidth, currentDelta)
|
|
112
176
|
: delta;
|
|
113
177
|
const actualDelta = allowedDelta;
|
|
114
|
-
const leftColumn = this.visibleColumns[leftColumnIndex];
|
|
115
178
|
leftColumn.columnInternals.currentPixelWidth += actualDelta;
|
|
116
|
-
if (actualDelta > currentDelta
|
|
179
|
+
if (actualDelta > currentDelta
|
|
180
|
+
&& firstLeftResizableColumn > 0
|
|
181
|
+
&& delta < 0) {
|
|
117
182
|
currentDelta -= allowedDelta;
|
|
118
|
-
this.performCascadeSizeLeft(
|
|
183
|
+
this.performCascadeSizeLeft(firstLeftResizableColumn - 1, currentDelta);
|
|
119
184
|
}
|
|
120
185
|
}
|
|
121
186
|
performCascadeSizeRight(rightColumnIndex, delta) {
|
|
187
|
+
const firstRightResizableColumn = this.getFirstRightResizableColumnIndex(rightColumnIndex);
|
|
188
|
+
if (firstRightResizableColumn === -1) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
122
191
|
let currentDelta = delta;
|
|
123
|
-
const
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
192
|
+
const rightColumn = this.visibleColumns[firstRightResizableColumn];
|
|
193
|
+
const rightColumnInitialWidths = this.initialColumnWidths[firstRightResizableColumn];
|
|
194
|
+
let allowedDelta;
|
|
195
|
+
if (rightColumn.columnInternals.resizingDisabled) {
|
|
196
|
+
allowedDelta = 0;
|
|
197
|
+
}
|
|
198
|
+
else if (delta > 0) {
|
|
199
|
+
allowedDelta = Math.min(rightColumnInitialWidths.initialPixelWidth
|
|
200
|
+
- rightColumn.columnInternals.minPixelWidth, currentDelta);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
allowedDelta = delta;
|
|
204
|
+
}
|
|
128
205
|
const actualDelta = allowedDelta;
|
|
129
|
-
const rightColumn = this.visibleColumns[rightColumnIndex];
|
|
130
206
|
rightColumn.columnInternals.currentPixelWidth -= actualDelta;
|
|
131
207
|
if (actualDelta < currentDelta
|
|
132
|
-
&&
|
|
208
|
+
&& firstRightResizableColumn < this.visibleColumns.length - 1
|
|
133
209
|
&& delta > 0) {
|
|
134
210
|
currentDelta -= allowedDelta;
|
|
135
|
-
this.performCascadeSizeRight(
|
|
211
|
+
this.performCascadeSizeRight(firstRightResizableColumn + 1, currentDelta);
|
|
136
212
|
}
|
|
137
213
|
}
|
|
138
214
|
cacheGridSizedColumns() {
|
|
@@ -148,8 +224,7 @@ export class TableLayoutManager {
|
|
|
148
224
|
for (const column of this.visibleColumns) {
|
|
149
225
|
this.initialColumnWidths.push({
|
|
150
226
|
initalColumnFractionalWidth: column.columnInternals.currentFractionalWidth,
|
|
151
|
-
initialPixelWidth: column.columnInternals.currentPixelWidth
|
|
152
|
-
minPixelWidth: column.columnInternals.minPixelWidth
|
|
227
|
+
initialPixelWidth: column.columnInternals.currentPixelWidth
|
|
153
228
|
});
|
|
154
229
|
}
|
|
155
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-layout-manager.js","sourceRoot":"","sources":["../../../../src/table/models/table-layout-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { observable } from '@microsoft/fast-element';\nimport type { Table } from '..';\nimport type { TableColumn } from '../../table-column/base';\nimport type { TableRecord } from '../types';\n\n/**\n * This class manages the layout of columns within a Table.\n * @interal\n */\nexport class TableLayoutManager<TData extends TableRecord> {\n @observable\n public isColumnBeingSized = false;\n\n @observable\n public activeColumnIndex?: number;\n\n @observable\n public activeColumnDivider?: number;\n\n private gridSizedColumns?: TableColumn[];\n private visibleColumns: TableColumn[] = [];\n private initialTableScrollableWidth?: number;\n private initialTableScrollableMinWidth?: number;\n private initialColumnTotalWidth?: number;\n private currentTotalDelta = 0;\n private dragStart = 0;\n private leftColumnIndex?: number;\n private rightColumnIndex?: number;\n private initialColumnWidths: {\n initalColumnFractionalWidth: number,\n initialPixelWidth: number,\n minPixelWidth: number\n }[] = [];\n\n public constructor(private readonly table: Table<TData>) {}\n\n public getGridTemplateColumns(): string {\n return this.getVisibleColumns()\n .map(column => {\n const {\n minPixelWidth,\n currentPixelWidth,\n currentFractionalWidth\n } = column.columnInternals;\n if (currentPixelWidth) {\n const coercedPixelWidth = Math.max(\n minPixelWidth,\n currentPixelWidth\n );\n return `${coercedPixelWidth}px`;\n }\n\n return `minmax(${minPixelWidth}px, ${currentFractionalWidth}fr)`;\n })\n .join(' ');\n }\n\n /**\n * Sets up state related to interactively sizing a column.\n * @param dragStart The x-position from which a column size was started\n * @param activeColumnDivider The divider that was clicked on\n */\n public beginColumnInteractiveSize(\n dragStart: number,\n activeColumnDivider: number\n ): void {\n this.activeColumnDivider = activeColumnDivider;\n this.leftColumnIndex = this.getLeftColumnIndexFromDivider(\n this.activeColumnDivider\n );\n this.rightColumnIndex = this.leftColumnIndex + 1;\n this.activeColumnIndex = this.leftColumnIndex + (this.activeColumnDivider % 2);\n this.dragStart = dragStart;\n this.currentTotalDelta = 0;\n this.visibleColumns = this.getVisibleColumns();\n this.setColumnsToFixedSize();\n this.initialTableScrollableWidth = this.table.viewport.scrollWidth;\n this.initialTableScrollableMinWidth = this.table.tableScrollableMinWidth;\n this.initialColumnTotalWidth = this.getTotalColumnFixedWidth();\n this.isColumnBeingSized = true;\n document.addEventListener('mousemove', this.onDividerMouseMove);\n document.addEventListener('mouseup', this.onDividerMouseUp);\n }\n\n private readonly onDividerMouseMove = (event: Event): void => {\n const mouseEvent = event as MouseEvent;\n for (let i = 0; i < this.visibleColumns.length; i++) {\n this.visibleColumns[i]!.columnInternals.currentPixelWidth = this.initialColumnWidths[i]?.initialPixelWidth;\n }\n this.currentTotalDelta = this.getAllowedSizeDelta(\n mouseEvent.clientX - this.dragStart\n );\n this.performCascadeSizeLeft(\n this.leftColumnIndex!,\n this.currentTotalDelta\n );\n this.performCascadeSizeRight(\n this.rightColumnIndex!,\n this.currentTotalDelta\n );\n\n const totalColumnWidthDelta = this.getTotalColumnFixedWidth() - this.initialColumnTotalWidth!;\n if (totalColumnWidthDelta > 0) {\n this.table.tableScrollableMinWidth = this.initialTableScrollableWidth! + totalColumnWidthDelta;\n } else {\n this.table.tableScrollableMinWidth = this.initialTableScrollableMinWidth!;\n }\n };\n\n private readonly onDividerMouseUp = (): void => {\n document.removeEventListener('mousemove', this.onDividerMouseMove);\n document.removeEventListener('mouseup', this.onDividerMouseUp);\n this.resetGridSizedColumns();\n this.isColumnBeingSized = false;\n this.activeColumnIndex = undefined;\n this.activeColumnDivider = undefined;\n };\n\n private getTotalColumnFixedWidth(): number {\n let totalColumnFixedWidth = 0;\n for (const column of this.visibleColumns) {\n totalColumnFixedWidth\n += column.columnInternals.currentPixelWidth ?? 0;\n }\n return totalColumnFixedWidth;\n }\n\n private setColumnsToFixedSize(): void {\n this.cacheGridSizedColumns();\n const headers = this.table.getHeaderContainerElements();\n for (let i = 0; i < headers.length; i++) {\n this.visibleColumns[i]!.columnInternals.currentPixelWidth = headers[i]!.getBoundingClientRect().width;\n }\n this.cacheColumnInitialPixelWidths();\n }\n\n private getAllowedSizeDelta(requestedResizeAmount: number): number {\n let availableSpace = 0;\n if (requestedResizeAmount > 0) {\n // size right\n return requestedResizeAmount;\n }\n\n // size left\n let currentIndex = this.leftColumnIndex!;\n while (currentIndex >= 0) {\n const columnInitialWidths = this.initialColumnWidths[currentIndex]!;\n availableSpace\n += columnInitialWidths.initialPixelWidth\n - columnInitialWidths.minPixelWidth;\n currentIndex -= 1;\n }\n return Math.max(requestedResizeAmount, -availableSpace);\n }\n\n private performCascadeSizeLeft(\n leftColumnIndex: number,\n delta: number\n ): void {\n let currentDelta = delta;\n const leftColumnInitialWidths = this.initialColumnWidths[leftColumnIndex]!;\n const allowedDelta = delta < 0\n ? Math.max(\n leftColumnInitialWidths.minPixelWidth\n - leftColumnInitialWidths.initialPixelWidth,\n currentDelta\n )\n : delta;\n const actualDelta = allowedDelta;\n const leftColumn = this.visibleColumns[leftColumnIndex]!;\n leftColumn.columnInternals.currentPixelWidth! += actualDelta;\n\n if (actualDelta > currentDelta && leftColumnIndex > 0 && delta < 0) {\n currentDelta -= allowedDelta;\n this.performCascadeSizeLeft(leftColumnIndex - 1, currentDelta);\n }\n }\n\n private performCascadeSizeRight(\n rightColumnIndex: number,\n delta: number\n ): void {\n let currentDelta = delta;\n const rightColumnInitialWidths = this.initialColumnWidths[rightColumnIndex]!;\n const allowedDelta = delta > 0\n ? Math.min(\n rightColumnInitialWidths.initialPixelWidth\n - rightColumnInitialWidths.minPixelWidth,\n currentDelta\n )\n : delta;\n const actualDelta = allowedDelta;\n const rightColumn = this.visibleColumns[rightColumnIndex]!;\n rightColumn.columnInternals.currentPixelWidth! -= actualDelta;\n\n if (\n actualDelta < currentDelta\n && rightColumnIndex < this.visibleColumns.length - 1\n && delta > 0\n ) {\n currentDelta -= allowedDelta;\n this.performCascadeSizeRight(rightColumnIndex + 1, currentDelta);\n }\n }\n\n private cacheGridSizedColumns(): void {\n this.gridSizedColumns = [];\n for (const column of this.visibleColumns) {\n if (column.columnInternals.currentPixelWidth === undefined) {\n this.gridSizedColumns.push(column);\n }\n }\n }\n\n private cacheColumnInitialPixelWidths(): void {\n this.initialColumnWidths = [];\n for (const column of this.visibleColumns) {\n this.initialColumnWidths.push({\n initalColumnFractionalWidth:\n column.columnInternals.currentFractionalWidth,\n initialPixelWidth: column.columnInternals.currentPixelWidth!,\n minPixelWidth: column.columnInternals.minPixelWidth\n });\n }\n }\n\n private resetGridSizedColumns(): void {\n if (!this.gridSizedColumns || this.gridSizedColumns.length === 0) {\n return;\n }\n\n const gridSizeColumnTotal = this.gridSizedColumns.reduce(\n (sum, col) => sum + col.columnInternals.currentPixelWidth!,\n 0\n );\n const gridSizeColumnAverage = gridSizeColumnTotal / this.gridSizedColumns.length;\n\n let gridColumnIndex = 0;\n for (\n let i = 0;\n i < this.visibleColumns.length\n && gridColumnIndex < this.gridSizedColumns.length;\n i++\n ) {\n const column = this.visibleColumns[i]!;\n if (column === this.gridSizedColumns[gridColumnIndex]) {\n gridColumnIndex += 1;\n column.columnInternals.currentFractionalWidth = column.columnInternals.currentPixelWidth!\n / gridSizeColumnAverage;\n column.columnInternals.currentPixelWidth = undefined;\n }\n }\n }\n\n private getVisibleColumns(): TableColumn[] {\n return this.table.columns.filter(column => !column.columnHidden);\n }\n\n private getLeftColumnIndexFromDivider(dividerIndex: number): number {\n return Math.floor(dividerIndex / 2);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"table-layout-manager.js","sourceRoot":"","sources":["../../../../src/table/models/table-layout-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { observable } from '@microsoft/fast-element';\nimport type { Table } from '..';\nimport type { TableColumn } from '../../table-column/base';\nimport type { TableRecord } from '../types';\n\n/**\n * This class manages the layout of columns within a Table.\n * @interal\n */\nexport class TableLayoutManager<TData extends TableRecord> {\n @observable\n public isColumnBeingSized = false;\n\n @observable\n public activeColumnIndex?: number;\n\n @observable\n public activeColumnDivider?: number;\n\n private gridSizedColumns?: TableColumn[];\n private visibleColumns: TableColumn[] = [];\n private initialTableScrollableWidth?: number;\n private initialTableScrollableMinWidth?: number;\n private initialColumnTotalWidth?: number;\n private currentTotalDelta = 0;\n private dragStart = 0;\n private leftColumnIndex?: number;\n private rightColumnIndex?: number;\n private initialColumnWidths: {\n initalColumnFractionalWidth: number,\n initialPixelWidth: number\n }[] = [];\n\n public constructor(private readonly table: Table<TData>) {}\n\n public getGridTemplateColumns(): string {\n return this.getVisibleColumns()\n .map(column => {\n const {\n minPixelWidth,\n currentPixelWidth,\n currentFractionalWidth\n } = column.columnInternals;\n if (currentPixelWidth) {\n const coercedPixelWidth = Math.max(\n minPixelWidth,\n currentPixelWidth\n );\n return `${coercedPixelWidth}px`;\n }\n\n return `minmax(${minPixelWidth}px, ${currentFractionalWidth}fr)`;\n })\n .join(' ');\n }\n\n /**\n * Sets up state related to interactively sizing a column.\n * @param dragStart The x-position from which a column size was started\n * @param activeColumnDivider The divider that was clicked on\n */\n public beginColumnInteractiveSize(\n dragStart: number,\n activeColumnDivider: number\n ): void {\n this.activeColumnDivider = activeColumnDivider;\n this.leftColumnIndex = this.getLeftColumnIndexFromDivider(\n this.activeColumnDivider\n );\n this.rightColumnIndex = this.leftColumnIndex + 1;\n this.activeColumnIndex = this.leftColumnIndex + (this.activeColumnDivider % 2);\n this.dragStart = dragStart;\n this.currentTotalDelta = 0;\n this.visibleColumns = this.getVisibleColumns();\n this.setColumnsToFixedSize();\n this.initialTableScrollableWidth = this.table.viewport.scrollWidth;\n this.initialTableScrollableMinWidth = this.table.tableScrollableMinWidth;\n this.initialColumnTotalWidth = this.getTotalColumnFixedWidth();\n this.isColumnBeingSized = true;\n document.addEventListener('mousemove', this.onDividerMouseMove);\n document.addEventListener('mouseup', this.onDividerMouseUp);\n }\n\n /**\n * Determines if the specified column or any columns to the left are resizable.\n */\n public hasResizableColumnToLeft(columnIndex: number): boolean {\n return this.getFirstLeftResizableColumnIndex(columnIndex) !== -1;\n }\n\n /**\n * Determines if the specified column or any columns to the right are resizable.\n */\n private hasResizableColumnToRight(columnIndex: number): boolean {\n return this.getFirstRightResizableColumnIndex(columnIndex) !== -1;\n }\n\n private readonly onDividerMouseMove = (event: Event): void => {\n const mouseEvent = event as MouseEvent;\n for (let i = 0; i < this.visibleColumns.length; i++) {\n this.visibleColumns[i]!.columnInternals.currentPixelWidth = this.initialColumnWidths[i]?.initialPixelWidth;\n }\n this.currentTotalDelta = this.getAllowedSizeDelta(\n mouseEvent.clientX - this.dragStart\n );\n this.performCascadeSizeLeft(\n this.leftColumnIndex!,\n this.currentTotalDelta\n );\n this.performCascadeSizeRight(\n this.rightColumnIndex!,\n this.currentTotalDelta\n );\n\n const totalColumnWidthDelta = this.getTotalColumnFixedWidth() - this.initialColumnTotalWidth!;\n if (totalColumnWidthDelta > 0) {\n this.table.tableScrollableMinWidth = this.initialTableScrollableWidth! + totalColumnWidthDelta;\n } else {\n this.table.tableScrollableMinWidth = this.initialTableScrollableMinWidth!;\n }\n };\n\n private readonly onDividerMouseUp = (): void => {\n document.removeEventListener('mousemove', this.onDividerMouseMove);\n document.removeEventListener('mouseup', this.onDividerMouseUp);\n this.resetGridSizedColumns();\n this.isColumnBeingSized = false;\n this.activeColumnIndex = undefined;\n this.activeColumnDivider = undefined;\n this.visibleColumns = [];\n };\n\n private getTotalColumnFixedWidth(): number {\n let totalColumnFixedWidth = 0;\n for (const column of this.visibleColumns) {\n totalColumnFixedWidth\n += column.columnInternals.currentPixelWidth ?? 0;\n }\n return totalColumnFixedWidth;\n }\n\n private setColumnsToFixedSize(): void {\n this.cacheGridSizedColumns();\n const headers = this.table.getHeaderContainerElements();\n for (let i = 0; i < headers.length; i++) {\n this.visibleColumns[i]!.columnInternals.currentPixelWidth = headers[i]!.getBoundingClientRect().width;\n }\n this.cacheColumnInitialPixelWidths();\n }\n\n private getAllowedSizeDelta(requestedResizeAmount: number): number {\n let availableSpace = 0;\n if (requestedResizeAmount > 0) {\n // size right\n return this.hasResizableColumnToLeft(this.leftColumnIndex!)\n ? requestedResizeAmount\n : 0;\n }\n\n // size left\n if (!this.hasResizableColumnToRight(this.rightColumnIndex!)) {\n return 0;\n }\n\n for (let i = this.leftColumnIndex!; i >= 0; i--) {\n const columnInitialWidths = this.initialColumnWidths[i]!;\n const column = this.visibleColumns[i]!;\n if (!column.columnInternals.resizingDisabled) {\n availableSpace\n += columnInitialWidths.initialPixelWidth\n - column.columnInternals.minPixelWidth;\n }\n }\n return Math.max(requestedResizeAmount, -availableSpace);\n }\n\n /**\n * Gets the index of the first resizable column starting with\n * `columnIndex` and moving to the left. If no resizable column\n * is found, returns -1.\n */\n private getFirstLeftResizableColumnIndex(columnIndex: number): number {\n const visibleColumns = this.visibleColumns.length === 0\n ? this.getVisibleColumns()\n : this.visibleColumns;\n for (let i = columnIndex; i >= 0; i--) {\n const column = visibleColumns[i];\n if (!column) {\n return -1;\n }\n if (!column.columnInternals.resizingDisabled) {\n return i;\n }\n }\n return -1;\n }\n\n /**\n * Gets the index of the first resizable column starting with\n * `columnIndex` and moving to the right. If no resizable column\n * is found, returns -1.\n */\n private getFirstRightResizableColumnIndex(columnIndex: number): number {\n const visibleColumns = this.visibleColumns.length === 0\n ? this.getVisibleColumns()\n : this.visibleColumns;\n for (let i = columnIndex; i < visibleColumns.length; i++) {\n const column = visibleColumns[i];\n if (!column) {\n return -1;\n }\n if (!column.columnInternals.resizingDisabled) {\n return i;\n }\n }\n return -1;\n }\n\n private performCascadeSizeLeft(\n leftColumnIndex: number,\n delta: number\n ): void {\n const firstLeftResizableColumn = this.getFirstLeftResizableColumnIndex(leftColumnIndex);\n if (firstLeftResizableColumn === -1) {\n return;\n }\n\n let currentDelta = delta;\n const leftColumn = this.visibleColumns[firstLeftResizableColumn]!;\n const leftColumnInitialWidths = this.initialColumnWidths[firstLeftResizableColumn]!;\n const allowedDelta = delta < 0\n ? Math.max(\n leftColumn.columnInternals.minPixelWidth\n - leftColumnInitialWidths.initialPixelWidth,\n currentDelta\n )\n : delta;\n const actualDelta = allowedDelta;\n leftColumn.columnInternals.currentPixelWidth! += actualDelta;\n\n if (\n actualDelta > currentDelta\n && firstLeftResizableColumn > 0\n && delta < 0\n ) {\n currentDelta -= allowedDelta;\n this.performCascadeSizeLeft(\n firstLeftResizableColumn - 1,\n currentDelta\n );\n }\n }\n\n private performCascadeSizeRight(\n rightColumnIndex: number,\n delta: number\n ): void {\n const firstRightResizableColumn = this.getFirstRightResizableColumnIndex(rightColumnIndex);\n if (firstRightResizableColumn === -1) {\n return;\n }\n\n let currentDelta = delta;\n const rightColumn = this.visibleColumns[firstRightResizableColumn]!;\n const rightColumnInitialWidths = this.initialColumnWidths[firstRightResizableColumn]!;\n let allowedDelta: number;\n if (rightColumn.columnInternals.resizingDisabled) {\n allowedDelta = 0;\n } else if (delta > 0) {\n allowedDelta = Math.min(\n rightColumnInitialWidths.initialPixelWidth\n - rightColumn.columnInternals.minPixelWidth,\n currentDelta\n );\n } else {\n allowedDelta = delta;\n }\n const actualDelta = allowedDelta;\n rightColumn.columnInternals.currentPixelWidth! -= actualDelta;\n\n if (\n actualDelta < currentDelta\n && firstRightResizableColumn < this.visibleColumns.length - 1\n && delta > 0\n ) {\n currentDelta -= allowedDelta;\n this.performCascadeSizeRight(\n firstRightResizableColumn + 1,\n currentDelta\n );\n }\n }\n\n private cacheGridSizedColumns(): void {\n this.gridSizedColumns = [];\n for (const column of this.visibleColumns) {\n if (column.columnInternals.currentPixelWidth === undefined) {\n this.gridSizedColumns.push(column);\n }\n }\n }\n\n private cacheColumnInitialPixelWidths(): void {\n this.initialColumnWidths = [];\n for (const column of this.visibleColumns) {\n this.initialColumnWidths.push({\n initalColumnFractionalWidth:\n column.columnInternals.currentFractionalWidth,\n initialPixelWidth: column.columnInternals.currentPixelWidth!\n });\n }\n }\n\n private resetGridSizedColumns(): void {\n if (!this.gridSizedColumns || this.gridSizedColumns.length === 0) {\n return;\n }\n\n const gridSizeColumnTotal = this.gridSizedColumns.reduce(\n (sum, col) => sum + col.columnInternals.currentPixelWidth!,\n 0\n );\n const gridSizeColumnAverage = gridSizeColumnTotal / this.gridSizedColumns.length;\n\n let gridColumnIndex = 0;\n for (\n let i = 0;\n i < this.visibleColumns.length\n && gridColumnIndex < this.gridSizedColumns.length;\n i++\n ) {\n const column = this.visibleColumns[i]!;\n if (column === this.gridSizedColumns[gridColumnIndex]) {\n gridColumnIndex += 1;\n column.columnInternals.currentFractionalWidth = column.columnInternals.currentPixelWidth!\n / gridSizeColumnAverage;\n column.columnInternals.currentPixelWidth = undefined;\n }\n }\n }\n\n private getVisibleColumns(): TableColumn[] {\n return this.table.columns.filter(column => !column.columnHidden);\n }\n\n private getLeftColumnIndexFromDivider(dividerIndex: number): number {\n return Math.floor(dividerIndex / 2);\n }\n}\n"]}
|
|
@@ -89,7 +89,7 @@ export class TableUpdateTracker extends UpdateTracker {
|
|
|
89
89
|
this.track('columnSort');
|
|
90
90
|
}
|
|
91
91
|
else if (isColumnProperty(changedColumnProperty, 'columnHidden')
|
|
92
|
-
|| isColumnInternalsProperty(changedColumnProperty, 'currentFractionalWidth', 'currentPixelWidth', 'minPixelWidth')) {
|
|
92
|
+
|| isColumnInternalsProperty(changedColumnProperty, 'currentFractionalWidth', 'currentPixelWidth', 'minPixelWidth', 'resizingDisabled')) {
|
|
93
93
|
this.track('columnWidths');
|
|
94
94
|
}
|
|
95
95
|
else if (isColumnProperty(changedColumnProperty, 'actionMenuSlot')) {
|