@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.
Files changed (41) hide show
  1. package/dist/custom-elements.json +1381 -1
  2. package/dist/dts/column-selection/column-picker-ag-drag.d.ts +18 -0
  3. package/dist/dts/column-selection/column-picker-ag-drag.d.ts.map +1 -0
  4. package/dist/dts/column-selection/column-picker.utils.d.ts +50 -0
  5. package/dist/dts/column-selection/column-picker.utils.d.ts.map +1 -0
  6. package/dist/dts/column-selection/column-selection.d.ts +549 -0
  7. package/dist/dts/column-selection/column-selection.d.ts.map +1 -0
  8. package/dist/dts/column-selection/column-selection.styles.d.ts +11 -0
  9. package/dist/dts/column-selection/column-selection.styles.d.ts.map +1 -0
  10. package/dist/dts/column-selection/column-selection.template.d.ts +13 -0
  11. package/dist/dts/column-selection/column-selection.template.d.ts.map +1 -0
  12. package/dist/dts/column-selection/grid-pro-column-drag-bridge.d.ts +46 -0
  13. package/dist/dts/column-selection/grid-pro-column-drag-bridge.d.ts.map +1 -0
  14. package/dist/dts/column-selection/index.d.ts +8 -0
  15. package/dist/dts/column-selection/index.d.ts.map +1 -0
  16. package/dist/dts/column-selection/resolve-columns-picker-api.d.ts +23 -0
  17. package/dist/dts/column-selection/resolve-columns-picker-api.d.ts.map +1 -0
  18. package/dist/dts/grid-pro-beta.d.ts +12 -0
  19. package/dist/dts/grid-pro-beta.d.ts.map +1 -1
  20. package/dist/dts/grid-pro.styles.d.ts.map +1 -1
  21. package/dist/dts/grid-pro.template.d.ts.map +1 -1
  22. package/dist/dts/index.d.ts +1 -0
  23. package/dist/dts/index.d.ts.map +1 -1
  24. package/dist/dts/react.d.ts +10 -0
  25. package/dist/esm/column-selection/column-picker-ag-drag.js +52 -0
  26. package/dist/esm/column-selection/column-picker.utils.js +118 -0
  27. package/dist/esm/column-selection/column-selection.js +620 -0
  28. package/dist/esm/column-selection/column-selection.styles.js +236 -0
  29. package/dist/esm/column-selection/column-selection.template.js +96 -0
  30. package/dist/esm/column-selection/grid-pro-column-drag-bridge.js +62 -0
  31. package/dist/esm/column-selection/index.js +7 -0
  32. package/dist/esm/column-selection/resolve-columns-picker-api.js +42 -0
  33. package/dist/esm/grid-pro-beta.js +33 -2
  34. package/dist/esm/grid-pro.styles.js +2 -0
  35. package/dist/esm/grid-pro.template.js +8 -1
  36. package/dist/esm/index.js +1 -0
  37. package/dist/grid-pro.api.json +6820 -4409
  38. package/dist/grid-pro.d.ts +781 -46
  39. package/dist/react.cjs +7 -0
  40. package/dist/react.mjs +6 -0
  41. 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
@@ -2,6 +2,7 @@ export * from './cell';
2
2
  export * from './cell-renderers';
3
3
  export * from './cell-editors';
4
4
  export * from './column';
5
+ export * from './column-selection';
5
6
  export * from './column-filters';
6
7
  export * from './datasource';
7
8
  export * from './external';