@genesislcap/grid-pro 15.25.0 → 15.26.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/custom-elements.json +1381 -1
- package/dist/dts/column-selection/column-picker-ag-drag.d.ts +18 -0
- package/dist/dts/column-selection/column-picker-ag-drag.d.ts.map +1 -0
- package/dist/dts/column-selection/column-picker.utils.d.ts +50 -0
- package/dist/dts/column-selection/column-picker.utils.d.ts.map +1 -0
- package/dist/dts/column-selection/column-selection.d.ts +549 -0
- package/dist/dts/column-selection/column-selection.d.ts.map +1 -0
- package/dist/dts/column-selection/column-selection.styles.d.ts +11 -0
- package/dist/dts/column-selection/column-selection.styles.d.ts.map +1 -0
- package/dist/dts/column-selection/column-selection.template.d.ts +13 -0
- package/dist/dts/column-selection/column-selection.template.d.ts.map +1 -0
- package/dist/dts/column-selection/grid-pro-column-drag-bridge.d.ts +46 -0
- package/dist/dts/column-selection/grid-pro-column-drag-bridge.d.ts.map +1 -0
- package/dist/dts/column-selection/index.d.ts +8 -0
- package/dist/dts/column-selection/index.d.ts.map +1 -0
- package/dist/dts/column-selection/resolve-columns-picker-api.d.ts +23 -0
- package/dist/dts/column-selection/resolve-columns-picker-api.d.ts.map +1 -0
- package/dist/dts/grid-pro-beta.d.ts +12 -0
- package/dist/dts/grid-pro-beta.d.ts.map +1 -1
- package/dist/dts/grid-pro.styles.d.ts.map +1 -1
- package/dist/dts/grid-pro.template.d.ts.map +1 -1
- package/dist/dts/index.d.ts +1 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/react.d.ts +10 -0
- package/dist/esm/column-selection/column-picker-ag-drag.js +52 -0
- package/dist/esm/column-selection/column-picker.utils.js +118 -0
- package/dist/esm/column-selection/column-selection.js +620 -0
- package/dist/esm/column-selection/column-selection.styles.js +236 -0
- package/dist/esm/column-selection/column-selection.template.js +96 -0
- package/dist/esm/column-selection/grid-pro-column-drag-bridge.js +62 -0
- package/dist/esm/column-selection/index.js +7 -0
- package/dist/esm/column-selection/resolve-columns-picker-api.js +42 -0
- package/dist/esm/grid-pro-beta.js +33 -2
- package/dist/esm/grid-pro.styles.js +2 -0
- package/dist/esm/grid-pro.template.js +8 -1
- package/dist/esm/index.js +1 -0
- package/dist/grid-pro.api.json +6820 -4409
- package/dist/grid-pro.d.ts +781 -46
- package/dist/react.cjs +7 -0
- package/dist/react.mjs +6 -0
- package/package.json +13 -13
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { css } from '@microsoft/fast-element';
|
|
2
|
+
/**
|
|
3
|
+
* Styles for {@link ColumnSelection}.
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export const columnSelectionStyles = css `
|
|
7
|
+
:host {
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.column-selection {
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.column-selection-button[data-state='hover'] {
|
|
18
|
+
background: var(--neutral-fill-hover);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.column-selection-panel,
|
|
22
|
+
.column-selection-panel *,
|
|
23
|
+
.column-selection-panel *::before,
|
|
24
|
+
.column-selection-panel *::after {
|
|
25
|
+
box-sizing: border-box;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.column-selection-panel {
|
|
29
|
+
inset: unset;
|
|
30
|
+
margin: 0;
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
width: 280px;
|
|
33
|
+
max-width: min(280px, 90vw);
|
|
34
|
+
max-height: 80dvh;
|
|
35
|
+
overflow-y: auto;
|
|
36
|
+
border: 1px solid var(--neutral-stroke-divider-rest, var(--neutral-stroke-rest));
|
|
37
|
+
border-radius: calc(var(--control-corner-radius, 4) * 1px);
|
|
38
|
+
background: var(--neutral-layer-floating, var(--neutral-layer-2, #fff));
|
|
39
|
+
box-shadow: 0 8px 24px rgb(0 0 0 / 18%);
|
|
40
|
+
padding: 0;
|
|
41
|
+
|
|
42
|
+
position-area: block-end span-inline-start;
|
|
43
|
+
position-try-fallbacks: flip-block, flip-inline;
|
|
44
|
+
margin-block-start: calc(var(--design-unit, 4) * 1px);
|
|
45
|
+
|
|
46
|
+
min-width: 200px;
|
|
47
|
+
color: var(--ag-foreground-color, var(--neutral-foreground-rest));
|
|
48
|
+
font-family: var(--ag-font-family, var(--body-font));
|
|
49
|
+
font-size: var(--ag-data-font-size, var(--type-ramp-minus-1-font-size));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.column-selection-panel:popover-open {
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.grid-pro-columns-toolbar {
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: calc(var(--design-unit) * 2px);
|
|
61
|
+
flex: none;
|
|
62
|
+
width: 100%;
|
|
63
|
+
height: calc((var(--base-height-multiplier) + var(--density)) * var(--design-unit) * 1px);
|
|
64
|
+
min-height: calc((var(--base-height-multiplier) + var(--density)) * var(--design-unit) * 1px);
|
|
65
|
+
margin: 0;
|
|
66
|
+
padding: 0 calc(var(--design-unit) * 2px);
|
|
67
|
+
border-bottom: var(--ag-borders-secondary, 1px solid)
|
|
68
|
+
var(--ag-secondary-border-color, var(--ag-border-color, var(--neutral-stroke-divider-rest)));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.grid-pro-columns-toolbar .grid-pro-columns-search {
|
|
72
|
+
flex: 1 1 auto;
|
|
73
|
+
min-width: 0;
|
|
74
|
+
width: auto;
|
|
75
|
+
display: block;
|
|
76
|
+
|
|
77
|
+
--design-unit: 3;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.grid-pro-columns-toolbar > .grid-pro-columns-search {
|
|
81
|
+
flex: 1 1 auto !important;
|
|
82
|
+
height: auto !important;
|
|
83
|
+
min-height: 0 !important;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.grid-pro-columns-select-all {
|
|
87
|
+
flex: 0 0 auto;
|
|
88
|
+
margin: 0;
|
|
89
|
+
|
|
90
|
+
--design-unit: 3;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.grid-pro-columns-select-all.indeterminate::part(control),
|
|
94
|
+
.grid-pro-columns-select-all[aria-checked='mixed']::part(control) {
|
|
95
|
+
background: var(--neutral-fill-strong-rest, var(--neutral-stroke-rest, #9aa0a6));
|
|
96
|
+
border-color: var(--neutral-fill-strong-rest, var(--neutral-stroke-rest, #9aa0a6));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.grid-pro-columns-select-all.indeterminate:not([disabled]):hover::part(control),
|
|
100
|
+
.grid-pro-columns-select-all[aria-checked='mixed']:not([disabled]):hover::part(control) {
|
|
101
|
+
background: var(--neutral-fill-strong-hover, var(--neutral-stroke-hover, #7d848c));
|
|
102
|
+
border-color: var(--neutral-fill-strong-hover, var(--neutral-stroke-hover, #7d848c));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.grid-pro-columns-select-all.indeterminate::part(checked-indicator),
|
|
106
|
+
.grid-pro-columns-select-all[aria-checked='mixed']::part(checked-indicator) {
|
|
107
|
+
opacity: 0%;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.grid-pro-columns-select-all.indeterminate::part(indeterminate-indicator),
|
|
111
|
+
.grid-pro-columns-select-all[aria-checked='mixed']::part(indeterminate-indicator) {
|
|
112
|
+
width: 10px;
|
|
113
|
+
height: 2px;
|
|
114
|
+
border-radius: 1px;
|
|
115
|
+
background: var(--neutral-fill-input-rest, #fff);
|
|
116
|
+
opacity: 100%;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.grid-pro-columns-select-all.indeterminate:not([disabled]):hover::part(indeterminate-indicator),
|
|
120
|
+
.grid-pro-columns-select-all[aria-checked='mixed']:not([disabled]):hover::part(
|
|
121
|
+
indeterminate-indicator
|
|
122
|
+
) {
|
|
123
|
+
background: var(--neutral-fill-input-rest, #fff);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.grid-pro-columns-list {
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
gap: 2px;
|
|
130
|
+
flex: 1 1 0;
|
|
131
|
+
min-height: 250px;
|
|
132
|
+
max-height: 400px;
|
|
133
|
+
padding: 8px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.grid-pro-columns-section {
|
|
137
|
+
display: flex;
|
|
138
|
+
flex-direction: column;
|
|
139
|
+
gap: 2px;
|
|
140
|
+
flex: 0 0 auto;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.grid-pro-columns-item {
|
|
144
|
+
display: flex;
|
|
145
|
+
align-items: center;
|
|
146
|
+
gap: 6px;
|
|
147
|
+
padding: 2px 0;
|
|
148
|
+
border-radius: 4px;
|
|
149
|
+
cursor: default;
|
|
150
|
+
user-select: none;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.grid-pro-columns-item.dragging {
|
|
154
|
+
opacity: 50%;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.grid-pro-columns-item.drag-over {
|
|
158
|
+
background: var(--ag-row-hover-color, var(--neutral-fill-hover));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.grid-pro-columns-handle {
|
|
162
|
+
flex: 0 0 auto;
|
|
163
|
+
display: inline-flex;
|
|
164
|
+
align-items: center;
|
|
165
|
+
justify-content: center;
|
|
166
|
+
min-width: 20px;
|
|
167
|
+
min-height: 24px;
|
|
168
|
+
margin: -4px 0;
|
|
169
|
+
padding: 4px 6px;
|
|
170
|
+
box-sizing: border-box;
|
|
171
|
+
opacity: 45%;
|
|
172
|
+
letter-spacing: -1px;
|
|
173
|
+
font-size: 12px;
|
|
174
|
+
line-height: 1;
|
|
175
|
+
touch-action: none;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.grid-pro-columns-handle[draggable='true'],
|
|
179
|
+
.grid-pro-columns-handle.grid-pro-columns-handle-grid-drag,
|
|
180
|
+
.grid-pro-columns-handle.grid-pro-columns-handle-panel-drag {
|
|
181
|
+
cursor: grab;
|
|
182
|
+
opacity: 65%;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.grid-pro-columns-handle[draggable='true']:active,
|
|
186
|
+
.grid-pro-columns-handle.grid-pro-columns-handle-grid-drag:active,
|
|
187
|
+
.grid-pro-columns-handle.grid-pro-columns-handle-panel-drag:active {
|
|
188
|
+
cursor: grabbing;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.grid-pro-columns-checkbox {
|
|
192
|
+
flex: 0 0 auto;
|
|
193
|
+
margin: 0;
|
|
194
|
+
|
|
195
|
+
--design-unit: 3;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.grid-pro-columns-checkbox[aria-checked='true']:not([disabled]):hover::part(checked-indicator) {
|
|
199
|
+
fill: var(--foreground-on-accent-hover);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.grid-pro-columns-label {
|
|
203
|
+
overflow: hidden;
|
|
204
|
+
text-overflow: ellipsis;
|
|
205
|
+
white-space: nowrap;
|
|
206
|
+
}
|
|
207
|
+
`;
|
|
208
|
+
/**
|
|
209
|
+
* Host layout when the Grid Pro column-selection toolbar is shown.
|
|
210
|
+
* @public
|
|
211
|
+
*/
|
|
212
|
+
export const gridProColumnSelectionHostStyles = css `
|
|
213
|
+
:host(.has-column-selection) {
|
|
214
|
+
display: flex;
|
|
215
|
+
flex-direction: column;
|
|
216
|
+
min-height: 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
:host(.has-column-selection) [part='grid'] {
|
|
220
|
+
flex: 1 1 auto;
|
|
221
|
+
min-height: 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.grid-pro-column-selection-toolbar {
|
|
225
|
+
display: flex;
|
|
226
|
+
align-items: center;
|
|
227
|
+
justify-content: flex-end;
|
|
228
|
+
gap: calc(var(--design-unit, 4) * 2px);
|
|
229
|
+
width: 100%;
|
|
230
|
+
box-sizing: border-box;
|
|
231
|
+
flex-shrink: 0;
|
|
232
|
+
padding: calc(var(--design-unit, 4) * 2px);
|
|
233
|
+
border-bottom: 1px solid var(--neutral-stroke-divider-rest, var(--neutral-stroke-rest));
|
|
234
|
+
background: var(--neutral-layer-1, transparent);
|
|
235
|
+
}
|
|
236
|
+
`;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { html, ref, repeat } from '@microsoft/fast-element';
|
|
2
|
+
/**
|
|
3
|
+
* Column Selection button + popover with embedded picker UI.
|
|
4
|
+
* @param prefix - Design-system prefix for button/icon/checkbox/text-field.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export const getColumnSelectionTemplate = (prefix = 'foundation') => {
|
|
8
|
+
const textField = `${prefix}-text-field`;
|
|
9
|
+
const checkbox = `${prefix}-checkbox`;
|
|
10
|
+
const columnRow = html `
|
|
11
|
+
<div
|
|
12
|
+
class="${(x) => `grid-pro-columns-item${x.visible ? '' : ' grid-pro-columns-item--unselected'}`}"
|
|
13
|
+
data-col-id="${(x) => x.colId}"
|
|
14
|
+
data-test-id="${(x) => `grid-pro-columns-item-${x.colId}`}"
|
|
15
|
+
>
|
|
16
|
+
<${checkbox}
|
|
17
|
+
class="grid-pro-columns-checkbox"
|
|
18
|
+
data-test-id="${(x) => `grid-pro-columns-check-${x.colId}`}"
|
|
19
|
+
:checked="${(x) => x.visible}"
|
|
20
|
+
?disabled="${(x) => x.lockVisible}"
|
|
21
|
+
@click="${(x, c) => c.parent.onCheckboxClick(x, c.event)}"
|
|
22
|
+
></${checkbox}>
|
|
23
|
+
<span
|
|
24
|
+
class="grid-pro-columns-handle"
|
|
25
|
+
data-test-id="${(x) => `grid-pro-columns-handle-${x.colId}`}"
|
|
26
|
+
aria-hidden="${(x, c) => {
|
|
27
|
+
const panel = c.parent;
|
|
28
|
+
return String(!(panel.canDrag && (x.visible || panel.canDragToGrid(x))));
|
|
29
|
+
}}"
|
|
30
|
+
>
|
|
31
|
+
⋮⋮
|
|
32
|
+
</span>
|
|
33
|
+
<span class="grid-pro-columns-label">${(x) => x.headerName}</span>
|
|
34
|
+
</div>
|
|
35
|
+
`;
|
|
36
|
+
return html `
|
|
37
|
+
<div
|
|
38
|
+
class="column-selection"
|
|
39
|
+
part="column-selection"
|
|
40
|
+
data-test-id="column-selection"
|
|
41
|
+
${ref('root')}
|
|
42
|
+
>
|
|
43
|
+
<${prefix}-button
|
|
44
|
+
${ref('buttonEl')}
|
|
45
|
+
part="column-selection-button"
|
|
46
|
+
exportparts="control: column-selection-button-control, content: column-selection-button-content"
|
|
47
|
+
class="column-selection-button"
|
|
48
|
+
appearance="neutral"
|
|
49
|
+
data-state="${(x) => (x.open ? 'hover' : undefined)}"
|
|
50
|
+
aria-pressed="${(x) => (x.open ? 'true' : 'false')}"
|
|
51
|
+
@click=${(x) => x.toggle()}
|
|
52
|
+
>
|
|
53
|
+
<${prefix}-icon size="lg" name="columns" slot="start"></${prefix}-icon>
|
|
54
|
+
${(x) => x.label}
|
|
55
|
+
</${prefix}-button>
|
|
56
|
+
<div
|
|
57
|
+
${ref('panelEl')}
|
|
58
|
+
class="column-selection-panel"
|
|
59
|
+
part="column-selection-panel"
|
|
60
|
+
data-test-id="column-selection-panel"
|
|
61
|
+
popover="manual"
|
|
62
|
+
>
|
|
63
|
+
<div class="grid-pro-columns-toolbar" data-test-id="grid-pro-columns-toolbar">
|
|
64
|
+
<${checkbox}
|
|
65
|
+
class="grid-pro-columns-select-all"
|
|
66
|
+
data-test-id="grid-pro-columns-select-all"
|
|
67
|
+
:checked="${(x) => x.selectAllChecked}"
|
|
68
|
+
:indeterminate="${(x) => x.selectAllIndeterminate}"
|
|
69
|
+
aria-checked="${(x) => x.selectAllIndeterminate ? 'mixed' : x.selectAllChecked ? 'true' : 'false'}"
|
|
70
|
+
@click="${(x, c) => x.onSelectAllClick(c.event)}"
|
|
71
|
+
></${checkbox}>
|
|
72
|
+
<${textField}
|
|
73
|
+
class="grid-pro-columns-search"
|
|
74
|
+
placeholder="Search"
|
|
75
|
+
data-test-id="grid-pro-columns-search"
|
|
76
|
+
:value="${(x) => x.search}"
|
|
77
|
+
@input="${(x, c) => x.onSearchInput(c.event.target.value)}"
|
|
78
|
+
></${textField}>
|
|
79
|
+
</div>
|
|
80
|
+
<div class="grid-pro-columns-list" data-test-id="grid-pro-columns-list">
|
|
81
|
+
<div class="grid-pro-columns-section" data-test-id="grid-pro-columns-selected">
|
|
82
|
+
${repeat((x) => x.selectedItems, columnRow, { recycle: false })}
|
|
83
|
+
</div>
|
|
84
|
+
<div class="grid-pro-columns-section" data-test-id="grid-pro-columns-unselected">
|
|
85
|
+
${repeat((x) => x.unselectedItems, columnRow, { recycle: false })}
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
`;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Default column selection template (`foundation-*` components).
|
|
94
|
+
* @public
|
|
95
|
+
*/
|
|
96
|
+
export const columnSelectionTemplate = getColumnSelectionTemplate();
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { _ColumnMoveModule as ColumnMoveModule, } from 'ag-grid-community';
|
|
2
|
+
/** Context key on `gridOptions.context` for AG column drag integration.
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
export const GRID_PRO_COLUMN_DRAG_BRIDGE_CONTEXT_KEY = 'gridProColumnDragBridge';
|
|
6
|
+
/** @internal Writes DnD beans onto the shared bridge object in grid context. */
|
|
7
|
+
export function syncColumnDragBridge(beans) {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
if (!(beans === null || beans === void 0 ? void 0 : beans.dragAndDrop) || !beans.gos) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const context = (_a = beans.gos.get('context')) !== null && _a !== void 0 ? _a : (_b = beans.gridOptions) === null || _b === void 0 ? void 0 : _b.context;
|
|
13
|
+
const bridge = context === null || context === void 0 ? void 0 : context[GRID_PRO_COLUMN_DRAG_BRIDGE_CONTEXT_KEY];
|
|
14
|
+
if (!bridge) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
bridge.dragAndDrop = beans.dragAndDrop;
|
|
18
|
+
bridge.gos = beans.gos;
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
/** @internal Populates {@link GridProColumnDragBridge} once core DnD beans exist. */
|
|
22
|
+
class GridProColumnDragBridgeInit {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.beanName = 'gridProColumnDragBridgeInit';
|
|
25
|
+
this.beans = null;
|
|
26
|
+
}
|
|
27
|
+
wireBeans(beans) {
|
|
28
|
+
this.beans = beans;
|
|
29
|
+
}
|
|
30
|
+
postConstruct() {
|
|
31
|
+
syncColumnDragBridge(this.beans);
|
|
32
|
+
queueMicrotask(() => syncColumnDragBridge(this.beans));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Registers drag-and-drop beans on `gridOptions.context` so custom tool panels
|
|
37
|
+
* can call `dragAndDrop.addDragSource` (same contract as Enterprise Columns panel).
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export const gridProColumnDragBridgeModule = {
|
|
41
|
+
moduleName: 'GridProColumnDragBridge',
|
|
42
|
+
version: ColumnMoveModule.version,
|
|
43
|
+
beans: [GridProColumnDragBridgeInit],
|
|
44
|
+
dependsOn: [ColumnMoveModule],
|
|
45
|
+
};
|
|
46
|
+
/** @public */
|
|
47
|
+
export function resolveColumnDragBridge(context) {
|
|
48
|
+
const bridge = context === null || context === void 0 ? void 0 : context[GRID_PRO_COLUMN_DRAG_BRIDGE_CONTEXT_KEY];
|
|
49
|
+
return resolveColumnDragBridgeDirect(bridge);
|
|
50
|
+
}
|
|
51
|
+
/** @public */
|
|
52
|
+
export function resolveColumnDragBridgeDirect(bridge) {
|
|
53
|
+
if (!(bridge === null || bridge === void 0 ? void 0 : bridge.dragAndDrop) || !(bridge === null || bridge === void 0 ? void 0 : bridge.gos)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return bridge;
|
|
57
|
+
}
|
|
58
|
+
/** @public */
|
|
59
|
+
export function resolveColumnDragBridgeFromApi(api) {
|
|
60
|
+
var _a;
|
|
61
|
+
return resolveColumnDragBridge((_a = api === null || api === void 0 ? void 0 : api.getGridOption) === null || _a === void 0 ? void 0 : _a.call(api, 'context'));
|
|
62
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './column-selection';
|
|
2
|
+
export * from './column-selection.styles';
|
|
3
|
+
export * from './column-selection.template';
|
|
4
|
+
export * from './resolve-columns-picker-api';
|
|
5
|
+
export * from './column-picker.utils';
|
|
6
|
+
export * from './grid-pro-column-drag-bridge';
|
|
7
|
+
export * from './column-picker-ag-drag';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves an AG `gridApi` suitable for {@link ColumnSelection}.
|
|
3
|
+
* Classic Grid Pro (v29) exposes column helpers on `columnApi` — bridge when needed.
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export function resolveColumnsPickerApi(gridHost, gridApi) {
|
|
7
|
+
const resolvedApi = (gridApi !== null && gridApi !== void 0 ? gridApi : gridHost === null || gridHost === void 0 ? void 0 : gridHost.gridApi);
|
|
8
|
+
if (!resolvedApi) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
if (typeof resolvedApi.setColumnsVisible === 'function' &&
|
|
12
|
+
typeof resolvedApi.getColumns === 'function') {
|
|
13
|
+
return resolvedApi;
|
|
14
|
+
}
|
|
15
|
+
const columnApi = gridHost === null || gridHost === void 0 ? void 0 : gridHost.columnApi;
|
|
16
|
+
if (!columnApi) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return new Proxy(resolvedApi, {
|
|
20
|
+
get(target, prop, receiver) {
|
|
21
|
+
switch (prop) {
|
|
22
|
+
case 'getColumns':
|
|
23
|
+
return () => { var _a, _b; return (_b = (_a = columnApi.getAllGridColumns) === null || _a === void 0 ? void 0 : _a.call(columnApi)) !== null && _b !== void 0 ? _b : []; };
|
|
24
|
+
case 'getAllDisplayedColumns':
|
|
25
|
+
return () => { var _a, _b; return (_b = (_a = columnApi.getAllDisplayedColumns) === null || _a === void 0 ? void 0 : _a.call(columnApi)) !== null && _b !== void 0 ? _b : []; };
|
|
26
|
+
case 'getColumnState':
|
|
27
|
+
return () => { var _a, _b; return (_b = (_a = columnApi.getColumnState) === null || _a === void 0 ? void 0 : _a.call(columnApi)) !== null && _b !== void 0 ? _b : []; };
|
|
28
|
+
case 'setColumnsVisible':
|
|
29
|
+
return (ids, visible) => {
|
|
30
|
+
var _a;
|
|
31
|
+
for (const id of ids) {
|
|
32
|
+
(_a = columnApi.setColumnVisible) === null || _a === void 0 ? void 0 : _a.call(columnApi, id, visible);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
case 'applyColumnState':
|
|
36
|
+
return (opts) => { var _a; return (_a = columnApi.applyColumnState) === null || _a === void 0 ? void 0 : _a.call(columnApi, opts); };
|
|
37
|
+
default:
|
|
38
|
+
return Reflect.get(target, prop, receiver);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -4,7 +4,7 @@ import { avoidTreeShaking, LifecycleMixin, respondToVisibility, } from '@genesis
|
|
|
4
4
|
import { baseLayerLuminance, StandardLuminance } from '@microsoft/fast-components';
|
|
5
5
|
import { attr, DOM, observable } from '@microsoft/fast-element';
|
|
6
6
|
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
7
|
-
import { CellStyleModule, CheckboxEditorModule, ClientSideRowModelApiModule, ClientSideRowModelModule, ColumnApiModule, ColumnAutoSizeModule, createGrid, CsvExportModule, CustomEditorModule, CustomFilterModule, DateEditorModule, DateFilterModule, EventApiModule, HighlightChangesModule, InfiniteRowModelModule, ModuleRegistry, NumberEditorModule, NumberFilterModule, PaginationModule, RenderApiModule, RowApiModule, RowDragModule, RowSelectionModule, RowStyleModule, SelectEditorModule, TextEditorModule, TextFilterModule, TooltipModule, } from 'ag-grid-community';
|
|
7
|
+
import { CellStyleModule, CheckboxEditorModule, ClientSideRowModelApiModule, ClientSideRowModelModule, ColumnApiModule, ColumnAutoSizeModule, createGrid, CsvExportModule, CustomEditorModule, CustomFilterModule, DateEditorModule, DateFilterModule, DragAndDropModule, EventApiModule, HighlightChangesModule, InfiniteRowModelModule, ModuleRegistry, NumberEditorModule, NumberFilterModule, PaginationModule, RenderApiModule, RowApiModule, RowDragModule, RowSelectionModule, RowStyleModule, SelectEditorModule, TextEditorModule, TextFilterModule, TooltipModule, _ColumnMoveModule as ColumnMoveModule, } from 'ag-grid-community';
|
|
8
8
|
import * as changeCase from 'change-case';
|
|
9
9
|
import debounce from 'lodash.debounce';
|
|
10
10
|
import { GridProCell } from './cell';
|
|
@@ -12,6 +12,8 @@ import { DateEditor, MultiselectEditor, NumberEditor, SelectEditor, StringEditor
|
|
|
12
12
|
import { ActionRenderer, ActionsMenuRenderer, BooleanRenderer, EditableRenderer, IconRenderer, SelectRenderer, StatusPillRenderer, } from './cell-renderers';
|
|
13
13
|
import { GridProColumn, resolveVisibleColumnFields } from './column';
|
|
14
14
|
import { EnumColumnFilter, EnumColumnFloatingFilter, GridProFilterTypes } from './column-filters';
|
|
15
|
+
import { ColumnSelection } from './column-selection';
|
|
16
|
+
import { GRID_PRO_COLUMN_DRAG_BRIDGE_CONTEXT_KEY, gridProColumnDragBridgeModule, } from './column-selection/grid-pro-column-drag-bridge';
|
|
15
17
|
import { GridProClientSideDatasource, GridProInfiniteDatasource, GridProServerSideDatasource, } from './datasource';
|
|
16
18
|
import { baseDatasourceEventNames } from './datasource/base.types';
|
|
17
19
|
import { GridProGenesisDatasource, gridProGenesisDatasourceEventNames, } from './grid-pro-genesis-datasource';
|
|
@@ -22,7 +24,7 @@ import { StatePersistence } from './state-persistence';
|
|
|
22
24
|
import { LabelValueStatusBarComponent, LoadMoreStatusBarComponent, ReloadStatusBarComponent, RowCountStatusBarComponent, } from './status-bar-components';
|
|
23
25
|
import { ErrorTooltip } from './tooltips';
|
|
24
26
|
import { convertToKebabCase, logger, mergeAndDedupColDefWithColumnState, sanitizeColumnState, } from './utils';
|
|
25
|
-
avoidTreeShaking(GridProGenesisDatasource, GridProClientSideDatasource, GridProServerSideDatasource, GridProInfiniteDatasource, GridProCell, GridProColumn);
|
|
27
|
+
avoidTreeShaking(GridProGenesisDatasource, GridProClientSideDatasource, GridProServerSideDatasource, GridProInfiniteDatasource, GridProCell, GridProColumn, ColumnSelection);
|
|
26
28
|
ModuleRegistry.registerModules([
|
|
27
29
|
CsvExportModule,
|
|
28
30
|
ClientSideRowModelModule,
|
|
@@ -50,6 +52,9 @@ ModuleRegistry.registerModules([
|
|
|
50
52
|
CheckboxEditorModule,
|
|
51
53
|
CustomFilterModule,
|
|
52
54
|
InfiniteRowModelModule,
|
|
55
|
+
DragAndDropModule,
|
|
56
|
+
ColumnMoveModule,
|
|
57
|
+
gridProColumnDragBridgeModule,
|
|
53
58
|
// ValidationModule,
|
|
54
59
|
]);
|
|
55
60
|
const DEBOUNCE_TIME = 400;
|
|
@@ -86,6 +91,10 @@ function findDeclaredAccessor(target, key) {
|
|
|
86
91
|
* @remarks Re-emits AG Grid public API events when listeners are registered via `addEventListener` (event names match AG Grid public event strings). The same AG Grid events are also dispatched as native `Event`s with lowercased `type` and payload on `agGridDetails` (for example `addEventListener('columnresized', ...)`).
|
|
87
92
|
*/
|
|
88
93
|
export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
94
|
+
/** @internal Shared AG column-drag bridge for custom tool panels. */
|
|
95
|
+
getColumnDragBridge() {
|
|
96
|
+
return this.columnDragBridge;
|
|
97
|
+
}
|
|
89
98
|
rowDataChanged(_, rowData) {
|
|
90
99
|
// `initialised` flips true right after createGrid(), but `gridApi` is only assigned in the
|
|
91
100
|
// async onGridReady callback — so a binding push in that window would crash on an undefined
|
|
@@ -109,6 +118,9 @@ export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
|
109
118
|
this.initGrid();
|
|
110
119
|
}
|
|
111
120
|
}
|
|
121
|
+
enableColumnSelectionChanged() {
|
|
122
|
+
this.syncColumnSelectionHostLayout();
|
|
123
|
+
}
|
|
112
124
|
getfilterModel() {
|
|
113
125
|
return __awaiter(this, void 0, void 0, function* () {
|
|
114
126
|
if (!this.persistFilterModelKey) {
|
|
@@ -154,6 +166,8 @@ export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
|
154
166
|
* If true, will enable row flashing for all rows for `add` async transactions
|
|
155
167
|
*/
|
|
156
168
|
this.enableRowFlashing = false;
|
|
169
|
+
/** Wired to `gridOptions.context` for columns picker → grid drag (see bridge module). */
|
|
170
|
+
this.columnDragBridge = {};
|
|
157
171
|
this.columnComponentName = 'grid-pro-column';
|
|
158
172
|
this.themeMode = 'dark';
|
|
159
173
|
/**
|
|
@@ -172,6 +186,11 @@ export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
|
172
186
|
* This requires AG Grid Enterprise module to be available for the status bar to be displayed when enabled.
|
|
173
187
|
*/
|
|
174
188
|
this.withStatusBar = false;
|
|
189
|
+
/**
|
|
190
|
+
* Shows a Column Selection button above the grid.
|
|
191
|
+
* @public
|
|
192
|
+
*/
|
|
193
|
+
this.enableColumnSelection = false;
|
|
175
194
|
this.applyingDatasourceGridOptions = false;
|
|
176
195
|
this.rehydrationAttempted = false;
|
|
177
196
|
this.rootEventsListeners = [];
|
|
@@ -306,6 +325,7 @@ export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
|
306
325
|
connectedCallback() {
|
|
307
326
|
var _a;
|
|
308
327
|
super.connectedCallback();
|
|
328
|
+
this.syncColumnSelectionHostLayout();
|
|
309
329
|
this.disposed = false;
|
|
310
330
|
const luminanceTarget = (_a = this.provider) !== null && _a !== void 0 ? _a : this;
|
|
311
331
|
this.luminanceSubscription = baseLayerLuminance.subscribe(this.luminanceObserver, luminanceTarget);
|
|
@@ -375,6 +395,9 @@ export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
|
375
395
|
}
|
|
376
396
|
this.performDisconnectCleanup();
|
|
377
397
|
}
|
|
398
|
+
syncColumnSelectionHostLayout() {
|
|
399
|
+
this.classList.toggle('has-column-selection', this.enableColumnSelection);
|
|
400
|
+
}
|
|
378
401
|
performDisconnectCleanup() {
|
|
379
402
|
if (this.debounced) {
|
|
380
403
|
clearTimeout(this.debounced);
|
|
@@ -988,6 +1011,7 @@ export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
|
988
1011
|
get gridParams() {
|
|
989
1012
|
return {
|
|
990
1013
|
globalListener: this.boundGlobalEventListener,
|
|
1014
|
+
modules: [gridProColumnDragBridgeModule, ColumnMoveModule, DragAndDropModule],
|
|
991
1015
|
};
|
|
992
1016
|
}
|
|
993
1017
|
/**
|
|
@@ -1154,6 +1178,10 @@ export class GridProBeta extends LifecycleMixin(FoundationElement) {
|
|
|
1154
1178
|
setLocalGridOptions(derivedOptions) {
|
|
1155
1179
|
// Merge options with reflected AG properties from attributes
|
|
1156
1180
|
this.agGridOptions = Object.assign(Object.assign({}, this.agGridOptions), copyAttributesToGridOptions(derivedOptions, this.agAttributes));
|
|
1181
|
+
this.agGridOptions.context = Object.assign(Object.assign({}, this.agGridOptions.context), { [GRID_PRO_COLUMN_DRAG_BRIDGE_CONTEXT_KEY]: this.columnDragBridge });
|
|
1182
|
+
if (this.agGridOptions.allowDragFromColumnsToolPanel == null) {
|
|
1183
|
+
this.agGridOptions.allowDragFromColumnsToolPanel = true;
|
|
1184
|
+
}
|
|
1157
1185
|
}
|
|
1158
1186
|
/**
|
|
1159
1187
|
* Clears the local grid options, this is used to clear the grid options when the grid is restarted.
|
|
@@ -1486,6 +1514,9 @@ __decorate([
|
|
|
1486
1514
|
__decorate([
|
|
1487
1515
|
attr({ mode: 'boolean', attribute: 'with-status-bar' })
|
|
1488
1516
|
], GridProBeta.prototype, "withStatusBar", void 0);
|
|
1517
|
+
__decorate([
|
|
1518
|
+
attr({ mode: 'boolean', attribute: 'enable-column-selection' })
|
|
1519
|
+
], GridProBeta.prototype, "enableColumnSelection", void 0);
|
|
1489
1520
|
__decorate([
|
|
1490
1521
|
observable
|
|
1491
1522
|
], GridProBeta.prototype, "customErrorHandlerTemplate", void 0);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { alertFlashPhaseProperty } from '@genesislcap/foundation-ui';
|
|
2
2
|
import { css } from '@microsoft/fast-element';
|
|
3
|
+
import { gridProColumnSelectionHostStyles } from './column-selection/column-selection.styles';
|
|
3
4
|
import { errorHandlerDialogStyles } from './datasource/error-handler.dialog';
|
|
4
5
|
import { ROW_MATCH_ALERT_CELL_CLASS, ROW_MATCH_ALERT_CLASS } from './datasource/row-match.classes';
|
|
5
6
|
import { agExternalStockStyles } from './external';
|
|
@@ -86,6 +87,7 @@ export const foundationGridProStyles = css `
|
|
|
86
87
|
${agExternalStockStyles}
|
|
87
88
|
${errorHandlerDialogStyles}
|
|
88
89
|
${agDragGhostShadowDomStyles}
|
|
90
|
+
${gridProColumnSelectionHostStyles}
|
|
89
91
|
${rowMatchAlertStyles}
|
|
90
92
|
:host {
|
|
91
93
|
--datasource-error-background-color: var(--neutral-layer-4);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { html, ref } from '@microsoft/fast-element';
|
|
1
|
+
import { html, ref, when } from '@microsoft/fast-element';
|
|
2
2
|
import { getErrorHandlerDialogTemplate } from './datasource/error-handler.dialog';
|
|
3
3
|
/**
|
|
4
4
|
* Get a Design System prefixed The Grid Pro template.
|
|
@@ -8,6 +8,13 @@ import { getErrorHandlerDialogTemplate } from './datasource/error-handler.dialog
|
|
|
8
8
|
*/
|
|
9
9
|
export const getGridProTemplate = (prefix = 'foundation') => html `
|
|
10
10
|
<template>
|
|
11
|
+
${when((x) => !!x.enableColumnSelection, html `
|
|
12
|
+
<div class="grid-pro-column-selection-toolbar" part="actions">
|
|
13
|
+
<${prefix}-column-selection
|
|
14
|
+
:gridHost="${(x) => x}"
|
|
15
|
+
></${prefix}-column-selection>
|
|
16
|
+
</div>
|
|
17
|
+
`)}
|
|
11
18
|
<span part="grid" data-ag-theme-mode=${(x) => x.themeMode} class="${(x) => x.classNames}">
|
|
12
19
|
<slot name="grid" ${ref('gridSlot')}></slot>
|
|
13
20
|
<slot></slot>
|
package/dist/esm/index.js
CHANGED