@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.
Files changed (132) hide show
  1. package/README.md +44 -0
  2. package/bryntum-grid-angular.d.ts +5 -0
  3. package/bundles/bryntum-grid-angular.umd.js +49212 -0
  4. package/bundles/bryntum-grid-angular.umd.js.map +1 -0
  5. package/esm2015/bryntum-grid-angular.js +5 -0
  6. package/esm2015/lib/bryntum-a-i-filter-field.component.js +791 -0
  7. package/esm2015/lib/bryntum-button-group.component.js +725 -0
  8. package/esm2015/lib/bryntum-button.component.js +715 -0
  9. package/esm2015/lib/bryntum-chat-panel.component.js +839 -0
  10. package/esm2015/lib/bryntum-checkbox-group.component.js +854 -0
  11. package/esm2015/lib/bryntum-checkbox.component.js +805 -0
  12. package/esm2015/lib/bryntum-checklist-filter-combo.component.js +943 -0
  13. package/esm2015/lib/bryntum-chip-view.component.js +727 -0
  14. package/esm2015/lib/bryntum-code-editor.component.js +818 -0
  15. package/esm2015/lib/bryntum-color-field.component.js +794 -0
  16. package/esm2015/lib/bryntum-combo.component.js +932 -0
  17. package/esm2015/lib/bryntum-container.component.js +681 -0
  18. package/esm2015/lib/bryntum-date-field.component.js +831 -0
  19. package/esm2015/lib/bryntum-date-picker.component.js +1008 -0
  20. package/esm2015/lib/bryntum-date-range-field.component.js +835 -0
  21. package/esm2015/lib/bryntum-date-time-field.component.js +752 -0
  22. package/esm2015/lib/bryntum-demo-code-editor.component.js +830 -0
  23. package/esm2015/lib/bryntum-demo-header.component.js +171 -0
  24. package/esm2015/lib/bryntum-display-field.component.js +772 -0
  25. package/esm2015/lib/bryntum-duration-field.component.js +815 -0
  26. package/esm2015/lib/bryntum-editor.component.js +823 -0
  27. package/esm2015/lib/bryntum-field-filter-picker-group.component.js +758 -0
  28. package/esm2015/lib/bryntum-field-filter-picker.component.js +740 -0
  29. package/esm2015/lib/bryntum-field-set.component.js +810 -0
  30. package/esm2015/lib/bryntum-file-field.component.js +776 -0
  31. package/esm2015/lib/bryntum-file-picker.component.js +709 -0
  32. package/esm2015/lib/bryntum-filter-field.component.js +803 -0
  33. package/esm2015/lib/bryntum-fullscreen-button.component.js +53 -0
  34. package/esm2015/lib/bryntum-grid-base.component.js +2099 -0
  35. package/esm2015/lib/bryntum-grid-chart-designer.component.js +588 -0
  36. package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +754 -0
  37. package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +744 -0
  38. package/esm2015/lib/bryntum-grid.component.js +2103 -0
  39. package/esm2015/lib/bryntum-group-bar.component.js +727 -0
  40. package/esm2015/lib/bryntum-hint.component.js +856 -0
  41. package/esm2015/lib/bryntum-label.component.js +584 -0
  42. package/esm2015/lib/bryntum-list.component.js +715 -0
  43. package/esm2015/lib/bryntum-menu.component.js +883 -0
  44. package/esm2015/lib/bryntum-month-picker.component.js +818 -0
  45. package/esm2015/lib/bryntum-number-field.component.js +800 -0
  46. package/esm2015/lib/bryntum-paging-toolbar.component.js +736 -0
  47. package/esm2015/lib/bryntum-panel.component.js +794 -0
  48. package/esm2015/lib/bryntum-password-field.component.js +768 -0
  49. package/esm2015/lib/bryntum-radio-group.component.js +826 -0
  50. package/esm2015/lib/bryntum-radio.component.js +805 -0
  51. package/esm2015/lib/bryntum-slide-toggle.component.js +805 -0
  52. package/esm2015/lib/bryntum-slider.component.js +661 -0
  53. package/esm2015/lib/bryntum-splitter.component.js +618 -0
  54. package/esm2015/lib/bryntum-tab-panel.component.js +842 -0
  55. package/esm2015/lib/bryntum-text-area-field.component.js +776 -0
  56. package/esm2015/lib/bryntum-text-area-picker-field.component.js +798 -0
  57. package/esm2015/lib/bryntum-text-field.component.js +783 -0
  58. package/esm2015/lib/bryntum-time-field.component.js +819 -0
  59. package/esm2015/lib/bryntum-time-picker.component.js +709 -0
  60. package/esm2015/lib/bryntum-toolbar.component.js +732 -0
  61. package/esm2015/lib/bryntum-tree-combo.component.js +932 -0
  62. package/esm2015/lib/bryntum-tree-grid.component.js +2103 -0
  63. package/esm2015/lib/bryntum-widget.component.js +580 -0
  64. package/esm2015/lib/bryntum-year-picker.component.js +827 -0
  65. package/esm2015/lib/grid.module.js +314 -0
  66. package/esm2015/lib/wrapper.helper.js +74 -0
  67. package/esm2015/public-api.js +64 -0
  68. package/fesm2015/bryntum-grid-angular.js +48622 -0
  69. package/fesm2015/bryntum-grid-angular.js.map +1 -0
  70. package/lib/bryntum-a-i-filter-field.component.d.ts +968 -0
  71. package/lib/bryntum-button-group.component.d.ts +860 -0
  72. package/lib/bryntum-button.component.d.ts +845 -0
  73. package/lib/bryntum-chat-panel.component.d.ts +1060 -0
  74. package/lib/bryntum-checkbox-group.component.d.ts +1094 -0
  75. package/lib/bryntum-checkbox.component.d.ts +968 -0
  76. package/lib/bryntum-checklist-filter-combo.component.d.ts +1210 -0
  77. package/lib/bryntum-chip-view.component.d.ts +872 -0
  78. package/lib/bryntum-code-editor.component.d.ts +1045 -0
  79. package/lib/bryntum-color-field.component.d.ts +965 -0
  80. package/lib/bryntum-combo.component.d.ts +1199 -0
  81. package/lib/bryntum-container.component.d.ts +822 -0
  82. package/lib/bryntum-date-field.component.d.ts +1025 -0
  83. package/lib/bryntum-date-picker.component.d.ts +1338 -0
  84. package/lib/bryntum-date-range-field.component.d.ts +1027 -0
  85. package/lib/bryntum-date-time-field.component.d.ts +912 -0
  86. package/lib/bryntum-demo-code-editor.component.d.ts +1061 -0
  87. package/lib/bryntum-demo-header.component.d.ts +29 -0
  88. package/lib/bryntum-display-field.component.d.ts +949 -0
  89. package/lib/bryntum-duration-field.component.d.ts +1008 -0
  90. package/lib/bryntum-editor.component.d.ts +969 -0
  91. package/lib/bryntum-field-filter-picker-group.component.d.ts +935 -0
  92. package/lib/bryntum-field-filter-picker.component.d.ts +903 -0
  93. package/lib/bryntum-field-set.component.d.ts +1038 -0
  94. package/lib/bryntum-file-field.component.d.ts +952 -0
  95. package/lib/bryntum-file-picker.component.d.ts +847 -0
  96. package/lib/bryntum-filter-field.component.d.ts +993 -0
  97. package/lib/bryntum-fullscreen-button.component.d.ts +20 -0
  98. package/lib/bryntum-grid-base.component.d.ts +2271 -0
  99. package/lib/bryntum-grid-chart-designer.component.d.ts +691 -0
  100. package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +929 -0
  101. package/lib/bryntum-grid-field-filter-picker.component.d.ts +916 -0
  102. package/lib/bryntum-grid.component.d.ts +2273 -0
  103. package/lib/bryntum-group-bar.component.d.ts +872 -0
  104. package/lib/bryntum-hint.component.d.ts +1117 -0
  105. package/lib/bryntum-label.component.d.ts +683 -0
  106. package/lib/bryntum-list.component.d.ts +849 -0
  107. package/lib/bryntum-menu.component.d.ts +1129 -0
  108. package/lib/bryntum-month-picker.component.d.ts +1034 -0
  109. package/lib/bryntum-number-field.component.d.ts +995 -0
  110. package/lib/bryntum-paging-toolbar.component.d.ts +886 -0
  111. package/lib/bryntum-panel.component.d.ts +1015 -0
  112. package/lib/bryntum-password-field.component.d.ts +939 -0
  113. package/lib/bryntum-radio-group.component.d.ts +1068 -0
  114. package/lib/bryntum-radio.component.d.ts +968 -0
  115. package/lib/bryntum-slide-toggle.component.d.ts +968 -0
  116. package/lib/bryntum-slider.component.d.ts +776 -0
  117. package/lib/bryntum-splitter.component.d.ts +714 -0
  118. package/lib/bryntum-tab-panel.component.d.ts +1065 -0
  119. package/lib/bryntum-text-area-field.component.d.ts +951 -0
  120. package/lib/bryntum-text-area-picker-field.component.d.ts +972 -0
  121. package/lib/bryntum-text-field.component.d.ts +957 -0
  122. package/lib/bryntum-time-field.component.d.ts +1006 -0
  123. package/lib/bryntum-time-picker.component.d.ts +853 -0
  124. package/lib/bryntum-toolbar.component.d.ts +879 -0
  125. package/lib/bryntum-tree-combo.component.d.ts +1199 -0
  126. package/lib/bryntum-tree-grid.component.d.ts +2273 -0
  127. package/lib/bryntum-widget.component.d.ts +678 -0
  128. package/lib/bryntum-year-picker.component.d.ts +1049 -0
  129. package/lib/grid.module.d.ts +65 -0
  130. package/lib/wrapper.helper.d.ts +26 -0
  131. package/package.json +33 -0
  132. 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==