@bryntum/grid-angular 7.1.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.
- package/README.md +44 -0
- package/bryntum-grid-angular.d.ts +5 -0
- package/bundles/bryntum-grid-angular.umd.js +49212 -0
- package/bundles/bryntum-grid-angular.umd.js.map +1 -0
- package/esm2015/bryntum-grid-angular.js +5 -0
- package/esm2015/lib/bryntum-a-i-filter-field.component.js +791 -0
- package/esm2015/lib/bryntum-button-group.component.js +725 -0
- package/esm2015/lib/bryntum-button.component.js +715 -0
- package/esm2015/lib/bryntum-chat-panel.component.js +839 -0
- package/esm2015/lib/bryntum-checkbox-group.component.js +854 -0
- package/esm2015/lib/bryntum-checkbox.component.js +805 -0
- package/esm2015/lib/bryntum-checklist-filter-combo.component.js +943 -0
- package/esm2015/lib/bryntum-chip-view.component.js +727 -0
- package/esm2015/lib/bryntum-code-editor.component.js +818 -0
- package/esm2015/lib/bryntum-color-field.component.js +794 -0
- package/esm2015/lib/bryntum-combo.component.js +932 -0
- package/esm2015/lib/bryntum-container.component.js +681 -0
- package/esm2015/lib/bryntum-date-field.component.js +831 -0
- package/esm2015/lib/bryntum-date-picker.component.js +1008 -0
- package/esm2015/lib/bryntum-date-range-field.component.js +835 -0
- package/esm2015/lib/bryntum-date-time-field.component.js +752 -0
- package/esm2015/lib/bryntum-demo-code-editor.component.js +830 -0
- package/esm2015/lib/bryntum-demo-header.component.js +171 -0
- package/esm2015/lib/bryntum-display-field.component.js +772 -0
- package/esm2015/lib/bryntum-duration-field.component.js +815 -0
- package/esm2015/lib/bryntum-editor.component.js +823 -0
- package/esm2015/lib/bryntum-field-filter-picker-group.component.js +758 -0
- package/esm2015/lib/bryntum-field-filter-picker.component.js +740 -0
- package/esm2015/lib/bryntum-field-set.component.js +810 -0
- package/esm2015/lib/bryntum-file-field.component.js +776 -0
- package/esm2015/lib/bryntum-file-picker.component.js +709 -0
- package/esm2015/lib/bryntum-filter-field.component.js +803 -0
- package/esm2015/lib/bryntum-fullscreen-button.component.js +53 -0
- package/esm2015/lib/bryntum-grid-base.component.js +2099 -0
- package/esm2015/lib/bryntum-grid-chart-designer.component.js +588 -0
- package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +754 -0
- package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +744 -0
- package/esm2015/lib/bryntum-grid.component.js +2103 -0
- package/esm2015/lib/bryntum-group-bar.component.js +727 -0
- package/esm2015/lib/bryntum-hint.component.js +856 -0
- package/esm2015/lib/bryntum-label.component.js +584 -0
- package/esm2015/lib/bryntum-list.component.js +715 -0
- package/esm2015/lib/bryntum-menu.component.js +883 -0
- package/esm2015/lib/bryntum-month-picker.component.js +818 -0
- package/esm2015/lib/bryntum-number-field.component.js +800 -0
- package/esm2015/lib/bryntum-paging-toolbar.component.js +736 -0
- package/esm2015/lib/bryntum-panel.component.js +794 -0
- package/esm2015/lib/bryntum-password-field.component.js +768 -0
- package/esm2015/lib/bryntum-radio-group.component.js +826 -0
- package/esm2015/lib/bryntum-radio.component.js +805 -0
- package/esm2015/lib/bryntum-slide-toggle.component.js +805 -0
- package/esm2015/lib/bryntum-slider.component.js +661 -0
- package/esm2015/lib/bryntum-splitter.component.js +618 -0
- package/esm2015/lib/bryntum-tab-panel.component.js +842 -0
- package/esm2015/lib/bryntum-text-area-field.component.js +776 -0
- package/esm2015/lib/bryntum-text-area-picker-field.component.js +798 -0
- package/esm2015/lib/bryntum-text-field.component.js +783 -0
- package/esm2015/lib/bryntum-time-field.component.js +819 -0
- package/esm2015/lib/bryntum-time-picker.component.js +709 -0
- package/esm2015/lib/bryntum-toolbar.component.js +732 -0
- package/esm2015/lib/bryntum-tree-combo.component.js +932 -0
- package/esm2015/lib/bryntum-tree-grid.component.js +2103 -0
- package/esm2015/lib/bryntum-widget.component.js +580 -0
- package/esm2015/lib/bryntum-year-picker.component.js +827 -0
- package/esm2015/lib/grid.module.js +314 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +64 -0
- package/fesm2015/bryntum-grid-angular.js +48622 -0
- package/fesm2015/bryntum-grid-angular.js.map +1 -0
- package/lib/bryntum-a-i-filter-field.component.d.ts +968 -0
- package/lib/bryntum-button-group.component.d.ts +860 -0
- package/lib/bryntum-button.component.d.ts +845 -0
- package/lib/bryntum-chat-panel.component.d.ts +1060 -0
- package/lib/bryntum-checkbox-group.component.d.ts +1094 -0
- package/lib/bryntum-checkbox.component.d.ts +968 -0
- package/lib/bryntum-checklist-filter-combo.component.d.ts +1210 -0
- package/lib/bryntum-chip-view.component.d.ts +872 -0
- package/lib/bryntum-code-editor.component.d.ts +1045 -0
- package/lib/bryntum-color-field.component.d.ts +965 -0
- package/lib/bryntum-combo.component.d.ts +1199 -0
- package/lib/bryntum-container.component.d.ts +822 -0
- package/lib/bryntum-date-field.component.d.ts +1025 -0
- package/lib/bryntum-date-picker.component.d.ts +1338 -0
- package/lib/bryntum-date-range-field.component.d.ts +1027 -0
- package/lib/bryntum-date-time-field.component.d.ts +912 -0
- package/lib/bryntum-demo-code-editor.component.d.ts +1061 -0
- package/lib/bryntum-demo-header.component.d.ts +29 -0
- package/lib/bryntum-display-field.component.d.ts +949 -0
- package/lib/bryntum-duration-field.component.d.ts +1008 -0
- package/lib/bryntum-editor.component.d.ts +969 -0
- package/lib/bryntum-field-filter-picker-group.component.d.ts +935 -0
- package/lib/bryntum-field-filter-picker.component.d.ts +903 -0
- package/lib/bryntum-field-set.component.d.ts +1038 -0
- package/lib/bryntum-file-field.component.d.ts +952 -0
- package/lib/bryntum-file-picker.component.d.ts +847 -0
- package/lib/bryntum-filter-field.component.d.ts +993 -0
- package/lib/bryntum-fullscreen-button.component.d.ts +20 -0
- package/lib/bryntum-grid-base.component.d.ts +2271 -0
- package/lib/bryntum-grid-chart-designer.component.d.ts +691 -0
- package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +929 -0
- package/lib/bryntum-grid-field-filter-picker.component.d.ts +916 -0
- package/lib/bryntum-grid.component.d.ts +2273 -0
- package/lib/bryntum-group-bar.component.d.ts +872 -0
- package/lib/bryntum-hint.component.d.ts +1117 -0
- package/lib/bryntum-label.component.d.ts +683 -0
- package/lib/bryntum-list.component.d.ts +849 -0
- package/lib/bryntum-menu.component.d.ts +1129 -0
- package/lib/bryntum-month-picker.component.d.ts +1034 -0
- package/lib/bryntum-number-field.component.d.ts +995 -0
- package/lib/bryntum-paging-toolbar.component.d.ts +886 -0
- package/lib/bryntum-panel.component.d.ts +1015 -0
- package/lib/bryntum-password-field.component.d.ts +939 -0
- package/lib/bryntum-radio-group.component.d.ts +1068 -0
- package/lib/bryntum-radio.component.d.ts +968 -0
- package/lib/bryntum-slide-toggle.component.d.ts +968 -0
- package/lib/bryntum-slider.component.d.ts +776 -0
- package/lib/bryntum-splitter.component.d.ts +714 -0
- package/lib/bryntum-tab-panel.component.d.ts +1065 -0
- package/lib/bryntum-text-area-field.component.d.ts +951 -0
- package/lib/bryntum-text-area-picker-field.component.d.ts +972 -0
- package/lib/bryntum-text-field.component.d.ts +957 -0
- package/lib/bryntum-time-field.component.d.ts +1006 -0
- package/lib/bryntum-time-picker.component.d.ts +853 -0
- package/lib/bryntum-toolbar.component.d.ts +879 -0
- package/lib/bryntum-tree-combo.component.d.ts +1199 -0
- package/lib/bryntum-tree-grid.component.d.ts +2273 -0
- package/lib/bryntum-widget.component.d.ts +678 -0
- package/lib/bryntum-year-picker.component.d.ts +1049 -0
- package/lib/grid.module.d.ts +65 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +60 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum Demo Header
|
|
4
|
+
*/
|
|
5
|
+
import { Component, ViewChild } from '@angular/core';
|
|
6
|
+
import { CSSHelper, DemoCodeEditor, AjaxHelper } from '@bryntum/grid';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./bryntum-button.component";
|
|
9
|
+
import * as i2 from "./bryntum-fullscreen-button.component";
|
|
10
|
+
export class BryntumDemoHeaderComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
var _a;
|
|
13
|
+
this.title = document.title.split(' - ')[1] || document.title;
|
|
14
|
+
this.isTest = document.location.search.includes('test');
|
|
15
|
+
this.isIonic = document.location.href.includes('/ionic/');
|
|
16
|
+
this.demoProduct = ((_a = document.location.href.match(/\/(\w+)(-trial)?\/[-\w]*examples\//)) === null || _a === void 0 ? void 0 : _a[1].toLowerCase()) || 'grid';
|
|
17
|
+
this.downloadLink = `https://bryntum.com/download/?product=${this.demoProduct}`;
|
|
18
|
+
this.link = '';
|
|
19
|
+
this.appFolder = this.isIonic ? '../' : '../../';
|
|
20
|
+
this.hiddenEditor = !Boolean(DemoCodeEditor.monacoCodePath);
|
|
21
|
+
this.tooltip = {
|
|
22
|
+
html: 'L{codeButton}',
|
|
23
|
+
align: 't100-b100'
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
// Convert:
|
|
29
|
+
// https://bryntum.com/products/schedulerpro/examples-scheduler/frameworks/angular/basic/dist/basic/
|
|
30
|
+
// https://bryntum.com/products/schedulerpro/examples/frameworks/angular/basic/dist/basic/
|
|
31
|
+
// To:
|
|
32
|
+
// https://bryntum.com/products/schedulerpro/examples/#example-examples-scheduler-frameworks-angular-basic
|
|
33
|
+
// https://bryntum.com/products/schedulerpro/examples/#example-frameworks-angular-basic
|
|
34
|
+
const match = /(.*?\/)(examples.*?\/frameworks\/.*?)\/dist/.exec(document.location.href);
|
|
35
|
+
this.link = match ? `${match[1]}examples/#example-${match[2].replace(/\//gm, '-').replace('examples-frameworks', 'frameworks')}` : '#';
|
|
36
|
+
if (!this.hiddenEditor) {
|
|
37
|
+
CSSHelper.insertRule('body { flex-flow : row !important }');
|
|
38
|
+
CSSHelper.insertRule('app-root { flex : 1 !important; overflow : hidden !important }');
|
|
39
|
+
if (this.isIonic) {
|
|
40
|
+
CSSHelper.insertRule('app-root { flex-direction : row !important }');
|
|
41
|
+
CSSHelper.insertRule('ion-app { position : relative !important; flex : 1; overflow : hidden !important }');
|
|
42
|
+
}
|
|
43
|
+
const appConfig = (yield AjaxHelper.get(`${this.appFolder}app.config.json`, { parseJson: true })).parsedJson;
|
|
44
|
+
if (appConfig.zip || this.isTest) {
|
|
45
|
+
const downloadButton = this.downloadButton.instance;
|
|
46
|
+
downloadButton.hidden = false;
|
|
47
|
+
downloadButton.href = `${this.appFolder}${appConfig.zip}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Enables special styling when generating screenshots
|
|
51
|
+
const params = new URLSearchParams(window.location.search);
|
|
52
|
+
if (params.has('screenshot')) {
|
|
53
|
+
document.body.classList.add('b-screenshot');
|
|
54
|
+
if (window.bryntum) {
|
|
55
|
+
window.bryntum.noAnimations = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
copyShadowRootStyle() {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
const shadowRootStyle = (_b = (_a = document.querySelector('app-root')) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('style');
|
|
63
|
+
if (shadowRootStyle) {
|
|
64
|
+
document.head.appendChild(shadowRootStyle.cloneNode(true));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
toggleCodeEditor() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
if (!this.codeEditor) {
|
|
70
|
+
this.copyShadowRootStyle();
|
|
71
|
+
}
|
|
72
|
+
this.codeEditor = yield DemoCodeEditor.toggleCodeEditor(this.codeEditor, this.codeButton.instance, {
|
|
73
|
+
appendTo: this.isIonic ? document.querySelector('app-root') : document.body,
|
|
74
|
+
appFolder: this.appFolder,
|
|
75
|
+
preferredSources: [
|
|
76
|
+
/\w+\.component\.ts/,
|
|
77
|
+
/\w+\.config\.ts/
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
BryntumDemoHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDemoHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
+
BryntumDemoHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumDemoHeaderComponent, selector: "bryntum-demo-header", viewQueries: [{ propertyName: "codeButton", first: true, predicate: ["code"], descendants: true }, { propertyName: "downloadButton", first: true, predicate: ["download"], descendants: true }], ngImport: i0, template: `
|
|
85
|
+
<header class="demo-header b-bryntum">
|
|
86
|
+
<a id="title" class="title" href="{{ link }}">
|
|
87
|
+
<h1>
|
|
88
|
+
<svg viewBox="0 0 354.9 144.52" xmlns="http://www.w3.org/2000/svg">
|
|
89
|
+
<g><path d="m305.63 144.52c-12.47 0-23.53-4.83-31.58-13.28v11.06h-25.54v-142.3h26.75v48.58c7.84-7.64 18.5-12.07 30.37-12.07 27.15 0 49.28 23.33 49.28 54.1s-22.12 53.9-49.28 53.9zm-3.82-83.47c-14.68 0-26.55 13.27-26.55 29.77s11.87 29.16 26.55 29.16 26.55-12.67 26.55-29.16-11.87-29.77-26.55-29.77z"/><path d="m148.02 0h74.01v29.78h-74.01z"/><path d="m0 56.26h222.03v29.78h-222.03z"/><path d="m74.01 112.52h148.02v29.6h-148.02z"/></g>
|
|
90
|
+
</svg>
|
|
91
|
+
{{ title }}
|
|
92
|
+
</h1>
|
|
93
|
+
</a>
|
|
94
|
+
<ng-content></ng-content>
|
|
95
|
+
<div id="tools" class="tools">
|
|
96
|
+
<bryntum-button
|
|
97
|
+
text="Download Trial"
|
|
98
|
+
href="{{ downloadLink }}"
|
|
99
|
+
rendition="filled"
|
|
100
|
+
style="margin-inline-end: .5em"
|
|
101
|
+
></bryntum-button>
|
|
102
|
+
<bryntum-button
|
|
103
|
+
#code
|
|
104
|
+
icon="b-icon-code"
|
|
105
|
+
tooltip="Click to show the code viewer"
|
|
106
|
+
rendition="text"
|
|
107
|
+
[hidden]="hiddenEditor"
|
|
108
|
+
(onClick)="toggleCodeEditor()"
|
|
109
|
+
></bryntum-button>
|
|
110
|
+
<bryntum-button
|
|
111
|
+
#download
|
|
112
|
+
icon="b-icon-download"
|
|
113
|
+
tooltip="Download this demo zip archive"
|
|
114
|
+
rendition="text"
|
|
115
|
+
href='#'
|
|
116
|
+
[hidden]="true"
|
|
117
|
+
></bryntum-button>
|
|
118
|
+
<bryntum-fullscreen-button></bryntum-fullscreen-button>
|
|
119
|
+
</div>
|
|
120
|
+
</header>`, isInline: true, components: [{ type: i1.BryntumButtonComponent, selector: "bryntum-button", inputs: ["adopt", "align", "anchor", "ariaDescription", "ariaLabel", "bubbleEvents", "centered", "color", "config", "constrainTo", "contentElementCls", "dataField", "defaultBindProperty", "detectCSSCompatibilityIssues", "dock", "draggable", "elementAttributes", "floating", "hideAnimation", "htmlCls", "ignoreParentReadOnly", "listeners", "localeClass", "localizable", "localizableProperties", "maskDefaults", "masked", "monitorResize", "owner", "positioned", "preventTooltipOnTouch", "relayStoreEvents", "ripple", "rootElement", "scrollAction", "showAnimation", "showTooltipWhenDisabled", "supportsPressedClick", "tab", "tag", "textAlign", "title", "type", "ui", "weight", "alignSelf", "appendTo", "badge", "behaviorType", "callOnFunctions", "catchEventHandlerExceptions", "cls", "column", "content", "dataset", "disabled", "extraData", "flex", "height", "hidden", "href", "html", "icon", "iconAlign", "id", "insertBefore", "insertFirst", "keyMap", "margin", "maxHeight", "maximizeOnMobile", "maxWidth", "menu", "menuIcon", "minHeight", "minWidth", "pressed", "pressedCls", "pressedIcon", "readOnly", "rendition", "rtl", "scrollable", "span", "split", "tabIndex", "target", "text", "toggleable", "toggleGroup", "tooltip", "width", "x", "y", "anchorSize", "focusVisible", "parent"], outputs: ["onAction", "onBeforeDestroy", "onBeforeHide", "onBeforeShow", "onBeforeShowMenu", "onBeforeToggle", "onCatchAll", "onClick", "onDestroy", "onElementCreated", "onFocusIn", "onFocusOut", "onHide", "onPaint", "onReadOnly", "onRecompose", "onResize", "onShow", "onToggle"] }, { type: i2.BryntumFullscreenButtonComponent, selector: "bryntum-fullscreen-button" }] });
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDemoHeaderComponent, decorators: [{
|
|
122
|
+
type: Component,
|
|
123
|
+
args: [{
|
|
124
|
+
selector: 'bryntum-demo-header',
|
|
125
|
+
template: `
|
|
126
|
+
<header class="demo-header b-bryntum">
|
|
127
|
+
<a id="title" class="title" href="{{ link }}">
|
|
128
|
+
<h1>
|
|
129
|
+
<svg viewBox="0 0 354.9 144.52" xmlns="http://www.w3.org/2000/svg">
|
|
130
|
+
<g><path d="m305.63 144.52c-12.47 0-23.53-4.83-31.58-13.28v11.06h-25.54v-142.3h26.75v48.58c7.84-7.64 18.5-12.07 30.37-12.07 27.15 0 49.28 23.33 49.28 54.1s-22.12 53.9-49.28 53.9zm-3.82-83.47c-14.68 0-26.55 13.27-26.55 29.77s11.87 29.16 26.55 29.16 26.55-12.67 26.55-29.16-11.87-29.77-26.55-29.77z"/><path d="m148.02 0h74.01v29.78h-74.01z"/><path d="m0 56.26h222.03v29.78h-222.03z"/><path d="m74.01 112.52h148.02v29.6h-148.02z"/></g>
|
|
131
|
+
</svg>
|
|
132
|
+
{{ title }}
|
|
133
|
+
</h1>
|
|
134
|
+
</a>
|
|
135
|
+
<ng-content></ng-content>
|
|
136
|
+
<div id="tools" class="tools">
|
|
137
|
+
<bryntum-button
|
|
138
|
+
text="Download Trial"
|
|
139
|
+
href="{{ downloadLink }}"
|
|
140
|
+
rendition="filled"
|
|
141
|
+
style="margin-inline-end: .5em"
|
|
142
|
+
></bryntum-button>
|
|
143
|
+
<bryntum-button
|
|
144
|
+
#code
|
|
145
|
+
icon="b-icon-code"
|
|
146
|
+
tooltip="Click to show the code viewer"
|
|
147
|
+
rendition="text"
|
|
148
|
+
[hidden]="hiddenEditor"
|
|
149
|
+
(onClick)="toggleCodeEditor()"
|
|
150
|
+
></bryntum-button>
|
|
151
|
+
<bryntum-button
|
|
152
|
+
#download
|
|
153
|
+
icon="b-icon-download"
|
|
154
|
+
tooltip="Download this demo zip archive"
|
|
155
|
+
rendition="text"
|
|
156
|
+
href='#'
|
|
157
|
+
[hidden]="true"
|
|
158
|
+
></bryntum-button>
|
|
159
|
+
<bryntum-fullscreen-button></bryntum-fullscreen-button>
|
|
160
|
+
</div>
|
|
161
|
+
</header>`,
|
|
162
|
+
styles: []
|
|
163
|
+
}]
|
|
164
|
+
}], propDecorators: { codeButton: [{
|
|
165
|
+
type: ViewChild,
|
|
166
|
+
args: ['code', { static: false }]
|
|
167
|
+
}], downloadButton: [{
|
|
168
|
+
type: ViewChild,
|
|
169
|
+
args: ['download', { static: false }]
|
|
170
|
+
}] } });
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1kZW1vLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnQvc3JjL2xpYi9icnludHVtLWRlbW8taGVhZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUE2Q3RFLE1BQU0sT0FBTywwQkFBMEI7SUExQ3ZDOztRQWlESSxVQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQztRQUV6RCxXQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELFlBQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckQsZ0JBQVcsR0FBRyxDQUFBLE1BQUEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLDBDQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSSxNQUFNLENBQUM7UUFFOUcsaUJBQVksR0FBRyx5Q0FBeUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTNFLFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVixjQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFNUMsaUJBQVksR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdkQsWUFB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QUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQ3BGLFNBQVMsRUFBVSxJQUFJLENBQUMsU0FBUztnQkFDakMsZ0JBQWdCLEVBQUc7b0JBQ2Ysb0JBQW9CO29CQUNwQixpQkFBaUI7aUJBQ3BCO2FBQ0osQ0FDSixDQUFDO1FBQ04sQ0FBQztLQUFBOzt1SEF6RlEsMEJBQTBCOzJHQUExQiwwQkFBMEIsNFBBeEN4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQW9DRzsyRkFJTCwwQkFBMEI7a0JBMUN0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRyxxQkFBcUI7b0JBQ2hDLFFBQVEsRUFBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQW9DRztvQkFDZCxNQUFNLEVBQUcsRUFDUjtpQkFDSjs4QkFHMEMsVUFBVTtzQkFBaEQsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUcsS0FBSyxFQUFFO2dCQUNNLGNBQWM7c0JBQXhELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFHLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIERlbW8gSGVhZGVyXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENTU0hlbHBlciwgRGVtb0NvZGVFZGl0b3IsIEFqYXhIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9ncmlkJztcbmltcG9ydCB7IEJyeW50dW1CdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2JyeW50dW0tYnV0dG9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yIDogJ2JyeW50dW0tZGVtby1oZWFkZXInLFxuICAgIHRlbXBsYXRlIDogYFxuICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZGVtby1oZWFkZXIgYi1icnludHVtXCI+XG4gICAgICAgICAgICA8YSBpZD1cInRpdGxlXCIgY2xhc3M9XCJ0aXRsZVwiIGhyZWY9XCJ7eyBsaW5rIH19XCI+XG4gICAgICAgICAgICAgICAgPGgxPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzU0LjkgMTQ0LjUyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGc+PHBhdGggZD1cIm0zMDUuNjMgMTQ0LjUyYy0xMi40NyAwLTIzLjUzLTQuODMtMzEuNTgtMTMuMjh2MTEuMDZoLTI1LjU0di0xNDIuM2gyNi43NXY0OC41OGM3Ljg0LTcuNjQgMTguNS0xMi4wNyAzMC4zNy0xMi4wNyAyNy4xNSAwIDQ5LjI4IDIzLjMzIDQ5LjI4IDU0LjFzLTIyLjEyIDUzLjktNDkuMjggNTMuOXptLTMuODItODMuNDdjLTE0LjY4IDAtMjYuNTUgMTMuMjctMjYuNTUgMjkuNzdzMTEuODcgMjkuMTYgMjYuNTUgMjkuMTYgMjYuNTUtMTIuNjcgMjYuNTUtMjkuMTYtMTEuODctMjkuNzctMjYuNTUtMjkuNzd6XCIvPjxwYXRoIGQ9XCJtMTQ4LjAyIDBoNzQuMDF2MjkuNzhoLTc0LjAxelwiLz48cGF0aCBkPVwibTAgNTYuMjZoMjIyLjAzdjI5Ljc4aC0yMjIuMDN6XCIvPjxwYXRoIGQ9XCJtNzQuMDEgMTEyLjUyaDE0OC4wMnYyOS42aC0xNDguMDJ6XCIvPjwvZz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0b29sc1wiIGNsYXNzPVwidG9vbHNcIj5cbiAgICAgICAgICAgICAgICA8YnJ5bnR1bS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdGV4dD1cIkRvd25sb2FkIFRyaWFsXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IGRvd25sb2FkTGluayB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHJlbmRpdGlvbj1cImZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWlubGluZS1lbmQ6IC41ZW1cIlxuICAgICAgICAgICAgICAgID48L2JyeW50dW0tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxicnludHVtLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAjY29kZVxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiYi1pY29uLWNvZGVcIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwiQ2xpY2sgdG8gc2hvdyB0aGUgY29kZSB2aWV3ZXJcIlxuICAgICAgICAgICAgICAgICAgICByZW5kaXRpb249XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJoaWRkZW5FZGl0b3JcIlxuICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVDb2RlRWRpdG9yKClcIlxuICAgICAgICAgICAgICAgID48L2JyeW50dW0tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxicnludHVtLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAjZG93bmxvYWRcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImItaWNvbi1kb3dubG9hZFwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJEb3dubG9hZCB0aGlzIGRlbW8gemlwIGFyY2hpdmVcIlxuICAgICAgICAgICAgICAgICAgICByZW5kaXRpb249XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj0nIydcbiAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9icnludHVtLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnJ5bnR1bS1mdWxsc2NyZWVuLWJ1dHRvbj48L2JyeW50dW0tZnVsbHNjcmVlbi1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+YCxcbiAgICBzdHlsZXMgOiBbXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtRGVtb0hlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBAVmlld0NoaWxkKCdjb2RlJywgeyBzdGF0aWMgOiBmYWxzZSB9KSBjb2RlQnV0dG9uITogQnJ5bnR1bUJ1dHRvbkNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdkb3dubG9hZCcsIHsgc3RhdGljIDogZmFsc2UgfSkgZG93bmxvYWRCdXR0b24hOiBCcnludHVtQnV0dG9uQ29tcG9uZW50O1xuXG4gICAgY29kZUVkaXRvcj86IERlbW9Db2RlRWRpdG9yO1xuXG4gICAgdGl0bGUgPSBkb2N1bWVudC50aXRsZS5zcGxpdCgnIC0gJylbMV0gfHwgZG9jdW1lbnQudGl0bGU7XG5cbiAgICBpc1Rlc3QgPSBkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2guaW5jbHVkZXMoJ3Rlc3QnKTtcblxuICAgIGlzSW9uaWMgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvaW9uaWMvJyk7XG5cbiAgICBkZW1vUHJvZHVjdCA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYubWF0Y2goL1xcLyhcXHcrKSgtdHJpYWwpP1xcL1stXFx3XSpleGFtcGxlc1xcLy8pPy5bMV0udG9Mb3dlckNhc2UoKSB8fCAnZ3JpZCc7XG5cbiAgICBkb3dubG9hZExpbmsgPSBgaHR0cHM6Ly9icnludHVtLmNvbS9kb3dubG9hZC8/cHJvZHVjdD0ke3RoaXMuZGVtb1Byb2R1Y3R9YDtcblxuICAgIGxpbmsgPSAnJztcblxuICAgIGFwcEZvbGRlciA9IHRoaXMuaXNJb25pYyA/ICcuLi8nIDogJy4uLy4uLyc7XG5cbiAgICBoaWRkZW5FZGl0b3IgPSAhQm9vbGVhbihEZW1vQ29kZUVkaXRvci5tb25hY29Db2RlUGF0aCk7XG5cbiAgICB0b29sdGlwID0ge1xuICAgICAgICBodG1sICA6ICdMe2NvZGVCdXR0b259JyxcbiAgICAgICAgYWxpZ24gOiAndDEwMC1iMTAwJ1xuICAgIH07XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gQ29udmVydDpcbiAgICAgICAgLy8gaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXJwcm8vZXhhbXBsZXMtc2NoZWR1bGVyL2ZyYW1ld29ya3MvYW5ndWxhci9iYXNpYy9kaXN0L2Jhc2ljL1xuICAgICAgICAvLyBodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlcnByby9leGFtcGxlcy9mcmFtZXdvcmtzL2FuZ3VsYXIvYmFzaWMvZGlzdC9iYXNpYy9cbiAgICAgICAgLy8gVG86XG4gICAgICAgIC8vIGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVycHJvL2V4YW1wbGVzLyNleGFtcGxlLWV4YW1wbGVzLXNjaGVkdWxlci1mcmFtZXdvcmtzLWFuZ3VsYXItYmFzaWNcbiAgICAgICAgLy8gaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXJwcm8vZXhhbXBsZXMvI2V4YW1wbGUtZnJhbWV3b3Jrcy1hbmd1bGFyLWJhc2ljXG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvKC4qP1xcLykoZXhhbXBsZXMuKj9cXC9mcmFtZXdvcmtzXFwvLio/KVxcL2Rpc3QvLmV4ZWMoZG9jdW1lbnQubG9jYXRpb24uaHJlZik7XG4gICAgICAgIHRoaXMubGluayA9IG1hdGNoID8gYCR7bWF0Y2hbMV19ZXhhbXBsZXMvI2V4YW1wbGUtJHttYXRjaFsyXS5yZXBsYWNlKC9cXC8vZ20sICctJykucmVwbGFjZSgnZXhhbXBsZXMtZnJhbWV3b3JrcycsICdmcmFtZXdvcmtzJyl9YCA6ICcjJztcblxuICAgICAgICBpZiAoIXRoaXMuaGlkZGVuRWRpdG9yKSB7XG4gICAgICAgICAgICBDU1NIZWxwZXIuaW5zZXJ0UnVsZSgnYm9keSB7IGZsZXgtZmxvdyA6IHJvdyAhaW1wb3J0YW50IH0nKTtcbiAgICAgICAgICAgIENTU0hlbHBlci5pbnNlcnRSdWxlKCdhcHAtcm9vdCB7IGZsZXggOiAxICFpbXBvcnRhbnQ7IG92ZXJmbG93IDogaGlkZGVuICFpbXBvcnRhbnQgfScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJb25pYykge1xuICAgICAgICAgICAgICAgIENTU0hlbHBlci5pbnNlcnRSdWxlKCdhcHAtcm9vdCB7IGZsZXgtZGlyZWN0aW9uIDogcm93ICFpbXBvcnRhbnQgfScpO1xuICAgICAgICAgICAgICAgIENTU0hlbHBlci5pbnNlcnRSdWxlKCdpb24tYXBwIHsgcG9zaXRpb24gOiByZWxhdGl2ZSAhaW1wb3J0YW50OyBmbGV4IDogMTsgb3ZlcmZsb3cgOiBoaWRkZW4gIWltcG9ydGFudCB9Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcENvbmZpZyA9IChhd2FpdCBBamF4SGVscGVyLmdldChgJHt0aGlzLmFwcEZvbGRlcn1hcHAuY29uZmlnLmpzb25gLCB7IHBhcnNlSnNvbiA6IHRydWUgfSkpLnBhcnNlZEpzb247XG4gICAgICAgICAgICBpZiAoYXBwQ29uZmlnLnppcCB8fCB0aGlzLmlzVGVzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkQnV0dG9uID0gdGhpcy5kb3dubG9hZEJ1dHRvbi5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBkb3dubG9hZEJ1dHRvbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb3dubG9hZEJ1dHRvbi5ocmVmID0gYCR7dGhpcy5hcHBGb2xkZXJ9JHthcHBDb25maWcuemlwfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmFibGVzIHNwZWNpYWwgc3R5bGluZyB3aGVuIGdlbmVyYXRpbmcgc2NyZWVuc2hvdHNcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgaWYgKHBhcmFtcy5oYXMoJ3NjcmVlbnNob3QnKSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdiLXNjcmVlbnNob3QnKTtcbiAgICAgICAgICAgIGlmICgod2luZG93IGFzIGFueSkuYnJ5bnR1bSkge1xuICAgICAgICAgICAgICAgICh3aW5kb3cgYXMgYW55KS5icnludHVtLm5vQW5pbWF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb3B5U2hhZG93Um9vdFN0eWxlKCkge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290U3R5bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhcHAtcm9vdCcpPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCdzdHlsZScpO1xuICAgICAgICBpZiAoc2hhZG93Um9vdFN0eWxlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNoYWRvd1Jvb3RTdHlsZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgdG9nZ2xlQ29kZUVkaXRvcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvZGVFZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVNoYWRvd1Jvb3RTdHlsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb2RlRWRpdG9yID0gYXdhaXQgRGVtb0NvZGVFZGl0b3IudG9nZ2xlQ29kZUVkaXRvcihcbiAgICAgICAgICAgIHRoaXMuY29kZUVkaXRvcixcbiAgICAgICAgICAgIHRoaXMuY29kZUJ1dHRvbi5pbnN0YW5jZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdGhpcy5pc0lvbmljID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXBwLXJvb3QnKSA6IGRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICAgICAgYXBwRm9sZGVyICAgICAgICA6IHRoaXMuYXBwRm9sZGVyLFxuICAgICAgICAgICAgICAgIHByZWZlcnJlZFNvdXJjZXMgOiBbXG4gICAgICAgICAgICAgICAgICAgIC9cXHcrXFwuY29tcG9uZW50XFwudHMvLFxuICAgICAgICAgICAgICAgICAgICAvXFx3K1xcLmNvbmZpZ1xcLnRzL1xuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cbiJdfQ==
|