@one-grid-core/angular 0.1.0-beta.5
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 +168 -0
- package/esm2022/lib/components/one-grid/one-grid.component.mjs +388 -0
- package/esm2022/lib/components/one-grid-body/one-grid-body.component.mjs +570 -0
- package/esm2022/lib/components/one-grid-cell-currency/one-grid-cell-currency.component.mjs +90 -0
- package/esm2022/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.mjs +31 -0
- package/esm2022/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.mjs +67 -0
- package/esm2022/lib/components/one-grid-checkbox/one-grid-checkbox.component.mjs +47 -0
- package/esm2022/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.mjs +62 -0
- package/esm2022/lib/components/one-grid-header/one-grid-header.component.mjs +140 -0
- package/esm2022/lib/components/one-grid-pagination/one-grid-pagination.component.mjs +76 -0
- package/esm2022/lib/components/one-grid-row-action/one-grid-row-action.component.mjs +193 -0
- package/esm2022/lib/components/one-grid-status/one-grid-status.component.mjs +35 -0
- package/esm2022/lib/core/directives/one-cell-input-validator.directive.mjs +71 -0
- package/esm2022/lib/core/directives/one-cell-renderer-component.directive.mjs +77 -0
- package/esm2022/lib/core/directives/one-cell-text-expand.directive.mjs +82 -0
- package/esm2022/lib/core/instants/one-grid-api.class.mjs +591 -0
- package/esm2022/lib/core/instants/one-row-node.class.mjs +90 -0
- package/esm2022/lib/core/models/constants/one-pagination.constant.mjs +2 -0
- package/esm2022/lib/core/models/one-column-def-types.model.mjs +2 -0
- package/esm2022/lib/core/models/one-event-types.model.mjs +2 -0
- package/esm2022/lib/core/models/one-filter.model.mjs +2 -0
- package/esm2022/lib/core/models/one-grid-types.model.mjs +2 -0
- package/esm2022/lib/core/models/one-master-detail.model.mjs +2 -0
- package/esm2022/lib/core/models/one-pagination-types.model.mjs +2 -0
- package/esm2022/lib/core/models/one-row.model.mjs +13 -0
- package/esm2022/lib/core/models/one-tree-data.model.mjs +2 -0
- package/esm2022/lib/core/models/one-validation.model.mjs +2 -0
- package/esm2022/lib/core/pipes/cell-action-button-enable.pipe.mjs +21 -0
- package/esm2022/lib/core/pipes/cell-action-button-visible.pipe.mjs +17 -0
- package/esm2022/lib/core/pipes/cell-disable-resolver.pipe.mjs +26 -0
- package/esm2022/lib/core/pipes/cell-editable.pipe.mjs +30 -0
- package/esm2022/lib/core/pipes/cell-field-value-empty.pipe.mjs +21 -0
- package/esm2022/lib/core/pipes/cell-field-value.pipe.mjs +25 -0
- package/esm2022/lib/core/pipes/cell-field.pipe.mjs +20 -0
- package/esm2022/lib/core/pipes/cell-invalid.pipe.mjs +21 -0
- package/esm2022/lib/core/pipes/cell-key.pipe.mjs +21 -0
- package/esm2022/lib/core/pipes/cell-level-padding.pipe.mjs +18 -0
- package/esm2022/lib/core/pipes/cell-number-value.pipe.mjs +19 -0
- package/esm2022/lib/core/pipes/cell-selected.pipe.mjs +20 -0
- package/esm2022/lib/core/pipes/cell-state-group-renderer.pipe.mjs +21 -0
- package/esm2022/lib/core/pipes/cell-state-renderer.pipe.mjs +24 -0
- package/esm2022/lib/core/pipes/cell-value-getter.pipe.mjs +23 -0
- package/esm2022/lib/core/pipes/column-sort-state.pipe.mjs +19 -0
- package/esm2022/lib/core/pipes/header-checkbox-checked.pipe.mjs +17 -0
- package/esm2022/lib/core/pipes/header-checkbox-disabled.pipe.mjs +17 -0
- package/esm2022/lib/core/pipes/header-checkbox-indeterminate.pipe.mjs +17 -0
- package/esm2022/lib/core/services/og-column.service.mjs +81 -0
- package/esm2022/lib/core/services/one-grid-cell.service.mjs +88 -0
- package/esm2022/lib/core/services/one-grid-event.service.mjs +42 -0
- package/esm2022/lib/core/services/one-grid-expansion.service.mjs +40 -0
- package/esm2022/lib/core/services/one-grid-row.service.mjs +29 -0
- package/esm2022/lib/core/services/one-grid-selection.service.mjs +54 -0
- package/esm2022/lib/core/services/one-grid-tree-data.service.mjs +59 -0
- package/esm2022/lib/helpers/one-cell.helper.mjs +42 -0
- package/esm2022/lib/helpers/one-column-def.helper.mjs +28 -0
- package/esm2022/lib/helpers/one-filter.helper.mjs +52 -0
- package/esm2022/lib/helpers/one-validation.helper.mjs +95 -0
- package/esm2022/lib/index.mjs +19 -0
- package/esm2022/lib/one-grid.module.mjs +142 -0
- package/esm2022/one-grid-core-angular.mjs +5 -0
- package/esm2022/public-api.mjs +5 -0
- package/fesm2022/one-grid-core-angular.mjs +3573 -0
- package/fesm2022/one-grid-core-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/one-grid/one-grid.component.d.ts +139 -0
- package/lib/components/one-grid-body/one-grid-body.component.d.ts +176 -0
- package/lib/components/one-grid-cell-currency/one-grid-cell-currency.component.d.ts +27 -0
- package/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.d.ts +16 -0
- package/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.d.ts +21 -0
- package/lib/components/one-grid-checkbox/one-grid-checkbox.component.d.ts +19 -0
- package/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.d.ts +24 -0
- package/lib/components/one-grid-header/one-grid-header.component.d.ts +41 -0
- package/lib/components/one-grid-pagination/one-grid-pagination.component.d.ts +21 -0
- package/lib/components/one-grid-row-action/one-grid-row-action.component.d.ts +59 -0
- package/lib/components/one-grid-status/one-grid-status.component.d.ts +15 -0
- package/lib/core/directives/one-cell-input-validator.directive.d.ts +15 -0
- package/lib/core/directives/one-cell-renderer-component.directive.d.ts +20 -0
- package/lib/core/directives/one-cell-text-expand.directive.d.ts +21 -0
- package/lib/core/instants/one-grid-api.class.d.ts +161 -0
- package/lib/core/instants/one-row-node.class.d.ts +49 -0
- package/lib/core/models/constants/one-pagination.constant.d.ts +1 -0
- package/lib/core/models/one-column-def-types.model.d.ts +139 -0
- package/lib/core/models/one-event-types.model.d.ts +78 -0
- package/lib/core/models/one-filter.model.d.ts +15 -0
- package/lib/core/models/one-grid-types.model.d.ts +48 -0
- package/lib/core/models/one-master-detail.model.d.ts +18 -0
- package/lib/core/models/one-pagination-types.model.d.ts +9 -0
- package/lib/core/models/one-row.model.d.ts +38 -0
- package/lib/core/models/one-tree-data.model.d.ts +9 -0
- package/lib/core/models/one-validation.model.d.ts +9 -0
- package/lib/core/pipes/cell-action-button-enable.pipe.d.ts +8 -0
- package/lib/core/pipes/cell-action-button-visible.pipe.d.ts +9 -0
- package/lib/core/pipes/cell-disable-resolver.pipe.d.ts +9 -0
- package/lib/core/pipes/cell-editable.pipe.d.ts +9 -0
- package/lib/core/pipes/cell-field-value-empty.pipe.d.ts +7 -0
- package/lib/core/pipes/cell-field-value.pipe.d.ts +7 -0
- package/lib/core/pipes/cell-field.pipe.d.ts +7 -0
- package/lib/core/pipes/cell-invalid.pipe.d.ts +9 -0
- package/lib/core/pipes/cell-key.pipe.d.ts +7 -0
- package/lib/core/pipes/cell-level-padding.pipe.d.ts +7 -0
- package/lib/core/pipes/cell-number-value.pipe.d.ts +7 -0
- package/lib/core/pipes/cell-selected.pipe.d.ts +7 -0
- package/lib/core/pipes/cell-state-group-renderer.pipe.d.ts +9 -0
- package/lib/core/pipes/cell-state-renderer.pipe.d.ts +8 -0
- package/lib/core/pipes/cell-value-getter.pipe.d.ts +9 -0
- package/lib/core/pipes/column-sort-state.pipe.d.ts +8 -0
- package/lib/core/pipes/header-checkbox-checked.pipe.d.ts +9 -0
- package/lib/core/pipes/header-checkbox-disabled.pipe.d.ts +9 -0
- package/lib/core/pipes/header-checkbox-indeterminate.pipe.d.ts +9 -0
- package/lib/core/services/og-column.service.d.ts +22 -0
- package/lib/core/services/one-grid-cell.service.d.ts +29 -0
- package/lib/core/services/one-grid-event.service.d.ts +17 -0
- package/lib/core/services/one-grid-expansion.service.d.ts +13 -0
- package/lib/core/services/one-grid-row.service.d.ts +15 -0
- package/lib/core/services/one-grid-selection.service.d.ts +17 -0
- package/lib/core/services/one-grid-tree-data.service.d.ts +10 -0
- package/lib/helpers/one-cell.helper.d.ts +26 -0
- package/lib/helpers/one-column-def.helper.d.ts +17 -0
- package/lib/helpers/one-filter.helper.d.ts +20 -0
- package/lib/helpers/one-validation.helper.d.ts +21 -0
- package/lib/index.d.ts +18 -0
- package/lib/one-grid.module.d.ts +45 -0
- package/package.json +48 -0
- package/public-api.d.ts +1 -0
- package/scss/_one-grid.scss +999 -0
package/README.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# OneGrid
|
|
2
|
+
|
|
3
|
+
A feature-rich Angular data grid component with tree data, master/detail rows, inline editing, row/cell selection, pagination, and virtual scrolling.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @one-grid-core/angular
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Peer dependencies (installed alongside your app):
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @angular/cdk @ng-bootstrap/ng-bootstrap lucide-angular
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Requires Angular 17 or newer.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Import the module:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { OneGridModule } from '@one-grid-core/angular';
|
|
25
|
+
|
|
26
|
+
@NgModule({
|
|
27
|
+
imports: [OneGridModule],
|
|
28
|
+
})
|
|
29
|
+
export class AppModule {}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use the component:
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<one-grid
|
|
36
|
+
[rowData]="rows"
|
|
37
|
+
[columnDefs]="columnDefs"
|
|
38
|
+
[defaultColumnDef]="defaultColumnDef"
|
|
39
|
+
(onGridReady)="onGridReady($event)"
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import { OneColumnDef, OneGridReadyEvent } from '@one-grid-core/angular';
|
|
45
|
+
|
|
46
|
+
export class AppComponent {
|
|
47
|
+
rows = [{ make: 'Toyota', model: 'Celica', price: 35000 }];
|
|
48
|
+
|
|
49
|
+
columnDefs: OneColumnDef<any>[] = [
|
|
50
|
+
{ field: 'make' },
|
|
51
|
+
{ field: 'model' },
|
|
52
|
+
{ field: 'price' },
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
defaultColumnDef: OneColumnDef<any> = { resizable: true, sortable: true };
|
|
56
|
+
|
|
57
|
+
onGridReady(event: OneGridReadyEvent) {
|
|
58
|
+
// event.api gives programmatic access to the grid
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Styles
|
|
64
|
+
|
|
65
|
+
Import the theme in your global `styles.scss`:
|
|
66
|
+
|
|
67
|
+
```scss
|
|
68
|
+
@use "@one-grid-core/angular/scss/one-grid";
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The theme is self-contained: it renders with neutral defaults on its own, and automatically picks up your Bootstrap design tokens (`--bs-*` CSS variables) when Bootstrap is present.
|
|
72
|
+
|
|
73
|
+
## Theming
|
|
74
|
+
|
|
75
|
+
Every visual value is exposed through a layered token system, so you can customize at the level that fits:
|
|
76
|
+
|
|
77
|
+
### 1. Runtime CSS custom properties (recommended)
|
|
78
|
+
|
|
79
|
+
Set `--one-grid-*` variables anywhere — they inherit like normal CSS variables. No recompile needed, and they can change at runtime (theme switcher, dark mode).
|
|
80
|
+
|
|
81
|
+
```css
|
|
82
|
+
/* Globally */
|
|
83
|
+
:root {
|
|
84
|
+
--one-grid-primary: #6d28d9;
|
|
85
|
+
--one-grid-cell-height: 34px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Dark mode */
|
|
89
|
+
.theme-dark {
|
|
90
|
+
--one-grid-body-bg: #1e1e1e;
|
|
91
|
+
--one-grid-header-bg: #262626;
|
|
92
|
+
--one-grid-row-odd-bg: #1e1e1e;
|
|
93
|
+
--one-grid-row-even-bg: #242424;
|
|
94
|
+
--one-grid-text-color: #e5e5e5;
|
|
95
|
+
--one-grid-border-color: #3a3a3a;
|
|
96
|
+
--one-grid-input-bg: #2a2a2a;
|
|
97
|
+
--one-grid-pagination-bg: #1e1e1e;
|
|
98
|
+
--one-grid-pagination-btn-color: #e5e5e5;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* A single compact grid instance */
|
|
102
|
+
one-grid.compact {
|
|
103
|
+
--one-grid-cell-height: 24px;
|
|
104
|
+
--one-grid-header-cell-height: 28px;
|
|
105
|
+
--one-grid-font-size: 11px;
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 2. Compile-time Sass configuration
|
|
110
|
+
|
|
111
|
+
Every Sass variable is declared `!default`, so you can configure the module:
|
|
112
|
+
|
|
113
|
+
```scss
|
|
114
|
+
@use "@one-grid-core/angular/scss/one-grid" with (
|
|
115
|
+
$cell-height: 36px,
|
|
116
|
+
$og-primary: #6d28d9,
|
|
117
|
+
$prefix: "bs-" // prefix of your design system's CSS variables
|
|
118
|
+
);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Legacy `@import` with pre-defined variables also still works.
|
|
122
|
+
|
|
123
|
+
### Available tokens
|
|
124
|
+
|
|
125
|
+
| Token (`--one-grid-*`) | Default | Purpose |
|
|
126
|
+
| --- | --- | --- |
|
|
127
|
+
| `header-bg` | `var(--bs-tertiary-bg, #f8f9fa)` | Header background |
|
|
128
|
+
| `body-bg` | `var(--bs-card-bg, #fff)` | Body background |
|
|
129
|
+
| `row-odd-bg` / `row-even-bg` | card / body bg | Zebra striping |
|
|
130
|
+
| `border-color` | `var(--bs-border-color, #dee2e6)` | All borders and separators |
|
|
131
|
+
| `text-color` | `var(--bs-body-color, #212529)` | Cell and header text |
|
|
132
|
+
| `font-size` | `12px` | Grid font size |
|
|
133
|
+
| `hover-bg` | primary at 8% | Row hover |
|
|
134
|
+
| `selected-bg` | primary at 8% | Selected row |
|
|
135
|
+
| `cell-selected-bg` | primary at 16% | Selected cell |
|
|
136
|
+
| `cell-selected-flash-bg` | primary at 60% | Copy-feedback flash |
|
|
137
|
+
| `header-cell-height` | `34px` | Header row height |
|
|
138
|
+
| `cell-height` | `30px` | Data row height (density) |
|
|
139
|
+
| `cell-padding` | `0 10px` | Cell padding |
|
|
140
|
+
| `cell-item-space` | `8px` | Spacing between in-cell items |
|
|
141
|
+
| `cell-line-height` | `1.2` | Text line height |
|
|
142
|
+
| `action-btn-size` | `20px` | Row action buttons, checkboxes, icons |
|
|
143
|
+
| `action-btn-radius` | `4px` | Small control corner radius |
|
|
144
|
+
| `border-radius` | `0` | Outer grid corner radius |
|
|
145
|
+
| `input-bg` | `var(--bs-input-bg, #fff)` | Inline cell editor background |
|
|
146
|
+
| `pagination-bg` / `pagination-btn-color` / `pagination-height` | card bg / body color / `40px` | Pagination bar |
|
|
147
|
+
| `primary` / `success` / `warning` / `danger` / `info` | Bootstrap accents | Accent colors |
|
|
148
|
+
| `on-accent` | `#fff` | Text/icons on accent fills |
|
|
149
|
+
| `primary-ink` | `var(--tl-accent-ink, #fff)` | Ink on the primary fill |
|
|
150
|
+
| `primary-subtle-bg` / `success-subtle-bg` / `danger-subtle-bg` / `info-subtle-bg` | accents at 8–15% | Subtle state fills |
|
|
151
|
+
| `drop-valid-bg` / `drop-invalid-bg` | success/danger at 10% | Drag-and-drop targets |
|
|
152
|
+
| `menu-shadow` | `var(--bs-box-shadow-lg, …)` | Cell option menu elevation |
|
|
153
|
+
|
|
154
|
+
UX guidance when customizing: keep `cell-height` ≥ 24px so click targets stay usable, keep text/background pairs at a WCAG contrast of at least 4.5:1, and derive hover/selected states from your primary color at low opacity so they remain distinguishable in both light and dark themes.
|
|
155
|
+
|
|
156
|
+
## Features
|
|
157
|
+
|
|
158
|
+
- Column definitions with value getters, cell renderers, and validation
|
|
159
|
+
- Tree data with expand/collapse and auto group columns
|
|
160
|
+
- Master/detail nested grids
|
|
161
|
+
- Inline cell editing with input validation
|
|
162
|
+
- Row and cell selection, header checkbox select-all
|
|
163
|
+
- Pagination and virtual scrolling (Angular CDK)
|
|
164
|
+
- Row action buttons and cell option menus
|
|
165
|
+
|
|
166
|
+
## License
|
|
167
|
+
|
|
168
|
+
MIT
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { OneGridApi } from '../../core/instants/one-grid-api.class';
|
|
3
|
+
import { OneGridEventService } from '../../core/services/one-grid-event.service';
|
|
4
|
+
import { OneGridSelectionService } from '../../core/services/one-grid-selection.service';
|
|
5
|
+
import { fromEvent, Subject, Subscription } from 'rxjs';
|
|
6
|
+
import { OneGridExpansionService } from '../../core/services/one-grid-expansion.service';
|
|
7
|
+
import { OneGridRowService } from '../../core/services/one-grid-row.service';
|
|
8
|
+
import { OneGridCellService } from '../../core/services/one-grid-cell.service';
|
|
9
|
+
import { OgColumnService } from '../../core/services/og-column.service';
|
|
10
|
+
import _ from 'lodash';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../../core/instants/one-grid-api.class";
|
|
13
|
+
import * as i2 from "../../core/services/one-grid-event.service";
|
|
14
|
+
import * as i3 from "../one-grid-header/one-grid-header.component";
|
|
15
|
+
import * as i4 from "../one-grid-body/one-grid-body.component";
|
|
16
|
+
import * as i5 from "../one-grid-pagination/one-grid-pagination.component";
|
|
17
|
+
export class OneGridComponent {
|
|
18
|
+
constructor(api, eventService, elementRef) {
|
|
19
|
+
this.api = api;
|
|
20
|
+
this.eventService = eventService;
|
|
21
|
+
this.elementRef = elementRef;
|
|
22
|
+
this.rowNumber = false;
|
|
23
|
+
this.allowedEdit = true;
|
|
24
|
+
this.submitted = false;
|
|
25
|
+
this.context = null;
|
|
26
|
+
this.rowData = [];
|
|
27
|
+
this.rowSelection = null;
|
|
28
|
+
this.enableGroupColumnDefs = false;
|
|
29
|
+
this.groupColumnDefs = [];
|
|
30
|
+
this.defaultColumnDef = {};
|
|
31
|
+
this.columnDefs = [];
|
|
32
|
+
// RXJS Properties
|
|
33
|
+
this.gridCopy$ = new Subject();
|
|
34
|
+
/**
|
|
35
|
+
* Master Detail Feature
|
|
36
|
+
*/
|
|
37
|
+
this.gridType = 'master';
|
|
38
|
+
this.masterDetail = false;
|
|
39
|
+
this.masterNode = null;
|
|
40
|
+
/**
|
|
41
|
+
* Tree Data Feature
|
|
42
|
+
*/
|
|
43
|
+
this.treeData = false;
|
|
44
|
+
this.treeDataChildrenField = null;
|
|
45
|
+
this.groupDefaultExpanded = 0;
|
|
46
|
+
/**
|
|
47
|
+
* Bind Row Action Events & Data to Parent
|
|
48
|
+
*/
|
|
49
|
+
this.onGridReady = new EventEmitter();
|
|
50
|
+
this.onRowGotoDetail = new EventEmitter();
|
|
51
|
+
this.onRowAddNew = new EventEmitter();
|
|
52
|
+
this.onRowView = new EventEmitter();
|
|
53
|
+
this.onRowLocation = new EventEmitter();
|
|
54
|
+
this.onRowDocument = new EventEmitter();
|
|
55
|
+
this.onRowCopy = new EventEmitter();
|
|
56
|
+
this.onRowDelete = new EventEmitter();
|
|
57
|
+
this.onRowGotoList = new EventEmitter();
|
|
58
|
+
this.onRowEdit = new EventEmitter();
|
|
59
|
+
this.onRowPrint = new EventEmitter();
|
|
60
|
+
this.onRowHistory = new EventEmitter();
|
|
61
|
+
this.onRowOption = new EventEmitter();
|
|
62
|
+
this.onRowLanguage = new EventEmitter();
|
|
63
|
+
this.onRowSelection = new EventEmitter();
|
|
64
|
+
this.onShiftDoubleClick = new EventEmitter();
|
|
65
|
+
this.rowCountChanged = new EventEmitter();
|
|
66
|
+
this.selectionChanged = new EventEmitter();
|
|
67
|
+
this.expansionChanged = new EventEmitter();
|
|
68
|
+
// For context menu option
|
|
69
|
+
this.cellOptionSelect = new EventEmitter();
|
|
70
|
+
this.onRowCellOption = new EventEmitter();
|
|
71
|
+
/**
|
|
72
|
+
* Bind One Grid Pagination Feature
|
|
73
|
+
*/
|
|
74
|
+
this.pagination = false;
|
|
75
|
+
this.goToFirst = new EventEmitter();
|
|
76
|
+
this.goToPrevious = new EventEmitter();
|
|
77
|
+
this.goToNext = new EventEmitter();
|
|
78
|
+
this.goToLast = new EventEmitter();
|
|
79
|
+
this.pageSizeChange = new EventEmitter();
|
|
80
|
+
/**
|
|
81
|
+
* One Grid Properties
|
|
82
|
+
*/
|
|
83
|
+
this.bodyScrollLeft = 0;
|
|
84
|
+
this._oneRowNumberColumnDef = null;
|
|
85
|
+
this.subscriptions = new Subscription();
|
|
86
|
+
}
|
|
87
|
+
ngOnChanges(changes) {
|
|
88
|
+
if (changes['masterNode'] && changes['masterNode'].isFirstChange) {
|
|
89
|
+
if (this.masterDetail && this.masterNode.expanded && this.gridType === 'detail') {
|
|
90
|
+
setTimeout(() => this.api.setRowData([...this.masterNode.detailRowData]));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (changes["rowData"] && !changes["rowData"]?.firstChange) {
|
|
94
|
+
this.treeData || this.masterDetail ? this.api.updateRowData(this.rowData) : this.api.setRowData(this.rowData);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
ngOnInit() {
|
|
98
|
+
/**
|
|
99
|
+
* Init Row Number Column Def
|
|
100
|
+
*/
|
|
101
|
+
if (this.rowNumber) {
|
|
102
|
+
this._oneRowNumberColumnDef = {
|
|
103
|
+
groupId: this.columnDefs[0]?.groupId ?? null,
|
|
104
|
+
field: '_oneRowNumber',
|
|
105
|
+
headerName: 'Nº',
|
|
106
|
+
resizable: true,
|
|
107
|
+
headerStyle: {
|
|
108
|
+
textAlign: 'center',
|
|
109
|
+
display: 'flex',
|
|
110
|
+
justifyContent: 'center',
|
|
111
|
+
alignItem: 'center'
|
|
112
|
+
},
|
|
113
|
+
alignContent: 'right',
|
|
114
|
+
cellClass: 'fw-bold',
|
|
115
|
+
width: 60,
|
|
116
|
+
minWidth: 40,
|
|
117
|
+
maxWidth: 200
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Initialize One Grid API
|
|
122
|
+
*/
|
|
123
|
+
this.api.init(this.gridType, this.rowSelection, this.columnDefs, this.defaultColumnDef, this.context, this.masterDetail, this.detailCellRendererParams, this.detailRendererComponent, this.treeData, this.groupColumnDefs);
|
|
124
|
+
/**
|
|
125
|
+
* Setup Master Detail Configuration
|
|
126
|
+
*/
|
|
127
|
+
if (this.masterDetail) {
|
|
128
|
+
this.api.setGroupDefaultExpanded(this.groupDefaultExpanded);
|
|
129
|
+
this.api.setGetDetailRowData(this.detailCellRendererParams?.getDetailRowData ?? null);
|
|
130
|
+
if (this.rowNumber) {
|
|
131
|
+
const columnDefs = _.concat(this._oneRowNumberColumnDef, this.columnDefs);
|
|
132
|
+
setTimeout(() => this.api.setColumnDefs(columnDefs));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Setup Tree Data Configuration
|
|
137
|
+
*/
|
|
138
|
+
if (this.treeData) {
|
|
139
|
+
this.gridType = 'tree';
|
|
140
|
+
const columnDefs = this.rowNumber ? _.concat(this._oneRowNumberColumnDef, this.autoGroupColumnDef, this.columnDefs) : _.concat(this.autoGroupColumnDef, this.columnDefs);
|
|
141
|
+
this.api.setTreeDataChildrenField(this.treeDataChildrenField);
|
|
142
|
+
this.api.setGroupDefaultExpanded(this.groupDefaultExpanded);
|
|
143
|
+
setTimeout(() => this.api.setColumnDefs(columnDefs));
|
|
144
|
+
}
|
|
145
|
+
// Listen Selection Changed Event
|
|
146
|
+
this.subscriptions.add(this.eventService.addEventListener('selectionChanged', (payload) => {
|
|
147
|
+
this.selectionChanged.emit(payload);
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
ngAfterViewInit() {
|
|
151
|
+
const headerViewport = this.elementRef.nativeElement.querySelector('.one-grid-header-column');
|
|
152
|
+
const bodyViewport = this.elementRef.nativeElement.querySelector('.one-grid-body-viewport');
|
|
153
|
+
// Listen Scroll Event Changed
|
|
154
|
+
this.subscriptions.add(fromEvent(bodyViewport, 'scroll').subscribe(() => {
|
|
155
|
+
if (headerViewport) {
|
|
156
|
+
headerViewport.scrollLeft = bodyViewport.scrollLeft;
|
|
157
|
+
}
|
|
158
|
+
}));
|
|
159
|
+
/**
|
|
160
|
+
* Emit Grid Ready Event
|
|
161
|
+
*/
|
|
162
|
+
this.onGridReady.emit({ api: this.api });
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Handle Body Scroll Event
|
|
166
|
+
*/
|
|
167
|
+
onBodyScroll(scrollLeft) {
|
|
168
|
+
this.bodyScrollLeft = scrollLeft;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Handle Ready Event of a nested Master Detail Grid
|
|
172
|
+
*/
|
|
173
|
+
onDetailGridReady(params) {
|
|
174
|
+
params.api.setRowData(this.masterNode?.detailRowData ?? []);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Passing copy event to grid body
|
|
178
|
+
*/
|
|
179
|
+
onGridCopy(event) {
|
|
180
|
+
this.gridCopy$.next(event);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Bind Row Action Events to Parent Component
|
|
184
|
+
*/
|
|
185
|
+
invokeRowActionGotoDetail(event) {
|
|
186
|
+
this.onRowGotoDetail.emit(event);
|
|
187
|
+
}
|
|
188
|
+
invokeRowActionAddNew(event) {
|
|
189
|
+
this.onRowAddNew.emit(event);
|
|
190
|
+
}
|
|
191
|
+
invokeRowActionView(event) {
|
|
192
|
+
this.onRowView.emit(event);
|
|
193
|
+
}
|
|
194
|
+
invokeRowActionLocation(event) {
|
|
195
|
+
this.onRowLocation.emit(event);
|
|
196
|
+
}
|
|
197
|
+
invokeRowActionDocument(event) {
|
|
198
|
+
this.onRowDocument.emit(event);
|
|
199
|
+
}
|
|
200
|
+
invokeRowActionCopy(event) {
|
|
201
|
+
this.onRowCopy.emit(event);
|
|
202
|
+
}
|
|
203
|
+
invokeRowActionDelete(event) {
|
|
204
|
+
this.onRowDelete.emit(event);
|
|
205
|
+
}
|
|
206
|
+
invokeRowActionGotoList(event) {
|
|
207
|
+
this.onRowGotoList.emit(event);
|
|
208
|
+
}
|
|
209
|
+
invokeRowActionEdit(event) {
|
|
210
|
+
this.onRowEdit.emit(event);
|
|
211
|
+
}
|
|
212
|
+
invokeRowActionPrint(event) {
|
|
213
|
+
this.onRowPrint.emit(event);
|
|
214
|
+
}
|
|
215
|
+
invokeRowActionHistory(event) {
|
|
216
|
+
this.onRowHistory.emit(event);
|
|
217
|
+
}
|
|
218
|
+
invokeRowActionOption(event) {
|
|
219
|
+
this.onRowOption.emit(event);
|
|
220
|
+
}
|
|
221
|
+
invokeRowActionLanguage(event) {
|
|
222
|
+
this.onRowLanguage.emit(event);
|
|
223
|
+
}
|
|
224
|
+
invokeRowActionCellOption(event) {
|
|
225
|
+
this.onRowCellOption.emit(event);
|
|
226
|
+
}
|
|
227
|
+
invokeRowActionSelection(event) {
|
|
228
|
+
this.onRowSelection.emit(event);
|
|
229
|
+
}
|
|
230
|
+
invokeShiftDoubleClick(event) {
|
|
231
|
+
this.onShiftDoubleClick.emit(event);
|
|
232
|
+
}
|
|
233
|
+
invokeRowCountChanged(length) {
|
|
234
|
+
this.rowCountChanged.emit(length);
|
|
235
|
+
}
|
|
236
|
+
cellOptionMenuSelected(event) {
|
|
237
|
+
this.cellOptionSelect.emit(event);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Bing Pagination Events to Parent Component
|
|
241
|
+
*/
|
|
242
|
+
invokeGoToFirst() {
|
|
243
|
+
this.goToFirst.emit();
|
|
244
|
+
}
|
|
245
|
+
invokeGoToPrevious() {
|
|
246
|
+
this.goToPrevious.emit();
|
|
247
|
+
}
|
|
248
|
+
invokeGoToNext() {
|
|
249
|
+
this.goToNext.emit();
|
|
250
|
+
}
|
|
251
|
+
invokeGoToLast() {
|
|
252
|
+
this.goToLast.emit();
|
|
253
|
+
}
|
|
254
|
+
invokePageSizeChange(pageSize) {
|
|
255
|
+
this.pageSizeChange.emit(pageSize);
|
|
256
|
+
}
|
|
257
|
+
invokeExpansionChangedClick(event) {
|
|
258
|
+
this.expansionChanged.emit(event);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Handle Unsubscribe All Event Listenders
|
|
262
|
+
*/
|
|
263
|
+
ngOnDestroy() {
|
|
264
|
+
this.rowData = [];
|
|
265
|
+
this.api.destroy();
|
|
266
|
+
this.subscriptions.unsubscribe();
|
|
267
|
+
}
|
|
268
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridComponent, deps: [{ token: i1.OneGridApi }, { token: i2.OneGridEventService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
269
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: OneGridComponent, selector: "one-grid", inputs: { rowNumber: "rowNumber", allowedEdit: "allowedEdit", submitted: "submitted", context: "context", rowData: "rowData", rowSelection: "rowSelection", enableGroupColumnDefs: "enableGroupColumnDefs", groupColumnDefs: "groupColumnDefs", defaultColumnDef: "defaultColumnDef", columnDefs: "columnDefs", gridType: "gridType", masterDetail: "masterDetail", masterNode: "masterNode", detailCellRendererParams: "detailCellRendererParams", detailRendererComponent: "detailRendererComponent", treeData: "treeData", treeDataChildrenField: "treeDataChildrenField", autoGroupColumnDef: "autoGroupColumnDef", groupDefaultExpanded: "groupDefaultExpanded", pagination: "pagination", paginate: "paginate" }, outputs: { onGridReady: "onGridReady", onRowGotoDetail: "onRowGotoDetail", onRowAddNew: "onRowAddNew", onRowView: "onRowView", onRowLocation: "onRowLocation", onRowDocument: "onRowDocument", onRowCopy: "onRowCopy", onRowDelete: "onRowDelete", onRowGotoList: "onRowGotoList", onRowEdit: "onRowEdit", onRowPrint: "onRowPrint", onRowHistory: "onRowHistory", onRowOption: "onRowOption", onRowLanguage: "onRowLanguage", onRowSelection: "onRowSelection", onShiftDoubleClick: "onShiftDoubleClick", rowCountChanged: "rowCountChanged", selectionChanged: "selectionChanged", expansionChanged: "expansionChanged", cellOptionSelect: "cellOptionSelect", onRowCellOption: "onRowCellOption", goToFirst: "goToFirst", goToPrevious: "goToPrevious", goToNext: "goToNext", goToLast: "goToLast", pageSizeChange: "pageSizeChange" }, providers: [
|
|
270
|
+
OneGridEventService,
|
|
271
|
+
OneGridApi,
|
|
272
|
+
OgColumnService,
|
|
273
|
+
OneGridSelectionService,
|
|
274
|
+
OneGridExpansionService,
|
|
275
|
+
OneGridRowService,
|
|
276
|
+
OneGridCellService
|
|
277
|
+
], viewQueries: [{ propertyName: "ogRef", first: true, predicate: ["ogRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #ogRef class=\"one-grid\" (copy)=\"onGridCopy($event)\" tabindex=\"0\">\n \n <!-- Headers -->\n <one-grid-header\n [api]=\"api\"\n [enableGroupColumnDefs]=\"enableGroupColumnDefs\"\n [allowedEdit]=\"allowedEdit\"\n [scrollLeft]=\"bodyScrollLeft\"\n />\n\n <!-- Body -->\n <one-grid-body\n [gridCopy$]=\"gridCopy$\"\n [rowData]=\"rowData\"\n [api]=\"api\"\n [rowNumber]=\"rowNumber\"\n [pagination]=\"pagination\"\n [allowedEdit]=\"allowedEdit\"\n [submitted]=\"submitted\"\n [context]=\"context\"\n [treeData]=\"treeData\"\n [gridType]=\"gridType\"\n [masterDetail]=\"masterDetail\"\n [masterNode]=\"masterNode\"\n [detailCellRendererParams]=\"detailCellRendererParams\"\n [detailRendererComponent]=\"detailRendererComponent\"\n [detailGridTemplate]=\"detailGridTpl\"\n [treeDataChildrenField]=\"treeDataChildrenField\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [groupDefaultExpanded]=\"groupDefaultExpanded\"\n (expansionChanged)=\"invokeExpansionChangedClick($event)\"\n (onRowGotoDetail)=\"invokeRowActionGotoDetail($event)\"\n (onRowAddNew)=\"invokeRowActionAddNew($event)\"\n (onRowView)=\"invokeRowActionView($event)\"\n (onRowLocation)=\"invokeRowActionLocation($event)\"\n (onRowDocument)=\"invokeRowActionDocument($event)\"\n (onRowCopy)=\"invokeRowActionCopy($event)\"\n (onRowDelete)=\"invokeRowActionDelete($event)\"\n (onRowGotoList)=\"invokeRowActionGotoList($event)\"\n (onRowEdit)=\"invokeRowActionEdit($event)\"\n (onRowPrint)=\"invokeRowActionPrint($event)\"\n (onRowHistory)=\"invokeRowActionHistory($event)\"\n (onRowOption)=\"invokeRowActionOption($event)\"\n (onRowLanguage)=\"invokeRowActionLanguage($event)\"\n (onRowCellOption)=\"invokeRowActionCellOption($event)\"\n (onRowSelection)=\"invokeRowActionSelection($event)\"\n (onShiftDoubleClick)=\"invokeShiftDoubleClick($event)\"\n (rowCountChanged)=\"invokeRowCountChanged($event)\"\n (cellOptionSelect)=\"cellOptionMenuSelected($event)\"\n (bodyScroll)=\"onBodyScroll($event)\"\n />\n \n <!-- Pagination -->\n @if (pagination) {\n <one-grid-pagination\n [paginate]=\"paginate\"\n (goToFirst)=\"invokeGoToFirst()\"\n (goToLast)=\"invokeGoToLast()\"\n (goToPrevious)=\"invokeGoToPrevious()\"\n (goToNext)=\"invokeGoToNext()\"\n (pageSizeChange)=\"invokePageSizeChange($event)\"\n />\n }\n\n <!-- Master Detail Grid template, rendered inside one-grid-body via ngTemplateOutlet.\n Declared here (self-reference) so one-grid-body's template does not need to\n import one-grid, which would create an unsupported compile-time cycle. -->\n <ng-template #detailGridTpl let-node=\"node\">\n <one-grid\n [style.height.px]=\"node.detailRowHeight\"\n [gridType]=\"'detail'\"\n [masterNode]=\"node\"\n [masterDetail]=\"masterDetail\"\n [defaultColumnDef]=\"detailCellRendererParams.detailGridOptions.defaultColumnDef\"\n [columnDefs]=\"detailCellRendererParams.detailGridOptions.columnDefs\"\n [rowData]=\"node?.detailRowData\"\n [rowNumber]=\"detailCellRendererParams.detailGridOptions?.rowNumber\"\n [allowedEdit]=\"allowedEdit\"\n [submitted]=\"submitted\"\n [context]=\"context\"\n (expansionChanged)=\"invokeExpansionChangedClick($event)\"\n (onRowGotoDetail)=\"invokeRowActionGotoDetail($event)\"\n (onRowAddNew)=\"invokeRowActionAddNew($event)\"\n (onRowView)=\"invokeRowActionView($event)\"\n (onRowLocation)=\"invokeRowActionLocation($event)\"\n (onRowDocument)=\"invokeRowActionDocument($event)\"\n (onRowCopy)=\"invokeRowActionCopy($event)\"\n (onRowDelete)=\"invokeRowActionDelete($event)\"\n (onRowGotoList)=\"invokeRowActionGotoList($event)\"\n (onRowEdit)=\"invokeRowActionEdit($event)\"\n (onRowPrint)=\"invokeRowActionPrint($event)\"\n (onRowHistory)=\"invokeRowActionHistory($event)\"\n (onRowOption)=\"invokeRowActionOption($event)\"\n (onRowLanguage)=\"invokeRowActionLanguage($event)\"\n (onRowCellOption)=\"invokeRowActionCellOption($event)\"\n (onGridReady)=\"onDetailGridReady($event)\"\n />\n </ng-template>\n</div>", styles: [""], dependencies: [{ kind: "component", type: OneGridComponent, selector: "one-grid", inputs: ["rowNumber", "allowedEdit", "submitted", "context", "rowData", "rowSelection", "enableGroupColumnDefs", "groupColumnDefs", "defaultColumnDef", "columnDefs", "gridType", "masterDetail", "masterNode", "detailCellRendererParams", "detailRendererComponent", "treeData", "treeDataChildrenField", "autoGroupColumnDef", "groupDefaultExpanded", "pagination", "paginate"], outputs: ["onGridReady", "onRowGotoDetail", "onRowAddNew", "onRowView", "onRowLocation", "onRowDocument", "onRowCopy", "onRowDelete", "onRowGotoList", "onRowEdit", "onRowPrint", "onRowHistory", "onRowOption", "onRowLanguage", "onRowSelection", "onShiftDoubleClick", "rowCountChanged", "selectionChanged", "expansionChanged", "cellOptionSelect", "onRowCellOption", "goToFirst", "goToPrevious", "goToNext", "goToLast", "pageSizeChange"] }, { kind: "component", type: i3.OneGridHeaderComponent, selector: "one-grid-header", inputs: ["scrollLeft", "allowedEdit", "enableGroupColumnDefs", "api"] }, { kind: "component", type: i4.OneGridBodyComponent, selector: "one-grid-body", inputs: ["rowData", "rowNumber", "api", "pagination", "allowedEdit", "enableGroupColumnDefs", "submitted", "context", "getRowId", "gridCopy$", "gridType", "masterDetail", "masterNode", "detailRowMaxHeight", "detailCellRendererParams", "detailGridTemplate", "detailRendererComponent", "treeData", "treeDataChildrenField", "autoGroupColumnDef", "groupDefaultExpanded"], outputs: ["onRowGotoDetail", "onRowAddNew", "onRowView", "onRowCopy", "onRowLocation", "onRowDocument", "onRowDelete", "onRowGotoList", "onRowEdit", "onRowPrint", "onRowHistory", "onRowOption", "onRowLanguage", "onRowCellOption", "onRowSelection", "onShiftDoubleClick", "rowCountChanged", "expansionChanged", "bodyScroll", "cellOptionSelect"] }, { kind: "component", type: i5.OneGridPaginationComponent, selector: "one-grid-pagination", inputs: ["paginate"], outputs: ["goToFirst", "goToPrevious", "goToNext", "goToLast", "pageSizeChange"] }] }); }
|
|
278
|
+
}
|
|
279
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridComponent, decorators: [{
|
|
280
|
+
type: Component,
|
|
281
|
+
args: [{ standalone: false, selector: 'one-grid', providers: [
|
|
282
|
+
OneGridEventService,
|
|
283
|
+
OneGridApi,
|
|
284
|
+
OgColumnService,
|
|
285
|
+
OneGridSelectionService,
|
|
286
|
+
OneGridExpansionService,
|
|
287
|
+
OneGridRowService,
|
|
288
|
+
OneGridCellService
|
|
289
|
+
], template: "<div #ogRef class=\"one-grid\" (copy)=\"onGridCopy($event)\" tabindex=\"0\">\n \n <!-- Headers -->\n <one-grid-header\n [api]=\"api\"\n [enableGroupColumnDefs]=\"enableGroupColumnDefs\"\n [allowedEdit]=\"allowedEdit\"\n [scrollLeft]=\"bodyScrollLeft\"\n />\n\n <!-- Body -->\n <one-grid-body\n [gridCopy$]=\"gridCopy$\"\n [rowData]=\"rowData\"\n [api]=\"api\"\n [rowNumber]=\"rowNumber\"\n [pagination]=\"pagination\"\n [allowedEdit]=\"allowedEdit\"\n [submitted]=\"submitted\"\n [context]=\"context\"\n [treeData]=\"treeData\"\n [gridType]=\"gridType\"\n [masterDetail]=\"masterDetail\"\n [masterNode]=\"masterNode\"\n [detailCellRendererParams]=\"detailCellRendererParams\"\n [detailRendererComponent]=\"detailRendererComponent\"\n [detailGridTemplate]=\"detailGridTpl\"\n [treeDataChildrenField]=\"treeDataChildrenField\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [groupDefaultExpanded]=\"groupDefaultExpanded\"\n (expansionChanged)=\"invokeExpansionChangedClick($event)\"\n (onRowGotoDetail)=\"invokeRowActionGotoDetail($event)\"\n (onRowAddNew)=\"invokeRowActionAddNew($event)\"\n (onRowView)=\"invokeRowActionView($event)\"\n (onRowLocation)=\"invokeRowActionLocation($event)\"\n (onRowDocument)=\"invokeRowActionDocument($event)\"\n (onRowCopy)=\"invokeRowActionCopy($event)\"\n (onRowDelete)=\"invokeRowActionDelete($event)\"\n (onRowGotoList)=\"invokeRowActionGotoList($event)\"\n (onRowEdit)=\"invokeRowActionEdit($event)\"\n (onRowPrint)=\"invokeRowActionPrint($event)\"\n (onRowHistory)=\"invokeRowActionHistory($event)\"\n (onRowOption)=\"invokeRowActionOption($event)\"\n (onRowLanguage)=\"invokeRowActionLanguage($event)\"\n (onRowCellOption)=\"invokeRowActionCellOption($event)\"\n (onRowSelection)=\"invokeRowActionSelection($event)\"\n (onShiftDoubleClick)=\"invokeShiftDoubleClick($event)\"\n (rowCountChanged)=\"invokeRowCountChanged($event)\"\n (cellOptionSelect)=\"cellOptionMenuSelected($event)\"\n (bodyScroll)=\"onBodyScroll($event)\"\n />\n \n <!-- Pagination -->\n @if (pagination) {\n <one-grid-pagination\n [paginate]=\"paginate\"\n (goToFirst)=\"invokeGoToFirst()\"\n (goToLast)=\"invokeGoToLast()\"\n (goToPrevious)=\"invokeGoToPrevious()\"\n (goToNext)=\"invokeGoToNext()\"\n (pageSizeChange)=\"invokePageSizeChange($event)\"\n />\n }\n\n <!-- Master Detail Grid template, rendered inside one-grid-body via ngTemplateOutlet.\n Declared here (self-reference) so one-grid-body's template does not need to\n import one-grid, which would create an unsupported compile-time cycle. -->\n <ng-template #detailGridTpl let-node=\"node\">\n <one-grid\n [style.height.px]=\"node.detailRowHeight\"\n [gridType]=\"'detail'\"\n [masterNode]=\"node\"\n [masterDetail]=\"masterDetail\"\n [defaultColumnDef]=\"detailCellRendererParams.detailGridOptions.defaultColumnDef\"\n [columnDefs]=\"detailCellRendererParams.detailGridOptions.columnDefs\"\n [rowData]=\"node?.detailRowData\"\n [rowNumber]=\"detailCellRendererParams.detailGridOptions?.rowNumber\"\n [allowedEdit]=\"allowedEdit\"\n [submitted]=\"submitted\"\n [context]=\"context\"\n (expansionChanged)=\"invokeExpansionChangedClick($event)\"\n (onRowGotoDetail)=\"invokeRowActionGotoDetail($event)\"\n (onRowAddNew)=\"invokeRowActionAddNew($event)\"\n (onRowView)=\"invokeRowActionView($event)\"\n (onRowLocation)=\"invokeRowActionLocation($event)\"\n (onRowDocument)=\"invokeRowActionDocument($event)\"\n (onRowCopy)=\"invokeRowActionCopy($event)\"\n (onRowDelete)=\"invokeRowActionDelete($event)\"\n (onRowGotoList)=\"invokeRowActionGotoList($event)\"\n (onRowEdit)=\"invokeRowActionEdit($event)\"\n (onRowPrint)=\"invokeRowActionPrint($event)\"\n (onRowHistory)=\"invokeRowActionHistory($event)\"\n (onRowOption)=\"invokeRowActionOption($event)\"\n (onRowLanguage)=\"invokeRowActionLanguage($event)\"\n (onRowCellOption)=\"invokeRowActionCellOption($event)\"\n (onGridReady)=\"onDetailGridReady($event)\"\n />\n </ng-template>\n</div>" }]
|
|
290
|
+
}], ctorParameters: () => [{ type: i1.OneGridApi }, { type: i2.OneGridEventService }, { type: i0.ElementRef }], propDecorators: { ogRef: [{
|
|
291
|
+
type: ViewChild,
|
|
292
|
+
args: ['ogRef', { static: true }]
|
|
293
|
+
}], rowNumber: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], allowedEdit: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], submitted: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], context: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}], rowData: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], rowSelection: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], enableGroupColumnDefs: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], groupColumnDefs: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], defaultColumnDef: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], columnDefs: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], gridType: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], masterDetail: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], masterNode: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}], detailCellRendererParams: [{
|
|
320
|
+
type: Input
|
|
321
|
+
}], detailRendererComponent: [{
|
|
322
|
+
type: Input
|
|
323
|
+
}], treeData: [{
|
|
324
|
+
type: Input
|
|
325
|
+
}], treeDataChildrenField: [{
|
|
326
|
+
type: Input
|
|
327
|
+
}], autoGroupColumnDef: [{
|
|
328
|
+
type: Input
|
|
329
|
+
}], groupDefaultExpanded: [{
|
|
330
|
+
type: Input
|
|
331
|
+
}], onGridReady: [{
|
|
332
|
+
type: Output
|
|
333
|
+
}], onRowGotoDetail: [{
|
|
334
|
+
type: Output
|
|
335
|
+
}], onRowAddNew: [{
|
|
336
|
+
type: Output
|
|
337
|
+
}], onRowView: [{
|
|
338
|
+
type: Output
|
|
339
|
+
}], onRowLocation: [{
|
|
340
|
+
type: Output
|
|
341
|
+
}], onRowDocument: [{
|
|
342
|
+
type: Output
|
|
343
|
+
}], onRowCopy: [{
|
|
344
|
+
type: Output
|
|
345
|
+
}], onRowDelete: [{
|
|
346
|
+
type: Output
|
|
347
|
+
}], onRowGotoList: [{
|
|
348
|
+
type: Output
|
|
349
|
+
}], onRowEdit: [{
|
|
350
|
+
type: Output
|
|
351
|
+
}], onRowPrint: [{
|
|
352
|
+
type: Output
|
|
353
|
+
}], onRowHistory: [{
|
|
354
|
+
type: Output
|
|
355
|
+
}], onRowOption: [{
|
|
356
|
+
type: Output
|
|
357
|
+
}], onRowLanguage: [{
|
|
358
|
+
type: Output
|
|
359
|
+
}], onRowSelection: [{
|
|
360
|
+
type: Output
|
|
361
|
+
}], onShiftDoubleClick: [{
|
|
362
|
+
type: Output
|
|
363
|
+
}], rowCountChanged: [{
|
|
364
|
+
type: Output
|
|
365
|
+
}], selectionChanged: [{
|
|
366
|
+
type: Output
|
|
367
|
+
}], expansionChanged: [{
|
|
368
|
+
type: Output
|
|
369
|
+
}], cellOptionSelect: [{
|
|
370
|
+
type: Output
|
|
371
|
+
}], onRowCellOption: [{
|
|
372
|
+
type: Output
|
|
373
|
+
}], pagination: [{
|
|
374
|
+
type: Input
|
|
375
|
+
}], paginate: [{
|
|
376
|
+
type: Input
|
|
377
|
+
}], goToFirst: [{
|
|
378
|
+
type: Output
|
|
379
|
+
}], goToPrevious: [{
|
|
380
|
+
type: Output
|
|
381
|
+
}], goToNext: [{
|
|
382
|
+
type: Output
|
|
383
|
+
}], goToLast: [{
|
|
384
|
+
type: Output
|
|
385
|
+
}], pageSizeChange: [{
|
|
386
|
+
type: Output
|
|
387
|
+
}] } });
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb21wb25lbnRzL29uZS1ncmlkL29uZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC9vbmUtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQXVCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoSyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7QUFrQnZCLE1BQU0sT0FBTyxnQkFBZ0I7SUFxRjNCLFlBQ1ksR0FBZSxFQUNmLFlBQWlDLEVBQ25DLFVBQXNCO1FBRnBCLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDbkMsZUFBVSxHQUFWLFVB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O3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFHRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFLRSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFR5cGUsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lQ29sdW1uRGVmLCBPbmVHcm91cENvbHVtbkRlZiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IE9uZUdyaWRBcGkgfSBmcm9tICcuLi8uLi9jb3JlL2luc3RhbnRzL29uZS1ncmlkLWFwaS5jbGFzcyc7XG5pbXBvcnQgeyBPbmVSb3dOb2RlIH0gZnJvbSAnLi4vLi4vY29yZS9pbnN0YW50cy9vbmUtcm93LW5vZGUuY2xhc3MnO1xuaW1wb3J0IHsgT25lR3JpZFJlYWR5RXZlbnQsIE9uZUdyaWRSb3dBY3Rpb25FdmVudCwgT25lR3JpZFR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9vbmUtZ3JpZC10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyBPbmVHcmlkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9vbmUtZ3JpZC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE9uZVBhZ2luYXRpb25QYXJhbXMgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9vbmUtcGFnaW5hdGlvbi10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyBPbmVHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvb25lLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2VsbE9wdGlvbk1lbnVTZWxlY3RlZEV2ZW50LCBFeHBhbnNpb25DaGFuZ2VkRXZlbnQsIFJvd1NlbGVjdGlvbk1vZGUsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1ldmVudC10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT25lR3JpZEV4cGFuc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWV4cGFuc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9uZURldGFpbENlbGxSZW5kZXJlclBhcmFtcyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1tYXN0ZXItZGV0YWlsLm1vZGVsJztcbmltcG9ydCB7IE9uZUdyaWRSb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9vbmUtZ3JpZC1yb3cuc2VydmljZSc7XG5pbXBvcnQgeyBPbmVHcmlkQ2VsbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWNlbGwuc2VydmljZSc7XG5pbXBvcnQgeyBPZ0NvbHVtblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL29nLWNvbHVtbi5zZXJ2aWNlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9vbmUtdHJlZS1kYXRhLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxuICBzZWxlY3RvcjogJ29uZS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29uZS1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL29uZS1ncmlkLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgT25lR3JpZEV2ZW50U2VydmljZSxcbiAgICBPbmVHcmlkQXBpLFxuICAgIE9nQ29sdW1uU2VydmljZSxcbiAgICBPbmVHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICBPbmVHcmlkRXhwYW5zaW9uU2VydmljZSxcbiAgICBPbmVHcmlkUm93U2VydmljZSxcbiAgICBPbmVHcmlkQ2VsbFNlcnZpY2VcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgT25lR3JpZENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBHZXQgR2VuZXJhbCBEYXRhIGZyb20gUGFyZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCdvZ1JlZicsIHsgc3RhdGljOiB0cnVlIH0pIG9nUmVmITogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcm93TnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsbG93ZWRFZGl0OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbnRleHQ6IGFueSA9IG51bGw7XG4gIEBJbnB1dCgpIHJvd0RhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSByb3dTZWxlY3Rpb246IFJvd1NlbGVjdGlvbk1vZGUgPSBudWxsO1xuXG4gIEBJbnB1dCgpIGVuYWJsZUdyb3VwQ29sdW1uRGVmczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBncm91cENvbHVtbkRlZnM6IE9uZUdyb3VwQ29sdW1uRGVmW10gPSBbXTtcblxuICBASW5wdXQoKSBkZWZhdWx0Q29sdW1uRGVmOiBPbmVDb2x1bW5EZWY8VD4gPSB7fTtcbiAgQElucHV0KCkgY29sdW1uRGVmczogT25lQ29sdW1uRGVmPFQ+W10gPSBbXTtcblxuICAvLyBSWEpTIFByb3BlcnRpZXNcbiAgcHJvdGVjdGVkIGdyaWRDb3B5JCA9IG5ldyBTdWJqZWN0PENsaXBib2FyZEV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBNYXN0ZXIgRGV0YWlsIEZlYXR1cmVcbiAgICovXG4gIEBJbnB1dCgpIGdyaWRUeXBlOiBPbmVHcmlkVHlwZSA9ICdtYXN0ZXInO1xuICBASW5wdXQoKSBtYXN0ZXJEZXRhaWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbWFzdGVyTm9kZTogT25lUm93Tm9kZSA9IG51bGw7XG4gIEBJbnB1dCgpIGRldGFpbENlbGxSZW5kZXJlclBhcmFtczogT25lRGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zO1xuICBASW5wdXQoKSBkZXRhaWxSZW5kZXJlckNvbXBvbmVudDogVHlwZTxPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQ+O1xuXG4gIC8qKlxuICAgKiBUcmVlIERhdGEgRmVhdHVyZVxuICAgKi9cbiAgQElucHV0KCkgdHJlZURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdHJlZURhdGFDaGlsZHJlbkZpZWxkOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBhdXRvR3JvdXBDb2x1bW5EZWY6IE9uZUNvbHVtbkRlZjtcbiAgQElucHV0KCkgZ3JvdXBEZWZhdWx0RXhwYW5kZWQ6IG51bWJlciA9IDA7XG5cbiAgLyoqXG4gICAqIEJpbmQgUm93IEFjdGlvbiBFdmVudHMgJiBEYXRhIHRvIFBhcmVudFxuICAgKi9cbiAgQE91dHB1dCgpIG9uR3JpZFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUmVhZHlFdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uUm93R290b0RldGFpbCA9IG5ldyBFdmVudEVtaXR0ZXI8T25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Sb3dBZGROZXcgPSBuZXcgRXZlbnRFbWl0dGVyPE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uUm93VmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8T25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Sb3dMb2NhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8T25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Sb3dEb2N1bWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8T25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Sb3dDb3B5ID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvblJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8T25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Sb3dHb3RvTGlzdCA9IG5ldyBFdmVudEVtaXR0ZXI8T25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25Sb3dFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvblJvd1ByaW50ID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvblJvd0hpc3RvcnkgPSBuZXcgRXZlbnRFbWl0dGVyPE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPj4oKTtcbiAgQE91dHB1dCgpIG9uUm93T3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvblJvd0xhbmd1YWdlID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvblJvd1NlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8T25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgb25TaGlmdERvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSByb3dDb3VudENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgZXhwYW5zaW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXhwYW5zaW9uQ2hhbmdlZEV2ZW50PFQ+PigpO1xuXG4gIC8vIEZvciBjb250ZXh0IG1lbnUgb3B0aW9uXG4gIEBPdXRwdXQoKSBjZWxsT3B0aW9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsT3B0aW9uTWVudVNlbGVjdGVkRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvblJvd0NlbGxPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPj4oKTtcblxuICAvKipcbiAgICogQmluZCBPbmUgR3JpZCBQYWdpbmF0aW9uIEZlYXR1cmVcbiAgICovXG4gIEBJbnB1dCgpIHBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGFnaW5hdGU6IE9uZVBhZ2luYXRpb25QYXJhbXM7XG4gIEBPdXRwdXQoKSBnb1RvRmlyc3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBnb1RvUHJldmlvdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBnb1RvTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGdvVG9MYXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICogT25lIEdyaWQgUHJvcGVydGllc1xuICAgKi9cbiAgcHJvdGVjdGVkIGJvZHlTY3JvbGxMZWZ0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9vbmVSb3dOdW1iZXJDb2x1bW5EZWY6IE9uZUNvbHVtbkRlZiA9IG51bGw7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgYXBpOiBPbmVHcmlkQXBpLFxuICAgIHByb3RlY3RlZCBldmVudFNlcnZpY2U6IE9uZUdyaWRFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICApIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblxuICAgIGlmIChjaGFuZ2VzWydtYXN0ZXJOb2RlJ10gJiYgY2hhbmdlc1snbWFzdGVyTm9kZSddLmlzRmlyc3RDaGFuZ2UpIHtcblxuICAgICAgaWYgKHRoaXMubWFzdGVyRGV0YWlsICYmIHRoaXMubWFzdGVyTm9kZS5leHBhbmRlZCAmJiB0aGlzLmdyaWRUeXBlID09PSAnZGV0YWlsJykge1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hcGkuc2V0Um93RGF0YShbLi4udGhpcy5tYXN0ZXJOb2RlLmRldGFpbFJvd0RhdGFdKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbXCJyb3dEYXRhXCJdICYmICFjaGFuZ2VzW1wicm93RGF0YVwiXT8uZmlyc3RDaGFuZ2UpIHtcblxuICAgICAgdGhpcy50cmVlRGF0YSB8fCB0aGlzLm1hc3RlckRldGFpbCA/IHRoaXMuYXBpLnVwZGF0ZVJvd0RhdGEodGhpcy5yb3dEYXRhKSA6IHRoaXMuYXBpLnNldFJvd0RhdGEodGhpcy5yb3dEYXRhKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIC8qKlxuICAgICAqIEluaXQgUm93IE51bWJlciBDb2x1bW4gRGVmXG4gICAgICovXG4gICAgaWYgKHRoaXMucm93TnVtYmVyKSB7XG5cbiAgICAgICB0aGlzLl9vbmVSb3dOdW1iZXJDb2x1bW5EZWYgPSB7XG4gICAgICAgICAgZ3JvdXBJZDogdGhpcy5jb2x1bW5EZWZzWzBdPy5ncm91cElkID8/IG51bGwsXG4gICAgICAgICAgZmllbGQ6ICdfb25lUm93TnVtYmVyJyxcbiAgICAgICAgICBoZWFkZXJOYW1lOiAnTsK6JyxcbiAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgaGVhZGVyU3R5bGU6IHtcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICBhbGlnbkl0ZW06ICdjZW50ZXInXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGlnbkNvbnRlbnQ6ICdyaWdodCcsXG4gICAgICAgICAgY2VsbENsYXNzOiAnZnctYm9sZCcsXG4gICAgICAgICAgd2lkdGg6IDYwLFxuICAgICAgICAgIG1pbldpZHRoOiA0MCxcbiAgICAgICAgICBtYXhXaWR0aDogMjAwXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIE9uZSBHcmlkIEFQSVxuICAgICAqL1xuICAgIHRoaXMuYXBpLmluaXQodGhpcy5ncmlkVHlwZSwgdGhpcy5yb3dTZWxlY3Rpb24sIHRoaXMuY29sdW1uRGVmcywgdGhpcy5kZWZhdWx0Q29sdW1uRGVmLCB0aGlzLmNvbnRleHQsIHRoaXMubWFzdGVyRGV0YWlsLCB0aGlzLmRldGFpbENlbGxSZW5kZXJlclBhcmFtcywgdGhpcy5kZXRhaWxSZW5kZXJlckNvbXBvbmVudCwgdGhpcy50cmVlRGF0YSwgdGhpcy5ncm91cENvbHVtbkRlZnMpO1xuXG4gICAgLyoqXG4gICAgICogU2V0dXAgTWFzdGVyIERldGFpbCBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgaWYgKHRoaXMubWFzdGVyRGV0YWlsKSB7XG5cbiAgICAgIHRoaXMuYXBpLnNldEdyb3VwRGVmYXVsdEV4cGFuZGVkKHRoaXMuZ3JvdXBEZWZhdWx0RXhwYW5kZWQpO1xuICAgICAgdGhpcy5hcGkuc2V0R2V0RGV0YWlsUm93RGF0YSh0aGlzLmRldGFpbENlbGxSZW5kZXJlclBhcmFtcz8uZ2V0RGV0YWlsUm93RGF0YSA/PyBudWxsKTtcblxuICAgICAgaWYgKHRoaXMucm93TnVtYmVyKSB7XG5cbiAgICAgICAgY29uc3QgY29sdW1uRGVmcyA9IF8uY29uY2F0KHRoaXMuX29uZVJvd051bWJlckNvbHVtbkRlZiwgdGhpcy5jb2x1bW5EZWZzKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXBpLnNldENvbHVtbkRlZnMoY29sdW1uRGVmcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHVwIFRyZWUgRGF0YSBDb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgaWYgKHRoaXMudHJlZURhdGEpIHtcblxuICAgICAgdGhpcy5ncmlkVHlwZSA9ICd0cmVlJztcblxuICAgICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMucm93TnVtYmVyID8gXy5jb25jYXQodGhpcy5fb25lUm93TnVtYmVyQ29sdW1uRGVmLCB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiwgdGhpcy5jb2x1bW5EZWZzKSA6IF8uY29uY2F0KHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmLCB0aGlzLmNvbHVtbkRlZnMpO1xuXG4gICAgICB0aGlzLmFwaS5zZXRUcmVlRGF0YUNoaWxkcmVuRmllbGQodGhpcy50cmVlRGF0YUNoaWxkcmVuRmllbGQpO1xuICAgICAgdGhpcy5hcGkuc2V0R3JvdXBEZWZhdWx0RXhwYW5kZWQodGhpcy5ncm91cERlZmF1bHRFeHBhbmRlZCk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hcGkuc2V0Q29sdW1uRGVmcyhjb2x1bW5EZWZzKSk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIFNlbGVjdGlvbiBDaGFuZ2VkIEV2ZW50XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmV2ZW50U2VydmljZS5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25DaGFuZ2VkJywgKHBheWxvYWQ6IFNlbGVjdGlvbkNoYW5nZWRFdmVudDxUPikgPT4ge1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHBheWxvYWQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIGNvbnN0IGhlYWRlclZpZXdwb3J0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm9uZS1ncmlkLWhlYWRlci1jb2x1bW4nKTtcbiAgICBjb25zdCBib2R5Vmlld3BvcnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcub25lLWdyaWQtYm9keS12aWV3cG9ydCcpO1xuXG4gICAgLy8gTGlzdGVuIFNjcm9sbCBFdmVudCBDaGFuZ2VkXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcblxuICAgICAgZnJvbUV2ZW50KGJvZHlWaWV3cG9ydCwgJ3Njcm9sbCcpLnN1YnNjcmliZSgoKSA9PiB7XG5cbiAgICAgICAgaWYgKGhlYWRlclZpZXdwb3J0KSB7XG5cbiAgICAgICAgICBoZWFkZXJWaWV3cG9ydC5zY3JvbGxMZWZ0ID0gYm9keVZpZXdwb3J0LnNjcm9sbExlZnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogRW1pdCBHcmlkIFJlYWR5IEV2ZW50XG4gICAgICovXG4gICAgdGhpcy5vbkdyaWRSZWFkeS5lbWl0KHsgYXBpOiB0aGlzLmFwaSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgQm9keSBTY3JvbGwgRXZlbnRcbiAgICovXG4gIG9uQm9keVNjcm9sbChzY3JvbGxMZWZ0OiBudW1iZXIpIHtcblxuICAgIHRoaXMuYm9keVNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBSZWFkeSBFdmVudCBvZiBhIG5lc3RlZCBNYXN0ZXIgRGV0YWlsIEdyaWRcbiAgICovXG4gIG9uRGV0YWlsR3JpZFJlYWR5KHBhcmFtczogT25lR3JpZFJlYWR5RXZlbnQpIHtcblxuICAgIHBhcmFtcy5hcGkuc2V0Um93RGF0YSh0aGlzLm1hc3Rlck5vZGU/LmRldGFpbFJvd0RhdGEgPz8gW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3NpbmcgY29weSBldmVudCB0byBncmlkIGJvZHlcbiAgICovXG4gIG9uR3JpZENvcHkoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG5cbiAgICB0aGlzLmdyaWRDb3B5JC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIFJvdyBBY3Rpb24gRXZlbnRzIHRvIFBhcmVudCBDb21wb25lbnRcbiAgICovXG4gIGludm9rZVJvd0FjdGlvbkdvdG9EZXRhaWwoZXZlbnQ6IE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPikge1xuXG4gICAgdGhpcy5vblJvd0dvdG9EZXRhaWwuZW1pdChldmVudCk7XG4gIH1cblxuICBpbnZva2VSb3dBY3Rpb25BZGROZXcoZXZlbnQ6IE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPikge1xuXG4gICAgdGhpcy5vblJvd0FkZE5ldy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGludm9rZVJvd0FjdGlvblZpZXcoZXZlbnQ6IE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPikge1xuXG4gICAgdGhpcy5vblJvd1ZpZXcuZW1pdChldmVudCk7XG4gIH1cblxuICBpbnZva2VSb3dBY3Rpb25Mb2NhdGlvbihldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uUm93TG9jYXRpb24uZW1pdChldmVudCk7XG4gIH1cblxuICBpbnZva2VSb3dBY3Rpb25Eb2N1bWVudChldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uUm93RG9jdW1lbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBpbnZva2VSb3dBY3Rpb25Db3B5KGV2ZW50OiBPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4pIHtcblxuICAgIHRoaXMub25Sb3dDb3B5LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgaW52b2tlUm93QWN0aW9uRGVsZXRlKGV2ZW50OiBPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4pIHtcblxuICAgIHRoaXMub25Sb3dEZWxldGUuZW1pdChldmVudCk7XG4gIH1cblxuICBpbnZva2VSb3dBY3Rpb25Hb3RvTGlzdChldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uUm93R290b0xpc3QuZW1pdChldmVudCk7XG4gIH1cblxuICBpbnZva2VSb3dBY3Rpb25FZGl0KGV2ZW50OiBPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4pIHtcblxuICAgIHRoaXMub25Sb3dFZGl0LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgaW52b2tlUm93QWN0aW9uUHJpbnQoZXZlbnQ6IE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPikge1xuXG4gICAgdGhpcy5vblJvd1ByaW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgaW52b2tlUm93QWN0aW9uSGlzdG9yeShldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uUm93SGlzdG9yeS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGludm9rZVJvd0FjdGlvbk9wdGlvbihldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uUm93T3B0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgaW52b2tlUm93QWN0aW9uTGFuZ3VhZ2UoZXZlbnQ6IE9uZUdyaWRSb3dBY3Rpb25FdmVudDxUPikge1xuXG4gICAgdGhpcy5vblJvd0xhbmd1YWdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgaW52b2tlUm93QWN0aW9uQ2VsbE9wdGlvbihldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uUm93Q2VsbE9wdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGludm9rZVJvd0FjdGlvblNlbGVjdGlvbihldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uUm93U2VsZWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgaW52b2tlU2hpZnREb3VibGVDbGljayhldmVudDogT25lR3JpZFJvd0FjdGlvbkV2ZW50PFQ+KSB7XG5cbiAgICB0aGlzLm9uU2hpZnREb3VibGVDbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGludm9rZVJvd0NvdW50Q2hhbmdlZChsZW5ndGg6IG51bWJlcikge1xuXG4gICAgdGhpcy5yb3dDb3VudENoYW5nZWQuZW1pdChsZW5ndGgpO1xuICB9XG5cbiAgY2VsbE9wdGlvbk1lbnVTZWxlY3RlZChldmVudDogQ2VsbE9wdGlvbk1lbnVTZWxlY3RlZEV2ZW50KSB7XG5cbiAgICB0aGlzLmNlbGxPcHRpb25TZWxlY3QuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZyBQYWdpbmF0aW9uIEV2ZW50cyB0byBQYXJlbnQgQ29tcG9uZW50XG4gICAqL1xuICBpbnZva2VHb1RvRmlyc3QoKSB7XG5cbiAgICB0aGlzLmdvVG9GaXJzdC5lbWl0KCk7XG4gIH1cblxuICBpbnZva2VHb1RvUHJldmlvdXMoKSB7XG5cbiAgICB0aGlzLmdvVG9QcmV2aW91cy5lbWl0KCk7XG4gIH1cblxuICBpbnZva2VHb1RvTmV4dCgpIHtcblxuICAgIHRoaXMuZ29Ub05leHQuZW1pdCgpO1xuICB9XG5cbiAgaW52b2tlR29Ub0xhc3QoKSB7XG5cbiAgICB0aGlzLmdvVG9MYXN0LmVtaXQoKTtcbiAgfVxuXG4gIGludm9rZVBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcblxuICAgIHRoaXMucGFnZVNpemVDaGFuZ2UuZW1pdChwYWdlU2l6ZSk7XG4gIH1cblxuICBpbnZva2VFeHBhbnNpb25DaGFuZ2VkQ2xpY2soZXZlbnQ6IEV4cGFuc2lvbkNoYW5nZWRFdmVudDxUPikge1xuXG4gICAgdGhpcy5leHBhbnNpb25DaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBVbnN1YnNjcmliZSBBbGwgRXZlbnQgTGlzdGVuZGVyc1xuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cbiAgICB0aGlzLnJvd0RhdGEgPSBbXTtcblxuICAgIHRoaXMuYXBpLmRlc3Ryb3koKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2ICNvZ1JlZiBjbGFzcz1cIm9uZS1ncmlkXCIgKGNvcHkpPVwib25HcmlkQ29weSgkZXZlbnQpXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgXG4gICAgPCEtLSBIZWFkZXJzIC0tPlxuICAgIDxvbmUtZ3JpZC1oZWFkZXJcbiAgICAgICAgW2FwaV09XCJhcGlcIlxuICAgICAgICBbZW5hYmxlR3JvdXBDb2x1bW5EZWZzXT1cImVuYWJsZUdyb3VwQ29sdW1uRGVmc1wiXG4gICAgICAgIFthbGxvd2VkRWRpdF09XCJhbGxvd2VkRWRpdFwiXG4gICAgICAgIFtzY3JvbGxMZWZ0XT1cImJvZHlTY3JvbGxMZWZ0XCJcbiAgICAvPlxuXG4gICAgPCEtLSBCb2R5IC0tPlxuICAgIDxvbmUtZ3JpZC1ib2R5XG4gICAgICAgIFtncmlkQ29weSRdPVwiZ3JpZENvcHkkXCJcbiAgICAgICAgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICAgIFthcGldPVwiYXBpXCJcbiAgICAgICAgW3Jvd051bWJlcl09XCJyb3dOdW1iZXJcIlxuICAgICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgW2FsbG93ZWRFZGl0XT1cImFsbG93ZWRFZGl0XCJcbiAgICAgICAgW3N1Ym1pdHRlZF09XCJzdWJtaXR0ZWRcIlxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICAgICAgW3RyZWVEYXRhXT1cInRyZWVEYXRhXCJcbiAgICAgICAgW2dyaWRUeXBlXT1cImdyaWRUeXBlXCJcbiAgICAgICAgW21hc3RlckRldGFpbF09XCJtYXN0ZXJEZXRhaWxcIlxuICAgICAgICBbbWFzdGVyTm9kZV09XCJtYXN0ZXJOb2RlXCJcbiAgICAgICAgW2RldGFpbENlbGxSZW5kZXJlclBhcmFtc109XCJkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXNcIlxuICAgICAgICBbZGV0YWlsUmVuZGVyZXJDb21wb25lbnRdPVwiZGV0YWlsUmVuZGVyZXJDb21wb25lbnRcIlxuICAgICAgICBbZGV0YWlsR3JpZFRlbXBsYXRlXT1cImRldGFpbEdyaWRUcGxcIlxuICAgICAgICBbdHJlZURhdGFDaGlsZHJlbkZpZWxkXT1cInRyZWVEYXRhQ2hpbGRyZW5GaWVsZFwiXG4gICAgICAgIFthdXRvR3JvdXBDb2x1bW5EZWZdPVwiYXV0b0dyb3VwQ29sdW1uRGVmXCJcbiAgICAgICAgW2dyb3VwRGVmYXVsdEV4cGFuZGVkXT1cImdyb3VwRGVmYXVsdEV4cGFuZGVkXCJcbiAgICAgICAgKGV4cGFuc2lvbkNoYW5nZWQpPVwiaW52b2tlRXhwYW5zaW9uQ2hhbmdlZENsaWNrKCRldmVudClcIlxuICAgICAgICAob25Sb3dHb3RvRGV0YWlsKT1cImludm9rZVJvd0FjdGlvbkdvdG9EZXRhaWwoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd0FkZE5ldyk9XCJpbnZva2VSb3dBY3Rpb25BZGROZXcoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd1ZpZXcpPVwiaW52b2tlUm93QWN0aW9uVmlldygkZXZlbnQpXCJcbiAgICAgICAgKG9uUm93TG9jYXRpb24pPVwiaW52b2tlUm93QWN0aW9uTG9jYXRpb24oJGV2ZW50KVwiXG4gICAgICAgIChvblJvd0RvY3VtZW50KT1cImludm9rZVJvd0FjdGlvbkRvY3VtZW50KCRldmVudClcIlxuICAgICAgICAob25Sb3dDb3B5KT1cImludm9rZVJvd0FjdGlvbkNvcHkoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd0RlbGV0ZSk9XCJpbnZva2VSb3dBY3Rpb25EZWxldGUoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd0dvdG9MaXN0KT1cImludm9rZVJvd0FjdGlvbkdvdG9MaXN0KCRldmVudClcIlxuICAgICAgICAob25Sb3dFZGl0KT1cImludm9rZVJvd0FjdGlvbkVkaXQoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd1ByaW50KT1cImludm9rZVJvd0FjdGlvblByaW50KCRldmVudClcIlxuICAgICAgICAob25Sb3dIaXN0b3J5KT1cImludm9rZVJvd0FjdGlvbkhpc3RvcnkoJGV2ZW50KVwiXG4gICAgICAgIChvblJvd09wdGlvbik9XCJpbnZva2VSb3dBY3Rpb25PcHRpb24oJGV2ZW50KVwiXG4gICAgICAgIChvblJvd0xhbmd1YWdlKT1cImludm9rZVJvd0FjdGlvbkxhbmd1YWdlKCRldmVudClcIlxuICAgICAgICAob25Sb3dDZWxsT3B0aW9uKT1cImludm9rZVJvd0FjdGlvbkNlbGxPcHRpb24oJGV2ZW50KVwiXG4gICAgICAgIChvblJvd1NlbGVjdGlvbik9XCJpbnZva2VSb3dBY3Rpb25TZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChvblNoaWZ0RG91YmxlQ2xpY2spPVwiaW52b2tlU2hpZnREb3VibGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgKHJvd0NvdW50Q2hhbmdlZCk9XCJpbnZva2VSb3dDb3VudENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIChjZWxsT3B0aW9uU2VsZWN0KT1cImNlbGxPcHRpb25NZW51U2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChib2R5U2Nyb2xsKT1cIm9uQm9keVNjcm9sbCgkZXZlbnQpXCJcbiAgICAvPlxuICAgIFxuICAgIDwhLS0gUGFnaW5hdGlvbiAtLT5cbiAgICBAaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgICAgPG9uZS1ncmlkLXBhZ2luYXRpb25cbiAgICAgICAgICAgIFtwYWdpbmF0ZV09XCJwYWdpbmF0ZVwiXG4gICAgICAgICAgICAoZ29Ub0ZpcnN0KT1cImludm9rZUdvVG9GaXJzdCgpXCJcbiAgICAgICAgICAgIChnb1RvTGFzdCk9XCJpbnZva2VHb1RvTGFzdCgpXCJcbiAgICAgICAgICAgIChnb1RvUHJldmlvdXMpPVwiaW52b2tlR29Ub1ByZXZpb3VzKClcIlxuICAgICAgICAgICAgKGdvVG9OZXh0KT1cImludm9rZUdvVG9OZXh0KClcIlxuICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cImludm9rZVBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgIH1cblxuICAgIDwhLS0gTWFzdGVyIERldGFpbCBHcmlkIHRlbXBsYXRlLCByZW5kZXJlZCBpbnNpZGUgb25lLWdyaWQtYm9keSB2aWEgbmdUZW1wbGF0ZU91dGxldC5cbiAgICAgICAgIERlY2xhcmVkIGhlcmUgKHNlbGYtcmVmZXJlbmNlKSBzbyBvbmUtZ3JpZC1ib2R5J3MgdGVtcGxhdGUgZG9lcyBub3QgbmVlZCB0b1xuICAgICAgICAgaW1wb3J0IG9uZS1ncmlkLCB3aGljaCB3b3VsZCBjcmVhdGUgYW4gdW5zdXBwb3J0ZWQgY29tcGlsZS10aW1lIGN5Y2xlLiAtLT5cbiAgICA8bmctdGVtcGxhdGUgI2RldGFpbEdyaWRUcGwgbGV0LW5vZGU9XCJub2RlXCI+XG4gICAgICAgIDxvbmUtZ3JpZFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJub2RlLmRldGFpbFJvd0hlaWdodFwiXG4gICAgICAgICAgICBbZ3JpZFR5cGVdPVwiJ2RldGFpbCdcIlxuICAgICAgICAgICAgW21hc3Rlck5vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICBbbWFzdGVyRGV0YWlsXT1cIm1hc3RlckRldGFpbFwiXG4gICAgICAgICAgICBbZGVmYXVsdENvbHVtbkRlZl09XCJkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXMuZGV0YWlsR3JpZE9wdGlvbnMuZGVmYXVsdENvbHVtbkRlZlwiXG4gICAgICAgICAgICBbY29sdW1uRGVmc109XCJkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXMuZGV0YWlsR3JpZE9wdGlvbnMuY29sdW1uRGVmc1wiXG4gICAgICAgICAgICBbcm93RGF0YV09XCJub2RlPy5kZXRhaWxSb3dEYXRhXCJcbiAgICAgICAgICAgIFtyb3dOdW1iZXJdPVwiZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zLmRldGFpbEdyaWRPcHRpb25zPy5yb3dOdW1iZXJcIlxuICAgICAgICAgICAgW2FsbG93ZWRFZGl0XT1cImFsbG93ZWRFZGl0XCJcbiAgICAgICAgICAgIFtzdWJtaXR0ZWRdPVwic3VibWl0dGVkXCJcbiAgICAgICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICAgICAgKGV4cGFuc2lvbkNoYW5nZWQpPVwiaW52b2tlRXhwYW5zaW9uQ2hhbmdlZENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKG9uUm93R290b0RldGFpbCk9XCJpbnZva2VSb3dBY3Rpb25Hb3RvRGV0YWlsKCRldmVudClcIlxuICAgICAgICAgICAgKG9uUm93QWRkTmV3KT1cImludm9rZVJvd0FjdGlvbkFkZE5ldygkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblJvd1ZpZXcpPVwiaW52b2tlUm93QWN0aW9uVmlldygkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblJvd0xvY2F0aW9uKT1cImludm9rZVJvd0FjdGlvbkxvY2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgKG9uUm93RG9jdW1lbnQpPVwiaW52b2tlUm93QWN0aW9uRG9jdW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25Sb3dDb3B5KT1cImludm9rZVJvd0FjdGlvbkNvcHkoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25Sb3dEZWxldGUpPVwiaW52b2tlUm93QWN0aW9uRGVsZXRlKCRldmVudClcIlxuICAgICAgICAgICAgKG9uUm93R290b0xpc3QpPVwiaW52b2tlUm93QWN0aW9uR290b0xpc3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25Sb3dFZGl0KT1cImludm9rZVJvd0FjdGlvbkVkaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25Sb3dQcmludCk9XCJpbnZva2VSb3dBY3Rpb25QcmludCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblJvd0hpc3RvcnkpPVwiaW52b2tlUm93QWN0aW9uSGlzdG9yeSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblJvd09wdGlvbik9XCJpbnZva2VSb3dBY3Rpb25PcHRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAob25Sb3dMYW5ndWFnZSk9XCJpbnZva2VSb3dBY3Rpb25MYW5ndWFnZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblJvd0NlbGxPcHRpb24pPVwiaW52b2tlUm93QWN0aW9uQ2VsbE9wdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkdyaWRSZWFkeSk9XCJvbkRldGFpbEdyaWRSZWFkeSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+Il19
|