@ni/nimble-components 29.6.0 → 29.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-components-bundle.js +1302 -41
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +4053 -3810
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table/components/cell/index.d.ts +9 -0
- package/dist/esm/table/components/cell/index.js +20 -0
- package/dist/esm/table/components/cell/index.js.map +1 -1
- package/dist/esm/table/components/cell/styles.js +17 -1
- package/dist/esm/table/components/cell/styles.js.map +1 -1
- package/dist/esm/table/components/cell/template.js +10 -2
- package/dist/esm/table/components/cell/template.js.map +1 -1
- package/dist/esm/table/components/group-row/index.d.ts +11 -3
- package/dist/esm/table/components/group-row/index.js +13 -1
- package/dist/esm/table/components/group-row/index.js.map +1 -1
- package/dist/esm/table/components/group-row/styles.js +7 -1
- package/dist/esm/table/components/group-row/styles.js.map +1 -1
- package/dist/esm/table/components/group-row/template.js +1 -1
- package/dist/esm/table/components/group-row/template.js.map +1 -1
- package/dist/esm/table/components/header/styles.js +7 -1
- package/dist/esm/table/components/header/styles.js.map +1 -1
- package/dist/esm/table/components/row/index.d.ts +16 -4
- package/dist/esm/table/components/row/index.js +34 -6
- package/dist/esm/table/components/row/index.js.map +1 -1
- package/dist/esm/table/components/row/styles.js +39 -1
- package/dist/esm/table/components/row/styles.js.map +1 -1
- package/dist/esm/table/components/row/template.js +4 -2
- package/dist/esm/table/components/row/template.js.map +1 -1
- package/dist/esm/table/index.d.ts +22 -2
- package/dist/esm/table/index.js +58 -1
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/keyboard-navigation-manager.d.ts +96 -0
- package/dist/esm/table/models/keyboard-navigation-manager.js +1015 -0
- package/dist/esm/table/models/keyboard-navigation-manager.js.map +1 -0
- package/dist/esm/table/models/table-update-tracker.d.ts +2 -1
- package/dist/esm/table/models/table-update-tracker.js +20 -3
- package/dist/esm/table/models/table-update-tracker.js.map +1 -1
- package/dist/esm/table/models/virtualizer.d.ts +6 -2
- package/dist/esm/table/models/virtualizer.js +16 -22
- package/dist/esm/table/models/virtualizer.js.map +1 -1
- package/dist/esm/table/styles.js +21 -0
- package/dist/esm/table/styles.js.map +1 -1
- package/dist/esm/table/template.js +21 -3
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table/testing/table.pageobject.d.ts +7 -2
- package/dist/esm/table/testing/table.pageobject.js +16 -9
- package/dist/esm/table/testing/table.pageobject.js.map +1 -1
- package/dist/esm/table/types.d.ts +38 -0
- package/dist/esm/table/types.js +14 -0
- package/dist/esm/table/types.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/index.d.ts +3 -0
- package/dist/esm/table-column/anchor/cell-view/index.js +13 -0
- package/dist/esm/table-column/anchor/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/template.js +4 -2
- package/dist/esm/table-column/anchor/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/base/cell-view/index.d.ts +5 -0
- package/dist/esm/table-column/base/cell-view/index.js +7 -0
- package/dist/esm/table-column/base/cell-view/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,7 @@ import type { MenuButton } from '../../../menu-button';
|
|
|
4
4
|
import type { MenuButtonToggleEventDetail } from '../../../menu-button/types';
|
|
5
5
|
import type { TableColumn } from '../../../table-column/base';
|
|
6
6
|
import type { TableCellRecord, TableCellState } from '../../../table-column/base/types';
|
|
7
|
+
import type { TableCellView } from '../../../table-column/base/cell-view';
|
|
7
8
|
declare global {
|
|
8
9
|
interface HTMLElementTagNameMap {
|
|
9
10
|
'nimble-table-cell': TableCell;
|
|
@@ -22,9 +23,17 @@ export declare class TableCell<TCellRecord extends TableCellRecord = TableCellRe
|
|
|
22
23
|
menuOpen: boolean;
|
|
23
24
|
actionMenuLabel?: string;
|
|
24
25
|
cellViewTemplate?: ViewTemplate<TableCell>;
|
|
26
|
+
/** @internal */
|
|
27
|
+
cellViewContainer: HTMLElement;
|
|
25
28
|
nestingLevel: number;
|
|
26
29
|
readonly actionMenuButton?: MenuButton;
|
|
30
|
+
/** @internal */
|
|
31
|
+
get cellView(): TableCellView<TCellRecord>;
|
|
27
32
|
onActionMenuBeforeToggle(event: CustomEvent<MenuButtonToggleEventDetail>): void;
|
|
28
33
|
onActionMenuToggle(event: CustomEvent<MenuButtonToggleEventDetail>): void;
|
|
34
|
+
onActionMenuBlur(): void;
|
|
35
|
+
onCellViewFocusIn(): void;
|
|
36
|
+
onCellFocusIn(): void;
|
|
37
|
+
onCellBlur(): void;
|
|
29
38
|
}
|
|
30
39
|
export declare const tableCellTag = "nimble-table-cell";
|
|
@@ -14,6 +14,11 @@ export class TableCell extends FoundationElement {
|
|
|
14
14
|
this.menuOpen = false;
|
|
15
15
|
this.nestingLevel = 0;
|
|
16
16
|
}
|
|
17
|
+
/** @internal */
|
|
18
|
+
get cellView() {
|
|
19
|
+
return this.cellViewContainer
|
|
20
|
+
.firstElementChild;
|
|
21
|
+
}
|
|
17
22
|
onActionMenuBeforeToggle(event) {
|
|
18
23
|
this.$emit('cell-action-menu-beforetoggle', event.detail);
|
|
19
24
|
}
|
|
@@ -21,6 +26,18 @@ export class TableCell extends FoundationElement {
|
|
|
21
26
|
this.menuOpen = event.detail.newState;
|
|
22
27
|
this.$emit('cell-action-menu-toggle', event.detail);
|
|
23
28
|
}
|
|
29
|
+
onActionMenuBlur() {
|
|
30
|
+
this.$emit('cell-action-menu-blur', this);
|
|
31
|
+
}
|
|
32
|
+
onCellViewFocusIn() {
|
|
33
|
+
this.$emit('cell-view-focus-in', this);
|
|
34
|
+
}
|
|
35
|
+
onCellFocusIn() {
|
|
36
|
+
this.$emit('cell-focus-in', this);
|
|
37
|
+
}
|
|
38
|
+
onCellBlur() {
|
|
39
|
+
this.$emit('cell-blur', this);
|
|
40
|
+
}
|
|
24
41
|
}
|
|
25
42
|
__decorate([
|
|
26
43
|
observable
|
|
@@ -46,6 +63,9 @@ __decorate([
|
|
|
46
63
|
__decorate([
|
|
47
64
|
observable
|
|
48
65
|
], TableCell.prototype, "cellViewTemplate", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
observable
|
|
68
|
+
], TableCell.prototype, "cellViewContainer", void 0);
|
|
49
69
|
__decorate([
|
|
50
70
|
observable
|
|
51
71
|
], TableCell.prototype, "nestingLevel", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAgB,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAQ7E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAgB,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAQ7E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAStC;;;GAGG;AACH,MAAM,OAAO,SAEX,SAAQ,iBAAiB;IAF3B;;QAgBW,kBAAa,GAAG,KAAK,CAAC;QAGtB,aAAQ,GAAG,KAAK,CAAC;QAajB,iBAAY,GAAG,CAAC,CAAC;IAsC5B,CAAC;IAlCG,gBAAgB;IAChB,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,iBAAiB;aACxB,iBAA+C,CAAC;IACzD,CAAC;IAEM,wBAAwB,CAC3B,KAA+C;QAE/C,IAAI,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;IAEM,kBAAkB,CACrB,KAA+C;QAE/C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAEM,gBAAgB;QACnB,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEM,iBAAiB;QACpB,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,aAAa;QAChB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,UAAU;QACb,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;CACJ;AAlEU;IADN,UAAU;4CACoC;AAGxC;IADN,UAAU;yCACiB;AAGrB;IADN,UAAU;2CACc;AAGlB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;2CACR;AAGlB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gDAC3B;AAGtB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;2CAC1B;AAGjB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;kDACT;AAGzB;IADN,UAAU;mDACuC;AAI3C;IADN,UAAU;oDAC4B;AAGhC;IADN,UAAU;+CACa;AAwC5B,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC;IACtC,QAAQ,EAAE,YAAY;IACtB,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC","sourcesContent":["import { attr, observable, ViewTemplate } from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport type { MenuButton } from '../../../menu-button';\nimport type { MenuButtonToggleEventDetail } from '../../../menu-button/types';\nimport type { TableColumn } from '../../../table-column/base';\nimport type {\n TableCellRecord,\n TableCellState\n} from '../../../table-column/base/types';\nimport { styles } from './styles';\nimport { template } from './template';\nimport type { TableCellView } from '../../../table-column/base/cell-view';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-cell': TableCell;\n }\n}\n\n/**\n * A styled cell that is used within the nimble-table-row.\n * @internal\n */\nexport class TableCell<\n TCellRecord extends TableCellRecord = TableCellRecord\n> extends FoundationElement {\n @observable\n public cellState?: TableCellState<TCellRecord>;\n\n @observable\n public column?: TableColumn;\n\n @observable\n public recordId?: string;\n\n @attr({ attribute: 'column-id' })\n public columnId?: string;\n\n @attr({ attribute: 'has-action-menu', mode: 'boolean' })\n public hasActionMenu = false;\n\n @attr({ attribute: 'menu-open', mode: 'boolean' })\n public menuOpen = false;\n\n @attr({ attribute: 'action-menu-label' })\n public actionMenuLabel?: string;\n\n @observable\n public cellViewTemplate?: ViewTemplate<TableCell>;\n\n /** @internal */\n @observable\n public cellViewContainer!: HTMLElement;\n\n @observable\n public nestingLevel = 0;\n\n public readonly actionMenuButton?: MenuButton;\n\n /** @internal */\n public get cellView(): TableCellView<TCellRecord> {\n return this.cellViewContainer\n .firstElementChild as TableCellView<TCellRecord>;\n }\n\n public onActionMenuBeforeToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>\n ): void {\n this.$emit('cell-action-menu-beforetoggle', event.detail);\n }\n\n public onActionMenuToggle(\n event: CustomEvent<MenuButtonToggleEventDetail>\n ): void {\n this.menuOpen = event.detail.newState;\n this.$emit('cell-action-menu-toggle', event.detail);\n }\n\n public onActionMenuBlur(): void {\n this.$emit('cell-action-menu-blur', this);\n }\n\n public onCellViewFocusIn(): void {\n this.$emit('cell-view-focus-in', this);\n }\n\n public onCellFocusIn(): void {\n this.$emit('cell-focus-in', this);\n }\n\n public onCellBlur(): void {\n this.$emit('cell-blur', this);\n }\n}\n\nconst nimbleTableCell = TableCell.compose({\n baseName: 'table-cell',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableCell());\nexport const tableCellTag = 'nimble-table-cell';\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { css } from '@microsoft/fast-element';
|
|
2
2
|
import { display } from '../../../utilities/style/display';
|
|
3
|
-
import { controlHeight, controlSlimHeight, mediumPadding } from '../../../theme-provider/design-tokens';
|
|
3
|
+
import { borderHoverColor, borderWidth, controlHeight, controlSlimHeight, mediumPadding } from '../../../theme-provider/design-tokens';
|
|
4
|
+
import { focusVisible } from '../../../utilities/style/focus';
|
|
4
5
|
export const styles = css `
|
|
5
6
|
${display('flex')}
|
|
6
7
|
|
|
@@ -17,6 +18,15 @@ export const styles = css `
|
|
|
17
18
|
--ni-private-table-cell-action-menu-display: block;
|
|
18
19
|
}
|
|
19
20
|
|
|
21
|
+
:host(${focusVisible}) {
|
|
22
|
+
outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};
|
|
23
|
+
outline-offset: -2px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.cell-view-container {
|
|
27
|
+
display: contents;
|
|
28
|
+
}
|
|
29
|
+
|
|
20
30
|
.cell-view {
|
|
21
31
|
overflow: hidden;
|
|
22
32
|
}
|
|
@@ -29,5 +39,11 @@ export const styles = css `
|
|
|
29
39
|
height: ${controlSlimHeight};
|
|
30
40
|
align-self: center;
|
|
31
41
|
}
|
|
42
|
+
|
|
43
|
+
${
|
|
44
|
+
/* This CSS class is applied dynamically by KeyboardNavigationManager */ ''}
|
|
45
|
+
.action-menu.cell-action-menu-focused {
|
|
46
|
+
display: block;
|
|
47
|
+
}
|
|
32
48
|
`;
|
|
33
49
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,aAAa,EACb,iBAAiB,EACjB,aAAa,EAChB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,aAAa,EAChB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;;;;uBAIE,aAAa;;cAEtB,aAAa,MAAM,aAAa;;;;;;;;;YASlC,YAAY;4BACI,WAAW,WAAW,gBAAgB;;;;;;;;;;;;;;;;;kBAiBhD,iBAAiB;;;;MAI7B;AACE,wEAAwE,CAAC,EAC7E;;;;CAIH,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '../../../utilities/style/display';\nimport {\n borderHoverColor,\n borderWidth,\n controlHeight,\n controlSlimHeight,\n mediumPadding\n} from '../../../theme-provider/design-tokens';\nimport { focusVisible } from '../../../utilities/style/focus';\n\nexport const styles = css`\n ${display('flex')}\n\n :host {\n --ni-private-table-cell-nesting-level: 0;\n padding: 0px ${mediumPadding};\n padding-left: calc(\n ${mediumPadding} + ${controlHeight} *\n var(--ni-private-table-cell-nesting-level)\n );\n align-self: center;\n height: 100%;\n /* A default value that will be overridden by the row */\n --ni-private-table-cell-action-menu-display: block;\n }\n\n :host(${focusVisible}) {\n outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};\n outline-offset: -2px;\n }\n\n .cell-view-container {\n display: contents;\n }\n\n .cell-view {\n overflow: hidden;\n }\n\n .action-menu {\n display: var(--ni-private-table-cell-action-menu-display);\n margin-left: auto;\n flex-shrink: 0;\n flex-grow: 0;\n height: ${controlSlimHeight};\n align-self: center;\n }\n\n ${\n /* This CSS class is applied dynamically by KeyboardNavigationManager */ ''\n }\n .action-menu.cell-action-menu-focused {\n display: block;\n }\n`;\n"]}
|
|
@@ -5,15 +5,23 @@ import { ButtonAppearance } from '../../../menu-button/types';
|
|
|
5
5
|
import { tableCellActionMenuLabel } from '../../../label-provider/table/label-tokens';
|
|
6
6
|
// prettier-ignore
|
|
7
7
|
export const template = html `
|
|
8
|
-
<template role="cell" style="--ni-private-table-cell-nesting-level: ${x => x.nestingLevel}"
|
|
9
|
-
${x => x.
|
|
8
|
+
<template role="cell" style="--ni-private-table-cell-nesting-level: ${x => x.nestingLevel}"
|
|
9
|
+
@focusin="${x => x.onCellFocusIn()}"
|
|
10
|
+
@blur="${x => x.onCellBlur()}"
|
|
11
|
+
>
|
|
12
|
+
<div ${ref('cellViewContainer')} class="cell-view-container" @focusin="${x => x.onCellViewFocusIn()}">
|
|
13
|
+
${x => x.cellViewTemplate}
|
|
14
|
+
</div>
|
|
10
15
|
${when(x => x.hasActionMenu, html `
|
|
11
16
|
<${menuButtonTag} ${ref('actionMenuButton')}
|
|
12
17
|
content-hidden
|
|
13
18
|
appearance="${ButtonAppearance.ghost}"
|
|
19
|
+
${'' /* tabindex managed dynamically by KeyboardNavigationManager */}
|
|
20
|
+
tabindex="-1"
|
|
14
21
|
@beforetoggle="${(x, c) => x.onActionMenuBeforeToggle(c.event)}"
|
|
15
22
|
@toggle="${(x, c) => x.onActionMenuToggle(c.event)}"
|
|
16
23
|
@click="${(_, c) => c.event.stopPropagation()}"
|
|
24
|
+
@blur="${x => x.onActionMenuBlur()}"
|
|
17
25
|
class="action-menu"
|
|
18
26
|
title="${x => (x.actionMenuLabel ? x.actionMenuLabel : tableCellActionMenuLabel.getValueFor(x))}"
|
|
19
27
|
>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACH,gBAAgB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAEtF,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAW;0EACmC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACH,gBAAgB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAEtF,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAW;0EACmC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;oBACzE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE;iBACzB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE;;eAErB,GAAG,CAAC,mBAAmB,CAAC,0CAA0C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE;cAC7F,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;;UAE3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAW;eACrC,aAAa,IAAI,GAAG,CAAC,kBAAkB,CAAC;;8BAEzB,gBAAgB,CAAC,KAAK;kBAClC,EAAE,CAAC,+DAA+D;;iCAEnD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAiD,CAAC;2BAC/F,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAiD,CAAC;0BACpF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE;yBACpC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE;;yBAEzB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;mBAE5F,oBAAoB,mBAAmB,oBAAoB;kBAC5D,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;gBAExF,aAAa;SACpB,CAAC;;CAET,CAAC","sourcesContent":["import { html, ref, when } from '@microsoft/fast-element';\nimport type { TableCell } from '.';\nimport { iconThreeDotsLineTag } from '../../../icons/three-dots-line';\nimport { menuButtonTag } from '../../../menu-button';\nimport {\n ButtonAppearance,\n MenuButtonToggleEventDetail\n} from '../../../menu-button/types';\nimport { tableCellActionMenuLabel } from '../../../label-provider/table/label-tokens';\n\n// prettier-ignore\nexport const template = html<TableCell>`\n <template role=\"cell\" style=\"--ni-private-table-cell-nesting-level: ${x => x.nestingLevel}\"\n @focusin=\"${x => x.onCellFocusIn()}\"\n @blur=\"${x => x.onCellBlur()}\"\n >\n <div ${ref('cellViewContainer')} class=\"cell-view-container\" @focusin=\"${x => x.onCellViewFocusIn()}\">\n ${x => x.cellViewTemplate}\n </div>\n ${when(x => x.hasActionMenu, html<TableCell>`\n <${menuButtonTag} ${ref('actionMenuButton')}\n content-hidden\n appearance=\"${ButtonAppearance.ghost}\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n @beforetoggle=\"${(x, c) => x.onActionMenuBeforeToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>)}\"\n @toggle=\"${(x, c) => x.onActionMenuToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>)}\"\n @click=\"${(_, c) => c.event.stopPropagation()}\"\n @blur=\"${x => x.onActionMenuBlur()}\"\n class=\"action-menu\"\n title=\"${x => (x.actionMenuLabel ? x.actionMenuLabel : tableCellActionMenuLabel.getValueFor(x))}\"\n >\n <${iconThreeDotsLineTag} slot=\"start\"></${iconThreeDotsLineTag}>\n ${x => (x.actionMenuLabel ? x.actionMenuLabel : tableCellActionMenuLabel.getValueFor(x))}\n <slot name=\"cellActionMenu\" slot=\"menu\"></slot>\n </${menuButtonTag}>\n `)}\n </template>\n`;\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
2
2
|
import type { TableColumn } from '../../../table-column/base';
|
|
3
|
-
import { TableRowSelectionState } from '../../types';
|
|
3
|
+
import { TableRowFocusableElements, TableRowSelectionState } from '../../types';
|
|
4
|
+
import type { Checkbox } from '../../../checkbox';
|
|
4
5
|
declare global {
|
|
5
6
|
interface HTMLElementTagNameMap {
|
|
6
7
|
'nimble-table-group-row': TableGroupRow;
|
|
@@ -13,6 +14,11 @@ declare global {
|
|
|
13
14
|
export declare class TableGroupRow extends FoundationElement {
|
|
14
15
|
groupRowValue?: unknown;
|
|
15
16
|
nestingLevel: number;
|
|
17
|
+
/**
|
|
18
|
+
* Row index in the flattened set of all regular and group header rows.
|
|
19
|
+
* Represents the index in table.tableData (TableRowState[]).
|
|
20
|
+
*/
|
|
21
|
+
resolvedRowIndex?: number;
|
|
16
22
|
immediateChildCount?: number;
|
|
17
23
|
groupColumn?: TableColumn;
|
|
18
24
|
expanded: boolean;
|
|
@@ -33,7 +39,9 @@ export declare class TableGroupRow extends FoundationElement {
|
|
|
33
39
|
private ignoreSelectionChangeEvents;
|
|
34
40
|
onGroupExpandToggle(): void;
|
|
35
41
|
/** @internal */
|
|
36
|
-
|
|
42
|
+
onSelectionCheckboxChange(event: CustomEvent): void;
|
|
43
|
+
/** @internal */
|
|
44
|
+
getFocusableElements(): TableRowFocusableElements;
|
|
37
45
|
private selectionStateChanged;
|
|
38
46
|
private selectionCheckboxChanged;
|
|
39
47
|
private setSelectionCheckboxState;
|
|
@@ -41,7 +41,7 @@ export class TableGroupRow extends FoundationElement {
|
|
|
41
41
|
this.expandIcon.addEventListener('transitionend', this.removeAnimatingClass);
|
|
42
42
|
}
|
|
43
43
|
/** @internal */
|
|
44
|
-
|
|
44
|
+
onSelectionCheckboxChange(event) {
|
|
45
45
|
if (this.ignoreSelectionChangeEvents) {
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
@@ -56,6 +56,15 @@ export class TableGroupRow extends FoundationElement {
|
|
|
56
56
|
};
|
|
57
57
|
this.$emit('group-selection-toggle', detail);
|
|
58
58
|
}
|
|
59
|
+
/** @internal */
|
|
60
|
+
getFocusableElements() {
|
|
61
|
+
return {
|
|
62
|
+
selectionCheckbox: this.selectable
|
|
63
|
+
? this.selectionCheckbox
|
|
64
|
+
: undefined,
|
|
65
|
+
cells: []
|
|
66
|
+
};
|
|
67
|
+
}
|
|
59
68
|
selectionStateChanged() {
|
|
60
69
|
this.setSelectionCheckboxState();
|
|
61
70
|
}
|
|
@@ -78,6 +87,9 @@ __decorate([
|
|
|
78
87
|
__decorate([
|
|
79
88
|
observable
|
|
80
89
|
], TableGroupRow.prototype, "nestingLevel", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
observable
|
|
92
|
+
], TableGroupRow.prototype, "resolvedRowIndex", void 0);
|
|
81
93
|
__decorate([
|
|
82
94
|
observable
|
|
83
95
|
], TableGroupRow.prototype, "immediateChildCount", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/group-row/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table/components/group-row/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { attr, observable } from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport type { TableColumn } from '../../../table-column/base';\nimport { styles } from './styles';\nimport { template } from './template';\nimport {\n TableRowFocusableElements,\n TableRowSelectionState,\n TableRowSelectionToggleEventDetail\n} from '../../types';\nimport type { Checkbox } from '../../../checkbox';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-table-group-row': TableGroupRow;\n }\n}\n\n/**\n * A styled cell that is used within the nimble-table-row.\n * @internal\n */\nexport class TableGroupRow extends FoundationElement {\n @observable\n public groupRowValue?: unknown;\n\n @observable\n public nestingLevel = 0;\n\n /**\n * Row index in the flattened set of all regular and group header rows.\n * Represents the index in table.tableData (TableRowState[]).\n */\n @observable\n public resolvedRowIndex?: number;\n\n @observable\n public immediateChildCount?: number;\n\n @observable\n public groupColumn?: TableColumn;\n\n @attr({ mode: 'boolean' })\n public expanded = false;\n\n @attr({ mode: 'boolean' })\n public selectable = false;\n\n @attr({ attribute: 'selection-state' })\n public selectionState: TableRowSelectionState = TableRowSelectionState.notSelected;\n\n /**\n * @internal\n */\n public readonly expandIcon!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public readonly selectionCheckbox?: Checkbox;\n\n /**\n * @internal\n */\n @observable\n public animationClass = '';\n\n // Programmatically updating the selection state of a checkbox fires the 'change' event.\n // Therefore, selection change events that occur due to programmatically updating\n // the selection checkbox 'checked' value should be ingored.\n // https://github.com/microsoft/fast/issues/5750\n private ignoreSelectionChangeEvents = false;\n\n public onGroupExpandToggle(): void {\n this.$emit('group-expand-toggle');\n // To avoid a visual glitch with improper expand/collapse icons performing an\n // animation, we apply a class to the appropriate group row such that we can have\n // a more targeted CSS animation. We use the 'transitionend' event to remove the\n // temporary class and register a function reference as the handler to avoid issues\n // that may result from the 'transitionend' event not firing, as it will never result\n // in multiple event listeners being registered.\n this.animationClass = 'animating';\n this.expandIcon.addEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n }\n\n /** @internal */\n public onSelectionCheckboxChange(event: CustomEvent): void {\n if (this.ignoreSelectionChangeEvents) {\n return;\n }\n\n const checkbox = event.target as Checkbox;\n const checked = checkbox.checked;\n this.selectionState = checked\n ? TableRowSelectionState.selected\n : TableRowSelectionState.notSelected;\n const detail: TableRowSelectionToggleEventDetail = {\n oldState: !checked,\n newState: checked\n };\n this.$emit('group-selection-toggle', detail);\n }\n\n /** @internal */\n public getFocusableElements(): TableRowFocusableElements {\n return {\n selectionCheckbox: this.selectable\n ? this.selectionCheckbox\n : undefined,\n cells: []\n };\n }\n\n private selectionStateChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private selectionCheckboxChanged(): void {\n this.setSelectionCheckboxState();\n }\n\n private setSelectionCheckboxState(): void {\n if (this.selectionCheckbox) {\n this.ignoreSelectionChangeEvents = true;\n this.selectionCheckbox.checked = this.selectionState === TableRowSelectionState.selected;\n this.selectionCheckbox.indeterminate = this.selectionState\n === TableRowSelectionState.partiallySelected;\n this.ignoreSelectionChangeEvents = false;\n }\n }\n\n private readonly removeAnimatingClass = (): void => {\n this.animationClass = '';\n this.expandIcon.removeEventListener(\n 'transitionend',\n this.removeAnimatingClass\n );\n };\n}\n\nconst nimbleTableGroupRow = TableGroupRow.compose({\n baseName: 'table-group-row',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleTableGroupRow());\nexport const tableGroupRowTag = 'nimble-table-group-row';\n"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { css } from '@microsoft/fast-element';
|
|
2
2
|
import { White } from '@ni/nimble-tokens/dist/styledictionary/js/tokens';
|
|
3
3
|
import { display } from '../../../utilities/style/display';
|
|
4
|
-
import { applicationBackgroundColor, borderWidth, controlHeight, fillHoverColor, mediumPadding, standardPadding } from '../../../theme-provider/design-tokens';
|
|
4
|
+
import { applicationBackgroundColor, borderHoverColor, borderWidth, controlHeight, fillHoverColor, mediumPadding, standardPadding } from '../../../theme-provider/design-tokens';
|
|
5
5
|
import { Theme } from '../../../theme-provider/types';
|
|
6
6
|
import { hexToRgbaCssColor } from '../../../utilities/style/colors';
|
|
7
7
|
import { themeBehavior } from '../../../utilities/style/theme';
|
|
8
8
|
import { userSelectNone } from '../../../utilities/style/user-select';
|
|
9
9
|
import { styles as expandCollapseStyles } from '../../../patterns/expand-collapse/styles';
|
|
10
|
+
import { focusVisible } from '../../../utilities/style/focus';
|
|
10
11
|
export const styles = css `
|
|
11
12
|
${display('grid')}
|
|
12
13
|
${expandCollapseStyles}
|
|
@@ -46,6 +47,11 @@ export const styles = css `
|
|
|
46
47
|
background-color: ${fillHoverColor};
|
|
47
48
|
}
|
|
48
49
|
|
|
50
|
+
:host(${focusVisible}) {
|
|
51
|
+
outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};
|
|
52
|
+
outline-offset: calc(-2 * ${borderWidth});
|
|
53
|
+
}
|
|
54
|
+
|
|
49
55
|
.expand-collapse-button {
|
|
50
56
|
margin-left: calc(
|
|
51
57
|
${mediumPadding} + ${standardPadding} * 2 *
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/group-row/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,MAAM,IAAI,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/group-row/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kDAAkD,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,0BAA0B,EAC1B,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,MAAM,IAAI,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;MACf,oBAAoB;;;;uBAIH,aAAa,UAAU,WAAW;+BAC1B,WAAW,WAAW,0BAA0B;;;kBAG7D,aAAa;;;;;;;;cAQjB,aAAa;;kBAET,aAAa;;;;;;;;;kBASb,aAAa;;;;;;;4BAOH,cAAc;;;YAG9B,YAAY;4BACI,WAAW,WAAW,gBAAgB;oCAC9B,WAAW;;;;;cAKjC,aAAa,MAAM,eAAe;;;;;;;;;;;wBAWxB,aAAa;UAC3B,cAAc;;;;;;yBAMC,aAAa;;UAE5B,cAAc;;;;;;;;uBAQD,eAAe;;;;;;CAMrC,CAAC,aAAa,CACX,aAAa,CACT,KAAK,CAAC,KAAK,EACX,GAAG,CAAA;;oCAEyB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;;SAEzD,CACJ,EACD,aAAa,CACT,KAAK,CAAC,IAAI,EACV,GAAG,CAAA;;oCAEyB,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC;;SAExD,CACJ,CACJ,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { White } from '@ni/nimble-tokens/dist/styledictionary/js/tokens';\nimport { display } from '../../../utilities/style/display';\nimport {\n applicationBackgroundColor,\n borderHoverColor,\n borderWidth,\n controlHeight,\n fillHoverColor,\n mediumPadding,\n standardPadding\n} from '../../../theme-provider/design-tokens';\nimport { Theme } from '../../../theme-provider/types';\nimport { hexToRgbaCssColor } from '../../../utilities/style/colors';\nimport { themeBehavior } from '../../../utilities/style/theme';\nimport { userSelectNone } from '../../../utilities/style/user-select';\nimport { styles as expandCollapseStyles } from '../../../patterns/expand-collapse/styles';\nimport { focusVisible } from '../../../utilities/style/focus';\n\nexport const styles = css`\n ${display('grid')}\n ${expandCollapseStyles}\n\n :host {\n align-items: center;\n height: calc(${controlHeight} + 2 * ${borderWidth});\n border-top: calc(2 * ${borderWidth}) solid ${applicationBackgroundColor};\n grid-template-columns:\n calc(\n ${controlHeight} *\n (var(--ni-private-table-group-row-indent-level) + 1)\n )\n 1fr;\n }\n\n :host([selectable]) {\n grid-template-columns:\n ${controlHeight}\n calc(\n ${controlHeight} *\n (var(--ni-private-table-group-row-indent-level) + 1)\n )\n 1fr;\n }\n\n :host::before {\n content: '';\n width: 100%;\n height: ${controlHeight};\n pointer-events: none;\n bottom: 0px;\n position: absolute;\n }\n\n :host(:hover)::before {\n background-color: ${fillHoverColor};\n }\n\n :host(${focusVisible}) {\n outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};\n outline-offset: calc(-2 * ${borderWidth});\n }\n\n .expand-collapse-button {\n margin-left: calc(\n ${mediumPadding} + ${standardPadding} * 2 *\n var(--ni-private-table-group-row-indent-level)\n );\n }\n\n .group-row-header-content {\n display: flex;\n overflow: hidden;\n }\n\n .group-header-view {\n padding-left: ${mediumPadding};\n ${userSelectNone}\n overflow: hidden;\n }\n\n .group-row-child-count {\n padding-left: 2px;\n padding-right: ${mediumPadding};\n pointer-events: none;\n ${userSelectNone}\n }\n\n .checkbox-container {\n display: flex;\n }\n\n .selection-checkbox {\n margin-left: ${standardPadding};\n }\n\n .selection-checkbox::part(label) {\n padding-left: 0px;\n }\n`.withBehaviors(\n themeBehavior(\n Theme.color,\n css`\n :host(:hover)::before {\n background-color: ${hexToRgbaCssColor(White, 0.05)};\n }\n `\n ),\n themeBehavior(\n Theme.dark,\n css`\n :host(:hover)::before {\n background-color: ${hexToRgbaCssColor(White, 0.1)};\n }\n `\n )\n);\n"]}
|
|
@@ -18,7 +18,7 @@ export const template = html `
|
|
|
18
18
|
<${checkboxTag}
|
|
19
19
|
${ref('selectionCheckbox')}
|
|
20
20
|
class="selection-checkbox"
|
|
21
|
-
@change="${(x, c) => x.
|
|
21
|
+
@change="${(x, c) => x.onSelectionCheckboxChange(c.event)}"
|
|
22
22
|
@click="${(_, c) => c.event.stopPropagation()}"
|
|
23
23
|
title="${x => tableGroupSelectAllLabel.getValueFor(x)}"
|
|
24
24
|
aria-label="${x => tableGroupSelectAllLabel.getValueFor(x)}"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/group-row/template.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACH,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EAC3B,MAAM,4CAA4C,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAe;;;iBAG1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE;wBACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;4DACqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;;UAErE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAe;;mBAElC,WAAW;sBACR,GAAG,CAAC,mBAAmB,CAAC;;+BAEf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/group-row/template.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACH,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EAC3B,MAAM,4CAA4C,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAe;;;iBAG1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE;wBACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;4DACqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;;UAErE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAe;;mBAElC,WAAW;sBACR,GAAG,CAAC,mBAAmB,CAAC;;+BAEf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAoB,CAAC;8BAC9D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE;6BACpC,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC;kCACvC,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC;;oBAE1D,WAAW;;SAEtB,CAAC;;;eAGK,SAAS;8BACM,gBAAgB,CAAC,KAAK;;;;yBAI3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;;mBAGvG,yBAAyB,IAAI,GAAG,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,OAAO,yBAAyB;gBAC5I,SAAS;;;;cAIX,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC,uBAAuB;mDACtB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;;;CAG5E,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/indent */\nimport { html, ref, when } from '@microsoft/fast-element';\nimport type { TableGroupRow } from '.';\nimport { buttonTag } from '../../../button';\nimport { ButtonAppearance } from '../../../button/types';\nimport { iconArrowExpanderRightTag } from '../../../icons/arrow-expander-right';\nimport { checkboxTag } from '../../../checkbox';\nimport {\n tableGroupCollapseLabel,\n tableGroupExpandLabel,\n tableGroupSelectAllLabel\n} from '../../../label-provider/table/label-tokens';\n\n// prettier-ignore\nexport const template = html<TableGroupRow>`\n <template\n role=\"row\"\n @click=${x => x.onGroupExpandToggle()}\n aria-expanded=${x => x.expanded}\n style=\"--ni-private-table-group-row-indent-level: ${x => x.nestingLevel};\"\n >\n ${when(x => x.selectable, html<TableGroupRow>`\n <span role=\"gridcell\" class=\"checkbox-container\">\n <${checkboxTag}\n ${ref('selectionCheckbox')}\n class=\"selection-checkbox\"\n @change=\"${(x, c) => x.onSelectionCheckboxChange(c.event as CustomEvent)}\"\n @click=\"${(_, c) => c.event.stopPropagation()}\"\n title=\"${x => tableGroupSelectAllLabel.getValueFor(x)}\"\n aria-label=\"${x => tableGroupSelectAllLabel.getValueFor(x)}\"\n >\n </${checkboxTag}>\n </span>\n `)}\n\n <span role=\"gridcell\">\n <${buttonTag}\n appearance=\"${ButtonAppearance.ghost}\"\n content-hidden\n class=\"expand-collapse-button\"\n tabindex=\"-1\"\n title=\"${x => (x.expanded ? tableGroupCollapseLabel.getValueFor(x) : tableGroupExpandLabel.getValueFor(x))}\"\n aria-hidden=\"true\"\n >\n <${iconArrowExpanderRightTag} ${ref('expandIcon')} slot=\"start\" class=\"expander-icon ${x => x.animationClass}\"></${iconArrowExpanderRightTag}>\n </${buttonTag}>\n </span>\n\n <div class=\"group-row-header-content\">\n ${x => x.groupColumn?.columnInternals.groupHeaderViewTemplate}\n <span class=\"group-row-child-count\">(${x => x.immediateChildCount})</span>\n </div>\n </template>\n`;\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { css } from '@microsoft/fast-element';
|
|
2
2
|
import { display } from '../../../utilities/style/display';
|
|
3
|
-
import { controlHeight, iconColor, mediumPadding, tableHeaderFont, tableHeaderFontColor } from '../../../theme-provider/design-tokens';
|
|
3
|
+
import { borderHoverColor, borderWidth, controlHeight, iconColor, mediumPadding, tableHeaderFont, tableHeaderFontColor } from '../../../theme-provider/design-tokens';
|
|
4
|
+
import { focusVisible } from '../../../utilities/style/focus';
|
|
4
5
|
export const styles = css `
|
|
5
6
|
${display('flex')}
|
|
6
7
|
|
|
@@ -16,6 +17,11 @@ export const styles = css `
|
|
|
16
17
|
cursor: default;
|
|
17
18
|
}
|
|
18
19
|
|
|
20
|
+
:host(${focusVisible}) {
|
|
21
|
+
outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};
|
|
22
|
+
outline-offset: calc(-2 * ${borderWidth});
|
|
23
|
+
}
|
|
24
|
+
|
|
19
25
|
.sort-indicator,
|
|
20
26
|
.grouped-indicator {
|
|
21
27
|
flex: 0 0 auto;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/header/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,aAAa,EACb,SAAS,EACT,aAAa,EACb,eAAe,EACf,oBAAoB,EACvB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/table/components/header/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EACH,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,SAAS,EACT,aAAa,EACb,eAAe,EACf,oBAAoB,EACvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;;;kBAGH,aAAa;;uBAER,aAAa;gBACpB,eAAe;iBACd,oBAAoB;UAC3B,SAAS,CAAC,iBAAiB,KAAK,oBAAoB;;eAE/C,aAAa;;;;YAIhB,YAAY;4BACI,WAAW,WAAW,gBAAgB;oCAC9B,WAAW;;;;;;;CAO9C,CAAC","sourcesContent":["import { css } from '@microsoft/fast-element';\nimport { display } from '../../../utilities/style/display';\nimport {\n borderHoverColor,\n borderWidth,\n controlHeight,\n iconColor,\n mediumPadding,\n tableHeaderFont,\n tableHeaderFontColor\n} from '../../../theme-provider/design-tokens';\nimport { focusVisible } from '../../../utilities/style/focus';\n\nexport const styles = css`\n ${display('flex')}\n\n :host {\n height: ${controlHeight};\n align-items: center;\n padding: 0px ${mediumPadding};\n font: ${tableHeaderFont};\n color: ${tableHeaderFontColor};\n ${iconColor.cssCustomProperty}: ${tableHeaderFontColor};\n text-transform: uppercase;\n gap: ${mediumPadding};\n cursor: default;\n }\n\n :host(${focusVisible}) {\n outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};\n outline-offset: calc(-2 * ${borderWidth});\n }\n\n .sort-indicator,\n .grouped-indicator {\n flex: 0 0 auto;\n }\n`;\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Notifier } from '@microsoft/fast-element';
|
|
2
|
-
import {
|
|
2
|
+
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
3
3
|
import type { TableCellState } from '../../../table-column/base/types';
|
|
4
|
-
import type { TableRecord } from '../../types';
|
|
4
|
+
import type { TableRecord, TableRowFocusableElements } from '../../types';
|
|
5
5
|
import type { TableColumn } from '../../../table-column/base';
|
|
6
6
|
import type { MenuButtonToggleEventDetail } from '../../../menu-button/types';
|
|
7
|
+
import type { Checkbox } from '../../../checkbox';
|
|
7
8
|
declare global {
|
|
8
9
|
interface HTMLElementTagNameMap {
|
|
9
10
|
'nimble-table-row': TableRow;
|
|
@@ -30,6 +31,11 @@ export declare class TableRow<TDataRecord extends TableDataRecord = TableDataRec
|
|
|
30
31
|
columns: TableColumn[];
|
|
31
32
|
currentActionMenuColumn?: TableColumn;
|
|
32
33
|
nestingLevel: number;
|
|
34
|
+
/**
|
|
35
|
+
* Row index in the flattened set of all regular and group header rows.
|
|
36
|
+
* Represents the index in table.tableData (TableRowState[]).
|
|
37
|
+
*/
|
|
38
|
+
resolvedRowIndex?: number;
|
|
33
39
|
isParentRow: boolean;
|
|
34
40
|
menuOpen: boolean;
|
|
35
41
|
rowOperationGridCellHidden: boolean;
|
|
@@ -60,10 +66,14 @@ export declare class TableRow<TDataRecord extends TableDataRecord = TableDataRec
|
|
|
60
66
|
animationClass: string;
|
|
61
67
|
get isTopLevelParentRow(): boolean;
|
|
62
68
|
get isNestedParent(): boolean;
|
|
69
|
+
/** @internal */
|
|
70
|
+
get showSelectionCheckbox(): boolean;
|
|
63
71
|
private ignoreSelectionChangeEvents;
|
|
64
72
|
get ariaSelected(): 'true' | 'false' | null;
|
|
65
73
|
/** @internal */
|
|
66
|
-
|
|
74
|
+
onSelectionCheckboxChange(event: CustomEvent): void;
|
|
75
|
+
/** @internal */
|
|
76
|
+
onSelectionChange(oldState: boolean, newState: boolean): void;
|
|
67
77
|
/** @internal */
|
|
68
78
|
onCellActionMenuBeforeToggle(event: CustomEvent<MenuButtonToggleEventDetail>, column: TableColumn): void;
|
|
69
79
|
/** @internal */
|
|
@@ -71,7 +81,9 @@ export declare class TableRow<TDataRecord extends TableDataRecord = TableDataRec
|
|
|
71
81
|
closeOpenActionMenus(): void;
|
|
72
82
|
/** @internal */
|
|
73
83
|
handleChange(source: unknown, args: unknown): void;
|
|
74
|
-
|
|
84
|
+
/** @internal */
|
|
85
|
+
getFocusableElements(): TableRowFocusableElements;
|
|
86
|
+
onRowExpandToggle(event?: Event): void;
|
|
75
87
|
private readonly removeAnimatingClass;
|
|
76
88
|
private emitActionMenuToggleEvent;
|
|
77
89
|
private columnsChanged;
|
|
@@ -3,7 +3,7 @@ import { Observable, attr, observable, volatile } from '@microsoft/fast-element'
|
|
|
3
3
|
import { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';
|
|
4
4
|
import { styles } from './styles';
|
|
5
5
|
import { template } from './template';
|
|
6
|
-
import { TableCell } from '../cell';
|
|
6
|
+
import { TableCell, tableCellTag } from '../cell';
|
|
7
7
|
import { ColumnInternals, isColumnInternalsProperty } from '../../../table-column/base/models/column-internals';
|
|
8
8
|
/**
|
|
9
9
|
* A styled row that is used within the nimble-table.
|
|
@@ -58,6 +58,10 @@ export class TableRow extends FoundationElement {
|
|
|
58
58
|
get isNestedParent() {
|
|
59
59
|
return this.isParentRow && this.nestingLevel > 0;
|
|
60
60
|
}
|
|
61
|
+
/** @internal */
|
|
62
|
+
get showSelectionCheckbox() {
|
|
63
|
+
return this.selectable && !this.hideSelection;
|
|
64
|
+
}
|
|
61
65
|
get ariaSelected() {
|
|
62
66
|
if (this.selectable) {
|
|
63
67
|
return this.selected ? 'true' : 'false';
|
|
@@ -65,16 +69,20 @@ export class TableRow extends FoundationElement {
|
|
|
65
69
|
return null;
|
|
66
70
|
}
|
|
67
71
|
/** @internal */
|
|
68
|
-
|
|
72
|
+
onSelectionCheckboxChange(event) {
|
|
69
73
|
if (this.ignoreSelectionChangeEvents) {
|
|
70
74
|
return;
|
|
71
75
|
}
|
|
72
76
|
const checkbox = event.target;
|
|
73
77
|
const checked = checkbox.checked;
|
|
74
|
-
this.
|
|
78
|
+
this.onSelectionChange(!checked, checked);
|
|
79
|
+
}
|
|
80
|
+
/** @internal */
|
|
81
|
+
onSelectionChange(oldState, newState) {
|
|
82
|
+
this.selected = newState;
|
|
75
83
|
const detail = {
|
|
76
|
-
oldState
|
|
77
|
-
newState
|
|
84
|
+
oldState,
|
|
85
|
+
newState
|
|
78
86
|
};
|
|
79
87
|
this.$emit('row-selection-toggle', detail);
|
|
80
88
|
}
|
|
@@ -105,6 +113,20 @@ export class TableRow extends FoundationElement {
|
|
|
105
113
|
this.updateCellStates();
|
|
106
114
|
}
|
|
107
115
|
}
|
|
116
|
+
/** @internal */
|
|
117
|
+
getFocusableElements() {
|
|
118
|
+
return {
|
|
119
|
+
selectionCheckbox: this.showSelectionCheckbox
|
|
120
|
+
? this.selectionCheckbox
|
|
121
|
+
: undefined,
|
|
122
|
+
cells: Array.from(this.cellContainer.querySelectorAll(tableCellTag)).map(cell => ({
|
|
123
|
+
cell,
|
|
124
|
+
actionMenuButton: cell.hasActionMenu
|
|
125
|
+
? cell.actionMenuButton
|
|
126
|
+
: undefined
|
|
127
|
+
}))
|
|
128
|
+
};
|
|
129
|
+
}
|
|
108
130
|
onRowExpandToggle(event) {
|
|
109
131
|
const expandEventDetail = {
|
|
110
132
|
oldState: this.expanded,
|
|
@@ -112,7 +134,7 @@ export class TableRow extends FoundationElement {
|
|
|
112
134
|
recordId: this.recordId
|
|
113
135
|
};
|
|
114
136
|
this.$emit('row-expand-toggle', expandEventDetail);
|
|
115
|
-
event
|
|
137
|
+
event?.stopImmediatePropagation();
|
|
116
138
|
// To avoid a visual glitch with improper expand/collapse icons performing an
|
|
117
139
|
// animation (due to visual re-use apparently), we apply a class to the
|
|
118
140
|
// contained expand-collapse button temporarily. We use the 'transitionend' event
|
|
@@ -224,6 +246,9 @@ __decorate([
|
|
|
224
246
|
__decorate([
|
|
225
247
|
observable
|
|
226
248
|
], TableRow.prototype, "nestingLevel", void 0);
|
|
249
|
+
__decorate([
|
|
250
|
+
observable
|
|
251
|
+
], TableRow.prototype, "resolvedRowIndex", void 0);
|
|
227
252
|
__decorate([
|
|
228
253
|
attr({ attribute: 'is-parent-row', mode: 'boolean' })
|
|
229
254
|
], TableRow.prototype, "isParentRow", void 0);
|
|
@@ -254,6 +279,9 @@ __decorate([
|
|
|
254
279
|
__decorate([
|
|
255
280
|
volatile
|
|
256
281
|
], TableRow.prototype, "isNestedParent", null);
|
|
282
|
+
__decorate([
|
|
283
|
+
volatile
|
|
284
|
+
], TableRow.prototype, "showSelectionCheckbox", null);
|
|
257
285
|
__decorate([
|
|
258
286
|
volatile
|
|
259
287
|
], TableRow.prototype, "ariaSelected", null);
|