@3mo/data-grid 0.16.0-preview.0 → 0.16.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/DataGridColumn.d.ts +4 -1
- package/dist/DataGridColumn.d.ts.map +1 -1
- package/dist/DataGridColumn.js +4 -0
- package/dist/DataGridColumnHeader.d.ts +7 -2
- package/dist/DataGridColumnHeader.d.ts.map +1 -1
- package/dist/DataGridColumnHeader.js +122 -66
- package/dist/DataGridHeaderSeparator.d.ts.map +1 -1
- package/dist/DataGridHeaderSeparator.js +0 -1
- package/dist/columns/DataGridColumnComponent.d.ts +2 -1
- package/dist/columns/DataGridColumnComponent.d.ts.map +1 -1
- package/dist/columns/DataGridColumnComponent.js +1 -0
- package/dist/custom-elements.json +31 -28
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
package/dist/DataGridColumn.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { DataGrid, DataGridSortingStrategy } from './index.js';
|
|
|
4
4
|
import type * as CSS from 'csstype';
|
|
5
5
|
export type DataGridColumnAlignment = 'start' | 'center' | 'end';
|
|
6
6
|
export type DataGridColumnSticky = 'start' | 'both' | 'end';
|
|
7
|
+
export type DataGridColumnMenuItems = HTMLTemplateResult | Map<'sorting' | 'stickiness' | 'more', HTMLTemplateResult>;
|
|
7
8
|
export declare class DataGridColumn<TData, TValue = unknown> {
|
|
8
9
|
dataGrid: DataGrid<TData, any>;
|
|
9
10
|
dataSelector: KeyPath.Of<TData>;
|
|
@@ -13,12 +14,14 @@ export declare class DataGridColumn<TData, TValue = unknown> {
|
|
|
13
14
|
alignment: DataGridColumnAlignment;
|
|
14
15
|
hidden: boolean;
|
|
15
16
|
hide(): void;
|
|
16
|
-
sortable: boolean;
|
|
17
17
|
sticky?: DataGridColumnSticky;
|
|
18
|
+
toggleSticky(sticky: DataGridColumnSticky): void;
|
|
19
|
+
sortable: boolean;
|
|
18
20
|
private _sortDataSelector?;
|
|
19
21
|
get sortDataSelector(): object extends Required<TData> ? string : TData extends readonly any[] ? Extract<keyof TData, `${number}`> | Extract<keyof TData, string> | (Extract<keyof TData, `${number}`> extends infer T ? T extends Extract<keyof TData, `${number}`> ? T extends keyof TData ? `${T}.${object extends Required<TData[T]> ? string : TData[T] extends infer T_1 ? T_1 extends TData[T] ? T_1 extends readonly any[] ? Extract<keyof T_1, `${number}`> | Extract<keyof T_1, string> | (Extract<keyof T_1, `${number}`> extends infer T_2 ? T_2 extends Extract<keyof T_1, `${number}`> ? T_2 extends keyof T_1 ? never : never : never : never) : T_1 extends object ? Extract<keyof T_1, string> | (Extract<keyof T_1, string> extends infer T_3 ? T_3 extends Extract<keyof T_1, string> ? T_3 extends keyof T_1 ? never : never : never : never) : never : never : never}` : never : never : never) : TData extends object ? Extract<keyof TData, string> | (Extract<keyof TData, string> extends infer T_4 ? T_4 extends Extract<keyof TData, string> ? T_4 extends keyof TData ? `${T_4}.${object extends Required<TData[T_4]> ? string : TData[T_4] extends infer T_5 ? T_5 extends TData[T_4] ? T_5 extends readonly any[] ? Extract<keyof T_5, `${number}`> | Extract<keyof T_5, string> | (Extract<keyof T_5, `${number}`> extends infer T_6 ? T_6 extends Extract<keyof T_5, `${number}`> ? T_6 extends keyof T_5 ? never : never : never : never) : T_5 extends object ? Extract<keyof T_5, string> | (Extract<keyof T_5, string> extends infer T_7 ? T_7 extends Extract<keyof T_5, string> ? T_7 extends keyof T_5 ? never : never : never : never) : never : never : never}` : never : never : never) : never;
|
|
20
22
|
set sortDataSelector(value: object extends Required<TData> ? string : TData extends readonly any[] ? Extract<keyof TData, `${number}`> | Extract<keyof TData, string> | (Extract<keyof TData, `${number}`> extends infer T ? T extends Extract<keyof TData, `${number}`> ? T extends keyof TData ? `${T}.${object extends Required<TData[T]> ? string : TData[T] extends infer T_1 ? T_1 extends TData[T] ? T_1 extends readonly any[] ? Extract<keyof T_1, `${number}`> | Extract<keyof T_1, string> | (Extract<keyof T_1, `${number}`> extends infer T_2 ? T_2 extends Extract<keyof T_1, `${number}`> ? T_2 extends keyof T_1 ? never : never : never : never) : T_1 extends object ? Extract<keyof T_1, string> | (Extract<keyof T_1, string> extends infer T_3 ? T_3 extends Extract<keyof T_1, string> ? T_3 extends keyof T_1 ? never : never : never : never) : never : never : never}` : never : never : never) : TData extends object ? Extract<keyof TData, string> | (Extract<keyof TData, string> extends infer T_4 ? T_4 extends Extract<keyof TData, string> ? T_4 extends keyof TData ? `${T_4}.${object extends Required<TData[T_4]> ? string : TData[T_4] extends infer T_5 ? T_5 extends TData[T_4] ? T_5 extends readonly any[] ? Extract<keyof T_5, `${number}`> | Extract<keyof T_5, string> | (Extract<keyof T_5, `${number}`> extends infer T_6 ? T_6 extends Extract<keyof T_5, `${number}`> ? T_6 extends keyof T_5 ? never : never : never : never) : T_5 extends object ? Extract<keyof T_5, string> | (Extract<keyof T_5, string> extends infer T_7 ? T_7 extends Extract<keyof T_5, string> ? T_7 extends keyof T_5 ? never : never : never : never) : never : never : never}` : never : never : never) : never);
|
|
21
23
|
toggleSort(strategy?: DataGridSortingStrategy | null): void;
|
|
24
|
+
getMenuItemsTemplate?(): DataGridColumnMenuItems;
|
|
22
25
|
getContentTemplate?(value: TValue, data: TData): HTMLTemplateResult;
|
|
23
26
|
editable: boolean | Predicate<TData>;
|
|
24
27
|
getEditContentTemplate?(value: TValue, data: TData): HTMLTemplateResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGridColumn.d.ts","sourceRoot":"","sources":["../DataGridColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,KAAK,GAAG,MAAM,SAAS,CAAA;AAEnC,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEhE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;AAE3D,qBAAa,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAClD,QAAQ,EAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC/B,YAAY,EAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAEhC,OAAO,EAAG,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAgB;IAEnE,SAAS,EAAE,uBAAuB,CAAU;
|
|
1
|
+
{"version":3,"file":"DataGridColumn.d.ts","sourceRoot":"","sources":["../DataGridColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,KAAK,GAAG,MAAM,SAAS,CAAA;AAEnC,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEhE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;AAE3D,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,GAAG,GAAG,CAAC,SAAS,GAAG,YAAY,GAAG,MAAM,EAAE,kBAAkB,CAAC,CAAA;AAErH,qBAAa,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAClD,QAAQ,EAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC/B,YAAY,EAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAEhC,OAAO,EAAG,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAgB;IAEnE,SAAS,EAAE,uBAAuB,CAAU;IAE5C,MAAM,UAAQ;IACd,IAAI;IAKJ,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,YAAY,CAAC,MAAM,EAAE,oBAAoB;IAKzC,QAAQ,UAAO;IAEf,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,IAAI,gBAAgB,snDAAyD;IAC7E,IAAI,gBAAgB,CAAC,KAAK,mnDAAA,EAAoC;IAE9D,UAAU,CAAC,QAAQ,CAAC,EAAE,uBAAuB,GAAG,IAAI;IAkBpD,oBAAoB,CAAC,IAAI,uBAAuB;IAEhD,kBAAkB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,kBAAkB;IAEnE,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAQ;IAC5C,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,kBAAkB;IAEvE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;gBAEpC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAI1D,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO;IAMpD,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;IAIzD,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,IAAI,aAAa,WAAsC;IACvD,IAAI,aAAa,CAAC,KAAK,QAAA,EAGtB;IAED,OAAO,CAAC,aAAa,CAAQ;IAC7B,IAAI,YAAY,YAAgC;IAChD,IAAI,YAAY,CAAC,KAAK,SAAA,EAGrB;IAED,IAAI,iBAAiB,6FAIpB;IAED,IAAI,WAAW,mCAkBd;IAED,IAAI,uBAAuB,WA2B1B;IAED,kBAAkB,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;IACxC,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;CAChE"}
|
package/dist/DataGridColumn.js
CHANGED
|
@@ -5,6 +5,10 @@ export class DataGridColumn {
|
|
|
5
5
|
this.hidden = true;
|
|
6
6
|
this.dataGrid.requestUpdate();
|
|
7
7
|
}
|
|
8
|
+
toggleSticky(sticky) {
|
|
9
|
+
this.sticky = this.sticky === sticky ? undefined : sticky;
|
|
10
|
+
this.dataGrid.requestUpdate();
|
|
11
|
+
}
|
|
8
12
|
get sortDataSelector() { return this._sortDataSelector || this.dataSelector; }
|
|
9
13
|
set sortDataSelector(value) { this._sortDataSelector = value; }
|
|
10
14
|
toggleSort(strategy) {
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { Component } from '@a11d/lit';
|
|
1
|
+
import { Component, type HTMLTemplateResult } from '@a11d/lit';
|
|
2
|
+
import { ResizeController } from '@3mo/resize-observer';
|
|
2
3
|
import type { DataGridColumn } from './DataGridColumn.js';
|
|
3
4
|
export declare class DataGridColumnHeader extends Component {
|
|
4
5
|
column: DataGridColumn<unknown>;
|
|
5
6
|
menuOpen: boolean;
|
|
6
7
|
static get styles(): import("@a11d/lit").CSSResult;
|
|
7
|
-
|
|
8
|
+
readonly resizeController: ResizeController<Promise<void>>;
|
|
9
|
+
get template(): HTMLTemplateResult;
|
|
8
10
|
private get contentTemplate();
|
|
9
11
|
private get sortingTemplate();
|
|
10
12
|
private get menuTemplate();
|
|
13
|
+
private getSortingItemsTemplate;
|
|
14
|
+
private getStickinessItemsTemplate;
|
|
15
|
+
private getMoreItemsTemplate;
|
|
11
16
|
private get separatorTemplate();
|
|
12
17
|
}
|
|
13
18
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGridColumnHeader.d.ts","sourceRoot":"","sources":["../DataGridColumnHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,
|
|
1
|
+
{"version":3,"file":"DataGridColumnHeader.d.ts","sourceRoot":"","sources":["../DataGridColumnHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAA+C,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAGjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAczD,qBACa,oBAAqB,SAAQ,SAAS;IACtB,MAAM,EAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAChB,QAAQ,UAAQ;IAE5D,WAAoB,MAAM,kCAqHzB;IAED,QAAQ,CAAC,gBAAgB,kCAOvB;IAEF,IAAa,QAAQ,uBA4BpB;IAED,OAAO,KAAK,eAAe,GAO1B;IAED,OAAO,KAAK,eAAe,GAU1B;IAED,OAAO,KAAK,YAAY,GAiBvB;IAED,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,KAAK,iBAAiB,GAS5B;CACD;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,4BAA4B,EAAE,oBAAoB,CAAA;KAClD;CACD"}
|
|
@@ -1,45 +1,61 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { bind, Component, component, css, html,
|
|
2
|
+
import { bind, Component, component, css, html, join, property, style } from '@a11d/lit';
|
|
3
3
|
import { tooltip } from '@3mo/tooltip';
|
|
4
4
|
import { Localizer } from '@3mo/localization';
|
|
5
|
-
import {
|
|
5
|
+
import { ResizeController } from '@3mo/resize-observer';
|
|
6
6
|
import { DataGridSortingStrategy } from './DataGridSortingController.js';
|
|
7
7
|
Localizer.dictionaries.add('de', {
|
|
8
|
+
'Sorting': 'Sortierung',
|
|
8
9
|
'Sort descending': 'Absteigend sortieren',
|
|
9
10
|
'Sort ascending': 'Aufsteigend sortieren',
|
|
11
|
+
'Stickiness': 'Fixierung',
|
|
12
|
+
'Stick to start': 'Anfang fixieren',
|
|
13
|
+
'Stick to both': 'Beide fixieren',
|
|
14
|
+
'Stick to end': 'Ende fixieren',
|
|
10
15
|
'Hide': 'Ausblenden',
|
|
11
16
|
});
|
|
12
17
|
let DataGridColumnHeader = class DataGridColumnHeader extends Component {
|
|
13
18
|
constructor() {
|
|
14
19
|
super(...arguments);
|
|
15
20
|
this.menuOpen = false;
|
|
21
|
+
this.resizeController = new ResizeController(this, {
|
|
22
|
+
callback: async ([entry]) => {
|
|
23
|
+
// It is necessary to defer the callback to avoid
|
|
24
|
+
// this resize-observer triggering other resize-observers in a loop
|
|
25
|
+
await new Promise(r => requestIdleCallback(r));
|
|
26
|
+
this.column.widthInPixels = entry?.contentRect.width ?? 0;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
16
29
|
}
|
|
17
30
|
static get styles() {
|
|
18
31
|
return css `
|
|
19
32
|
:host {
|
|
33
|
+
display: flex;
|
|
34
|
+
position: relative;
|
|
35
|
+
padding: 0 var(--mo-data-grid-cell-padding);
|
|
36
|
+
transition: background 0.1s;
|
|
20
37
|
anchor-name: --mo-data-grid-column-header;
|
|
21
38
|
}
|
|
22
39
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
40
|
+
:host(:hover) {
|
|
41
|
+
background: color-mix(in srgb, var(--mo-color-surface), var(--mo-color-gray) 8%);
|
|
42
|
+
}
|
|
26
43
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
44
|
+
:host([data-sticky]) {
|
|
45
|
+
position: sticky;
|
|
46
|
+
}
|
|
30
47
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
48
|
+
:host([data-sticky]) /*[data-sticking]*/ {
|
|
49
|
+
z-index: 6;
|
|
50
|
+
background: var(--mo-data-grid-sticky-part-color);
|
|
51
|
+
}
|
|
35
52
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
53
|
+
mo-data-grid-header-separator {
|
|
54
|
+
z-index: 5;
|
|
55
|
+
}
|
|
39
56
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
57
|
+
:host([data-sticky]) /*[data-sticking]*/ mo-data-grid-header-separator {
|
|
58
|
+
z-index: 7;
|
|
43
59
|
}
|
|
44
60
|
|
|
45
61
|
#container {
|
|
@@ -61,14 +77,14 @@ let DataGridColumnHeader = class DataGridColumnHeader extends Component {
|
|
|
61
77
|
#sort {
|
|
62
78
|
position: relative;
|
|
63
79
|
|
|
80
|
+
&[data-preview] {
|
|
81
|
+
display: none;
|
|
82
|
+
}
|
|
83
|
+
|
|
64
84
|
mo-icon-button {
|
|
65
85
|
transition: 0.1s;
|
|
66
86
|
font-size: 20px;
|
|
67
87
|
color: var(--mo-color-accent);
|
|
68
|
-
font-size: 20px;
|
|
69
|
-
&[data-preview] {
|
|
70
|
-
opacity: 0;
|
|
71
|
-
}
|
|
72
88
|
}
|
|
73
89
|
|
|
74
90
|
span {
|
|
@@ -87,9 +103,12 @@ let DataGridColumnHeader = class DataGridColumnHeader extends Component {
|
|
|
87
103
|
}
|
|
88
104
|
}
|
|
89
105
|
|
|
90
|
-
:host(:hover) #sort
|
|
91
|
-
|
|
92
|
-
|
|
106
|
+
:host(:hover) #sort[data-preview] {
|
|
107
|
+
display: flex;
|
|
108
|
+
mo-icon-button {
|
|
109
|
+
color: var(--mo-color-gray);
|
|
110
|
+
opacity: 0.5;
|
|
111
|
+
}
|
|
93
112
|
}
|
|
94
113
|
|
|
95
114
|
#menu-icon {
|
|
@@ -115,39 +134,41 @@ let DataGridColumnHeader = class DataGridColumnHeader extends Component {
|
|
|
115
134
|
mo-menu {
|
|
116
135
|
position-anchor: --mo-data-grid-column-header;
|
|
117
136
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
137
|
+
&::part(popover) {
|
|
138
|
+
margin-inline-start: 4px;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
mo-heading {
|
|
142
|
+
padding: 0.5rem 1rem;
|
|
143
|
+
opacity: 0.5;
|
|
121
144
|
}
|
|
122
145
|
}
|
|
123
146
|
`;
|
|
124
147
|
}
|
|
125
148
|
get template() {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
149
|
+
if (this.column.sticky && !this.column.intersecting) {
|
|
150
|
+
this.style.insetInline = this.column.stickyColumnInsetInline;
|
|
151
|
+
}
|
|
152
|
+
this.toggleAttribute('data-sticking', this.column.intersecting === false);
|
|
153
|
+
if (!this.column.sticky) {
|
|
154
|
+
this.removeAttribute('data-sticky');
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
this.setAttribute('data-sticky', this.column.sticky);
|
|
158
|
+
}
|
|
131
159
|
const direction = this.column.alignment === 'end' ? 'horizontal-reversed' : 'horizontal';
|
|
132
160
|
return html `
|
|
133
|
-
<mo-flex id='
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
${
|
|
161
|
+
<mo-flex id='container' alignItems='center' gap='0.2rem'
|
|
162
|
+
direction=${direction}
|
|
163
|
+
@click=${() => this.column.toggleSort()}
|
|
164
|
+
@contextmenu=${(e) => { e.preventDefault(); this.menuOpen = true; }}
|
|
165
|
+
${style({ flex: '1', overflow: 'hidden', cursor: 'pointer' })}
|
|
138
166
|
>
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
@click=${() => this.column.toggleSort()}
|
|
142
|
-
@contextmenu=${(e) => { e.preventDefault(); this.menuOpen = true; }}
|
|
143
|
-
${style({ flex: '1', overflow: 'hidden', cursor: 'pointer' })}
|
|
144
|
-
>
|
|
145
|
-
${this.contentTemplate}
|
|
146
|
-
${this.sortingTemplate}
|
|
147
|
-
</mo-flex>
|
|
148
|
-
${this.menuTemplate}
|
|
149
|
-
${this.separatorTemplate}
|
|
167
|
+
${this.contentTemplate}
|
|
168
|
+
${this.sortingTemplate}
|
|
150
169
|
</mo-flex>
|
|
170
|
+
${this.menuTemplate}
|
|
171
|
+
${this.separatorTemplate}
|
|
151
172
|
`;
|
|
152
173
|
}
|
|
153
174
|
get contentTemplate() {
|
|
@@ -160,40 +181,75 @@ let DataGridColumnHeader = class DataGridColumnHeader extends Component {
|
|
|
160
181
|
}
|
|
161
182
|
get sortingTemplate() {
|
|
162
183
|
const sortingDefinition = this.column.sortingDefinition;
|
|
163
|
-
const sortIcon =
|
|
184
|
+
const sortIcon = sortingDefinition?.strategy === DataGridSortingStrategy.Ascending ? 'arrow_upward' : 'arrow_downward';
|
|
164
185
|
const sortingRank = !sortingDefinition || this.column.dataGrid.getSorting().length <= 1 ? undefined : sortingDefinition.rank;
|
|
165
186
|
return !this.column.sortable ? html.nothing : html `
|
|
166
|
-
<mo-flex id='sort' direction='horizontal'>
|
|
167
|
-
<mo-icon-button dense
|
|
168
|
-
icon=${sortIcon ?? 'arrow_downward'}
|
|
169
|
-
?data-preview=${sortIcon === undefined}
|
|
170
|
-
></mo-icon-button>
|
|
187
|
+
<mo-flex id='sort' direction='horizontal' ?data-preview=${!sortingDefinition?.strategy}>
|
|
188
|
+
<mo-icon-button dense icon=${sortIcon}></mo-icon-button>
|
|
171
189
|
${!sortingRank ? html.nothing : html `<span>${sortingRank}</span>`}
|
|
172
190
|
</mo-flex>
|
|
173
191
|
`;
|
|
174
192
|
}
|
|
175
193
|
get menuTemplate() {
|
|
194
|
+
const additionalItems = this.column.getMenuItemsTemplate?.();
|
|
176
195
|
return html `
|
|
177
196
|
<mo-popover-container placement='block-end' alignment='end' style='display: contents'>
|
|
178
197
|
<mo-icon-button dense id='menu-icon' icon='more_vert'></mo-icon-button>
|
|
179
198
|
|
|
180
199
|
<mo-menu slot='popover' .anchor=${this} target='menu-icon' ?open=${bind(this, 'menuOpen')}>
|
|
181
|
-
<mo-menu-item icon='arrow_downward'
|
|
182
|
-
?data-selected=${this.column.sortingDefinition?.strategy === DataGridSortingStrategy.Descending}
|
|
183
|
-
@click=${() => this.column.toggleSort(DataGridSortingStrategy.Descending)}
|
|
184
|
-
>${t('Sort descending')}</mo-menu-item>
|
|
185
|
-
<mo-menu-item icon='arrow_upward'
|
|
186
|
-
?data-selected=${this.column.sortingDefinition?.strategy === DataGridSortingStrategy.Ascending}
|
|
187
|
-
@click=${() => this.column.toggleSort(DataGridSortingStrategy.Ascending)}
|
|
188
|
-
>${t('Sort ascending')}</mo-menu-item>
|
|
189
200
|
<mo-line></mo-line>
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
201
|
+
${join([
|
|
202
|
+
!this.column.sortable ? undefined : this.getSortingItemsTemplate(additionalItems instanceof Map ? additionalItems.get('sorting') : undefined),
|
|
203
|
+
// Hide stickiness items for now
|
|
204
|
+
true ? undefined : this.getStickinessItemsTemplate(additionalItems instanceof Map ? additionalItems.get('stickiness') : undefined),
|
|
205
|
+
this.getMoreItemsTemplate(additionalItems instanceof Map ? additionalItems.get('more') : additionalItems),
|
|
206
|
+
].filter(Boolean), html `<mo-line></mo-line>`)}
|
|
193
207
|
</mo-menu>
|
|
194
208
|
</mo-popover-container>
|
|
195
209
|
`;
|
|
196
210
|
}
|
|
211
|
+
getSortingItemsTemplate(additionalItems) {
|
|
212
|
+
return html `
|
|
213
|
+
<mo-heading typography='subtitle2'>${t('Sorting')}</mo-heading>
|
|
214
|
+
<mo-selectable-menu-item icon='arrow_downward'
|
|
215
|
+
?disabled=${this.column.sortable === false}
|
|
216
|
+
?selected=${this.column.sortingDefinition?.strategy === DataGridSortingStrategy.Descending}
|
|
217
|
+
@click=${() => this.column.toggleSort(DataGridSortingStrategy.Descending)}
|
|
218
|
+
>${t('Sort descending')}</mo-selectable-menu-item>
|
|
219
|
+
<mo-selectable-menu-item icon='arrow_upward'
|
|
220
|
+
?disabled=${this.column.sortable === false}
|
|
221
|
+
?selected=${this.column.sortingDefinition?.strategy === DataGridSortingStrategy.Ascending}
|
|
222
|
+
@click=${() => this.column.toggleSort(DataGridSortingStrategy.Ascending)}
|
|
223
|
+
>${t('Sort ascending')}</mo-selectable-menu-item>
|
|
224
|
+
${additionalItems}
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
getStickinessItemsTemplate(additionalItems) {
|
|
228
|
+
return html `
|
|
229
|
+
<mo-heading typography='subtitle2'>${t('Stickiness')}</mo-heading>
|
|
230
|
+
<mo-selectable-menu-item icon='push_pin'
|
|
231
|
+
?selected=${this.column.sticky === 'start'}
|
|
232
|
+
@click=${() => this.column.toggleSticky('start')}
|
|
233
|
+
>${t('Stick to start')}</mo-selectable-menu-item>
|
|
234
|
+
<mo-selectable-menu-item icon='push_pin'
|
|
235
|
+
?selected=${this.column.sticky === 'both'}
|
|
236
|
+
@click=${() => this.column.toggleSticky('both')}
|
|
237
|
+
>${t('Stick to both')}</mo-selectable-menu-item>
|
|
238
|
+
<mo-selectable-menu-item icon='push_pin'
|
|
239
|
+
?selected=${this.column.sticky === 'end'}
|
|
240
|
+
@click=${() => this.column.toggleSticky('end')}
|
|
241
|
+
>${t('Stick to end')}</mo-selectable-menu-item>
|
|
242
|
+
${additionalItems}
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
getMoreItemsTemplate(additionalItems) {
|
|
246
|
+
return html `
|
|
247
|
+
<mo-menu-item icon='visibility_off' @click=${() => this.column.hide()}>
|
|
248
|
+
${t('Hide')}
|
|
249
|
+
</mo-menu-item>
|
|
250
|
+
${additionalItems}
|
|
251
|
+
`;
|
|
252
|
+
}
|
|
197
253
|
get separatorTemplate() {
|
|
198
254
|
const index = this.column.dataGrid.visibleColumns.indexOf(this.column);
|
|
199
255
|
return html `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGridHeaderSeparator.d.ts","sourceRoot":"","sources":["../DataGridHeaderSeparator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+D,MAAM,WAAW,CAAA;AAElG,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE/D,qBACa,uBAAwB,SAAQ,SAAS;IACzB,QAAQ,EAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,EAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAEnD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,kBAAkB,CAAI;IAEvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAK;IAE7B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAQ;IAE5B,WAAoB,MAAM,
|
|
1
|
+
{"version":3,"file":"DataGridHeaderSeparator.d.ts","sourceRoot":"","sources":["../DataGridHeaderSeparator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+D,MAAM,WAAW,CAAA;AAElG,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE/D,qBACa,uBAAwB,SAAQ,SAAS;IACzB,QAAQ,EAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,EAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAEnD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,kBAAkB,CAAI;IAEvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAK;IAE7B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAQ;IAE5B,WAAoB,MAAM,kCA6CzB;IAED,cAAuB,QAAQ,0CAK9B;IAGD,SAAS,CAAC,eAAe;IAczB,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,YAAY,GAAG,UAAU;IAmBxD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAIjC;IAED,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAIjC;CACD;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,+BAA+B,EAAE,uBAAuB,CAAA;KACxD;CACD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, type HTMLTemplateResult } from '@a11d/lit';
|
|
2
2
|
import { DataGrid } from '../DataGrid.js';
|
|
3
|
-
import { DataGridColumn, type DataGridColumnAlignment, type DataGridColumnSticky } from '../DataGridColumn.js';
|
|
3
|
+
import { DataGridColumn, type DataGridColumnAlignment, type DataGridColumnMenuItems, type DataGridColumnSticky } from '../DataGridColumn.js';
|
|
4
4
|
/**
|
|
5
5
|
* @attr width - The width of the column
|
|
6
6
|
* @attr hidden - Whether the column is hidden. The column can be made visible by the user in the settings panel if available.
|
|
@@ -26,6 +26,7 @@ export declare abstract class DataGridColumnComponent<TData, TValue> extends Com
|
|
|
26
26
|
nonSortable: boolean;
|
|
27
27
|
nonEditable: boolean | Predicate<TData>;
|
|
28
28
|
get column(): DataGridColumn<TData, TValue>;
|
|
29
|
+
protected getMenuItemsTemplate?(): DataGridColumnMenuItems;
|
|
29
30
|
abstract getContentTemplate(value: TValue | undefined, data: TData): HTMLTemplateResult;
|
|
30
31
|
abstract getEditContentTemplate?(value: TValue | undefined, data: TData): HTMLTemplateResult;
|
|
31
32
|
protected handleEdit(value: TValue | undefined, data: TData): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGridColumnComponent.d.ts","sourceRoot":"","sources":["../../columns/DataGridColumnComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"DataGridColumnComponent.d.ts","sourceRoot":"","sources":["../../columns/DataGridColumnComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,KAAK,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAE5I;;;;;;;;;;;GAWG;AACH,8BAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAE,SAAQ,SAAS;IACjD,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;IAE3D,KAAK,SAAgB;IACK,MAAM,UAAQ;IACxC,MAAM,CAAC,EAAE,oBAAoB,CAAA;IACZ,OAAO,SAAK;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,uBAAuB,CAAU;IAC5C,YAAY,EAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IACrB,WAAW,UAAQ;IAO5D,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAQ;IAElD,IAAI,MAAM,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAmB1C;IAED,SAAS,CAAC,oBAAoB,CAAC,IAAI,uBAAuB;IAE1D,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,kBAAkB;IACvF,QAAQ,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,kBAAkB;IAE5F,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,KAAK;IAIlD,iBAAiB;cAOP,OAAO;IAKzB,kBAAkB,IAAI,SAAS,CAAC,MAAM,CAAC;IAIvC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;CAI7D"}
|
|
@@ -37,6 +37,7 @@ export class DataGridColumnComponent extends Component {
|
|
|
37
37
|
width: this.width,
|
|
38
38
|
sortable: !this.nonSortable,
|
|
39
39
|
editable: this.getEditContentTemplate !== undefined && (typeof nonEditable !== 'function' ? !nonEditable : x => !nonEditable(x)),
|
|
40
|
+
getMenuItemsTemplate: this.getMenuItemsTemplate?.bind(this),
|
|
40
41
|
getContentTemplate: this.getContentTemplate.bind(this),
|
|
41
42
|
getEditContentTemplate: this.getEditContentTemplate?.bind(this),
|
|
42
43
|
generateCsvHeading: this.generateCsvHeading.bind(this),
|
|
@@ -738,6 +738,11 @@
|
|
|
738
738
|
"type": "boolean",
|
|
739
739
|
"default": "false"
|
|
740
740
|
},
|
|
741
|
+
{
|
|
742
|
+
"name": "resizeController",
|
|
743
|
+
"type": "ResizeController<Promise<void>>",
|
|
744
|
+
"default": "\"new ResizeController(this, {\\n\\t\\tcallback: async ([entry]) => {\\n\\t\\t\\t// It is necessary to defer the callback to avoid\\n\\t\\t\\t// this resize-observer triggering other resize-observers in a loop\\n\\t\\t\\tawait new Promise(r => requestIdleCallback(r))\\n\\t\\t\\tthis.column.widthInPixels = entry?.contentRect.width ?? 0\\n\\t\\t}\\n\\t})\""
|
|
745
|
+
},
|
|
741
746
|
{
|
|
742
747
|
"name": "template",
|
|
743
748
|
"description": "The template rendered into renderRoot. Invoked on each update to perform rendering tasks.",
|
|
@@ -844,16 +849,17 @@
|
|
|
844
849
|
"type": "boolean",
|
|
845
850
|
"default": "false"
|
|
846
851
|
},
|
|
847
|
-
{
|
|
848
|
-
"name": "icon",
|
|
849
|
-
"type": "MaterialIcon | undefined"
|
|
850
|
-
},
|
|
851
852
|
{
|
|
852
853
|
"name": "disabled",
|
|
853
854
|
"description": "Whether the list item is disabled",
|
|
854
855
|
"type": "boolean",
|
|
855
856
|
"default": "false"
|
|
856
857
|
},
|
|
858
|
+
{
|
|
859
|
+
"name": "icon",
|
|
860
|
+
"description": "Icon to be displayed in the list item",
|
|
861
|
+
"type": "MaterialIcon | undefined"
|
|
862
|
+
},
|
|
857
863
|
{
|
|
858
864
|
"name": "preventClickOnSpace",
|
|
859
865
|
"description": "Whether the list item should prevent click on space",
|
|
@@ -877,11 +883,6 @@
|
|
|
877
883
|
"type": "SlotController",
|
|
878
884
|
"default": "\"new SlotController(this)\""
|
|
879
885
|
},
|
|
880
|
-
{
|
|
881
|
-
"name": "icon",
|
|
882
|
-
"attribute": "icon",
|
|
883
|
-
"type": "MaterialIcon | undefined"
|
|
884
|
-
},
|
|
885
886
|
{
|
|
886
887
|
"name": "role",
|
|
887
888
|
"type": "\"menuitem\"",
|
|
@@ -899,6 +900,12 @@
|
|
|
899
900
|
"type": "boolean",
|
|
900
901
|
"default": "false"
|
|
901
902
|
},
|
|
903
|
+
{
|
|
904
|
+
"name": "icon",
|
|
905
|
+
"attribute": "icon",
|
|
906
|
+
"description": "Icon to be displayed in the list item",
|
|
907
|
+
"type": "MaterialIcon | undefined"
|
|
908
|
+
},
|
|
902
909
|
{
|
|
903
910
|
"name": "preventClickOnSpace",
|
|
904
911
|
"attribute": "preventClickOnSpace",
|
|
@@ -915,11 +922,6 @@
|
|
|
915
922
|
"name": "",
|
|
916
923
|
"description": "Default slot for content"
|
|
917
924
|
}
|
|
918
|
-
],
|
|
919
|
-
"cssParts": [
|
|
920
|
-
{
|
|
921
|
-
"name": "icon"
|
|
922
|
-
}
|
|
923
925
|
]
|
|
924
926
|
},
|
|
925
927
|
{
|
|
@@ -3697,6 +3699,10 @@
|
|
|
3697
3699
|
"name": "menuOpen",
|
|
3698
3700
|
"type": "boolean"
|
|
3699
3701
|
},
|
|
3702
|
+
{
|
|
3703
|
+
"name": "resizeController",
|
|
3704
|
+
"type": "ResizeController<Promise<void>>"
|
|
3705
|
+
},
|
|
3700
3706
|
{
|
|
3701
3707
|
"name": "template",
|
|
3702
3708
|
"description": "The template rendered into renderRoot. Invoked on each update to perform rendering tasks.",
|
|
@@ -3775,16 +3781,17 @@
|
|
|
3775
3781
|
"type": "boolean",
|
|
3776
3782
|
"default": "false"
|
|
3777
3783
|
},
|
|
3778
|
-
{
|
|
3779
|
-
"name": "icon",
|
|
3780
|
-
"type": "MaterialIcon | undefined"
|
|
3781
|
-
},
|
|
3782
3784
|
{
|
|
3783
3785
|
"name": "disabled",
|
|
3784
3786
|
"description": "Whether the list item is disabled",
|
|
3785
3787
|
"type": "boolean",
|
|
3786
3788
|
"default": "false"
|
|
3787
3789
|
},
|
|
3790
|
+
{
|
|
3791
|
+
"name": "icon",
|
|
3792
|
+
"description": "Icon to be displayed in the list item",
|
|
3793
|
+
"type": "MaterialIcon | undefined"
|
|
3794
|
+
},
|
|
3788
3795
|
{
|
|
3789
3796
|
"name": "preventClickOnSpace",
|
|
3790
3797
|
"description": "Whether the list item should prevent click on space",
|
|
@@ -3808,11 +3815,6 @@
|
|
|
3808
3815
|
"type": "SlotController",
|
|
3809
3816
|
"default": "\"new SlotController(this)\""
|
|
3810
3817
|
},
|
|
3811
|
-
{
|
|
3812
|
-
"name": "icon",
|
|
3813
|
-
"attribute": "icon",
|
|
3814
|
-
"type": "MaterialIcon | undefined"
|
|
3815
|
-
},
|
|
3816
3818
|
{
|
|
3817
3819
|
"name": "role",
|
|
3818
3820
|
"type": "\"menuitem\"",
|
|
@@ -3830,6 +3832,12 @@
|
|
|
3830
3832
|
"type": "boolean",
|
|
3831
3833
|
"default": "false"
|
|
3832
3834
|
},
|
|
3835
|
+
{
|
|
3836
|
+
"name": "icon",
|
|
3837
|
+
"attribute": "icon",
|
|
3838
|
+
"description": "Icon to be displayed in the list item",
|
|
3839
|
+
"type": "MaterialIcon | undefined"
|
|
3840
|
+
},
|
|
3833
3841
|
{
|
|
3834
3842
|
"name": "preventClickOnSpace",
|
|
3835
3843
|
"attribute": "preventClickOnSpace",
|
|
@@ -3846,11 +3854,6 @@
|
|
|
3846
3854
|
"name": "",
|
|
3847
3855
|
"description": "Default slot for content"
|
|
3848
3856
|
}
|
|
3849
|
-
],
|
|
3850
|
-
"cssParts": [
|
|
3851
|
-
{
|
|
3852
|
-
"name": "icon"
|
|
3853
|
-
}
|
|
3854
3857
|
]
|
|
3855
3858
|
},
|
|
3856
3859
|
{
|