photon-grid-angular 0.0.1

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.
@@ -0,0 +1,287 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { GridCore, GridEventType } from 'photon-grid-core';
3
+ import { RendererAdapter } from './angular-renderer.adapter';
4
+ import * as i0 from "@angular/core";
5
+ const _c0 = ["gridHost"];
6
+ /**
7
+ * Angular wrapper around the framework-agnostic Photon Grid core.
8
+ *
9
+ * The component owns a single {@link GridCore} instance, keeps it in sync
10
+ * with the `columns`, `dataSet` and `options` inputs, and re-emits the
11
+ * grid's internal events as strongly-typed Angular `@Output`s.
12
+ *
13
+ * Cell/header/editor/etc. renderers may be plain functions (raw
14
+ * `HTMLElement`/`string`, identical to the core's own API), or declarative
15
+ * Angular specs — `{ kind: 'component', component: MyBadge }` or
16
+ * `{ kind: 'template', template: myTemplateRef }` — via {@link GridColumnDef}.
17
+ * An internal {@link RendererAdapter} mounts/unmounts those for every
18
+ * renderer invocation and disposes them as soon as the core discards their
19
+ * host element, so virtualization/recycling never leaks components.
20
+ *
21
+ * @example
22
+ * ```html
23
+ * <photon-grid
24
+ * [columns]="columns"
25
+ * [dataSet]="rows"
26
+ * [options]="{ theme: 'light', showCheckboxes: true }"
27
+ * (gridReady)="onReady($event)"
28
+ * (rowClicked)="onRowClicked($event)">
29
+ * </photon-grid>
30
+ * ```
31
+ *
32
+ * @example Component-based cell renderer
33
+ * ```ts
34
+ * columns: GridColumnDef[] = [{
35
+ * colId: 'status', field: 'status', header: 'Status', type: 'string',
36
+ * renderer: {
37
+ * display: {
38
+ * kind: 'component',
39
+ * component: StatusBadgeComponent,
40
+ * inputs: (params) => ({ value: params.value }),
41
+ * },
42
+ * },
43
+ * }];
44
+ * ```
45
+ *
46
+ * @example Template-based cell renderer
47
+ * ```html
48
+ * <ng-template #statusTpl let-params>
49
+ * <span class="badge">{{ params.value }}</span>
50
+ * </ng-template>
51
+ * ```
52
+ * ```ts
53
+ * @ViewChild('statusTpl') statusTpl!: TemplateRef<RendererContext<DisplayRendererParams>>;
54
+ * columns: GridColumnDef[] = [{
55
+ * colId: 'status', field: 'status', header: 'Status', type: 'string',
56
+ * renderer: { display: { kind: 'template', template: this.statusTpl } },
57
+ * }];
58
+ * ```
59
+ */
60
+ export class PhotonGridComponent {
61
+ /** Container the grid renders into. */
62
+ gridHost;
63
+ /**
64
+ * Column definitions. Bound to {@link GridApi.setColumns} on change.
65
+ * Provided as a dedicated input rather than through `options.columns`.
66
+ * Renderer slots accept Angular components/templates in addition to
67
+ * plain functions — see {@link GridColumnDef}.
68
+ */
69
+ columns = [];
70
+ /**
71
+ * Row data. Bound to {@link GridApi.setData} on change. Provided as a
72
+ * dedicated input rather than through `options.data`.
73
+ */
74
+ dataSet = [];
75
+ /**
76
+ * Remaining grid options (theme, selection, editing, pagination, …).
77
+ * `columns` and `data` are supplied by the dedicated inputs above and are
78
+ * merged in automatically. The core has no runtime options setter, so a
79
+ * change to this input transparently recreates the grid.
80
+ */
81
+ options = {};
82
+ /** Emitted once the grid is constructed, carrying its {@link GridApi}. */
83
+ gridReady = new EventEmitter();
84
+ /** Row data changed (count delta). */
85
+ dataChanged = new EventEmitter();
86
+ /** A row was clicked. */
87
+ rowClicked = new EventEmitter();
88
+ /** A row was double-clicked. */
89
+ rowDoubleClicked = new EventEmitter();
90
+ /** Row selection changed. */
91
+ rowSelected = new EventEmitter();
92
+ /** A cell was clicked. */
93
+ cellClicked = new EventEmitter();
94
+ /** A cell was double-clicked. */
95
+ cellDoubleClicked = new EventEmitter();
96
+ /** A cell value was committed. */
97
+ cellValueChanged = new EventEmitter();
98
+ /** Range/cell selection changed. */
99
+ cellSelectionChanged = new EventEmitter();
100
+ /** A column was resized. */
101
+ columnResized = new EventEmitter();
102
+ /** A column was reordered. */
103
+ columnMoved = new EventEmitter();
104
+ /** Sort state changed. */
105
+ sortChanged = new EventEmitter();
106
+ /** Filter model changed. */
107
+ filterChanged = new EventEmitter();
108
+ /** Pagination page or size changed. */
109
+ pageChanged = new EventEmitter();
110
+ /** Column state (width/visibility/pin/order) changed. */
111
+ columnsStateChanged = new EventEmitter();
112
+ /** Active theme changed. */
113
+ themeChanged = new EventEmitter();
114
+ /** An export finished. */
115
+ exportComplete = new EventEmitter();
116
+ /** The live core instance, created in {@link ngAfterViewInit}. */
117
+ grid;
118
+ /** Unsubscribe callbacks for every wired core event; drained on teardown. */
119
+ disposers = [];
120
+ /**
121
+ * Bridges Angular component/template renderer specs to the core's
122
+ * plain-function `ColumnRendererMap`. Owned for the lifetime of this
123
+ * component (not DI-provided) so its mounted-view tracking is scoped
124
+ * to this grid instance alone.
125
+ *
126
+ * Built explicitly in the constructor body (rather than as a field
127
+ * initializer referencing constructor-parameter properties) so it isn't
128
+ * subject to field-initializer-vs-parameter-property ordering: at this
129
+ * point `appRef`/`environmentInjector`/`elementInjector` are plain local
130
+ * constructor arguments, guaranteed to already be set.
131
+ */
132
+ rendererAdapter;
133
+ constructor(appRef, environmentInjector, elementInjector) {
134
+ this.rendererAdapter = new RendererAdapter(appRef, environmentInjector, elementInjector);
135
+ }
136
+ ngAfterViewInit() {
137
+ this.createGrid();
138
+ }
139
+ ngOnChanges(changes) {
140
+ // Initial inputs are consumed by createGrid() in ngAfterViewInit.
141
+ if (!this.grid) {
142
+ return;
143
+ }
144
+ // An options change cannot be applied incrementally (no core setter),
145
+ // so recreate; this already re-seeds columns and data.
146
+ if (changes['options'] && !changes['options'].firstChange) {
147
+ this.recreateGrid();
148
+ return;
149
+ }
150
+ if (changes['columns'] && !changes['columns'].firstChange) {
151
+ this.grid.api.setColumns(this.rendererAdapter.adaptColumns(this.columns));
152
+ }
153
+ if (changes['dataSet'] && !changes['dataSet'].firstChange) {
154
+ this.grid.api.setData(this.dataSet);
155
+ }
156
+ }
157
+ ngOnDestroy() {
158
+ this.teardownGrid();
159
+ }
160
+ /** Builds the core from the current inputs and wires its events. */
161
+ createGrid() {
162
+ // Must be observing *before* the core mounts anything, so every
163
+ // renderer-produced element is tracked for cleanup from the start.
164
+ this.rendererAdapter.observe(this.gridHost.nativeElement);
165
+ const mergedOptions = {
166
+ ...this.options,
167
+ columns: this.rendererAdapter.adaptColumns(this.columns),
168
+ data: this.dataSet,
169
+ };
170
+ const grid = new GridCore(this.gridHost.nativeElement, mergedOptions);
171
+ this.grid = grid;
172
+ this.wireEvents(grid.api);
173
+ // GridCore emits READY synchronously during construction (before we can
174
+ // attach a listener), so surface the ready signal explicitly here.
175
+ this.gridReady.emit(grid.api);
176
+ }
177
+ /** Destroys the current core, drops it, and builds a fresh one. */
178
+ recreateGrid() {
179
+ this.teardownGrid();
180
+ this.createGrid();
181
+ }
182
+ /**
183
+ * Disposes event subscriptions, the renderer adapter (stopping its
184
+ * observer and destroying every mounted component/embedded view), and
185
+ * the core instance itself, if any.
186
+ *
187
+ * Order matters: the adapter is disposed *after* `grid.destroy()` so
188
+ * any teardown-time DOM removal is irrelevant (dispose() unconditionally
189
+ * destroys all remaining mounts rather than depending on the
190
+ * MutationObserver having flushed).
191
+ */
192
+ teardownGrid() {
193
+ for (const dispose of this.disposers) {
194
+ dispose();
195
+ }
196
+ this.disposers.length = 0;
197
+ this.grid?.destroy();
198
+ this.grid = undefined;
199
+ this.rendererAdapter.dispose();
200
+ }
201
+ /** Subscribes every core event to its corresponding `@Output` emitter. */
202
+ wireEvents(api) {
203
+ this.subscribe(api, GridEventType.DATA_CHANGED, this.dataChanged);
204
+ this.subscribe(api, GridEventType.ROW_CLICKED, this.rowClicked);
205
+ this.subscribe(api, GridEventType.ROW_DOUBLE_CLICKED, this.rowDoubleClicked);
206
+ this.subscribe(api, GridEventType.ROW_SELECTED, this.rowSelected);
207
+ this.subscribe(api, GridEventType.CELL_CLICKED, this.cellClicked);
208
+ this.subscribe(api, GridEventType.CELL_DOUBLE_CLICKED, this.cellDoubleClicked);
209
+ this.subscribe(api, GridEventType.CELL_VALUE_CHANGED, this.cellValueChanged);
210
+ this.subscribe(api, GridEventType.CELL_SELECTION_CHANGED, this.cellSelectionChanged);
211
+ this.subscribe(api, GridEventType.COLUMN_RESIZED, this.columnResized);
212
+ this.subscribe(api, GridEventType.COLUMN_MOVED, this.columnMoved);
213
+ this.subscribe(api, GridEventType.SORT_CHANGED, this.sortChanged);
214
+ this.subscribe(api, GridEventType.FILTER_CHANGED, this.filterChanged);
215
+ this.subscribe(api, GridEventType.PAGE_CHANGED, this.pageChanged);
216
+ this.subscribe(api, GridEventType.COLUMNS_STATE_CHANGED, this.columnsStateChanged);
217
+ this.subscribe(api, GridEventType.THEME_CHANGED, this.themeChanged);
218
+ this.subscribe(api, GridEventType.EXPORT_COMPLETE, this.exportComplete);
219
+ }
220
+ /**
221
+ * Forwards a single strongly-typed core event to an Angular emitter and
222
+ * records its unsubscribe callback. The generic constraint guarantees the
223
+ * emitter's payload type matches the event's payload in {@link GridEventMap}.
224
+ */
225
+ subscribe(api, event, emitter) {
226
+ const dispose = api.on(event, (payload) => emitter.emit(payload));
227
+ this.disposers.push(dispose);
228
+ }
229
+ static ɵfac = function PhotonGridComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PhotonGridComponent)(i0.ɵɵdirectiveInject(i0.ApplicationRef), i0.ɵɵdirectiveInject(i0.EnvironmentInjector), i0.ɵɵdirectiveInject(i0.Injector)); };
230
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhotonGridComponent, selectors: [["photon-grid"]], viewQuery: function PhotonGridComponent_Query(rf, ctx) { if (rf & 1) {
231
+ i0.ɵɵviewQuery(_c0, 7, ElementRef);
232
+ } if (rf & 2) {
233
+ let _t;
234
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.gridHost = _t.first);
235
+ } }, inputs: { columns: "columns", dataSet: "dataSet", options: "options" }, outputs: { gridReady: "gridReady", dataChanged: "dataChanged", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", rowSelected: "rowSelected", cellClicked: "cellClicked", cellDoubleClicked: "cellDoubleClicked", cellValueChanged: "cellValueChanged", cellSelectionChanged: "cellSelectionChanged", columnResized: "columnResized", columnMoved: "columnMoved", sortChanged: "sortChanged", filterChanged: "filterChanged", pageChanged: "pageChanged", columnsStateChanged: "columnsStateChanged", themeChanged: "themeChanged", exportComplete: "exportComplete" }, standalone: true, features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 2, vars: 0, consts: [["gridHost", ""], [1, "photon-grid__host"]], template: function PhotonGridComponent_Template(rf, ctx) { if (rf & 1) {
236
+ i0.ɵɵelement(0, "div", 1, 0);
237
+ } }, styles: ["[_nghost-%COMP%]{display:block;width:100%;height:100%}.photon-grid__host[_ngcontent-%COMP%]{width:100%;height:100%}"], changeDetection: 0 });
238
+ }
239
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhotonGridComponent, [{
240
+ type: Component,
241
+ args: [{ selector: 'photon-grid', standalone: true, template: `<div #gridHost class="photon-grid__host"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%}.photon-grid__host{width:100%;height:100%}\n"] }]
242
+ }], () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }, { type: i0.Injector }], { gridHost: [{
243
+ type: ViewChild,
244
+ args: ['gridHost', { static: true, read: ElementRef }]
245
+ }], columns: [{
246
+ type: Input
247
+ }], dataSet: [{
248
+ type: Input
249
+ }], options: [{
250
+ type: Input
251
+ }], gridReady: [{
252
+ type: Output
253
+ }], dataChanged: [{
254
+ type: Output
255
+ }], rowClicked: [{
256
+ type: Output
257
+ }], rowDoubleClicked: [{
258
+ type: Output
259
+ }], rowSelected: [{
260
+ type: Output
261
+ }], cellClicked: [{
262
+ type: Output
263
+ }], cellDoubleClicked: [{
264
+ type: Output
265
+ }], cellValueChanged: [{
266
+ type: Output
267
+ }], cellSelectionChanged: [{
268
+ type: Output
269
+ }], columnResized: [{
270
+ type: Output
271
+ }], columnMoved: [{
272
+ type: Output
273
+ }], sortChanged: [{
274
+ type: Output
275
+ }], filterChanged: [{
276
+ type: Output
277
+ }], pageChanged: [{
278
+ type: Output
279
+ }], columnsStateChanged: [{
280
+ type: Output
281
+ }], themeChanged: [{
282
+ type: Output
283
+ }], exportComplete: [{
284
+ type: Output
285
+ }] }); })();
286
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PhotonGridComponent, { className: "PhotonGridComponent", filePath: "library\\photon-grid.component.ts", lineNumber: 104 }); })();
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG9uLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnJhcnkvcGhvdG9uLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixZQUFZLEVBRVosS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQXNCM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFHN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcURHO0FBUUgsTUFBTSxPQUFPLG1CQUFtQjtJQUU1Qix1Q0FBdUM7SUFFdEIsUUFBUSxDQUE4QjtJQUV2RDs7Ozs7T0FLRztJQUVILE9BQU8sR0FBb0IsRUFBRSxDQUFDO0lBRTlCOzs7T0FHRztJQUVILE9BQU8sR0FBOEIsRUFBRSxDQUFDO0lBRXhDOzs7OztPQUtHO0lBRUgsT0FBTyxHQUF5QixFQUFFLENBQUM7SUFFbkMsMEVBQTBFO0lBQ3ZELFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRTNELHNDQUFzQztJQUNuQixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7SUFFdEUseUJBQXlCO0lBQ04sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBRXBFLGdDQUFnQztJQUNiLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBRTFFLDZCQUE2QjtJQUNWLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztJQUV0RSwwQkFBMEI7SUFDUCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7SUFFdEUsaUNBQWlDO0lBQ2Qs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WUFHWSxhQUFhO2tCQUEvQixNQUFNO1lBR1ksV0FBVztrQkFBN0IsTUFBTTtZQUdZLFdBQVc7a0JBQTdCLE1BQU07WUFHWSxhQUFhO2tCQUEvQixNQUFNO1lBR1ksV0FBVztrQkFBN0IsTUFBTTtZQUdZLG1CQUFtQjtrQkFBckMsTUFBTTtZQUdZLFlBQVk7a0JBQTlCLE1BQU07WUFHWSxjQUFjO2tCQUFoQyxNQUFNOztrRkFoRkUsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgR3JpZENvcmUsIEdyaWRFdmVudFR5cGUgfSBmcm9tICdwaG90b24tZ3JpZC1jb3JlJztcblxuaW1wb3J0IHR5cGUge1xuICAgIENlbGxDbGlja2VkRXZlbnQsXG4gICAgQ2VsbFNlbGVjdGlvbkNoYW5nZWRFdmVudCxcbiAgICBDZWxsVmFsdWVDaGFuZ2VkRXZlbnQsXG4gICAgQ29sdW1uTW92ZWRFdmVudCxcbiAgICBDb2x1bW5SZXNpemVkRXZlbnQsXG4gICAgQ29sdW1uc1N0YXRlQ2hhbmdlZEV2ZW50LFxuICAgIENvbHVtblNvcnRlZEV2ZW50LFxuICAgIERhdGFDaGFuZ2VkRXZlbnQsXG4gICAgRXhwb3J0RXZlbnQsXG4gICAgRmlsdGVyQ2hhbmdlZEV2ZW50LFxuICAgIEdyaWRBcGksXG4gICAgR3JpZEV2ZW50TWFwLFxuICAgIEdyaWRPcHRpb25zLFxuICAgIFBhZ2VDaGFuZ2VkRXZlbnQsXG4gICAgUm93Q2xpY2tQYXlsb2FkLFxuICAgIFJvd1NlbGVjdGVkRXZlbnQsXG4gICAgVGhlbWVDaGFuZ2VkRXZlbnQsXG59IGZyb20gJ3Bob3Rvbi1ncmlkLWNvcmUnO1xuXG5pbXBvcnQgeyBSZW5kZXJlckFkYXB0ZXIgfSBmcm9tICcuL2FuZ3VsYXItcmVuZGVyZXIuYWRhcHRlcic7XG5pbXBvcnQgdHlwZSB7Q29sdW1uRGVmIGFzIEdyaWRDb2x1bW5EZWYgfSBmcm9tICcuL2FuZ3VsYXItcmVuZGVyZXIudHlwZXMnO1xuXG4vKipcbiAqIEFuZ3VsYXIgd3JhcHBlciBhcm91bmQgdGhlIGZyYW1ld29yay1hZ25vc3RpYyBQaG90b24gR3JpZCBjb3JlLlxuICpcbiAqIFRoZSBjb21wb25lbnQgb3ducyBhIHNpbmdsZSB7QGxpbmsgR3JpZENvcmV9IGluc3RhbmNlLCBrZWVwcyBpdCBpbiBzeW5jXG4gKiB3aXRoIHRoZSBgY29sdW1uc2AsIGBkYXRhU2V0YCBhbmQgYG9wdGlvbnNgIGlucHV0cywgYW5kIHJlLWVtaXRzIHRoZVxuICogZ3JpZCdzIGludGVybmFsIGV2ZW50cyBhcyBzdHJvbmdseS10eXBlZCBBbmd1bGFyIGBAT3V0cHV0YHMuXG4gKlxuICogQ2VsbC9oZWFkZXIvZWRpdG9yL2V0Yy4gcmVuZGVyZXJzIG1heSBiZSBwbGFpbiBmdW5jdGlvbnMgKHJhd1xuICogYEhUTUxFbGVtZW50YC9gc3RyaW5nYCwgaWRlbnRpY2FsIHRvIHRoZSBjb3JlJ3Mgb3duIEFQSSksIG9yIGRlY2xhcmF0aXZlXG4gKiBBbmd1bGFyIHNwZWNzIOKAlCBgeyBraW5kOiAnY29tcG9uZW50JywgY29tcG9uZW50OiBNeUJhZGdlIH1gIG9yXG4gKiBgeyBraW5kOiAndGVtcGxhdGUnLCB0ZW1wbGF0ZTogbXlUZW1wbGF0ZVJlZiB9YCDigJQgdmlhIHtAbGluayBHcmlkQ29sdW1uRGVmfS5cbiAqIEFuIGludGVybmFsIHtAbGluayBSZW5kZXJlckFkYXB0ZXJ9IG1vdW50cy91bm1vdW50cyB0aG9zZSBmb3IgZXZlcnlcbiAqIHJlbmRlcmVyIGludm9jYXRpb24gYW5kIGRpc3Bvc2VzIHRoZW0gYXMgc29vbiBhcyB0aGUgY29yZSBkaXNjYXJkcyB0aGVpclxuICogaG9zdCBlbGVtZW50LCBzbyB2aXJ0dWFsaXphdGlvbi9yZWN5Y2xpbmcgbmV2ZXIgbGVha3MgY29tcG9uZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHBob3Rvbi1ncmlkXG4gKiAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICogICBbZGF0YVNldF09XCJyb3dzXCJcbiAqICAgW29wdGlvbnNdPVwieyB0aGVtZTogJ2xpZ2h0Jywgc2hvd0NoZWNrYm94ZXM6IHRydWUgfVwiXG4gKiAgIChncmlkUmVhZHkpPVwib25SZWFkeSgkZXZlbnQpXCJcbiAqICAgKHJvd0NsaWNrZWQpPVwib25Sb3dDbGlja2VkKCRldmVudClcIj5cbiAqIDwvcGhvdG9uLWdyaWQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBDb21wb25lbnQtYmFzZWQgY2VsbCByZW5kZXJlclxuICogYGBgdHNcbiAqIGNvbHVtbnM6IEdyaWRDb2x1bW5EZWZbXSA9IFt7XG4gKiAgIGNvbElkOiAnc3RhdHVzJywgZmllbGQ6ICdzdGF0dXMnLCBoZWFkZXI6ICdTdGF0dXMnLCB0eXBlOiAnc3RyaW5nJyxcbiAqICAgcmVuZGVyZXI6IHtcbiAqICAgICBkaXNwbGF5OiB7XG4gKiAgICAgICBraW5kOiAnY29tcG9uZW50JyxcbiAqICAgICAgIGNvbXBvbmVudDogU3RhdHVzQmFkZ2VDb21wb25lbnQsXG4gKiAgICAgICBpbnB1dHM6IChwYXJhbXMpID0+ICh7IHZhbHVlOiBwYXJhbXMudmFsdWUgfSksXG4gKiAgICAgfSxcbiAqICAgfSxcbiAqIH1dO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgVGVtcGxhdGUtYmFzZWQgY2VsbCByZW5kZXJlclxuICogYGBgaHRtbFxuICogPG5nLXRlbXBsYXRlICNzdGF0dXNUcGwgbGV0LXBhcmFtcz5cbiAqICAgPHNwYW4gY2xhc3M9XCJiYWRnZVwiPnt7IHBhcmFtcy52YWx1ZSB9fTwvc3Bhbj5cbiAqIDwvbmctdGVtcGxhdGU+XG4gKiBgYGBcbiAqIGBgYHRzXG4gKiBAVmlld0NoaWxkKCdzdGF0dXNUcGwnKSBzdGF0dXNUcGwhOiBUZW1wbGF0ZVJlZjxSZW5kZXJlckNvbnRleHQ8RGlzcGxheVJlbmRlcmVyUGFyYW1zPj47XG4gKiBjb2x1bW5zOiBHcmlkQ29sdW1uRGVmW10gPSBbe1xuICogICBjb2xJZDogJ3N0YXR1cycsIGZpZWxkOiAnc3RhdHVzJywgaGVhZGVyOiAnU3RhdHVzJywgdHlwZTogJ3N0cmluZycsXG4gKiAgIHJlbmRlcmVyOiB7IGRpc3BsYXk6IHsga2luZDogJ3RlbXBsYXRlJywgdGVtcGxhdGU6IHRoaXMuc3RhdHVzVHBsIH0gfSxcbiAqIH1dO1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGhvdG9uLWdyaWQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGA8ZGl2ICNncmlkSG9zdCBjbGFzcz1cInBob3Rvbi1ncmlkX19ob3N0XCI+PC9kaXY+YCxcbiAgICBzdHlsZVVybDogJy4vcGhvdG9uLWdyaWQuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQaG90b25HcmlkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gICAgLyoqIENvbnRhaW5lciB0aGUgZ3JpZCByZW5kZXJzIGludG8uICovXG4gICAgQFZpZXdDaGlsZCgnZ3JpZEhvc3QnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ3JpZEhvc3QhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKlxuICAgICAqIENvbHVtbiBkZWZpbml0aW9ucy4gQm91bmQgdG8ge0BsaW5rIEdyaWRBcGkuc2V0Q29sdW1uc30gb24gY2hhbmdlLlxuICAgICAqIFByb3ZpZGVkIGFzIGEgZGVkaWNhdGVkIGlucHV0IHJhdGhlciB0aGFuIHRocm91Z2ggYG9wdGlvbnMuY29sdW1uc2AuXG4gICAgICogUmVuZGVyZXIgc2xvdHMgYWNjZXB0IEFuZ3VsYXIgY29tcG9uZW50cy90ZW1wbGF0ZXMgaW4gYWRkaXRpb24gdG9cbiAgICAgKiBwbGFpbiBmdW5jdGlvbnMg4oCUIHNlZSB7QGxpbmsgR3JpZENvbHVtbkRlZn0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zOiBHcmlkQ29sdW1uRGVmW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFJvdyBkYXRhLiBCb3VuZCB0byB7QGxpbmsgR3JpZEFwaS5zZXREYXRhfSBvbiBjaGFuZ2UuIFByb3ZpZGVkIGFzIGFcbiAgICAgKiBkZWRpY2F0ZWQgaW5wdXQgcmF0aGVyIHRoYW4gdGhyb3VnaCBgb3B0aW9ucy5kYXRhYC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGFTZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFJlbWFpbmluZyBncmlkIG9wdGlvbnMgKHRoZW1lLCBzZWxlY3Rpb24sIGVkaXRpbmcsIHBhZ2luYXRpb24sIOKApikuXG4gICAgICogYGNvbHVtbnNgIGFuZCBgZGF0YWAgYXJlIHN1cHBsaWVkIGJ5IHRoZSBkZWRpY2F0ZWQgaW5wdXRzIGFib3ZlIGFuZCBhcmVcbiAgICAgKiBtZXJnZWQgaW4gYXV0b21hdGljYWxseS4gVGhlIGNvcmUgaGFzIG5vIHJ1bnRpbWUgb3B0aW9ucyBzZXR0ZXIsIHNvIGFcbiAgICAgKiBjaGFuZ2UgdG8gdGhpcyBpbnB1dCB0cmFuc3BhcmVudGx5IHJlY3JlYXRlcyB0aGUgZ3JpZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG9wdGlvbnM6IFBhcnRpYWw8R3JpZE9wdGlvbnM+ID0ge307XG5cbiAgICAvKiogRW1pdHRlZCBvbmNlIHRoZSBncmlkIGlzIGNvbnN0cnVjdGVkLCBjYXJyeWluZyBpdHMge0BsaW5rIEdyaWRBcGl9LiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBncmlkUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRBcGk+KCk7XG5cbiAgICAvKiogUm93IGRhdGEgY2hhbmdlZCAoY291bnQgZGVsdGEpLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBkYXRhQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKiBBIHJvdyB3YXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93Q2xpY2tQYXlsb2FkPigpO1xuXG4gICAgLyoqIEEgcm93IHdhcyBkb3VibGUtY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcm93RG91YmxlQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93Q2xpY2tQYXlsb2FkPigpO1xuXG4gICAgLyoqIFJvdyBzZWxlY3Rpb24gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgcm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJvd1NlbGVjdGVkRXZlbnQ+KCk7XG5cbiAgICAvKiogQSBjZWxsIHdhcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBjZWxsQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENsaWNrZWRFdmVudD4oKTtcblxuICAgIC8qKiBBIGNlbGwgd2FzIGRvdWJsZS1jbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBjZWxsRG91YmxlQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENsaWNrZWRFdmVudD4oKTtcblxuICAgIC8qKiBBIGNlbGwgdmFsdWUgd2FzIGNvbW1pdHRlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY2VsbFZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbFZhbHVlQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqIFJhbmdlL2NlbGwgc2VsZWN0aW9uIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNlbGxTZWxlY3Rpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsU2VsZWN0aW9uQ2hhbmdlZEV2ZW50PigpO1xuXG4gICAgLyoqIEEgY29sdW1uIHdhcyByZXNpemVkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5SZXNpemVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5SZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogQSBjb2x1bW4gd2FzIHJlb3JkZXJlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgY29sdW1uTW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtbk1vdmVkRXZlbnQ+KCk7XG5cbiAgICAvKiogU29ydCBzdGF0ZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBzb3J0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uU29ydGVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRmlsdGVyIG1vZGVsIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGZpbHRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKiBQYWdpbmF0aW9uIHBhZ2Ugb3Igc2l6ZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBwYWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUNoYW5nZWRFdmVudD4oKTtcblxuICAgIC8qKiBDb2x1bW4gc3RhdGUgKHdpZHRoL3Zpc2liaWxpdHkvcGluL29yZGVyKSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5zU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5zU3RhdGVDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogQWN0aXZlIHRoZW1lIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHRoZW1lQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGhlbWVDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgICAvKiogQW4gZXhwb3J0IGZpbmlzaGVkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBleHBvcnRDb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXhwb3J0RXZlbnQ+KCk7XG5cbiAgICAvKiogVGhlIGxpdmUgY29yZSBpbnN0YW5jZSwgY3JlYXRlZCBpbiB7QGxpbmsgbmdBZnRlclZpZXdJbml0fS4gKi9cbiAgICBwcml2YXRlIGdyaWQ/OiBHcmlkQ29yZTtcblxuICAgIC8qKiBVbnN1YnNjcmliZSBjYWxsYmFja3MgZm9yIGV2ZXJ5IHdpcmVkIGNvcmUgZXZlbnQ7IGRyYWluZWQgb24gdGVhcmRvd24uICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NlcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgICAvKipcbiAgICAgKiBCcmlkZ2VzIEFuZ3VsYXIgY29tcG9uZW50L3RlbXBsYXRlIHJlbmRlcmVyIHNwZWNzIHRvIHRoZSBjb3JlJ3NcbiAgICAgKiBwbGFpbi1mdW5jdGlvbiBgQ29sdW1uUmVuZGVyZXJNYXBgLiBPd25lZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoaXNcbiAgICAgKiBjb21wb25lbnQgKG5vdCBESS1wcm92aWRlZCkgc28gaXRzIG1vdW50ZWQtdmlldyB0cmFja2luZyBpcyBzY29wZWRcbiAgICAgKiB0byB0aGlzIGdyaWQgaW5zdGFuY2UgYWxvbmUuXG4gICAgICpcbiAgICAgKiBCdWlsdCBleHBsaWNpdGx5IGluIHRoZSBjb25zdHJ1Y3RvciBib2R5IChyYXRoZXIgdGhhbiBhcyBhIGZpZWxkXG4gICAgICogaW5pdGlhbGl6ZXIgcmVmZXJlbmNpbmcgY29uc3RydWN0b3ItcGFyYW1ldGVyIHByb3BlcnRpZXMpIHNvIGl0IGlzbid0XG4gICAgICogc3ViamVjdCB0byBmaWVsZC1pbml0aWFsaXplci12cy1wYXJhbWV0ZXItcHJvcGVydHkgb3JkZXJpbmc6IGF0IHRoaXNcbiAgICAgKiBwb2ludCBgYXBwUmVmYC9gZW52aXJvbm1lbnRJbmplY3RvcmAvYGVsZW1lbnRJbmplY3RvcmAgYXJlIHBsYWluIGxvY2FsXG4gICAgICogY29uc3RydWN0b3IgYXJndW1lbnRzLCBndWFyYW50ZWVkIHRvIGFscmVhZHkgYmUgc2V0LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXJBZGFwdGVyOiBSZW5kZXJlckFkYXB0ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgZWxlbWVudEluamVjdG9yOiBJbmplY3RvcixcbiAgICApIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlckFkYXB0ZXIgPSBuZXcgUmVuZGVyZXJBZGFwdGVyKGFwcFJlZiwgZW52aXJvbm1lbnRJbmplY3RvciwgZWxlbWVudEluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlR3JpZCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy8gSW5pdGlhbCBpbnB1dHMgYXJlIGNvbnN1bWVkIGJ5IGNyZWF0ZUdyaWQoKSBpbiBuZ0FmdGVyVmlld0luaXQuXG4gICAgICAgIGlmICghdGhpcy5ncmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbiBvcHRpb25zIGNoYW5nZSBjYW5ub3QgYmUgYXBwbGllZCBpbmNyZW1lbnRhbGx5IChubyBjb3JlIHNldHRlciksXG4gICAgICAgIC8vIHNvIHJlY3JlYXRlOyB0aGlzIGFscmVhZHkgcmUtc2VlZHMgY29sdW1ucyBhbmQgZGF0YS5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ29wdGlvbnMnXSAmJiAhY2hhbmdlc1snb3B0aW9ucyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlY3JlYXRlR3JpZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSAmJiAhY2hhbmdlc1snY29sdW1ucyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuYXBpLnNldENvbHVtbnModGhpcy5yZW5kZXJlckFkYXB0ZXIuYWRhcHRDb2x1bW5zKHRoaXMuY29sdW1ucykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2RhdGFTZXQnXSAmJiAhY2hhbmdlc1snZGF0YVNldCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuYXBpLnNldERhdGEodGhpcy5kYXRhU2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlYXJkb3duR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKiBCdWlsZHMgdGhlIGNvcmUgZnJvbSB0aGUgY3VycmVudCBpbnB1dHMgYW5kIHdpcmVzIGl0cyBldmVudHMuICovXG4gICAgcHJpdmF0ZSBjcmVhdGVHcmlkKCk6IHZvaWQge1xuICAgICAgICAvLyBNdXN0IGJlIG9ic2VydmluZyAqYmVmb3JlKiB0aGUgY29yZSBtb3VudHMgYW55dGhpbmcsIHNvIGV2ZXJ5XG4gICAgICAgIC8vIHJlbmRlcmVyLXByb2R1Y2VkIGVsZW1lbnQgaXMgdHJhY2tlZCBmb3IgY2xlYW51cCBmcm9tIHRoZSBzdGFydC5cbiAgICAgICAgdGhpcy5yZW5kZXJlckFkYXB0ZXIub2JzZXJ2ZSh0aGlzLmdyaWRIb3N0Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGNvbnN0IG1lcmdlZE9wdGlvbnM6IEdyaWRPcHRpb25zID0ge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5yZW5kZXJlckFkYXB0ZXIuYWRhcHRDb2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGFTZXQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZ3JpZCA9IG5ldyBHcmlkQ29yZSh0aGlzLmdyaWRIb3N0Lm5hdGl2ZUVsZW1lbnQsIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuXG4gICAgICAgIHRoaXMud2lyZUV2ZW50cyhncmlkLmFwaSk7XG5cbiAgICAgICAgLy8gR3JpZENvcmUgZW1pdHMgUkVBRFkgc3luY2hyb25vdXNseSBkdXJpbmcgY29uc3RydWN0aW9uIChiZWZvcmUgd2UgY2FuXG4gICAgICAgIC8vIGF0dGFjaCBhIGxpc3RlbmVyKSwgc28gc3VyZmFjZSB0aGUgcmVhZHkgc2lnbmFsIGV4cGxpY2l0bHkgaGVyZS5cbiAgICAgICAgdGhpcy5ncmlkUmVhZHkuZW1pdChncmlkLmFwaSk7XG4gICAgfVxuXG4gICAgLyoqIERlc3Ryb3lzIHRoZSBjdXJyZW50IGNvcmUsIGRyb3BzIGl0LCBhbmQgYnVpbGRzIGEgZnJlc2ggb25lLiAqL1xuICAgIHByaXZhdGUgcmVjcmVhdGVHcmlkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRlYXJkb3duR3JpZCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZUdyaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlcyBldmVudCBzdWJzY3JpcHRpb25zLCB0aGUgcmVuZGVyZXIgYWRhcHRlciAoc3RvcHBpbmcgaXRzXG4gICAgICogb2JzZXJ2ZXIgYW5kIGRlc3Ryb3lpbmcgZXZlcnkgbW91bnRlZCBjb21wb25lbnQvZW1iZWRkZWQgdmlldyksIGFuZFxuICAgICAqIHRoZSBjb3JlIGluc3RhbmNlIGl0c2VsZiwgaWYgYW55LlxuICAgICAqXG4gICAgICogT3JkZXIgbWF0dGVyczogdGhlIGFkYXB0ZXIgaXMgZGlzcG9zZWQgKmFmdGVyKiBgZ3JpZC5kZXN0cm95KClgIHNvXG4gICAgICogYW55IHRlYXJkb3duLXRpbWUgRE9NIHJlbW92YWwgaXMgaXJyZWxldmFudCAoZGlzcG9zZSgpIHVuY29uZGl0aW9uYWxseVxuICAgICAqIGRlc3Ryb3lzIGFsbCByZW1haW5pbmcgbW91bnRzIHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiB0aGVcbiAgICAgKiBNdXRhdGlvbk9ic2VydmVyIGhhdmluZyBmbHVzaGVkKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHRlYXJkb3duR3JpZCgpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBkaXNwb3NlIG9mIHRoaXMuZGlzcG9zZXJzKSB7XG4gICAgICAgICAgICBkaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwb3NlcnMubGVuZ3RoID0gMDtcblxuICAgICAgICB0aGlzLmdyaWQ/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5ncmlkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXJBZGFwdGVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogU3Vic2NyaWJlcyBldmVyeSBjb3JlIGV2ZW50IHRvIGl0cyBjb3JyZXNwb25kaW5nIGBAT3V0cHV0YCBlbWl0dGVyLiAqL1xuICAgIHByaXZhdGUgd2lyZUV2ZW50cyhhcGk6IEdyaWRBcGkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkRBVEFfQ0hBTkdFRCwgdGhpcy5kYXRhQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5ST1dfQ0xJQ0tFRCwgdGhpcy5yb3dDbGlja2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLlJPV19ET1VCTEVfQ0xJQ0tFRCwgdGhpcy5yb3dEb3VibGVDbGlja2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLlJPV19TRUxFQ1RFRCwgdGhpcy5yb3dTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5DRUxMX0NMSUNLRUQsIHRoaXMuY2VsbENsaWNrZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuQ0VMTF9ET1VCTEVfQ0xJQ0tFRCwgdGhpcy5jZWxsRG91YmxlQ2xpY2tlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5DRUxMX1ZBTFVFX0NIQU5HRUQsIHRoaXMuY2VsbFZhbHVlQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5DRUxMX1NFTEVDVElPTl9DSEFOR0VELCB0aGlzLmNlbGxTZWxlY3Rpb25DaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLkNPTFVNTl9SRVNJWkVELCB0aGlzLmNvbHVtblJlc2l6ZWQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShhcGksIEdyaWRFdmVudFR5cGUuQ09MVU1OX01PVkVELCB0aGlzLmNvbHVtbk1vdmVkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLlNPUlRfQ0hBTkdFRCwgdGhpcy5zb3J0Q2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5GSUxURVJfQ0hBTkdFRCwgdGhpcy5maWx0ZXJDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoYXBpLCBHcmlkRXZlbnRUeXBlLlBBR0VfQ0hBTkdFRCwgdGhpcy5wYWdlQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5DT0xVTU5TX1NUQVRFX0NIQU5HRUQsIHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5USEVNRV9DSEFOR0VELCB0aGlzLnRoZW1lQ2hhbmdlZCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGFwaSwgR3JpZEV2ZW50VHlwZS5FWFBPUlRfQ09NUExFVEUsIHRoaXMuZXhwb3J0Q29tcGxldGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcndhcmRzIGEgc2luZ2xlIHN0cm9uZ2x5LXR5cGVkIGNvcmUgZXZlbnQgdG8gYW4gQW5ndWxhciBlbWl0dGVyIGFuZFxuICAgICAqIHJlY29yZHMgaXRzIHVuc3Vic2NyaWJlIGNhbGxiYWNrLiBUaGUgZ2VuZXJpYyBjb25zdHJhaW50IGd1YXJhbnRlZXMgdGhlXG4gICAgICogZW1pdHRlcidzIHBheWxvYWQgdHlwZSBtYXRjaGVzIHRoZSBldmVudCdzIHBheWxvYWQgaW4ge0BsaW5rIEdyaWRFdmVudE1hcH0uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmU8RSBleHRlbmRzIGtleW9mIEdyaWRFdmVudE1hcD4oXG4gICAgICAgIGFwaTogR3JpZEFwaSxcbiAgICAgICAgZXZlbnQ6IEUsXG4gICAgICAgIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxHcmlkRXZlbnRNYXBbRV0+LFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXNwb3NlID0gYXBpLm9uPEdyaWRFdmVudE1hcFtFXT4oZXZlbnQsIChwYXlsb2FkKSA9PiBlbWl0dGVyLmVtaXQocGF5bG9hZCkpO1xuICAgICAgICB0aGlzLmRpc3Bvc2Vycy5wdXNoKGRpc3Bvc2UpO1xuICAgIH1cbn0iXX0=
@@ -0,0 +1,23 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { PhotonGridComponent } from './photon-grid.component';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Convenience NgModule for consumers that are not yet on standalone APIs.
6
+ * {@link PhotonGridComponent} is itself standalone; this module simply
7
+ * imports and re-exports it so it can be dropped into an NgModule's
8
+ * `imports`/`exports` and used in that module's templates.
9
+ */
10
+ export class PhotonGridModule {
11
+ static ɵfac = function PhotonGridModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PhotonGridModule)(); };
12
+ static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: PhotonGridModule });
13
+ static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({});
14
+ }
15
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhotonGridModule, [{
16
+ type: NgModule,
17
+ args: [{
18
+ imports: [PhotonGridComponent],
19
+ exports: [PhotonGridComponent],
20
+ }]
21
+ }], null, null); })();
22
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(PhotonGridModule, { imports: [PhotonGridComponent], exports: [PhotonGridComponent] }); })();
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG9uLWdyaWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYnJhcnkvcGhvdG9uLWdyaWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRTlEOzs7OztHQUtHO0FBS0gsTUFBTSxPQUFPLGdCQUFnQjswR0FBaEIsZ0JBQWdCOzREQUFoQixnQkFBZ0I7OztpRkFBaEIsZ0JBQWdCO2NBSjVCLFFBQVE7ZUFBQztnQkFDTixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDOUIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7YUFDakM7O3dGQUNZLGdCQUFnQixjQUhmLG1CQUFtQixhQUNuQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQaG90b25HcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9waG90b24tZ3JpZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIE5nTW9kdWxlIGZvciBjb25zdW1lcnMgdGhhdCBhcmUgbm90IHlldCBvbiBzdGFuZGFsb25lIEFQSXMuXG4gKiB7QGxpbmsgUGhvdG9uR3JpZENvbXBvbmVudH0gaXMgaXRzZWxmIHN0YW5kYWxvbmU7IHRoaXMgbW9kdWxlIHNpbXBseVxuICogaW1wb3J0cyBhbmQgcmUtZXhwb3J0cyBpdCBzbyBpdCBjYW4gYmUgZHJvcHBlZCBpbnRvIGFuIE5nTW9kdWxlJ3NcbiAqIGBpbXBvcnRzYC9gZXhwb3J0c2AgYW5kIHVzZWQgaW4gdGhhdCBtb2R1bGUncyB0ZW1wbGF0ZXMuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1Bob3RvbkdyaWRDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtQaG90b25HcmlkQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgUGhvdG9uR3JpZE1vZHVsZSB7fVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG9uLWdyaWQtYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waG90b24tZ3JpZC1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Public API surface of photon-grid-angular.
3
+ */
4
+ export * from './library/photon-grid.component';
5
+ export * from './library/photon-grid.module';
6
+ export * from './library/angular-renderer.types';
7
+ export { GridEventType } from 'photon-grid-core';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFRakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgc3VyZmFjZSBvZiBwaG90b24tZ3JpZC1hbmd1bGFyLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGlicmFyeS9waG90b24tZ3JpZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWJyYXJ5L3Bob3Rvbi1ncmlkLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYnJhcnkvYW5ndWxhci1yZW5kZXJlci50eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCB0aGUgbW9zdCBjb21tb25seSBuZWVkZWQgY29yZSB0eXBlcyBzbyBjb25zdW1lcnMgY2FuIGJpbmQgdGhlXG4vLyB3cmFwcGVyIHdpdGhvdXQgaW1wb3J0aW5nIHBob3Rvbi1ncmlkLWNvcmUgZGlyZWN0bHkuXG5leHBvcnQgdHlwZSB7XG4gICAgR3JpZEFwaSxcbiAgICBHcmlkT3B0aW9ucyxcbn0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG5leHBvcnQgeyBHcmlkRXZlbnRUeXBlIH0gZnJvbSAncGhvdG9uLWdyaWQtY29yZSc7XG4iXX0=