ag-studio-angular 2.1.1 → 3.0.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/README.md +22 -22
- package/fesm2022/ag-studio-angular.mjs +260 -24
- package/fesm2022/ag-studio-angular.mjs.map +1 -1
- package/index.d.ts +140 -10
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
<picture>
|
|
5
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://ag-grid.com/studio/images/ag-studio-logo-dark.svg"/>
|
|
6
|
-
<source media="(prefers-color-scheme: light)" srcset="https://ag-grid.com/studio/images/ag-studio-logo.svg"/>
|
|
7
|
-
<img width="100%" alt="AG Studio Logo" src="https://ag-grid.com/studio/images/ag-studio-logo.svg"/>
|
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://www.ag-grid.com/studio/images/ag-studio-logo-dark.svg"/>
|
|
6
|
+
<source media="(prefers-color-scheme: light)" srcset="https://www.ag-grid.com/studio/images/ag-studio-logo.svg"/>
|
|
7
|
+
<img width="100%" alt="AG Studio Logo" src="https://www.ag-grid.com/studio/images/ag-studio-logo.svg"/>
|
|
8
8
|
</picture>
|
|
9
9
|
<div align="center">
|
|
10
|
-
<h4><a href="https://ag-grid.com/studio/">Website</a> · <a href="https://ag-grid.com/studio/angular/overview/">Documentation</a> · <a href="https://ag-grid.com/studio/example/">Live Demo</a></h4>
|
|
10
|
+
<h4><a href="https://www.ag-grid.com/studio/">Website</a> · <a href="https://www.ag-grid.com/studio/angular/overview/">Documentation</a> · <a href="https://www.ag-grid.com/studio/example/">Live Demo</a></h4>
|
|
11
11
|
</div>
|
|
12
12
|
<br>
|
|
13
13
|
<a href="https://www.npmjs.com/package/ag-studio-angular">
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
</a>
|
|
19
19
|
<br><br>
|
|
20
20
|
<!-- START MAIN DESCRIPTION -->
|
|
21
|
-
<p><strong><a href="https://ag-grid.com/studio/angular/overview/"><img src="https://ag-grid.com/images/fw-logos/angular.svg" height="16" width="16" alt="Angular Logo"> AG Studio</a></strong> is an <strong>Angular</strong> Embedded Analytics component for creating dashboards, built on top of <a href="https://ag-grid.com">AG Grid</a> and <a href="https://ag-grid.com/charts">AG Charts</a>.</p>
|
|
21
|
+
<p><strong><a href="https://www.ag-grid.com/studio/angular/overview/"><img src="https://www.ag-grid.com/images/fw-logos/angular.svg" height="16" width="16" alt="Angular Logo"> AG Studio</a></strong> is an <strong>Angular</strong> Embedded Analytics component for creating dashboards, built on top of <a href="https://www.ag-grid.com/">AG Grid</a> and <a href="https://www.ag-grid.com/charts/">AG Charts</a>.</p>
|
|
22
22
|
<!-- END MAIN DESCRIPTION -->
|
|
23
23
|
<br>
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
<picture>
|
|
27
|
-
<source srcset="https://ag-grid.com/studio/images/studio-footer.png" media="(prefers-color-scheme: light)">
|
|
28
|
-
<source srcset="https://ag-grid.com/studio/images/studio-footer-dark.png" media="(prefers-color-scheme: dark)">
|
|
29
|
-
<img src="https://ag-grid.com/studio/images/studio-footer.png" alt="AG Studio Preview">
|
|
27
|
+
<source srcset="https://www.ag-grid.com/studio/images/studio-footer.png" media="(prefers-color-scheme: light)">
|
|
28
|
+
<source srcset="https://www.ag-grid.com/studio/images/studio-footer-dark.png" media="(prefers-color-scheme: dark)">
|
|
29
|
+
<img src="https://www.ag-grid.com/studio/images/studio-footer.png" alt="AG Studio Preview">
|
|
30
30
|
</picture>
|
|
31
31
|
<div align="right">
|
|
32
|
-
<a href="https://ag-grid.com/studio/example/"><br><img alt="Live Demo" src="https://img.shields.io/badge/ag--grid.com%2Fstudio-Live%20Demo-blue?style=for-the-badge"></a>
|
|
32
|
+
<a href="https://www.ag-grid.com/studio/example/"><br><img alt="Live Demo" src="https://img.shields.io/badge/ag--grid.com%2Fstudio-Live%20Demo-blue?style=for-the-badge"></a>
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
35
|
## Overview
|
|
@@ -46,13 +46,13 @@ You can ship pre-built reports in code so users see a finished dashboard on firs
|
|
|
46
46
|
|
|
47
47
|
### Features
|
|
48
48
|
|
|
49
|
-
| Feature
|
|
50
|
-
|
|
|
51
|
-
| [Drag & Drop Report Builder](https://ag-grid.com/studio/angular/modes-layout/) | Bar charts, line charts, pie charts, grids, KPI tiles, text, and images on a drag-and-drop canvas. Design in **edit mode**, then switch to **view mode** to lock the layout while keeping the dashboard fully interactive. |
|
|
52
|
-
| [Data Engine](https://ag-grid.com/studio/angular/data/) | Provide one or more data sources and the data engine automatically manages joins across tables via relationships, aggregation, filtering, and calculated fields through an expression language. No query layer required. |
|
|
53
|
-
| [Advanced Filtering](https://ag-grid.com/studio/angular/filters/) | Page-level filters, widget-level filters, and cross-filtering between widgets are all built in. Users can filter from the filters panel, from on-canvas filter widgets (list, button, and date), or by clicking data points in charts to cross-filter the rest of the page. |
|
|
54
|
-
| [Theming](https://ag-grid.com/studio/angular/theming/) | Full customisation via the Theming API. Override colours, fonts, spacing, and borders across the Studio UI, grid widgets, and chart widgets independently. Light and dark modes are supported out of the box. |
|
|
55
|
-
| [State Management](https://ag-grid.com/studio/angular/state/) | The entire dashboard state (pages, widgets, layout, and filters) is captured in a single serialisable JSON object. Save and restore state to persist reports, and let users switch between saved reports. |
|
|
49
|
+
| Feature | Description |
|
|
50
|
+
| ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
51
|
+
| [Drag & Drop Report Builder](https://www.ag-grid.com/studio/angular/modes-layout/) | Bar charts, line charts, pie charts, grids, KPI tiles, text, and images on a drag-and-drop canvas. Design in **edit mode**, then switch to **view mode** to lock the layout while keeping the dashboard fully interactive. |
|
|
52
|
+
| [Data Engine](https://www.ag-grid.com/studio/angular/data/) | Provide one or more data sources and the data engine automatically manages joins across tables via relationships, aggregation, filtering, and calculated fields through an expression language. No query layer required. |
|
|
53
|
+
| [Advanced Filtering](https://www.ag-grid.com/studio/angular/filters/) | Page-level filters, widget-level filters, and cross-filtering between widgets are all built in. Users can filter from the filters panel, from on-canvas filter widgets (list, button, and date), or by clicking data points in charts to cross-filter the rest of the page. |
|
|
54
|
+
| [Theming](https://www.ag-grid.com/studio/angular/theming/) | Full customisation via the Theming API. Override colours, fonts, spacing, and borders across the Studio UI, grid widgets, and chart widgets independently. Light and dark modes are supported out of the box. |
|
|
55
|
+
| [State Management](https://www.ag-grid.com/studio/angular/state/) | The entire dashboard state (pages, widgets, layout, and filters) is captured in a single serialisable JSON object. Save and restore state to persist reports, and let users switch between saved reports. |
|
|
56
56
|
|
|
57
57
|
## Quick Start
|
|
58
58
|
|
|
@@ -133,11 +133,11 @@ export class DashboardComponent {
|
|
|
133
133
|
|
|
134
134
|
That's it — users can now build reports using the drag-and-drop editor.
|
|
135
135
|
|
|
136
|
-
> **Note:** For more information on building dashboards with AG Studio, refer to our [Quick Start](https://ag-grid.com/studio/angular/quick-start/) guide or step through the full [Tutorial](https://ag-grid.com/studio/angular/tutorial/).
|
|
136
|
+
> **Note:** For more information on building dashboards with AG Studio, refer to our [Quick Start](https://www.ag-grid.com/studio/angular/quick-start/) guide or step through the full [Tutorial](https://www.ag-grid.com/studio/angular/tutorial/).
|
|
137
137
|
|
|
138
138
|
## User Guides
|
|
139
139
|
|
|
140
|
-
Our [User Guides](https://ag-grid.com/studio/angular/user-interface/) contain comprehensive guides to help users understand how to use AG Studio.
|
|
140
|
+
Our [User Guides](https://www.ag-grid.com/studio/angular/user-interface/) contain comprehensive guides to help users understand how to use AG Studio.
|
|
141
141
|
|
|
142
142
|
## Support
|
|
143
143
|
|
|
@@ -147,9 +147,9 @@ AG Studio customers have access to dedicated support via [ZenDesk](https://ag-gr
|
|
|
147
147
|
|
|
148
148
|
`ag-studio` has a **Commercial** license. See the [LICENSE file](./LICENSE.html) for more info.
|
|
149
149
|
|
|
150
|
-
[Request a free 45-day enterprise trial](https://ag-grid.com/studio/license-pricing/?tab=trial) to explore the full enterprise capabilities of AG Studio with no restrictions or watermarks.
|
|
150
|
+
[Request a free 45-day enterprise trial](https://www.ag-grid.com/studio/license-pricing/?tab=trial) to explore the full enterprise capabilities of AG Studio with no restrictions or watermarks.
|
|
151
151
|
|
|
152
|
-
<div><h2><img vertical-align="middle" width="32" height="32" src="https://ag-grid.com/images/ag-logos/svg-logos/AG-BrandMark_Light-Theme.svg" alt="AG Grid Logo"> AG Grid</h2></div>
|
|
152
|
+
<div><h2><img vertical-align="middle" width="32" height="32" src="https://www.ag-grid.com/images/ag-logos/svg-logos/AG-BrandMark_Light-Theme.svg" alt="AG Grid Logo"> AG Grid</h2></div>
|
|
153
153
|
|
|
154
154
|
AG Studio is built on top of [AG Grid](https://www.ag-grid.com/) — the best JavaScript Data Grid in the world. If you need a standalone data grid with sorting, filtering, grouping, pivoting, and more, check out [AG Grid Repo](https://github.com/ag-grid/ag-grid).
|
|
155
155
|
|
|
@@ -159,7 +159,7 @@ AG Studio is built on top of [AG Grid](https://www.ag-grid.com/) — the best Ja
|
|
|
159
159
|
<img src="https://github.com/ag-grid/ag-grid/blob/latest/readme-assets/kitchen-sink-demo-light.gif?raw=true" alt="High Performance Demo">
|
|
160
160
|
</picture>
|
|
161
161
|
|
|
162
|
-
<div><h2><img vertical-align="middle" width="32" height="32" src="https://ag-grid.com/images/ag-logos/svg-logos/AG-BrandMark_Light-Theme.svg" alt="AG Charts Logo"> AG Charts</h2></div>
|
|
162
|
+
<div><h2><img vertical-align="middle" width="32" height="32" src="https://www.ag-grid.com/images/ag-logos/svg-logos/AG-BrandMark_Light-Theme.svg" alt="AG Charts Logo"> AG Charts</h2></div>
|
|
163
163
|
|
|
164
164
|
AG Studio is built on top of [AG Charts](https://www.ag-grid.com/charts/) — the best JavaScript Charting library in the world. If you need standalone charts with bar, line, pie, scatter, treemap, and more, check out [AG Charts](https://github.com/ag-grid/ag-charts).
|
|
165
165
|
|
|
@@ -178,6 +178,6 @@ AG Studio is built on top of [AG Charts](https://www.ag-grid.com/charts/) — th
|
|
|
178
178
|
<a href="https://x.com/ag_grid"><img src="https://img.shields.io/badge/-X%20(Twitter)-black?style=for-the-badge&logo=x" alt="Twitter" height="36"></a>
|
|
179
179
|
<a href="https://www.linkedin.com/company/ag-grid/"><img src="https://img.shields.io/badge/-LinkedIn-blue?style=for-the-badge&logo=linkedin" alt="LinkedIn" height="36"></a>
|
|
180
180
|
<a href="https://www.youtube.com/c/ag-grid"><img src="https://img.shields.io/badge/-YouTube-red?style=for-the-badge&logo=youtube" alt="YouTube" height="36"></a>
|
|
181
|
-
<a href="https://
|
|
181
|
+
<a href="https://www.ag-grid.com/blog/"><img src="https://img.shields.io/badge/-Blog-grey?style=for-the-badge&logo=rss" alt="Blog" height="36"></a>
|
|
182
182
|
|
|
183
183
|
</div>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ViewContainerRef, Component, Injectable, NgZone, EventEmitter, booleanAttribute, Output, Input, ViewEncapsulation, NgModule } from '@angular/core';
|
|
3
|
-
import { _BaseComponentWrapper, _VanillaFrameworkOverrides, _combineAttributesAndStudioProperties, _createStudio, _processPropertyChanges, _BOOLEAN_MIXED_STUDIO_PROPERTIES } from 'ag-studio';
|
|
2
|
+
import { inject, ViewContainerRef, Component, Injectable, NgZone, ViewChild, EventEmitter, booleanAttribute, Output, Input, ViewEncapsulation, NgModule } from '@angular/core';
|
|
3
|
+
import { _BaseComponentWrapper, _VanillaFrameworkOverrides, _STUDIO_GRID_MODULES, _AgLogger, _GridWidgetCore, _PivotGridWidgetCore, _createWidgetDefaults, _combineAttributesAndStudioProperties, _createStudio, _processPropertyChanges, _BOOLEAN_MIXED_STUDIO_PROPERTIES, _createWidgets } from 'ag-studio';
|
|
4
4
|
import { _removeFromParent } from 'ag-stack';
|
|
5
|
+
import { AgGridAngular } from 'ag-grid-angular';
|
|
5
6
|
|
|
6
7
|
// To speed up the removal of custom components we create a number of shards to contain them.
|
|
7
8
|
// Removing a single component calls a function within Angular called removeFromArray.
|
|
@@ -10,10 +11,10 @@ class AgComponentContainer {
|
|
|
10
11
|
constructor() {
|
|
11
12
|
this.vcr = inject(ViewContainerRef);
|
|
12
13
|
}
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
14
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AgComponentContainer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
15
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: AgComponentContainer, isStandalone: false, selector: "ag-component-container", ngImport: i0, template: '', isInline: true }); }
|
|
15
16
|
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AgComponentContainer, decorators: [{
|
|
17
18
|
type: Component,
|
|
18
19
|
args: [{
|
|
19
20
|
selector: 'ag-component-container',
|
|
@@ -46,10 +47,10 @@ class AngularFrameworkComponentWrapper extends _BaseComponentWrapper {
|
|
|
46
47
|
const container = this.compShards.get(shardIdx);
|
|
47
48
|
return container.instance.vcr.createComponent(componentType);
|
|
48
49
|
}
|
|
49
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
50
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AngularFrameworkComponentWrapper, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
51
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AngularFrameworkComponentWrapper }); }
|
|
51
52
|
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AngularFrameworkComponentWrapper, decorators: [{
|
|
53
54
|
type: Injectable
|
|
54
55
|
}] });
|
|
55
56
|
class DynamicAgNg2Component {
|
|
@@ -58,6 +59,11 @@ class DynamicAgNg2Component {
|
|
|
58
59
|
this.frameworkCompWrapper = frameworkCompWrapper;
|
|
59
60
|
this.OriginalConstructor = OriginalConstructor;
|
|
60
61
|
}
|
|
62
|
+
// Never list 'wireBeans' in CUSTOM_WIDGET_TYPE's method lists: `addMethod` would replace this
|
|
63
|
+
// with a null-returning proxy.
|
|
64
|
+
wireBeans(beans) {
|
|
65
|
+
this._beans = beans;
|
|
66
|
+
}
|
|
61
67
|
init(params) {
|
|
62
68
|
return new Promise((resolve) => {
|
|
63
69
|
this.frameworkOverrides.runInsideAngular(() => {
|
|
@@ -75,6 +81,10 @@ class DynamicAgNg2Component {
|
|
|
75
81
|
this._eGui = this._componentRef.location.nativeElement;
|
|
76
82
|
// Angular appends the component to the DOM, so remove it
|
|
77
83
|
_removeFromParent(this._eGui);
|
|
84
|
+
const beans = this._beans;
|
|
85
|
+
if (beans) {
|
|
86
|
+
instance.wireBeans?.(beans);
|
|
87
|
+
}
|
|
78
88
|
return instance.agInit?.(params);
|
|
79
89
|
}
|
|
80
90
|
async refresh(params) {
|
|
@@ -133,7 +143,7 @@ class AngularFrameworkOverrides extends _VanillaFrameworkOverrides {
|
|
|
133
143
|
else if (this.isRunningWithinTestZone) {
|
|
134
144
|
this.runOutside = (callback, source) => {
|
|
135
145
|
if (source === 'resize-observer' || source === 'popupPositioning') {
|
|
136
|
-
// ensure resize observer callbacks are run outside of Angular even under test due to
|
|
146
|
+
// ensure resize observer callbacks are run outside of Angular even under test due to the test environment not supporting ResizeObserver
|
|
137
147
|
// which means it just loops continuously with a setTimeout with no way to flush the queue or have fixture.whenStable() resolve.
|
|
138
148
|
return this._ngZone.runOutsideAngular(callback);
|
|
139
149
|
}
|
|
@@ -171,13 +181,193 @@ class AngularFrameworkOverrides extends _VanillaFrameworkOverrides {
|
|
|
171
181
|
runOutsideAngular(callback, source) {
|
|
172
182
|
return this.runOutside(callback, source);
|
|
173
183
|
}
|
|
174
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
175
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
184
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AngularFrameworkOverrides, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
185
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AngularFrameworkOverrides }); }
|
|
176
186
|
}
|
|
177
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AngularFrameworkOverrides, decorators: [{
|
|
178
188
|
type: Injectable
|
|
179
189
|
}], ctorParameters: () => [{ type: i0.NgZone }] });
|
|
180
190
|
|
|
191
|
+
// False positive lint error, ChangeDetectorRef and co can't be type imports
|
|
192
|
+
/**
|
|
193
|
+
* The studio's grid widget as a framework-native Angular component. Register it as the `comp` of a
|
|
194
|
+
* grid widget definition to host the grid inside the consumer's own Angular application.
|
|
195
|
+
*/
|
|
196
|
+
class GridWidget {
|
|
197
|
+
constructor(changeDetectorRef) {
|
|
198
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
199
|
+
this.cssProperties = {};
|
|
200
|
+
this.modules = _STUDIO_GRID_MODULES;
|
|
201
|
+
this.destroyed = false;
|
|
202
|
+
}
|
|
203
|
+
/** Receives the studio's beans, before `agInit` runs. */
|
|
204
|
+
wireBeans(beans) {
|
|
205
|
+
this.beans = beans;
|
|
206
|
+
}
|
|
207
|
+
agInit(params) {
|
|
208
|
+
const { beans, eRoot } = this;
|
|
209
|
+
if (!beans) {
|
|
210
|
+
_AgLogger.error('GridWidget can only be used as the component of a studio grid widget.');
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const core = new _GridWidgetCore({
|
|
214
|
+
beans,
|
|
215
|
+
createGrid: (gridOptions) => new Promise((resolve) => {
|
|
216
|
+
this.cancelCreate = () => resolve(undefined);
|
|
217
|
+
this.gridOptions = {
|
|
218
|
+
...gridOptions,
|
|
219
|
+
onGridReady: (event) => {
|
|
220
|
+
this.cancelCreate = undefined;
|
|
221
|
+
// `finally`, so a throwing consumer callback cannot leave the promise
|
|
222
|
+
// pending - the core would then never finish initialising.
|
|
223
|
+
try {
|
|
224
|
+
gridOptions.onGridReady?.(event);
|
|
225
|
+
}
|
|
226
|
+
finally {
|
|
227
|
+
resolve(event.api);
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
this.changeDetectorRef.detectChanges();
|
|
232
|
+
}),
|
|
233
|
+
setCssProperties: (properties) => this.applyCssProperties(properties),
|
|
234
|
+
getWidth: () => eRoot.nativeElement.offsetWidth,
|
|
235
|
+
});
|
|
236
|
+
this.core = core;
|
|
237
|
+
return core.init(params);
|
|
238
|
+
}
|
|
239
|
+
refresh(params) {
|
|
240
|
+
return this.core?.refresh(params);
|
|
241
|
+
}
|
|
242
|
+
ngOnDestroy() {
|
|
243
|
+
this.destroyed = true;
|
|
244
|
+
this.cancelCreate?.();
|
|
245
|
+
this.cancelCreate = undefined;
|
|
246
|
+
this.core?.destroy();
|
|
247
|
+
this.core = undefined;
|
|
248
|
+
}
|
|
249
|
+
applyCssProperties(properties) {
|
|
250
|
+
this.cssProperties = properties;
|
|
251
|
+
if (!this.destroyed) {
|
|
252
|
+
// The studio drives its refreshes from outside Angular, so nothing else would run a
|
|
253
|
+
// change detection pass to get the new properties onto the element.
|
|
254
|
+
this.changeDetectorRef.detectChanges();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: GridWidget, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
258
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", type: GridWidget, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "eRoot", first: true, predicate: ["eRoot"], descendants: true, static: true }], ngImport: i0, template: `
|
|
259
|
+
<div #eRoot class="ag-studio-grid-widget" [style]="cssProperties">
|
|
260
|
+
@if (gridOptions) {
|
|
261
|
+
<ag-grid-angular [gridOptions]="gridOptions" [modules]="modules" />
|
|
262
|
+
}
|
|
263
|
+
</div>
|
|
264
|
+
`, isInline: true, styles: [":host{display:block;height:100%;width:100%}ag-grid-angular{display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "toolbar", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipSwitchShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "calculatedColumns", "columnHeaderEdit", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "defaultPdfExportParams", "suppressPdfExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "includeHiddenColumnsInCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "suppressInputClearButton", "enableInputAutoComplete", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "loadingRows", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "processFileInput", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "paginationPanels", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "notesDataSource", "noteTrigger", "noteShowDelay", "noteHideDelay", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "masterDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupHideColumnsUntilExpanded", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "pivotPanelSuppressSort", "suppressGroupRowsSticky", "stickyRowsMaxViewportRatio", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "suppressContentVisibilityAuto", "enableContentVisibilityAuto", "contentVisibilityAutoDelay", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "getColumnMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "tabToNextGridContainer", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "isMasterOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "autoGenerateColumnDefs", "processAutoGeneratedColumnDefs", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "calculatedColumnCreated", "calculatedColumnExpressionChanged", "calculatedColumnRemoved", "calculatedColumnValidationStateChanged", "columnVisible", "columnPinned", "columnHeaderNameChanged", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "issueRaised", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }] }); }
|
|
265
|
+
}
|
|
266
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: GridWidget, decorators: [{
|
|
267
|
+
type: Component,
|
|
268
|
+
args: [{ standalone: true, imports: [AgGridAngular], template: `
|
|
269
|
+
<div #eRoot class="ag-studio-grid-widget" [style]="cssProperties">
|
|
270
|
+
@if (gridOptions) {
|
|
271
|
+
<ag-grid-angular [gridOptions]="gridOptions" [modules]="modules" />
|
|
272
|
+
}
|
|
273
|
+
</div>
|
|
274
|
+
`, styles: [":host{display:block;height:100%;width:100%}ag-grid-angular{display:block;height:100%;width:100%}\n"] }]
|
|
275
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { eRoot: [{
|
|
276
|
+
type: ViewChild,
|
|
277
|
+
args: ['eRoot', { static: true }]
|
|
278
|
+
}] } });
|
|
279
|
+
|
|
280
|
+
// False positive lint error, ChangeDetectorRef and co can't be type imports
|
|
281
|
+
/**
|
|
282
|
+
* The studio's pivot grid widget as a framework-native Angular component. Register it as the `comp`
|
|
283
|
+
* of a pivot grid widget definition to host the grid inside the consumer's own Angular application.
|
|
284
|
+
*/
|
|
285
|
+
class PivotGridWidget {
|
|
286
|
+
constructor(changeDetectorRef) {
|
|
287
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
288
|
+
this.cssProperties = {};
|
|
289
|
+
this.modules = _STUDIO_GRID_MODULES;
|
|
290
|
+
this.destroyed = false;
|
|
291
|
+
}
|
|
292
|
+
/** Receives the studio's beans, before `agInit` runs. */
|
|
293
|
+
wireBeans(beans) {
|
|
294
|
+
this.beans = beans;
|
|
295
|
+
}
|
|
296
|
+
agInit(params) {
|
|
297
|
+
const { beans } = this;
|
|
298
|
+
if (!beans) {
|
|
299
|
+
_AgLogger.error('PivotGridWidget can only be used as the component of a studio pivot grid widget.');
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const core = new _PivotGridWidgetCore({
|
|
303
|
+
beans,
|
|
304
|
+
createGrid: (gridOptions) => new Promise((resolve) => {
|
|
305
|
+
this.cancelCreate = () => resolve(undefined);
|
|
306
|
+
this.gridOptions = {
|
|
307
|
+
...gridOptions,
|
|
308
|
+
onGridReady: (event) => {
|
|
309
|
+
this.cancelCreate = undefined;
|
|
310
|
+
// `finally`, so a throwing consumer callback cannot leave the promise
|
|
311
|
+
// pending - the core would then never finish initialising.
|
|
312
|
+
try {
|
|
313
|
+
gridOptions.onGridReady?.(event);
|
|
314
|
+
}
|
|
315
|
+
finally {
|
|
316
|
+
resolve(event.api);
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
};
|
|
320
|
+
this.changeDetectorRef.detectChanges();
|
|
321
|
+
}),
|
|
322
|
+
setCssProperties: (properties) => this.applyCssProperties(properties),
|
|
323
|
+
});
|
|
324
|
+
this.core = core;
|
|
325
|
+
return core.init(params);
|
|
326
|
+
}
|
|
327
|
+
refresh(params) {
|
|
328
|
+
return this.core?.refresh(params);
|
|
329
|
+
}
|
|
330
|
+
ngOnDestroy() {
|
|
331
|
+
this.destroyed = true;
|
|
332
|
+
this.cancelCreate?.();
|
|
333
|
+
this.cancelCreate = undefined;
|
|
334
|
+
this.core?.destroy();
|
|
335
|
+
this.core = undefined;
|
|
336
|
+
}
|
|
337
|
+
applyCssProperties(properties) {
|
|
338
|
+
this.cssProperties = properties;
|
|
339
|
+
if (!this.destroyed) {
|
|
340
|
+
// The studio drives its refreshes from outside Angular, so nothing else would run a
|
|
341
|
+
// change detection pass to get the new properties onto the element.
|
|
342
|
+
this.changeDetectorRef.detectChanges();
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: PivotGridWidget, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
346
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", type: PivotGridWidget, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
|
|
347
|
+
<div class="ag-studio-pivot-grid-widget" [style]="cssProperties">
|
|
348
|
+
@if (gridOptions) {
|
|
349
|
+
<ag-grid-angular [gridOptions]="gridOptions" [modules]="modules" />
|
|
350
|
+
}
|
|
351
|
+
</div>
|
|
352
|
+
`, isInline: true, styles: [":host{display:block;height:100%;width:100%}ag-grid-angular{display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "toolbar", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipSwitchShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "calculatedColumns", "columnHeaderEdit", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "defaultPdfExportParams", "suppressPdfExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "includeHiddenColumnsInCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "suppressInputClearButton", "enableInputAutoComplete", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "loadingRows", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "processFileInput", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "paginationPanels", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "notesDataSource", "noteTrigger", "noteShowDelay", "noteHideDelay", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "masterDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupHideColumnsUntilExpanded", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "pivotPanelSuppressSort", "suppressGroupRowsSticky", "stickyRowsMaxViewportRatio", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "suppressContentVisibilityAuto", "enableContentVisibilityAuto", "contentVisibilityAutoDelay", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "getColumnMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "tabToNextGridContainer", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "isMasterOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "autoGenerateColumnDefs", "processAutoGeneratedColumnDefs", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "calculatedColumnCreated", "calculatedColumnExpressionChanged", "calculatedColumnRemoved", "calculatedColumnValidationStateChanged", "columnVisible", "columnPinned", "columnHeaderNameChanged", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "issueRaised", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }] }); }
|
|
353
|
+
}
|
|
354
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: PivotGridWidget, decorators: [{
|
|
355
|
+
type: Component,
|
|
356
|
+
args: [{ standalone: true, imports: [AgGridAngular], template: `
|
|
357
|
+
<div class="ag-studio-pivot-grid-widget" [style]="cssProperties">
|
|
358
|
+
@if (gridOptions) {
|
|
359
|
+
<ag-grid-angular [gridOptions]="gridOptions" [modules]="modules" />
|
|
360
|
+
}
|
|
361
|
+
</div>
|
|
362
|
+
`, styles: [":host{display:block;height:100%;width:100%}ag-grid-angular{display:block;height:100%;width:100%}\n"] }]
|
|
363
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
364
|
+
|
|
365
|
+
/** The widget defaults for Angular Studio: the vanilla defs with the Angular widgets swapped in. */
|
|
366
|
+
const WIDGET_DEFAULTS = _createWidgetDefaults({
|
|
367
|
+
grid: GridWidget,
|
|
368
|
+
'pivot-grid': PivotGridWidget,
|
|
369
|
+
});
|
|
370
|
+
|
|
181
371
|
// False positive lint error, ElementRef and co can't be type imports
|
|
182
372
|
class AgStudio {
|
|
183
373
|
constructor(elementDef, _viewContainerRef, _angularFrameworkOverrides, _frameworkCompWrapper) {
|
|
@@ -254,6 +444,11 @@ class AgStudio {
|
|
|
254
444
|
* @initial
|
|
255
445
|
*/
|
|
256
446
|
this.suppressTouch = undefined;
|
|
447
|
+
/** Keyboard shortcuts Studio should not handle, so an application can bind them itself.
|
|
448
|
+
* Each shortcut is suppressed independently, e.g. `{ redo: true }` keeps undo on ctrl/cmd+Z and
|
|
449
|
+
* leaves ctrl/cmd+shift+Z to the application.
|
|
450
|
+
*/
|
|
451
|
+
this.suppressKeyboard = undefined;
|
|
257
452
|
/** A map of key->value pairs for localising text within Studio.
|
|
258
453
|
* @initial
|
|
259
454
|
*/
|
|
@@ -286,20 +481,44 @@ class AgStudio {
|
|
|
286
481
|
*/
|
|
287
482
|
this.data = undefined;
|
|
288
483
|
/** Which mode Studio is in.
|
|
484
|
+
* Changing this only changes what is shown and what is editable: the active state is
|
|
485
|
+
* neither saved nor restored on a mode change, and carries across the switch unchanged.
|
|
486
|
+
* The undo and redo history also carries across by default; set `history.onModeChange` to
|
|
487
|
+
* discard it instead.
|
|
289
488
|
* @default 'view'
|
|
290
489
|
*/
|
|
291
490
|
this.mode = undefined;
|
|
491
|
+
/** How Studio's undo and redo history behaves. */
|
|
492
|
+
this.history = undefined;
|
|
493
|
+
/** Allows filters to be added to, and removed from, the filters panel while in view mode.
|
|
494
|
+
*
|
|
495
|
+
* When `false`, filters can only be added and removed in edit mode.
|
|
496
|
+
*
|
|
497
|
+
* Studio does not store filters added this way. Listen to `onStateUpdated` and persist the
|
|
498
|
+
* state yourself if it needs to survive a reload.
|
|
499
|
+
* @default false
|
|
500
|
+
*/
|
|
501
|
+
this.enableFilterEditingInViewMode = undefined;
|
|
292
502
|
/** Default layout styling.
|
|
293
503
|
*/
|
|
294
504
|
this.layout = undefined;
|
|
295
|
-
/** AI Assistant
|
|
296
|
-
*
|
|
297
|
-
* NOTE: The **AI Assistant** is an experimental feature. Behaviour will be
|
|
298
|
-
* slightly different depending on the LLM being used, and results can vary across queries.
|
|
505
|
+
/** The agent harness powering the AI Assistant panel: either a harness, or a function building
|
|
506
|
+
* one from the Studio API. Results vary with the LLM you supply.
|
|
299
507
|
*
|
|
300
508
|
* @initial
|
|
301
509
|
*/
|
|
302
510
|
this.ai = undefined;
|
|
511
|
+
/** How each tool's calls are presented in the AI Assistant panel, keyed by tool name: the words
|
|
512
|
+
* on the step, an optional component for the body that opens beneath it, or `hidden` to leave
|
|
513
|
+
* the tool out of the transcript. Studio's own tools come pre-declared; an entry here overrides
|
|
514
|
+
* them, and any tool of your own needs one to render as more than its name.
|
|
515
|
+
*
|
|
516
|
+
* Keyed by name because a call replayed from history no longer carries the tool that ran it,
|
|
517
|
+
* only the name it was called by. Applies whichever harness is driving the panel.
|
|
518
|
+
*
|
|
519
|
+
* `detail` is checked against the component type of the framework you are using.
|
|
520
|
+
*/
|
|
521
|
+
this.aiToolDisplay = undefined;
|
|
303
522
|
/** Data-layer configuration. Controls behaviours such as export row limits.
|
|
304
523
|
*/
|
|
305
524
|
this.dataOptions = undefined;
|
|
@@ -359,6 +578,7 @@ class AgStudio {
|
|
|
359
578
|
modules: this.modules,
|
|
360
579
|
providedBeanInstances: {
|
|
361
580
|
frameworkCompWrapper: this._frameworkCompWrapper,
|
|
581
|
+
widgetDefaults: WIDGET_DEFAULTS,
|
|
362
582
|
},
|
|
363
583
|
};
|
|
364
584
|
const api = _createStudio(this._nativeElement, mergedStudioProperties, studioParams);
|
|
@@ -426,10 +646,10 @@ class AgStudio {
|
|
|
426
646
|
}
|
|
427
647
|
}
|
|
428
648
|
}
|
|
429
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
430
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "20.3.
|
|
649
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AgStudio, deps: [{ token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: AngularFrameworkOverrides }, { token: AngularFrameworkComponentWrapper }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
650
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "20.3.30", type: AgStudio, isStandalone: true, selector: "ag-studio", inputs: { studioProperties: "studioProperties", modules: "modules", tabIndex: "tabIndex", enableRtl: ["enableRtl", "enableRtl", booleanAttribute], popupParent: "popupParent", theme: "theme", loadThemeGoogleFonts: ["loadThemeGoogleFonts", "loadThemeGoogleFonts", booleanAttribute], themeCssLayer: "themeCssLayer", styleNonce: "styleNonce", themeStyleContainer: "themeStyleContainer", getDocument: "getDocument", suppressTouch: ["suppressTouch", "suppressTouch", booleanAttribute], suppressKeyboard: "suppressKeyboard", localeText: "localeText", aiText: "aiText", getLocaleText: "getLocaleText", studioId: "studioId", context: "context", initialState: "initialState", data: "data", mode: "mode", history: "history", enableFilterEditingInViewMode: ["enableFilterEditingInViewMode", "enableFilterEditingInViewMode", booleanAttribute], layout: "layout", ai: "ai", aiToolDisplay: "aiToolDisplay", dataOptions: "dataOptions", panels: "panels", page: "page", widgets: "widgets", components: "components" }, outputs: { stateUpdated: "stateUpdated", apiReady: "apiReady", studioReady: "studioReady", renderStateChanged: "renderStateChanged", errorRaised: "errorRaised" }, providers: [AngularFrameworkOverrides, AngularFrameworkComponentWrapper], usesOnChanges: true, ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
|
|
431
651
|
}
|
|
432
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AgStudio, decorators: [{
|
|
433
653
|
type: Component,
|
|
434
654
|
args: [{
|
|
435
655
|
selector: 'ag-studio',
|
|
@@ -466,6 +686,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
|
|
|
466
686
|
}], suppressTouch: [{
|
|
467
687
|
type: Input,
|
|
468
688
|
args: [{ transform: booleanAttribute }]
|
|
689
|
+
}], suppressKeyboard: [{
|
|
690
|
+
type: Input
|
|
469
691
|
}], localeText: [{
|
|
470
692
|
type: Input
|
|
471
693
|
}], aiText: [{
|
|
@@ -482,10 +704,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
|
|
|
482
704
|
type: Input
|
|
483
705
|
}], mode: [{
|
|
484
706
|
type: Input
|
|
707
|
+
}], history: [{
|
|
708
|
+
type: Input
|
|
709
|
+
}], enableFilterEditingInViewMode: [{
|
|
710
|
+
type: Input,
|
|
711
|
+
args: [{ transform: booleanAttribute }]
|
|
485
712
|
}], layout: [{
|
|
486
713
|
type: Input
|
|
487
714
|
}], ai: [{
|
|
488
715
|
type: Input
|
|
716
|
+
}], aiToolDisplay: [{
|
|
717
|
+
type: Input
|
|
489
718
|
}], dataOptions: [{
|
|
490
719
|
type: Input
|
|
491
720
|
}], panels: [{
|
|
@@ -523,11 +752,11 @@ function getValueOrCoercedValue(key, valueToUse) {
|
|
|
523
752
|
}
|
|
524
753
|
|
|
525
754
|
class AgStudioModule {
|
|
526
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
527
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
528
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
755
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AgStudioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
756
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: AgStudioModule, imports: [AgStudio], exports: [AgStudio] }); }
|
|
757
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AgStudioModule }); }
|
|
529
758
|
}
|
|
530
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
759
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: AgStudioModule, decorators: [{
|
|
531
760
|
type: NgModule,
|
|
532
761
|
args: [{
|
|
533
762
|
imports: [AgStudio],
|
|
@@ -535,9 +764,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
|
|
|
535
764
|
}]
|
|
536
765
|
}] });
|
|
537
766
|
|
|
767
|
+
/**
|
|
768
|
+
* Helper function for the `widgets` Studio property.
|
|
769
|
+
*/
|
|
770
|
+
function createWidgets(params) {
|
|
771
|
+
return _createWidgets(params, WIDGET_DEFAULTS);
|
|
772
|
+
}
|
|
773
|
+
|
|
538
774
|
/**
|
|
539
775
|
* Generated bundle index. Do not edit.
|
|
540
776
|
*/
|
|
541
777
|
|
|
542
|
-
export { AgComponentContainer, AgStudio, AgStudioModule, AngularFrameworkComponentWrapper, AngularFrameworkOverrides };
|
|
778
|
+
export { AgComponentContainer, AgStudio, AgStudioModule, AngularFrameworkComponentWrapper, AngularFrameworkOverrides, GridWidget, PivotGridWidget, createWidgets };
|
|
543
779
|
//# sourceMappingURL=ag-studio-angular.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ag-studio-angular.mjs","sources":["../../../projects/ag-studio-angular/src/lib/angularFrameworkComponentWrapper.ts","../../../projects/ag-studio-angular/src/lib/angularFrameworkOverrides.ts","../../../projects/ag-studio-angular/src/lib/ag-studio.component.ts","../../../projects/ag-studio-angular/src/lib/ag-studio.module.ts","../../../projects/ag-studio-angular/src/ag-studio-angular.ts"],"sourcesContent":["import type { ComponentRef } from '@angular/core';\nimport { Component, Injectable, ViewContainerRef, inject } from '@angular/core';\nimport { _removeFromParent } from 'ag-stack';\nimport type { _FrameworkComponentWrapper, _WrappableInterface } from 'ag-studio';\nimport { _BaseComponentWrapper } from 'ag-studio';\n\nimport type { AngularFrameworkOverrides } from './angularFrameworkOverrides';\nimport type { AgCustomComponent } from './interfaces';\n\n// To speed up the removal of custom components we create a number of shards to contain them.\n// Removing a single component calls a function within Angular called removeFromArray.\n// This is a lot faster if the array is smaller.\n@Component({\n selector: 'ag-component-container',\n template: '',\n standalone: false,\n})\nexport class AgComponentContainer {\n public vcr = inject(ViewContainerRef);\n}\nconst NUM_SHARDS = 16;\nlet shardIdx = 0;\n\nfunction createComponentContainers(vcr: ViewContainerRef): Map<number, ComponentRef<AgComponentContainer>> {\n const containerMap = new Map<number, ComponentRef<AgComponentContainer>>();\n for (let i = 0; i < NUM_SHARDS; i++) {\n const container = vcr.createComponent(AgComponentContainer);\n containerMap.set(i, container);\n _removeFromParent(container.location.nativeElement);\n }\n return containerMap;\n}\n\n@Injectable()\nexport class AngularFrameworkComponentWrapper\n extends _BaseComponentWrapper<_WrappableInterface>\n implements _FrameworkComponentWrapper\n{\n private viewContainerRef: ViewContainerRef;\n private frameworkOverrides: AngularFrameworkOverrides;\n private compShards: Map<number, ComponentRef<AgComponentContainer>>;\n\n setViewContainerRef(viewContainerRef: ViewContainerRef, angularFrameworkOverrides: AngularFrameworkOverrides) {\n this.viewContainerRef = viewContainerRef;\n this.frameworkOverrides = angularFrameworkOverrides;\n }\n\n protected createWrapper(OriginalConstructor: { new (): any }): _WrappableInterface {\n this.compShards ??= createComponentContainers(this.viewContainerRef);\n return new DynamicAgNg2Component(this.frameworkOverrides, this, OriginalConstructor);\n }\n\n createComponent<T>(componentType: { new (...args: any[]): T }): ComponentRef<T> {\n shardIdx = (shardIdx + 1) % NUM_SHARDS;\n const container = this.compShards.get(shardIdx)!;\n return container.instance.vcr.createComponent(componentType);\n }\n}\n\nclass DynamicAgNg2Component<P> implements _WrappableInterface {\n private _eGui: HTMLElement;\n private _componentRef: ComponentRef<AgCustomComponent<P>>;\n private _frameworkComponentInstance: any; // the user's component - for accessing methods they create\n\n constructor(\n private frameworkOverrides: AngularFrameworkOverrides,\n private frameworkCompWrapper: AngularFrameworkComponentWrapper,\n private OriginalConstructor: { new (): any }\n ) {}\n\n init(params: P): Promise<any> {\n return new Promise((resolve) => {\n this.frameworkOverrides.runInsideAngular(() => {\n this._init(params).then((result) => {\n this._componentRef.changeDetectorRef.detectChanges();\n resolve(result);\n });\n });\n });\n }\n\n private async _init(params: P): Promise<any> {\n this._componentRef = this.frameworkCompWrapper.createComponent(this.OriginalConstructor);\n const instance = this._componentRef.instance;\n this._frameworkComponentInstance = instance;\n this._eGui = this._componentRef.location.nativeElement;\n // Angular appends the component to the DOM, so remove it\n _removeFromParent(this._eGui);\n\n return instance.agInit?.(params);\n }\n\n async refresh(params: P): Promise<any> {\n return this.frameworkOverrides.runInsideAngular(() => this._frameworkComponentInstance.refresh?.(params));\n }\n\n getGui(): HTMLElement {\n return this._eGui;\n }\n\n /** `getGui()` returns the `ng-component` element. This returns the actual root element. */\n getRootElement(): HTMLElement {\n return this._eGui.firstChild as HTMLElement;\n }\n\n destroy(): void {\n if (typeof this._frameworkComponentInstance?.destroy === 'function') {\n this._frameworkComponentInstance.destroy();\n }\n this._componentRef?.destroy();\n }\n\n getFrameworkComponentInstance(): any {\n return this._frameworkComponentInstance;\n }\n\n hasMethod(name: string): boolean {\n return this._frameworkComponentInstance[name] != null;\n }\n\n callMethod(name: string, args: IArguments): any {\n return this.frameworkOverrides.runInsideAngular(() => this._frameworkComponentInstance[name](...args));\n }\n\n addMethod(name: string, callback: (...args: any[]) => any): void {\n (this as any)[name] = callback;\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport type { FrameworkOverridesIncomingSource } from 'ag-stack';\nimport { _VanillaFrameworkOverrides } from 'ag-studio';\n\n@Injectable()\nexport class AngularFrameworkOverrides extends _VanillaFrameworkOverrides {\n override readonly batchFrameworkComps: boolean = true;\n\n // Flag used to control Zone behaviour when running tests as many test features rely on Zone.\n private readonly isRunningWithinTestZone: boolean = false;\n\n private readonly runOutside: <T>(callback: () => T, source?: FrameworkOverridesIncomingSource) => T;\n\n constructor(private readonly _ngZone: NgZone) {\n super('angular');\n\n this.isRunningWithinTestZone =\n (globalThis as any)?.AG_STUDIO_UNDER_TEST ?? !!(globalThis as any)?.Zone?.AsyncTestZoneSpec;\n\n if (!this._ngZone) {\n this.runOutside = (callback) => callback();\n } else if (this.isRunningWithinTestZone) {\n this.runOutside = (callback, source) => {\n if (source === 'resize-observer' || source === 'popupPositioning') {\n // ensure resize observer callbacks are run outside of Angular even under test due to Jest not supporting ResizeObserver\n // which means it just loops continuously with a setTimeout with no way to flush the queue or have fixture.whenStable() resolve.\n return this._ngZone.runOutsideAngular(callback);\n }\n // When under test run inside Angular so that tests can use fixture.whenStable() to wait for async operations to complete.\n return callback();\n };\n } else {\n this.runOutside = (callback) => this._ngZone.runOutsideAngular(callback);\n }\n }\n\n // Make all events run outside Angular as they often trigger the setup of event listeners\n // By having the event listeners outside Angular we can avoid triggering change detection\n // This also means that if a user calls an AG Studio API method from within their component\n // the internal side effects will not trigger change detection. Without this the events would\n // run inside Angular and trigger change detection as the source of the event was within the angular zone.\n override wrapIncoming: <T>(callback: () => T, source?: FrameworkOverridesIncomingSource) => T = (\n callback,\n source\n ) => this.runOutside(callback, source);\n\n /**\n * The shouldWrapOutgoing property is used to determine if events should be run outside of Angular or not.\n * If an event handler is registered outside of Angular then we should not wrap the event handler\n * with runInsideAngular() as the user may not have wanted this.\n * This is also used to not wrap internal event listeners that are registered with RowNodes and Columns.\n */\n get shouldWrapOutgoing() {\n return this._ngZone && NgZone.isInAngularZone();\n }\n\n /**\n * Make sure that any code that is executed outside of AG Studio is running within the Angular zone.\n * This means users can update templates and use binding without having to do anything extra.\n */\n override wrapOutgoing: <T>(callback: () => T) => T = (callback) => this.runInsideAngular(callback);\n\n override isFrameworkComponent(comp: any): boolean {\n if (!comp) {\n return false;\n }\n const prototype = comp.prototype;\n return prototype && 'agInit' in prototype;\n }\n\n runInsideAngular<T>(callback: () => T): T {\n if (!this._ngZone || NgZone.isInAngularZone()) {\n return callback();\n }\n\n // Check for _ngZone existence as it is not present when Zoneless\n return this._ngZone.run(callback);\n }\n\n runOutsideAngular<T>(callback: () => T, source?: FrameworkOverridesIncomingSource): T {\n return this.runOutside(callback, source);\n }\n}\n","// False positive lint error, ElementRef and co can't be type imports\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewContainerRef,\n ViewEncapsulation,\n booleanAttribute,\n} from '@angular/core';\nimport type { AgStudioApi, AgStudioModule, AgStudioProperties, _StudioParams } from 'ag-studio';\nimport {\n _BOOLEAN_MIXED_STUDIO_PROPERTIES,\n _combineAttributesAndStudioProperties,\n _createStudio,\n _processPropertyChanges,\n} from 'ag-studio';\n// @START_IMPORTS@\nimport type {\n AgAiAssistant,\n AgAiStrings,\n AgDataEngine,\n AgDataOptions,\n AgDataSourcesDefinition,\n AgDefaultRegistry,\n AgPageConfig,\n AgPageLayoutState,\n AgPanelConfig,\n AgReportState,\n AgStudioApiReadyEvent,\n AgStudioErrorRaisedEvent,\n AgStudioGetLocaleTextParams,\n AgStudioLocaleText,\n AgStudioMode,\n AgStudioReadyEvent,\n AgStudioRenderStateChangedEvent,\n AgStudioStateUpdatedEvent,\n AgStudioTheme,\n AgWidgetsConfig,\n} from 'ag-studio';\n\n// @END_IMPORTS@\n\nimport { AngularFrameworkComponentWrapper } from './angularFrameworkComponentWrapper';\nimport { AngularFrameworkOverrides } from './angularFrameworkOverrides';\nimport type { AgRegistry } from './interfaces';\n\n@Component({\n selector: 'ag-studio',\n standalone: true,\n template: '',\n providers: [AngularFrameworkOverrides, AngularFrameworkComponentWrapper],\n // tell angular we don't want view encapsulation, we don't want a shadow root\n encapsulation: ViewEncapsulation.None,\n})\nexport class AgStudio<TRegistry extends AgRegistry = AgDefaultRegistry> implements AfterViewInit, OnChanges, OnDestroy {\n // not intended for user to interact with. so putting _ in so if user gets reference\n // to this object, they kind'a know it's not part of the agreed interface\n private readonly _nativeElement: any;\n private _initialised = false;\n private _destroyed = false;\n\n // in order to ensure firing of apiReady is deterministic\n private _holdEvents = true;\n private _resolveFullyReady: () => void;\n private readonly _fullyReady: Promise<void> = new Promise((resolve) => {\n this._resolveFullyReady = resolve;\n });\n\n /** Studio Api available after onApiReady event has fired. */\n api: AgStudioApi<TRegistry>;\n\n constructor(\n elementDef: ElementRef,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _angularFrameworkOverrides: AngularFrameworkOverrides,\n private readonly _frameworkCompWrapper: AngularFrameworkComponentWrapper\n ) {\n this._nativeElement = elementDef.nativeElement;\n // NOSONAR\n this._fullyReady.then(() => {\n // Register the status flag reset before any events are fired\n // so that we can swap to synchronous event firing as soon as the studio is ready\n this._holdEvents = false;\n });\n }\n\n ngAfterViewInit(): void {\n // Run the setup outside of angular so all the event handlers that are created do not trigger change detection\n this._angularFrameworkOverrides.runOutsideAngular(() => {\n this._frameworkCompWrapper.setViewContainerRef(this._viewContainerRef, this._angularFrameworkOverrides);\n\n // Get all the inputs that are valid AgStudioProperties\n const studioPropertiesKeys = Object.keys(this).filter(\n (key) =>\n !(\n key.startsWith('_') ||\n key == 'studioProperties' ||\n key == 'modules' ||\n this[key as keyof AgStudio] instanceof EventEmitter\n )\n );\n\n const coercedStudioProperties = {} as AgStudioProperties<TRegistry>;\n for (const key of studioPropertiesKeys) {\n const valueToUse = getValueOrCoercedValue(key, this[key as keyof AgStudio]);\n coercedStudioProperties[key as keyof AgStudioProperties] = valueToUse;\n }\n\n const mergedStudioProperties = _combineAttributesAndStudioProperties(\n this.studioProperties,\n coercedStudioProperties,\n studioPropertiesKeys\n );\n\n const studioParams: _StudioParams = {\n globalListener: this.globalListener.bind(this),\n frameworkOverrides: this._angularFrameworkOverrides,\n setThemeOnRootDiv: true,\n modules: this.modules,\n providedBeanInstances: {\n frameworkCompWrapper: this._frameworkCompWrapper,\n },\n };\n\n const api = _createStudio(this._nativeElement, mergedStudioProperties, studioParams);\n if (api) {\n this.api = api;\n }\n\n this._initialised = true;\n\n // sometimes, especially in large client apps apiReady can fire before ngAfterViewInit\n // this ties these together so that apiReady will always fire after agStudio's ngAfterViewInit\n // the actual containing component's ngAfterViewInit will fire just after agStudio's\n this._resolveFullyReady();\n });\n }\n\n public ngOnChanges(changes: any): void {\n if (this._initialised) {\n // Run the changes outside of angular so any event handlers that are created do not trigger change detection\n this._angularFrameworkOverrides.runOutsideAngular(() => {\n const studioProperties: AgStudioProperties<TRegistry> = {};\n for (const key of Object.keys(changes)) {\n const value = changes[key];\n studioProperties[key as keyof AgStudioProperties] = value.currentValue;\n }\n _processPropertyChanges(studioProperties, this.api);\n });\n }\n }\n\n public ngOnDestroy(): void {\n if (this._initialised) {\n // need to do this before the destroy, so we know not to emit any events\n // while tearing down the studio.\n this._destroyed = true;\n // could be null if studio failed to initialise\n this.api?.destroy();\n }\n }\n\n // we'll emit the emit if a user is listening for a given event either on the component via normal angular binding\n // or via studioProperties\n protected isEmitterUsed(eventType: string): boolean {\n const emitter = <EventEmitter<any>>(<any>this)[eventType];\n // For RxJs compatibility we need to check for observed v7+ or observers v6\n const emitterAny = emitter as any;\n const hasEmitter = emitterAny?.observed ?? emitterAny?.observers?.length > 0;\n\n // apiReady => onApiReady\n const asEventName = `on${eventType.charAt(0).toUpperCase()}${eventType.substring(1)}`;\n const hasStudioPropertyListener = !!this.studioProperties && !!(this.studioProperties as any)[asEventName];\n\n return hasEmitter || hasStudioPropertyListener;\n }\n\n private globalListener(eventType: string, event: any): void {\n // if we are tearing down, don't emit angular events, as this causes\n // problems with the angular router\n if (this._destroyed) {\n return;\n }\n\n // generically look up the eventType\n const emitter = <EventEmitter<any>>(<any>this)[eventType];\n if (emitter && this.isEmitterUsed(eventType)) {\n // Make sure we emit within the angular zone, so change detection works properly\n const fireEmitter = () => this._angularFrameworkOverrides.runInsideAngular(() => emitter.emit(event));\n\n if (this._holdEvents) {\n // if the user is listening to events, wait for ngAfterViewInit to fire first, then emit the studio events\n this._fullyReady.then(() => fireEmitter());\n } else {\n fireEmitter();\n }\n }\n }\n\n /** Provided an initial studioProperties configuration to the component. If a property is specified in both studioProperties and via component binding the component binding takes precedence. */\n @Input() public studioProperties: AgStudioProperties<TRegistry> | undefined;\n /**\n * Used to register AG Studio Modules directly with this instance of Studio.\n */\n @Input() public modules: AgStudioModule[] | undefined;\n\n // @START@\n /** Change this value to set the tabIndex order of Studio within your application.\n * @default 0\n * @initial\n */\n @Input() public tabIndex: number | undefined = undefined;\n /** Set to `true` to operate Studio in RTL (Right to Left) mode.\n * @default false\n * @initial\n */\n @Input({ transform: booleanAttribute }) public enableRtl: boolean | undefined = undefined;\n /** DOM element to use as the popup parent for Studio popups (context menus, etc.).\n */\n @Input() public popupParent: HTMLElement | null | undefined = undefined;\n /** Theme to apply to Studio.\n *\n * @default studioTheme\n */\n @Input() public theme: AgStudioTheme | undefined = undefined;\n /** If your theme uses a font that is available on Google Fonts, pass true to load it from Google's CDN.\n */\n @Input({ transform: booleanAttribute }) public loadThemeGoogleFonts: boolean | undefined = undefined;\n /** The CSS layer that this theme should be rendered onto. When specified,\n * Studio CSS will be wrapped in a `@layer ${themeCssLayer} { ... }` block.\n *\n * NOTE: when specifying `themeCssLayer` we recommend setting\n * `themeStyleContainer` to `document.body` to ensure that Studio CSS\n * comes after your application CSS, allowing your application to set the\n * order of layers.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@layer\n */\n @Input() public themeCssLayer: string | undefined = undefined;\n /** The nonce attribute to set on style elements added to the document by\n * themes. If \"foo\" is passed to this property, Studio can use the Content\n * Security Policy `style-src 'nonce-foo'`, instead of the less secure\n * `style-src 'unsafe-inline'`.\n *\n * Note: CSP nonces are global to a page, where a page has multiple Studio components,\n * every one must have the same styleNonce set.\n */\n @Input() public styleNonce: string | undefined = undefined;\n /** An element to insert style elements into when injecting styles into the\n * Studio. Styles are inserted at the start of the element.\n *\n * If undefined, styles will be added to the document head for Studio components\n * rendered in the main document fragment, or to Studio wrapper element\n * for other Studio components (e.g. those rendered in a shadow DOM or detached from the\n * document).\n *\n * @initial\n */\n @Input() public themeStyleContainer: (HTMLElement | (() => HTMLElement | void)) | undefined = undefined;\n /** Allows overriding what `document` is used.\n * Use this when you want Studio to use a different `document` than the one available on the global scope.\n * This can happen if docking out components (something which Electron supports).\n */\n @Input() public getDocument: (() => Document) | undefined = undefined;\n /** Disables touch support (but does not remove the browser's efforts to simulate mouse events on touch).\n * @default false\n * @initial\n */\n @Input({ transform: booleanAttribute }) public suppressTouch: boolean | undefined = undefined;\n /** A map of key->value pairs for localising text within Studio.\n * @initial\n */\n @Input() public localeText: AgStudioLocaleText | undefined = undefined;\n /** Override any AI-facing prose strings. Merged over AG defaults at initialisation time.\n * Keys use dotted notation, e.g. `'tools.view_schema.description'`.\n * @initial\n */\n @Input() public aiText: Partial<AgAiStrings> | undefined = undefined;\n /** A callback for localising text within Studio.\n * @initial\n */\n @Input() public getLocaleText: ((params: AgStudioGetLocaleTextParams) => string) | undefined = undefined;\n /** Provide a custom `studioId` for this instance of Studio. Value will be set on the root DOM node using the attribute `studio-id` as well as being accessible via the `api.getStudioId()` method.\n * @initial\n */\n @Input() public studioId: string | undefined = undefined;\n /** Provides a context object that is provided to different callbacks Studio uses. Used for passing additional information to the callbacks used by your application.\n * @initial\n */\n @Input() public context: any = undefined;\n /** Initial state for Studio. Only read once on initialization. Can be used in conjunction with `api.getState()` to save and restore Studio state.\n * @initial\n */\n @Input() public initialState: AgReportState<TRegistry> | undefined = undefined;\n /** Defines the data sources used by Studio.\n *\n * If updated after initially being set, only changes to synchronous data will be processed.\n * Any other changes will be ignored (e.g. adding/removing data sources, updating fields, etc.)\n */\n @Input() public data: AgDataSourcesDefinition<TRegistry> | AgDataEngine | undefined = undefined;\n /** Which mode Studio is in.\n * @default 'view'\n */\n @Input() public mode: AgStudioMode | undefined = undefined;\n /** Default layout styling.\n */\n @Input() public layout: Partial<AgPageLayoutState> | undefined = undefined;\n /** AI Assistant configuration.\n *\n * NOTE: The **AI Assistant** is an experimental feature. Behaviour will be\n * slightly different depending on the LLM being used, and results can vary across queries.\n *\n * @initial\n */\n @Input() public ai: AgAiAssistant | undefined = undefined;\n /** Data-layer configuration. Controls behaviours such as export row limits.\n */\n @Input() public dataOptions: AgDataOptions | undefined = undefined;\n /** Configure which panels are displayed and on which side.\n */\n @Input() public panels: AgPanelConfig | undefined = undefined;\n /** Configure page (e.g. page setup form in page tab of edit panel).\n */\n @Input() public page: (AgPageConfig | ((config: AgPageConfig) => AgPageConfig)) | undefined = undefined;\n @Input() public widgets:\n | (AgWidgetsConfig<TRegistry> | ((widgets: AgWidgetsConfig<AgDefaultRegistry>) => AgWidgetsConfig<TRegistry>))\n | undefined = undefined;\n /** Custom components (e.g. custom widget components) keyed by ID.\n * Used to share components which can then be referenced directly by key in the definitions.\n */\n @Input() public components: TRegistry['components'] | undefined = undefined;\n\n /** State has been updated.\n */\n @Output() public stateUpdated: EventEmitter<AgStudioStateUpdatedEvent> =\n new EventEmitter<AgStudioStateUpdatedEvent>();\n /** The API has been initialised and is ready for most calls. The data engine has not been initialised yet, and the UI is not ready.\n */\n @Output() public apiReady: EventEmitter<AgStudioApiReadyEvent> = new EventEmitter<AgStudioApiReadyEvent>();\n /** The data engine has been initialised, and the UI has been created, but may not be fully rendered yet.\n */\n @Output() public studioReady: EventEmitter<AgStudioReadyEvent> = new EventEmitter<AgStudioReadyEvent>();\n /** The render state has changed. This is called after the UI has been rendered, and can be used to determine when Studio is ready for printing or other operations that require the UI to be fully rendered.\n */\n @Output() public renderStateChanged: EventEmitter<AgStudioRenderStateChangedEvent> =\n new EventEmitter<AgStudioRenderStateChangedEvent>();\n /** An error has occurred within Studio.\n */\n @Output() public errorRaised: EventEmitter<AgStudioErrorRaisedEvent> = new EventEmitter<AgStudioErrorRaisedEvent>();\n\n // @END@\n}\n\nconst booleanMixedStudioProperties = new Set<string>(_BOOLEAN_MIXED_STUDIO_PROPERTIES);\n/**\n * Used to support the user setting combined boolean and string / object properties\n * as plain HTML attributes and us correctly mapping that to true.\n * For example cellSection can be boolean or an object\n */\nfunction getValueOrCoercedValue(key: string, valueToUse: any): any {\n if (booleanMixedStudioProperties.has(key)) {\n // Handle plain HTML boolean attributes and convert them to boolean values\n // Also handle the false string case to match Angular boolean attributes\n return valueToUse === '' ? true : valueToUse === 'false' ? false : valueToUse;\n }\n return valueToUse;\n}\n","import { NgModule } from '@angular/core';\n\nimport { AgStudio } from './ag-studio.component';\n\n@NgModule({\n imports: [AgStudio],\n exports: [AgStudio],\n})\nexport class AgStudioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AngularFrameworkOverrides","i2.AngularFrameworkComponentWrapper"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ag-studio-angular.mjs","sources":["../../../projects/ag-studio-angular/src/lib/angularFrameworkComponentWrapper.ts","../../../projects/ag-studio-angular/src/lib/angularFrameworkOverrides.ts","../../../projects/ag-studio-angular/src/lib/gridWidget.component.ts","../../../projects/ag-studio-angular/src/lib/pivotGridWidget.component.ts","../../../projects/ag-studio-angular/src/lib/widgetDefaults.ts","../../../projects/ag-studio-angular/src/lib/ag-studio.component.ts","../../../projects/ag-studio-angular/src/lib/ag-studio.module.ts","../../../projects/ag-studio-angular/src/lib/createWidgets.ts","../../../projects/ag-studio-angular/src/ag-studio-angular.ts"],"sourcesContent":["import type { ComponentRef } from '@angular/core';\nimport { Component, Injectable, ViewContainerRef, inject } from '@angular/core';\nimport { _removeFromParent } from 'ag-stack';\nimport type { _BeanCollection, _FrameworkComponentWrapper, _WrappableInterface } from 'ag-studio';\nimport { _BaseComponentWrapper } from 'ag-studio';\n\nimport type { AngularFrameworkOverrides } from './angularFrameworkOverrides';\nimport type { AgCustomComponent } from './interfaces';\n\n// To speed up the removal of custom components we create a number of shards to contain them.\n// Removing a single component calls a function within Angular called removeFromArray.\n// This is a lot faster if the array is smaller.\n@Component({\n selector: 'ag-component-container',\n template: '',\n standalone: false,\n})\nexport class AgComponentContainer {\n public vcr = inject(ViewContainerRef);\n}\nconst NUM_SHARDS = 16;\nlet shardIdx = 0;\n\nfunction createComponentContainers(vcr: ViewContainerRef): Map<number, ComponentRef<AgComponentContainer>> {\n const containerMap = new Map<number, ComponentRef<AgComponentContainer>>();\n for (let i = 0; i < NUM_SHARDS; i++) {\n const container = vcr.createComponent(AgComponentContainer);\n containerMap.set(i, container);\n _removeFromParent(container.location.nativeElement);\n }\n return containerMap;\n}\n\n@Injectable()\nexport class AngularFrameworkComponentWrapper\n extends _BaseComponentWrapper<_WrappableInterface>\n implements _FrameworkComponentWrapper\n{\n private viewContainerRef: ViewContainerRef;\n private frameworkOverrides: AngularFrameworkOverrides;\n private compShards: Map<number, ComponentRef<AgComponentContainer>>;\n\n setViewContainerRef(viewContainerRef: ViewContainerRef, angularFrameworkOverrides: AngularFrameworkOverrides) {\n this.viewContainerRef = viewContainerRef;\n this.frameworkOverrides = angularFrameworkOverrides;\n }\n\n protected createWrapper(OriginalConstructor: { new (): any }): _WrappableInterface {\n this.compShards ??= createComponentContainers(this.viewContainerRef);\n return new DynamicAgNg2Component(this.frameworkOverrides, this, OriginalConstructor);\n }\n\n createComponent<T>(componentType: { new (...args: any[]): T }): ComponentRef<T> {\n shardIdx = (shardIdx + 1) % NUM_SHARDS;\n const container = this.compShards.get(shardIdx)!;\n return container.instance.vcr.createComponent(componentType);\n }\n}\n\n/** A custom component that opts into receiving the studio's beans. */\ninterface BeansAwareComponent {\n wireBeans?(beans: _BeanCollection): void;\n}\n\nclass DynamicAgNg2Component<P> implements _WrappableInterface {\n private _eGui: HTMLElement;\n private _componentRef: ComponentRef<AgCustomComponent<P>>;\n private _frameworkComponentInstance: any; // the user's component - for accessing methods they create\n private _beans?: _BeanCollection;\n\n constructor(\n private frameworkOverrides: AngularFrameworkOverrides,\n private frameworkCompWrapper: AngularFrameworkComponentWrapper,\n private OriginalConstructor: { new (): any }\n ) {}\n\n // Never list 'wireBeans' in CUSTOM_WIDGET_TYPE's method lists: `addMethod` would replace this\n // with a null-returning proxy.\n wireBeans(beans: _BeanCollection): void {\n this._beans = beans;\n }\n\n init(params: P): Promise<any> {\n return new Promise((resolve) => {\n this.frameworkOverrides.runInsideAngular(() => {\n this._init(params).then((result) => {\n this._componentRef.changeDetectorRef.detectChanges();\n resolve(result);\n });\n });\n });\n }\n\n private async _init(params: P): Promise<any> {\n this._componentRef = this.frameworkCompWrapper.createComponent(this.OriginalConstructor);\n const instance = this._componentRef.instance;\n this._frameworkComponentInstance = instance;\n this._eGui = this._componentRef.location.nativeElement;\n // Angular appends the component to the DOM, so remove it\n _removeFromParent(this._eGui);\n\n const beans = this._beans;\n if (beans) {\n (instance as AgCustomComponent<P> & BeansAwareComponent).wireBeans?.(beans);\n }\n\n return instance.agInit?.(params);\n }\n\n async refresh(params: P): Promise<any> {\n return this.frameworkOverrides.runInsideAngular(() => this._frameworkComponentInstance.refresh?.(params));\n }\n\n getGui(): HTMLElement {\n return this._eGui;\n }\n\n /** `getGui()` returns the `ng-component` element. This returns the actual root element. */\n getRootElement(): HTMLElement {\n return this._eGui.firstChild as HTMLElement;\n }\n\n destroy(): void {\n if (typeof this._frameworkComponentInstance?.destroy === 'function') {\n this._frameworkComponentInstance.destroy();\n }\n this._componentRef?.destroy();\n }\n\n getFrameworkComponentInstance(): any {\n return this._frameworkComponentInstance;\n }\n\n hasMethod(name: string): boolean {\n return this._frameworkComponentInstance[name] != null;\n }\n\n callMethod(name: string, args: IArguments): any {\n return this.frameworkOverrides.runInsideAngular(() => this._frameworkComponentInstance[name](...args));\n }\n\n addMethod(name: string, callback: (...args: any[]) => any): void {\n (this as any)[name] = callback;\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport type { FrameworkOverridesIncomingSource } from 'ag-stack';\nimport { _VanillaFrameworkOverrides } from 'ag-studio';\n\n@Injectable()\nexport class AngularFrameworkOverrides extends _VanillaFrameworkOverrides {\n override readonly batchFrameworkComps: boolean = true;\n\n // Flag used to control Zone behaviour when running tests as many test features rely on Zone.\n private readonly isRunningWithinTestZone: boolean = false;\n\n private readonly runOutside: <T>(callback: () => T, source?: FrameworkOverridesIncomingSource) => T;\n\n constructor(private readonly _ngZone: NgZone) {\n super('angular');\n\n this.isRunningWithinTestZone =\n (globalThis as any)?.AG_STUDIO_UNDER_TEST ?? !!(globalThis as any)?.Zone?.AsyncTestZoneSpec;\n\n if (!this._ngZone) {\n this.runOutside = (callback) => callback();\n } else if (this.isRunningWithinTestZone) {\n this.runOutside = (callback, source) => {\n if (source === 'resize-observer' || source === 'popupPositioning') {\n // ensure resize observer callbacks are run outside of Angular even under test due to the test environment not supporting ResizeObserver\n // which means it just loops continuously with a setTimeout with no way to flush the queue or have fixture.whenStable() resolve.\n return this._ngZone.runOutsideAngular(callback);\n }\n // When under test run inside Angular so that tests can use fixture.whenStable() to wait for async operations to complete.\n return callback();\n };\n } else {\n this.runOutside = (callback) => this._ngZone.runOutsideAngular(callback);\n }\n }\n\n // Make all events run outside Angular as they often trigger the setup of event listeners\n // By having the event listeners outside Angular we can avoid triggering change detection\n // This also means that if a user calls an AG Studio API method from within their component\n // the internal side effects will not trigger change detection. Without this the events would\n // run inside Angular and trigger change detection as the source of the event was within the angular zone.\n override wrapIncoming: <T>(callback: () => T, source?: FrameworkOverridesIncomingSource) => T = (\n callback,\n source\n ) => this.runOutside(callback, source);\n\n /**\n * The shouldWrapOutgoing property is used to determine if events should be run outside of Angular or not.\n * If an event handler is registered outside of Angular then we should not wrap the event handler\n * with runInsideAngular() as the user may not have wanted this.\n * This is also used to not wrap internal event listeners that are registered with RowNodes and Columns.\n */\n get shouldWrapOutgoing() {\n return this._ngZone && NgZone.isInAngularZone();\n }\n\n /**\n * Make sure that any code that is executed outside of AG Studio is running within the Angular zone.\n * This means users can update templates and use binding without having to do anything extra.\n */\n override wrapOutgoing: <T>(callback: () => T) => T = (callback) => this.runInsideAngular(callback);\n\n override isFrameworkComponent(comp: any): boolean {\n if (!comp) {\n return false;\n }\n const prototype = comp.prototype;\n return prototype && 'agInit' in prototype;\n }\n\n runInsideAngular<T>(callback: () => T): T {\n if (!this._ngZone || NgZone.isInAngularZone()) {\n return callback();\n }\n\n // Check for _ngZone existence as it is not present when Zoneless\n return this._ngZone.run(callback);\n }\n\n runOutsideAngular<T>(callback: () => T, source?: FrameworkOverridesIncomingSource): T {\n return this.runOutside(callback, source);\n }\n}\n","// False positive lint error, ChangeDetectorRef and co can't be type imports\nimport { ChangeDetectorRef, Component, ElementRef, OnDestroy, ViewChild } from '@angular/core';\nimport type { AgGridWidget, AgMaybePromise, AgWidgetParams, _BeanCollection } from 'ag-studio';\nimport { _AgLogger, _GridWidgetCore, _STUDIO_GRID_MODULES } from 'ag-studio';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport type { GridApi, GridOptions } from 'ag-grid-enterprise';\n\nimport type { AgCustomComponent, AgGridWidgetOptions } from './interfaces';\n\ntype GridWidgetParams = AgWidgetParams<AgGridWidget, AgGridWidgetOptions>;\n\n/**\n * The studio's grid widget as a framework-native Angular component. Register it as the `comp` of a\n * grid widget definition to host the grid inside the consumer's own Angular application.\n */\n@Component({\n standalone: true,\n imports: [AgGridAngular],\n // The class mirrors the studio's own grid widget root class, which its stylesheet sizes and\n // themes. The host is a plain element, so it needs a block box for that sizing to resolve.\n template: `\n <div #eRoot class=\"ag-studio-grid-widget\" [style]=\"cssProperties\">\n @if (gridOptions) {\n <ag-grid-angular [gridOptions]=\"gridOptions\" [modules]=\"modules\" />\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n width: 100%;\n }\n\n ag-grid-angular {\n display: block;\n height: 100%;\n width: 100%;\n }\n `,\n ],\n})\nexport class GridWidget implements AgCustomComponent<GridWidgetParams>, OnDestroy {\n @ViewChild('eRoot', { static: true }) protected eRoot: ElementRef<HTMLElement>;\n protected cssProperties: Record<string, string> = {};\n protected readonly modules = _STUDIO_GRID_MODULES;\n protected gridOptions?: GridOptions;\n\n private beans?: _BeanCollection;\n private core?: _GridWidgetCore;\n private destroyed = false;\n // Held so `ngOnDestroy` can settle a creation that `gridReady` will never reach, which is every\n // destroy between handing <ag-grid-angular> its options and the grid becoming ready.\n private cancelCreate?: () => void;\n\n constructor(private readonly changeDetectorRef: ChangeDetectorRef) {}\n\n /** Receives the studio's beans, before `agInit` runs. */\n wireBeans(beans: _BeanCollection): void {\n this.beans = beans;\n }\n\n agInit(params: GridWidgetParams): AgMaybePromise<void> {\n const { beans, eRoot } = this;\n if (!beans) {\n _AgLogger.error('GridWidget can only be used as the component of a studio grid widget.');\n return;\n }\n const core = new _GridWidgetCore({\n beans,\n createGrid: (gridOptions) =>\n new Promise<GridApi | undefined>((resolve) => {\n this.cancelCreate = () => resolve(undefined);\n this.gridOptions = {\n ...gridOptions,\n onGridReady: (event) => {\n this.cancelCreate = undefined;\n // `finally`, so a throwing consumer callback cannot leave the promise\n // pending - the core would then never finish initialising.\n try {\n gridOptions.onGridReady?.(event);\n } finally {\n resolve(event.api);\n }\n },\n };\n this.changeDetectorRef.detectChanges();\n }),\n setCssProperties: (properties) => this.applyCssProperties(properties),\n getWidth: () => eRoot.nativeElement.offsetWidth,\n });\n this.core = core;\n return core.init(params);\n }\n\n refresh(params: GridWidgetParams): AgMaybePromise<void> {\n return this.core?.refresh(params);\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n this.cancelCreate?.();\n this.cancelCreate = undefined;\n this.core?.destroy();\n this.core = undefined;\n }\n\n private applyCssProperties(properties: Record<string, string>): void {\n this.cssProperties = properties;\n if (!this.destroyed) {\n // The studio drives its refreshes from outside Angular, so nothing else would run a\n // change detection pass to get the new properties onto the element.\n this.changeDetectorRef.detectChanges();\n }\n }\n}\n","// False positive lint error, ChangeDetectorRef and co can't be type imports\nimport { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';\nimport type { AgMaybePromise, AgPivotGridWidget, AgWidgetParams, _BeanCollection } from 'ag-studio';\nimport { _AgLogger, _PivotGridWidgetCore, _STUDIO_GRID_MODULES } from 'ag-studio';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport type { GridApi, GridOptions } from 'ag-grid-enterprise';\n\nimport type { AgCustomComponent, AgPivotGridWidgetOptions } from './interfaces';\n\ntype PivotGridWidgetParams = AgWidgetParams<AgPivotGridWidget, AgPivotGridWidgetOptions>;\n\n/**\n * The studio's pivot grid widget as a framework-native Angular component. Register it as the `comp`\n * of a pivot grid widget definition to host the grid inside the consumer's own Angular application.\n */\n@Component({\n standalone: true,\n imports: [AgGridAngular],\n // The class mirrors the studio's own pivot grid widget root class, which its stylesheet sizes\n // and themes. The host is a plain element, so it needs a block box for that sizing to resolve.\n template: `\n <div class=\"ag-studio-pivot-grid-widget\" [style]=\"cssProperties\">\n @if (gridOptions) {\n <ag-grid-angular [gridOptions]=\"gridOptions\" [modules]=\"modules\" />\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n width: 100%;\n }\n\n ag-grid-angular {\n display: block;\n height: 100%;\n width: 100%;\n }\n `,\n ],\n})\nexport class PivotGridWidget implements AgCustomComponent<PivotGridWidgetParams>, OnDestroy {\n protected cssProperties: Record<string, string> = {};\n protected readonly modules = _STUDIO_GRID_MODULES;\n protected gridOptions?: GridOptions;\n\n private beans?: _BeanCollection;\n private core?: _PivotGridWidgetCore;\n private destroyed = false;\n // Held so `ngOnDestroy` can settle a creation that `gridReady` will never reach, which is every\n // destroy between handing <ag-grid-angular> its options and the grid becoming ready.\n private cancelCreate?: () => void;\n\n constructor(private readonly changeDetectorRef: ChangeDetectorRef) {}\n\n /** Receives the studio's beans, before `agInit` runs. */\n wireBeans(beans: _BeanCollection): void {\n this.beans = beans;\n }\n\n agInit(params: PivotGridWidgetParams): AgMaybePromise<void> {\n const { beans } = this;\n if (!beans) {\n _AgLogger.error('PivotGridWidget can only be used as the component of a studio pivot grid widget.');\n return;\n }\n const core = new _PivotGridWidgetCore({\n beans,\n createGrid: (gridOptions) =>\n new Promise<GridApi | undefined>((resolve) => {\n this.cancelCreate = () => resolve(undefined);\n this.gridOptions = {\n ...gridOptions,\n onGridReady: (event) => {\n this.cancelCreate = undefined;\n // `finally`, so a throwing consumer callback cannot leave the promise\n // pending - the core would then never finish initialising.\n try {\n gridOptions.onGridReady?.(event);\n } finally {\n resolve(event.api);\n }\n },\n };\n this.changeDetectorRef.detectChanges();\n }),\n setCssProperties: (properties) => this.applyCssProperties(properties),\n });\n this.core = core;\n return core.init(params);\n }\n\n refresh(params: PivotGridWidgetParams): AgMaybePromise<void> {\n return this.core?.refresh(params);\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n this.cancelCreate?.();\n this.cancelCreate = undefined;\n this.core?.destroy();\n this.core = undefined;\n }\n\n private applyCssProperties(properties: Record<string, string>): void {\n this.cssProperties = properties;\n if (!this.destroyed) {\n // The studio drives its refreshes from outside Angular, so nothing else would run a\n // change detection pass to get the new properties onto the element.\n this.changeDetectorRef.detectChanges();\n }\n }\n}\n","import type { _WidgetDefaults } from 'ag-studio';\nimport { _createWidgetDefaults } from 'ag-studio';\n\nimport { GridWidget } from './gridWidget.component';\nimport { PivotGridWidget } from './pivotGridWidget.component';\n\n/** The widget defaults for Angular Studio: the vanilla defs with the Angular widgets swapped in. */\nexport const WIDGET_DEFAULTS: _WidgetDefaults = _createWidgetDefaults({\n grid: GridWidget,\n 'pivot-grid': PivotGridWidget,\n});\n","// False positive lint error, ElementRef and co can't be type imports\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewContainerRef,\n ViewEncapsulation,\n booleanAttribute,\n} from '@angular/core';\nimport type { AgStudioApi, AgStudioModule, AgStudioProperties, _StudioParams } from 'ag-studio';\nimport {\n _BOOLEAN_MIXED_STUDIO_PROPERTIES,\n _combineAttributesAndStudioProperties,\n _createStudio,\n _processPropertyChanges,\n} from 'ag-studio';\n// @START_IMPORTS@\nimport type {\n AgAiHarnessSetup,\n AgAiStrings,\n AgDataEngine,\n AgDataOptions,\n AgDataSourcesDefinition,\n AgDefaultRegistry,\n AgHistoryOptions,\n AgPageConfig,\n AgPageLayoutState,\n AgPanelConfig,\n AgReportState,\n AgStudioApiReadyEvent,\n AgStudioErrorRaisedEvent,\n AgStudioGetLocaleTextParams,\n AgStudioLocaleText,\n AgStudioMode,\n AgStudioReadyEvent,\n AgStudioRenderStateChangedEvent,\n AgStudioStateUpdatedEvent,\n AgStudioTheme,\n AgSuppressKeyboard,\n AgWidgetsConfig,\n} from 'ag-studio';\n\n// @END_IMPORTS@\n\nimport { AngularFrameworkComponentWrapper } from './angularFrameworkComponentWrapper';\nimport { AngularFrameworkOverrides } from './angularFrameworkOverrides';\nimport type { AgRegistry } from './interfaces';\nimport { WIDGET_DEFAULTS } from './widgetDefaults';\n\n@Component({\n selector: 'ag-studio',\n standalone: true,\n template: '',\n providers: [AngularFrameworkOverrides, AngularFrameworkComponentWrapper],\n // tell angular we don't want view encapsulation, we don't want a shadow root\n encapsulation: ViewEncapsulation.None,\n})\nexport class AgStudio<TRegistry extends AgRegistry = AgDefaultRegistry> implements AfterViewInit, OnChanges, OnDestroy {\n // not intended for user to interact with. so putting _ in so if user gets reference\n // to this object, they kind'a know it's not part of the agreed interface\n private readonly _nativeElement: any;\n private _initialised = false;\n private _destroyed = false;\n\n // in order to ensure firing of apiReady is deterministic\n private _holdEvents = true;\n private _resolveFullyReady: () => void;\n private readonly _fullyReady: Promise<void> = new Promise((resolve) => {\n this._resolveFullyReady = resolve;\n });\n\n /** Studio Api available after onApiReady event has fired. */\n api: AgStudioApi<TRegistry>;\n\n constructor(\n elementDef: ElementRef,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _angularFrameworkOverrides: AngularFrameworkOverrides,\n private readonly _frameworkCompWrapper: AngularFrameworkComponentWrapper\n ) {\n this._nativeElement = elementDef.nativeElement;\n // NOSONAR\n this._fullyReady.then(() => {\n // Register the status flag reset before any events are fired\n // so that we can swap to synchronous event firing as soon as the studio is ready\n this._holdEvents = false;\n });\n }\n\n ngAfterViewInit(): void {\n // Run the setup outside of angular so all the event handlers that are created do not trigger change detection\n this._angularFrameworkOverrides.runOutsideAngular(() => {\n this._frameworkCompWrapper.setViewContainerRef(this._viewContainerRef, this._angularFrameworkOverrides);\n\n // Get all the inputs that are valid AgStudioProperties\n const studioPropertiesKeys = Object.keys(this).filter(\n (key) =>\n !(\n key.startsWith('_') ||\n key == 'studioProperties' ||\n key == 'modules' ||\n this[key as keyof AgStudio] instanceof EventEmitter\n )\n );\n\n const coercedStudioProperties = {} as AgStudioProperties<TRegistry>;\n for (const key of studioPropertiesKeys) {\n const valueToUse = getValueOrCoercedValue(key, this[key as keyof AgStudio]);\n coercedStudioProperties[key as keyof AgStudioProperties] = valueToUse;\n }\n\n const mergedStudioProperties = _combineAttributesAndStudioProperties(\n this.studioProperties,\n coercedStudioProperties,\n studioPropertiesKeys\n );\n\n const studioParams: _StudioParams = {\n globalListener: this.globalListener.bind(this),\n frameworkOverrides: this._angularFrameworkOverrides,\n setThemeOnRootDiv: true,\n modules: this.modules,\n providedBeanInstances: {\n frameworkCompWrapper: this._frameworkCompWrapper,\n widgetDefaults: WIDGET_DEFAULTS,\n },\n };\n\n const api = _createStudio(this._nativeElement, mergedStudioProperties, studioParams);\n if (api) {\n this.api = api;\n }\n\n this._initialised = true;\n\n // sometimes, especially in large client apps apiReady can fire before ngAfterViewInit\n // this ties these together so that apiReady will always fire after agStudio's ngAfterViewInit\n // the actual containing component's ngAfterViewInit will fire just after agStudio's\n this._resolveFullyReady();\n });\n }\n\n public ngOnChanges(changes: any): void {\n if (this._initialised) {\n // Run the changes outside of angular so any event handlers that are created do not trigger change detection\n this._angularFrameworkOverrides.runOutsideAngular(() => {\n const studioProperties: AgStudioProperties<TRegistry> = {};\n for (const key of Object.keys(changes)) {\n const value = changes[key];\n studioProperties[key as keyof AgStudioProperties] = value.currentValue;\n }\n _processPropertyChanges(studioProperties, this.api);\n });\n }\n }\n\n public ngOnDestroy(): void {\n if (this._initialised) {\n // need to do this before the destroy, so we know not to emit any events\n // while tearing down the studio.\n this._destroyed = true;\n // could be null if studio failed to initialise\n this.api?.destroy();\n }\n }\n\n // we'll emit the emit if a user is listening for a given event either on the component via normal angular binding\n // or via studioProperties\n protected isEmitterUsed(eventType: string): boolean {\n const emitter = <EventEmitter<any>>(<any>this)[eventType];\n // For RxJs compatibility we need to check for observed v7+ or observers v6\n const emitterAny = emitter as any;\n const hasEmitter = emitterAny?.observed ?? emitterAny?.observers?.length > 0;\n\n // apiReady => onApiReady\n const asEventName = `on${eventType.charAt(0).toUpperCase()}${eventType.substring(1)}`;\n const hasStudioPropertyListener = !!this.studioProperties && !!(this.studioProperties as any)[asEventName];\n\n return hasEmitter || hasStudioPropertyListener;\n }\n\n private globalListener(eventType: string, event: any): void {\n // if we are tearing down, don't emit angular events, as this causes\n // problems with the angular router\n if (this._destroyed) {\n return;\n }\n\n // generically look up the eventType\n const emitter = <EventEmitter<any>>(<any>this)[eventType];\n if (emitter && this.isEmitterUsed(eventType)) {\n // Make sure we emit within the angular zone, so change detection works properly\n const fireEmitter = () => this._angularFrameworkOverrides.runInsideAngular(() => emitter.emit(event));\n\n if (this._holdEvents) {\n // if the user is listening to events, wait for ngAfterViewInit to fire first, then emit the studio events\n this._fullyReady.then(() => fireEmitter());\n } else {\n fireEmitter();\n }\n }\n }\n\n /** Provided an initial studioProperties configuration to the component. If a property is specified in both studioProperties and via component binding the component binding takes precedence. */\n @Input() public studioProperties: AgStudioProperties<TRegistry> | undefined;\n /**\n * Used to register AG Studio Modules directly with this instance of Studio.\n */\n @Input() public modules: AgStudioModule[] | undefined;\n\n // @START@\n /** Change this value to set the tabIndex order of Studio within your application.\n * @default 0\n * @initial\n */\n @Input() public tabIndex: number | undefined = undefined;\n /** Set to `true` to operate Studio in RTL (Right to Left) mode.\n * @default false\n * @initial\n */\n @Input({ transform: booleanAttribute }) public enableRtl: boolean | undefined = undefined;\n /** DOM element to use as the popup parent for Studio popups (context menus, etc.).\n */\n @Input() public popupParent: HTMLElement | null | undefined = undefined;\n /** Theme to apply to Studio.\n *\n * @default studioTheme\n */\n @Input() public theme: AgStudioTheme | undefined = undefined;\n /** If your theme uses a font that is available on Google Fonts, pass true to load it from Google's CDN.\n */\n @Input({ transform: booleanAttribute }) public loadThemeGoogleFonts: boolean | undefined = undefined;\n /** The CSS layer that this theme should be rendered onto. When specified,\n * Studio CSS will be wrapped in a `@layer ${themeCssLayer} { ... }` block.\n *\n * NOTE: when specifying `themeCssLayer` we recommend setting\n * `themeStyleContainer` to `document.body` to ensure that Studio CSS\n * comes after your application CSS, allowing your application to set the\n * order of layers.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@layer\n */\n @Input() public themeCssLayer: string | undefined = undefined;\n /** The nonce attribute to set on style elements added to the document by\n * themes. If \"foo\" is passed to this property, Studio can use the Content\n * Security Policy `style-src 'nonce-foo'`, instead of the less secure\n * `style-src 'unsafe-inline'`.\n *\n * Note: CSP nonces are global to a page, where a page has multiple Studio components,\n * every one must have the same styleNonce set.\n */\n @Input() public styleNonce: string | undefined = undefined;\n /** An element to insert style elements into when injecting styles into the\n * Studio. Styles are inserted at the start of the element.\n *\n * If undefined, styles will be added to the document head for Studio components\n * rendered in the main document fragment, or to Studio wrapper element\n * for other Studio components (e.g. those rendered in a shadow DOM or detached from the\n * document).\n *\n * @initial\n */\n @Input() public themeStyleContainer: (HTMLElement | (() => HTMLElement | void)) | undefined = undefined;\n /** Allows overriding what `document` is used.\n * Use this when you want Studio to use a different `document` than the one available on the global scope.\n * This can happen if docking out components (something which Electron supports).\n */\n @Input() public getDocument: (() => Document) | undefined = undefined;\n /** Disables touch support (but does not remove the browser's efforts to simulate mouse events on touch).\n * @default false\n * @initial\n */\n @Input({ transform: booleanAttribute }) public suppressTouch: boolean | undefined = undefined;\n /** Keyboard shortcuts Studio should not handle, so an application can bind them itself.\n * Each shortcut is suppressed independently, e.g. `{ redo: true }` keeps undo on ctrl/cmd+Z and\n * leaves ctrl/cmd+shift+Z to the application.\n */\n @Input() public suppressKeyboard: AgSuppressKeyboard | undefined = undefined;\n /** A map of key->value pairs for localising text within Studio.\n * @initial\n */\n @Input() public localeText: AgStudioLocaleText | undefined = undefined;\n /** Override any AI-facing prose strings. Merged over AG defaults at initialisation time.\n * Keys use dotted notation, e.g. `'tools.view_schema.description'`.\n * @initial\n */\n @Input() public aiText: Partial<AgAiStrings> | undefined = undefined;\n /** A callback for localising text within Studio.\n * @initial\n */\n @Input() public getLocaleText: ((params: AgStudioGetLocaleTextParams) => string) | undefined = undefined;\n /** Provide a custom `studioId` for this instance of Studio. Value will be set on the root DOM node using the attribute `studio-id` as well as being accessible via the `api.getStudioId()` method.\n * @initial\n */\n @Input() public studioId: string | undefined = undefined;\n /** Provides a context object that is provided to different callbacks Studio uses. Used for passing additional information to the callbacks used by your application.\n * @initial\n */\n @Input() public context: any = undefined;\n /** Initial state for Studio. Only read once on initialization. Can be used in conjunction with `api.getState()` to save and restore Studio state.\n * @initial\n */\n @Input() public initialState: AgReportState<TRegistry> | undefined = undefined;\n /** Defines the data sources used by Studio.\n *\n * If updated after initially being set, only changes to synchronous data will be processed.\n * Any other changes will be ignored (e.g. adding/removing data sources, updating fields, etc.)\n */\n @Input() public data: AgDataSourcesDefinition<TRegistry> | AgDataEngine | undefined = undefined;\n /** Which mode Studio is in.\n * Changing this only changes what is shown and what is editable: the active state is\n * neither saved nor restored on a mode change, and carries across the switch unchanged.\n * The undo and redo history also carries across by default; set `history.onModeChange` to\n * discard it instead.\n * @default 'view'\n */\n @Input() public mode: AgStudioMode | undefined = undefined;\n /** How Studio's undo and redo history behaves. */\n @Input() public history: AgHistoryOptions | undefined = undefined;\n /** Allows filters to be added to, and removed from, the filters panel while in view mode.\n *\n * When `false`, filters can only be added and removed in edit mode.\n *\n * Studio does not store filters added this way. Listen to `onStateUpdated` and persist the\n * state yourself if it needs to survive a reload.\n * @default false\n */\n @Input({ transform: booleanAttribute }) public enableFilterEditingInViewMode: boolean | undefined = undefined;\n /** Default layout styling.\n */\n @Input() public layout: Partial<AgPageLayoutState> | undefined = undefined;\n /** The agent harness powering the AI Assistant panel: either a harness, or a function building\n * one from the Studio API. Results vary with the LLM you supply.\n *\n * @initial\n */\n @Input() public ai: AgAiHarnessSetup | undefined = undefined;\n /** How each tool's calls are presented in the AI Assistant panel, keyed by tool name: the words\n * on the step, an optional component for the body that opens beneath it, or `hidden` to leave\n * the tool out of the transcript. Studio's own tools come pre-declared; an entry here overrides\n * them, and any tool of your own needs one to render as more than its name.\n *\n * Keyed by name because a call replayed from history no longer carries the tool that ran it,\n * only the name it was called by. Applies whichever harness is driving the panel.\n *\n * `detail` is checked against the component type of the framework you are using.\n */\n @Input() public aiToolDisplay: Record<string, TRegistry['aiToolDisplay']> | undefined = undefined;\n /** Data-layer configuration. Controls behaviours such as export row limits.\n */\n @Input() public dataOptions: AgDataOptions | undefined = undefined;\n /** Configure which panels are displayed and on which side.\n */\n @Input() public panels: AgPanelConfig | undefined = undefined;\n /** Configure page (e.g. page setup form in page tab of edit panel).\n */\n @Input() public page: (AgPageConfig | ((config: AgPageConfig) => AgPageConfig)) | undefined = undefined;\n @Input() public widgets:\n | (AgWidgetsConfig<TRegistry> | ((widgets: AgWidgetsConfig<AgDefaultRegistry>) => AgWidgetsConfig<TRegistry>))\n | undefined = undefined;\n /** Custom components (e.g. custom widget components) keyed by ID.\n * Used to share components which can then be referenced directly by key in the definitions.\n */\n @Input() public components: TRegistry['components'] | undefined = undefined;\n\n /** State has been updated.\n */\n @Output() public stateUpdated: EventEmitter<AgStudioStateUpdatedEvent> =\n new EventEmitter<AgStudioStateUpdatedEvent>();\n /** The API has been initialised and is ready for most calls. The data engine has not been initialised yet, and the UI is not ready.\n */\n @Output() public apiReady: EventEmitter<AgStudioApiReadyEvent> = new EventEmitter<AgStudioApiReadyEvent>();\n /** The data engine has been initialised, and the UI has been created, but may not be fully rendered yet.\n */\n @Output() public studioReady: EventEmitter<AgStudioReadyEvent> = new EventEmitter<AgStudioReadyEvent>();\n /** The render state has changed. This is called after the UI has been rendered, and can be used to determine when Studio is ready for printing or other operations that require the UI to be fully rendered.\n */\n @Output() public renderStateChanged: EventEmitter<AgStudioRenderStateChangedEvent> =\n new EventEmitter<AgStudioRenderStateChangedEvent>();\n /** An error has occurred within Studio.\n */\n @Output() public errorRaised: EventEmitter<AgStudioErrorRaisedEvent> = new EventEmitter<AgStudioErrorRaisedEvent>();\n\n // @END@\n}\n\nconst booleanMixedStudioProperties = new Set<string>(_BOOLEAN_MIXED_STUDIO_PROPERTIES);\n/**\n * Used to support the user setting combined boolean and string / object properties\n * as plain HTML attributes and us correctly mapping that to true.\n * For example cellSection can be boolean or an object\n */\nfunction getValueOrCoercedValue(key: string, valueToUse: any): any {\n if (booleanMixedStudioProperties.has(key)) {\n // Handle plain HTML boolean attributes and convert them to boolean values\n // Also handle the false string case to match Angular boolean attributes\n return valueToUse === '' ? true : valueToUse === 'false' ? false : valueToUse;\n }\n return valueToUse;\n}\n","import { NgModule } from '@angular/core';\n\nimport { AgStudio } from './ag-studio.component';\n\n@NgModule({\n imports: [AgStudio],\n exports: [AgStudio],\n})\nexport class AgStudioModule {}\n","import type { AgCreateWidgetsParams, AgDefaultRegistry, AgWidgetsConfig } from 'ag-studio';\nimport { _createWidgets } from 'ag-studio';\n\nimport type { AgRegistry } from './interfaces';\nimport { WIDGET_DEFAULTS } from './widgetDefaults';\n\n/**\n * Helper function for the `widgets` Studio property.\n */\nexport function createWidgets<TRegistry extends AgRegistry = AgDefaultRegistry>(\n params: AgCreateWidgetsParams<TRegistry>\n): AgWidgetsConfig<TRegistry> {\n return _createWidgets<TRegistry>(params, WIDGET_DEFAULTS);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AngularFrameworkOverrides","i2.AngularFrameworkComponentWrapper"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { NgZone, ViewContainerRef, ComponentRef, Type, AfterViewInit, OnChanges, OnDestroy, ElementRef, EventEmitter } from '@angular/core';
|
|
3
|
-
import { _VanillaFrameworkOverrides, _BaseComponentWrapper, _WrappableInterface, _FrameworkComponentWrapper, AgMaybePromise, AgBaseRegistry, AgBaseWidgetDefinition, AgWidgetRegistry, AgDefaultWidgetType,
|
|
2
|
+
import { NgZone, ViewContainerRef, ComponentRef, Type, AfterViewInit, OnChanges, OnDestroy, ElementRef, EventEmitter, ChangeDetectorRef } from '@angular/core';
|
|
3
|
+
import { _VanillaFrameworkOverrides, _BaseComponentWrapper, _WrappableInterface, _FrameworkComponentWrapper, AgBaseAiToolDisplay, AgMaybePromise, AgAiToolDetailParams, AgTypeScriptComponent, AgBaseRegistry, AgBaseWidgetDefinition, AgWidgetRegistry, AgDefaultWidgetType, AgWidgetParams, AgWidgetData, AgWidgetDataFormat, AgGridWidgetOptions as AgGridWidgetOptions$1, AgWidgetField, AgPivotGridWidgetOptions as AgPivotGridWidgetOptions$1, AgDefaultRegistry, AgStudioApi, AgStudioProperties, AgStudioModule as AgStudioModule$1, AgStudioTheme, AgSuppressKeyboard, AgStudioLocaleText, AgAiStrings, AgStudioGetLocaleTextParams, AgReportState, AgDataSourcesDefinition, AgDataEngine, AgStudioMode, AgHistoryOptions, AgPageLayoutState, AgAiHarnessSetup, AgDataOptions, AgPanelConfig, AgPageConfig, AgWidgetsConfig, AgStudioStateUpdatedEvent, AgStudioApiReadyEvent, AgStudioReadyEvent, AgStudioRenderStateChangedEvent, AgStudioErrorRaisedEvent, AgCreateWidgetsParams, AgGridWidget, _BeanCollection, AgPivotGridWidget } from 'ag-studio';
|
|
4
4
|
import { FrameworkOverridesIncomingSource } from 'ag-stack';
|
|
5
|
+
import { ICellRendererAngularComp } from 'ag-grid-angular';
|
|
6
|
+
import * as ag_grid_community from 'ag-grid-community';
|
|
7
|
+
import { GridOptions } from 'ag-grid-enterprise';
|
|
5
8
|
|
|
6
9
|
declare class AngularFrameworkOverrides extends _VanillaFrameworkOverrides {
|
|
7
10
|
private readonly _ngZone;
|
|
@@ -76,6 +79,47 @@ type AgCustomComponentDefs<TRegistry extends AgBaseRegistry> = {
|
|
|
76
79
|
interface AgRegistry extends AgBaseRegistry {
|
|
77
80
|
widgets: readonly AgWidgetDefinition[];
|
|
78
81
|
components: AgCustomComponentDefs<this>;
|
|
82
|
+
aiToolDisplay: AgAiToolDisplay;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Grid widget options, with `createCellRenderer` typed for an Angular component.
|
|
86
|
+
* See `AgGridWidgetOptions` in `ag-studio`.
|
|
87
|
+
*/
|
|
88
|
+
interface AgGridWidgetOptions extends Omit<AgGridWidgetOptions$1, 'createCellRenderer'> {
|
|
89
|
+
/**
|
|
90
|
+
* Optional. Returns the cell renderer to use for a field's column, or `undefined` to leave that
|
|
91
|
+
* column with its default rendering. Called once for every column, each time the widget builds
|
|
92
|
+
* its columns.
|
|
93
|
+
*/
|
|
94
|
+
createCellRenderer?: (field: AgWidgetField) => Type<ICellRendererAngularComp> | undefined;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Pivot grid widget options, with `createCellRenderer` typed for an Angular component.
|
|
98
|
+
* See `AgPivotGridWidgetOptions` in `ag-studio`.
|
|
99
|
+
*/
|
|
100
|
+
interface AgPivotGridWidgetOptions extends Omit<AgPivotGridWidgetOptions$1, 'createCellRenderer'> {
|
|
101
|
+
/**
|
|
102
|
+
* Optional. Returns the cell renderer to use for a field's cells, or `undefined` to leave them
|
|
103
|
+
* with their default rendering. Called for each value field and each Row Labels field.
|
|
104
|
+
*
|
|
105
|
+
* A renderer returned for a Row Labels field renders alongside the row's expand control and
|
|
106
|
+
* indentation rather than replacing the whole cell, and it receives no field information in its
|
|
107
|
+
* parameters - a renderer that needs to know which field it is rendering should close over the
|
|
108
|
+
* one passed to this callback.
|
|
109
|
+
*/
|
|
110
|
+
createCellRenderer?: (field: AgWidgetField) => Type<ICellRendererAngularComp> | undefined;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* How a tool's calls are presented in the chat panel, with `detail` typed for an Angular component.
|
|
114
|
+
* See `AgBaseAiToolDisplay`.
|
|
115
|
+
*/
|
|
116
|
+
interface AgAiToolDisplay extends AgBaseAiToolDisplay {
|
|
117
|
+
/**
|
|
118
|
+
* Component rendering the expanded body of this tool's calls. Either:
|
|
119
|
+
* - A custom Angular component class
|
|
120
|
+
* - A custom TypeScript component (no Angular; working directly with the DOM)
|
|
121
|
+
*/
|
|
122
|
+
detail?: Type<AgCustomComponent<AgAiToolDetailParams>> | (new () => AgTypeScriptComponent<AgAiToolDetailParams>);
|
|
79
123
|
}
|
|
80
124
|
|
|
81
125
|
declare class AgStudio<TRegistry extends AgRegistry = AgDefaultRegistry> implements AfterViewInit, OnChanges, OnDestroy {
|
|
@@ -164,6 +208,11 @@ declare class AgStudio<TRegistry extends AgRegistry = AgDefaultRegistry> impleme
|
|
|
164
208
|
* @initial
|
|
165
209
|
*/
|
|
166
210
|
suppressTouch: boolean | undefined;
|
|
211
|
+
/** Keyboard shortcuts Studio should not handle, so an application can bind them itself.
|
|
212
|
+
* Each shortcut is suppressed independently, e.g. `{ redo: true }` keeps undo on ctrl/cmd+Z and
|
|
213
|
+
* leaves ctrl/cmd+shift+Z to the application.
|
|
214
|
+
*/
|
|
215
|
+
suppressKeyboard: AgSuppressKeyboard | undefined;
|
|
167
216
|
/** A map of key->value pairs for localising text within Studio.
|
|
168
217
|
* @initial
|
|
169
218
|
*/
|
|
@@ -196,20 +245,44 @@ declare class AgStudio<TRegistry extends AgRegistry = AgDefaultRegistry> impleme
|
|
|
196
245
|
*/
|
|
197
246
|
data: AgDataSourcesDefinition<TRegistry> | AgDataEngine | undefined;
|
|
198
247
|
/** Which mode Studio is in.
|
|
248
|
+
* Changing this only changes what is shown and what is editable: the active state is
|
|
249
|
+
* neither saved nor restored on a mode change, and carries across the switch unchanged.
|
|
250
|
+
* The undo and redo history also carries across by default; set `history.onModeChange` to
|
|
251
|
+
* discard it instead.
|
|
199
252
|
* @default 'view'
|
|
200
253
|
*/
|
|
201
254
|
mode: AgStudioMode | undefined;
|
|
255
|
+
/** How Studio's undo and redo history behaves. */
|
|
256
|
+
history: AgHistoryOptions | undefined;
|
|
257
|
+
/** Allows filters to be added to, and removed from, the filters panel while in view mode.
|
|
258
|
+
*
|
|
259
|
+
* When `false`, filters can only be added and removed in edit mode.
|
|
260
|
+
*
|
|
261
|
+
* Studio does not store filters added this way. Listen to `onStateUpdated` and persist the
|
|
262
|
+
* state yourself if it needs to survive a reload.
|
|
263
|
+
* @default false
|
|
264
|
+
*/
|
|
265
|
+
enableFilterEditingInViewMode: boolean | undefined;
|
|
202
266
|
/** Default layout styling.
|
|
203
267
|
*/
|
|
204
268
|
layout: Partial<AgPageLayoutState> | undefined;
|
|
205
|
-
/** AI Assistant
|
|
206
|
-
*
|
|
207
|
-
* NOTE: The **AI Assistant** is an experimental feature. Behaviour will be
|
|
208
|
-
* slightly different depending on the LLM being used, and results can vary across queries.
|
|
269
|
+
/** The agent harness powering the AI Assistant panel: either a harness, or a function building
|
|
270
|
+
* one from the Studio API. Results vary with the LLM you supply.
|
|
209
271
|
*
|
|
210
272
|
* @initial
|
|
211
273
|
*/
|
|
212
|
-
ai:
|
|
274
|
+
ai: AgAiHarnessSetup | undefined;
|
|
275
|
+
/** How each tool's calls are presented in the AI Assistant panel, keyed by tool name: the words
|
|
276
|
+
* on the step, an optional component for the body that opens beneath it, or `hidden` to leave
|
|
277
|
+
* the tool out of the transcript. Studio's own tools come pre-declared; an entry here overrides
|
|
278
|
+
* them, and any tool of your own needs one to render as more than its name.
|
|
279
|
+
*
|
|
280
|
+
* Keyed by name because a call replayed from history no longer carries the tool that ran it,
|
|
281
|
+
* only the name it was called by. Applies whichever harness is driving the panel.
|
|
282
|
+
*
|
|
283
|
+
* `detail` is checked against the component type of the framework you are using.
|
|
284
|
+
*/
|
|
285
|
+
aiToolDisplay: Record<string, TRegistry['aiToolDisplay']> | undefined;
|
|
213
286
|
/** Data-layer configuration. Controls behaviours such as export row limits.
|
|
214
287
|
*/
|
|
215
288
|
dataOptions: AgDataOptions | undefined;
|
|
@@ -240,10 +313,11 @@ declare class AgStudio<TRegistry extends AgRegistry = AgDefaultRegistry> impleme
|
|
|
240
313
|
*/
|
|
241
314
|
errorRaised: EventEmitter<AgStudioErrorRaisedEvent>;
|
|
242
315
|
static ɵfac: i0.ɵɵFactoryDeclaration<AgStudio<any>, never>;
|
|
243
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AgStudio<any>, "ag-studio", never, { "studioProperties": { "alias": "studioProperties"; "required": false; }; "modules": { "alias": "modules"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "enableRtl": { "alias": "enableRtl"; "required": false; }; "popupParent": { "alias": "popupParent"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "loadThemeGoogleFonts": { "alias": "loadThemeGoogleFonts"; "required": false; }; "themeCssLayer": { "alias": "themeCssLayer"; "required": false; }; "styleNonce": { "alias": "styleNonce"; "required": false; }; "themeStyleContainer": { "alias": "themeStyleContainer"; "required": false; }; "getDocument": { "alias": "getDocument"; "required": false; }; "suppressTouch": { "alias": "suppressTouch"; "required": false; }; "localeText": { "alias": "localeText"; "required": false; }; "aiText": { "alias": "aiText"; "required": false; }; "getLocaleText": { "alias": "getLocaleText"; "required": false; }; "studioId": { "alias": "studioId"; "required": false; }; "context": { "alias": "context"; "required": false; }; "initialState": { "alias": "initialState"; "required": false; }; "data": { "alias": "data"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "ai": { "alias": "ai"; "required": false; }; "dataOptions": { "alias": "dataOptions"; "required": false; }; "panels": { "alias": "panels"; "required": false; }; "page": { "alias": "page"; "required": false; }; "widgets": { "alias": "widgets"; "required": false; }; "components": { "alias": "components"; "required": false; }; }, { "stateUpdated": "stateUpdated"; "apiReady": "apiReady"; "studioReady": "studioReady"; "renderStateChanged": "renderStateChanged"; "errorRaised": "errorRaised"; }, never, never, true, never>;
|
|
316
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AgStudio<any>, "ag-studio", never, { "studioProperties": { "alias": "studioProperties"; "required": false; }; "modules": { "alias": "modules"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "enableRtl": { "alias": "enableRtl"; "required": false; }; "popupParent": { "alias": "popupParent"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "loadThemeGoogleFonts": { "alias": "loadThemeGoogleFonts"; "required": false; }; "themeCssLayer": { "alias": "themeCssLayer"; "required": false; }; "styleNonce": { "alias": "styleNonce"; "required": false; }; "themeStyleContainer": { "alias": "themeStyleContainer"; "required": false; }; "getDocument": { "alias": "getDocument"; "required": false; }; "suppressTouch": { "alias": "suppressTouch"; "required": false; }; "suppressKeyboard": { "alias": "suppressKeyboard"; "required": false; }; "localeText": { "alias": "localeText"; "required": false; }; "aiText": { "alias": "aiText"; "required": false; }; "getLocaleText": { "alias": "getLocaleText"; "required": false; }; "studioId": { "alias": "studioId"; "required": false; }; "context": { "alias": "context"; "required": false; }; "initialState": { "alias": "initialState"; "required": false; }; "data": { "alias": "data"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "history": { "alias": "history"; "required": false; }; "enableFilterEditingInViewMode": { "alias": "enableFilterEditingInViewMode"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "ai": { "alias": "ai"; "required": false; }; "aiToolDisplay": { "alias": "aiToolDisplay"; "required": false; }; "dataOptions": { "alias": "dataOptions"; "required": false; }; "panels": { "alias": "panels"; "required": false; }; "page": { "alias": "page"; "required": false; }; "widgets": { "alias": "widgets"; "required": false; }; "components": { "alias": "components"; "required": false; }; }, { "stateUpdated": "stateUpdated"; "apiReady": "apiReady"; "studioReady": "studioReady"; "renderStateChanged": "renderStateChanged"; "errorRaised": "errorRaised"; }, never, never, true, never>;
|
|
244
317
|
static ngAcceptInputType_enableRtl: unknown;
|
|
245
318
|
static ngAcceptInputType_loadThemeGoogleFonts: unknown;
|
|
246
319
|
static ngAcceptInputType_suppressTouch: unknown;
|
|
320
|
+
static ngAcceptInputType_enableFilterEditingInViewMode: unknown;
|
|
247
321
|
}
|
|
248
322
|
|
|
249
323
|
declare class AgStudioModule {
|
|
@@ -252,5 +326,61 @@ declare class AgStudioModule {
|
|
|
252
326
|
static ɵinj: i0.ɵɵInjectorDeclaration<AgStudioModule>;
|
|
253
327
|
}
|
|
254
328
|
|
|
255
|
-
|
|
256
|
-
|
|
329
|
+
/**
|
|
330
|
+
* Helper function for the `widgets` Studio property.
|
|
331
|
+
*/
|
|
332
|
+
declare function createWidgets<TRegistry extends AgRegistry = AgDefaultRegistry>(params: AgCreateWidgetsParams<TRegistry>): AgWidgetsConfig<TRegistry>;
|
|
333
|
+
|
|
334
|
+
type GridWidgetParams = AgWidgetParams<AgGridWidget, AgGridWidgetOptions>;
|
|
335
|
+
/**
|
|
336
|
+
* The studio's grid widget as a framework-native Angular component. Register it as the `comp` of a
|
|
337
|
+
* grid widget definition to host the grid inside the consumer's own Angular application.
|
|
338
|
+
*/
|
|
339
|
+
declare class GridWidget implements AgCustomComponent<GridWidgetParams>, OnDestroy {
|
|
340
|
+
private readonly changeDetectorRef;
|
|
341
|
+
protected eRoot: ElementRef<HTMLElement>;
|
|
342
|
+
protected cssProperties: Record<string, string>;
|
|
343
|
+
protected readonly modules: ag_grid_community.Module[];
|
|
344
|
+
protected gridOptions?: GridOptions;
|
|
345
|
+
private beans?;
|
|
346
|
+
private core?;
|
|
347
|
+
private destroyed;
|
|
348
|
+
private cancelCreate?;
|
|
349
|
+
constructor(changeDetectorRef: ChangeDetectorRef);
|
|
350
|
+
/** Receives the studio's beans, before `agInit` runs. */
|
|
351
|
+
wireBeans(beans: _BeanCollection): void;
|
|
352
|
+
agInit(params: GridWidgetParams): AgMaybePromise<void>;
|
|
353
|
+
refresh(params: GridWidgetParams): AgMaybePromise<void>;
|
|
354
|
+
ngOnDestroy(): void;
|
|
355
|
+
private applyCssProperties;
|
|
356
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GridWidget, never>;
|
|
357
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GridWidget, "ng-component", never, {}, {}, never, never, true, never>;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
type PivotGridWidgetParams = AgWidgetParams<AgPivotGridWidget, AgPivotGridWidgetOptions>;
|
|
361
|
+
/**
|
|
362
|
+
* The studio's pivot grid widget as a framework-native Angular component. Register it as the `comp`
|
|
363
|
+
* of a pivot grid widget definition to host the grid inside the consumer's own Angular application.
|
|
364
|
+
*/
|
|
365
|
+
declare class PivotGridWidget implements AgCustomComponent<PivotGridWidgetParams>, OnDestroy {
|
|
366
|
+
private readonly changeDetectorRef;
|
|
367
|
+
protected cssProperties: Record<string, string>;
|
|
368
|
+
protected readonly modules: ag_grid_community.Module[];
|
|
369
|
+
protected gridOptions?: GridOptions;
|
|
370
|
+
private beans?;
|
|
371
|
+
private core?;
|
|
372
|
+
private destroyed;
|
|
373
|
+
private cancelCreate?;
|
|
374
|
+
constructor(changeDetectorRef: ChangeDetectorRef);
|
|
375
|
+
/** Receives the studio's beans, before `agInit` runs. */
|
|
376
|
+
wireBeans(beans: _BeanCollection): void;
|
|
377
|
+
agInit(params: PivotGridWidgetParams): AgMaybePromise<void>;
|
|
378
|
+
refresh(params: PivotGridWidgetParams): AgMaybePromise<void>;
|
|
379
|
+
ngOnDestroy(): void;
|
|
380
|
+
private applyCssProperties;
|
|
381
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PivotGridWidget, never>;
|
|
382
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PivotGridWidget, "ng-component", never, {}, {}, never, never, true, never>;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
export { AgComponentContainer, AgStudio, AgStudioModule, AngularFrameworkComponentWrapper, AngularFrameworkOverrides, GridWidget, PivotGridWidget, createWidgets };
|
|
386
|
+
export type { AgAiToolDisplay, AgCustomComponent, AgCustomComponentDefs, AgGridWidgetOptions, AgPivotGridWidgetOptions, AgRegistry, AgWidgetDefinition };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ag-studio-angular",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "AG Studio Angular Component",
|
|
5
5
|
"license": "Commercial",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
"@angular/core": ">= 18.0.0"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"ag-
|
|
12
|
-
"ag-
|
|
11
|
+
"ag-grid-angular": "~36.2.0",
|
|
12
|
+
"ag-grid-enterprise": "~36.2.0",
|
|
13
|
+
"ag-stack": "~36.2.0",
|
|
14
|
+
"ag-studio": "3.0.0",
|
|
13
15
|
"tslib": "^2.3.0"
|
|
14
16
|
},
|
|
15
17
|
"bugs": {
|