@decaf-ts/for-angular 0.0.9 → 0.0.10
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/dist/{lib/components → components}/empty-state/empty-state.component.d.ts +3 -3
- package/dist/{lib/components → components}/fieldset/fieldset.component.d.ts +1 -1
- package/dist/{lib/components → components}/filter/filter.component.d.ts +2 -2
- package/dist/{lib/components → components}/layout/layout.component.d.ts +2 -2
- package/dist/{lib/components → components}/list/list.component.d.ts +3 -3
- package/dist/{lib/components → components}/list-item/list-item.component.d.ts +3 -3
- package/dist/{lib/components → components}/model-renderer/model-renderer.component.d.ts +1 -1
- package/dist/{lib/components → components}/pagination/constants.d.ts +1 -1
- package/dist/{lib/components → components}/pagination/pagination.component.d.ts +2 -2
- package/dist/{lib/components → components}/searchbar/searchbar.component.d.ts +2 -2
- package/dist/{lib/engine → engine}/NgxBaseComponent.d.ts +1 -1
- package/dist/{lib/esm2022 → esm2022}/components/component-renderer/component-renderer.component.mjs +3 -3
- package/dist/esm2022/components/crud-field/crud-field.component.mjs +301 -0
- package/dist/esm2022/components/crud-form/constants.mjs +14 -0
- package/dist/esm2022/components/crud-form/crud-form.component.mjs +139 -0
- package/dist/esm2022/components/crud-form/types.mjs +2 -0
- package/dist/esm2022/components/empty-state/empty-state.component.mjs +348 -0
- package/dist/esm2022/components/fieldset/fieldset.component.mjs +225 -0
- package/dist/esm2022/components/filter/filter.component.mjs +689 -0
- package/dist/esm2022/components/for-angular-components.module.mjs +71 -0
- package/dist/esm2022/components/index.mjs +20 -0
- package/dist/esm2022/components/layout/layout.component.mjs +176 -0
- package/dist/esm2022/components/list/constants.mjs +6 -0
- package/dist/esm2022/components/list/list.component.mjs +1236 -0
- package/dist/{lib/esm2022 → esm2022}/components/list-item/list-item.component.mjs +6 -6
- package/dist/esm2022/components/model-renderer/model-renderer.component.mjs +138 -0
- package/dist/esm2022/components/pagination/constants.mjs +2 -0
- package/dist/esm2022/components/pagination/pagination.component.mjs +323 -0
- package/dist/esm2022/components/searchbar/searchbar.component.mjs +493 -0
- package/dist/esm2022/decaf-ts-for-angular.mjs +5 -0
- package/dist/esm2022/directives/collapsable.directive.mjs +28 -0
- package/dist/esm2022/directives/index.mjs +2 -0
- package/dist/esm2022/engine/DynamicModule.mjs +18 -0
- package/dist/esm2022/engine/NgxBaseComponent.mjs +539 -0
- package/dist/esm2022/engine/NgxCrudFormField.mjs +125 -0
- package/dist/esm2022/engine/NgxFormService.mjs +315 -0
- package/dist/esm2022/engine/NgxRenderingEngine.mjs +192 -0
- package/dist/esm2022/engine/NgxRenderingEngine2.mjs +332 -0
- package/dist/esm2022/engine/ValidatorFactory.mjs +102 -0
- package/dist/esm2022/engine/constants.mjs +160 -0
- package/dist/esm2022/engine/decorators.mjs +38 -0
- package/dist/esm2022/engine/index.mjs +17 -0
- package/dist/esm2022/engine/types.mjs +4 -0
- package/dist/esm2022/for-angular.module.mjs +118 -0
- package/dist/esm2022/helpers/index.mjs +13 -0
- package/dist/esm2022/helpers/utils.mjs +415 -0
- package/dist/esm2022/interfaces.mjs +2 -0
- package/dist/esm2022/public-apis.mjs +14 -0
- package/dist/{lib/fesm2022 → fesm2022}/decaf-ts-for-angular.mjs +3029 -3036
- package/dist/fesm2022/decaf-ts-for-angular.mjs.map +1 -0
- package/package.json +4 -2
- package/dist/lib/esm2022/components/crud-field/crud-field.component.mjs +0 -301
- package/dist/lib/esm2022/components/crud-form/constants.mjs +0 -14
- package/dist/lib/esm2022/components/crud-form/crud-form.component.mjs +0 -139
- package/dist/lib/esm2022/components/crud-form/types.mjs +0 -2
- package/dist/lib/esm2022/components/empty-state/empty-state.component.mjs +0 -348
- package/dist/lib/esm2022/components/fieldset/fieldset.component.mjs +0 -225
- package/dist/lib/esm2022/components/filter/filter.component.mjs +0 -689
- package/dist/lib/esm2022/components/for-angular-components.module.mjs +0 -71
- package/dist/lib/esm2022/components/index.mjs +0 -20
- package/dist/lib/esm2022/components/layout/layout.component.mjs +0 -176
- package/dist/lib/esm2022/components/list/constants.mjs +0 -6
- package/dist/lib/esm2022/components/list/list.component.mjs +0 -1236
- package/dist/lib/esm2022/components/model-renderer/model-renderer.component.mjs +0 -138
- package/dist/lib/esm2022/components/pagination/constants.mjs +0 -2
- package/dist/lib/esm2022/components/pagination/pagination.component.mjs +0 -323
- package/dist/lib/esm2022/components/searchbar/searchbar.component.mjs +0 -493
- package/dist/lib/esm2022/decaf-ts-for-angular.mjs +0 -5
- package/dist/lib/esm2022/directives/collapsable.directive.mjs +0 -28
- package/dist/lib/esm2022/directives/index.mjs +0 -2
- package/dist/lib/esm2022/engine/DynamicModule.mjs +0 -18
- package/dist/lib/esm2022/engine/NgxBaseComponent.mjs +0 -540
- package/dist/lib/esm2022/engine/NgxCrudFormField.mjs +0 -125
- package/dist/lib/esm2022/engine/NgxFormService.mjs +0 -315
- package/dist/lib/esm2022/engine/NgxRenderingEngine.mjs +0 -192
- package/dist/lib/esm2022/engine/NgxRenderingEngine2.mjs +0 -332
- package/dist/lib/esm2022/engine/ValidatorFactory.mjs +0 -102
- package/dist/lib/esm2022/engine/constants.mjs +0 -160
- package/dist/lib/esm2022/engine/decorators.mjs +0 -38
- package/dist/lib/esm2022/engine/index.mjs +0 -17
- package/dist/lib/esm2022/engine/types.mjs +0 -4
- package/dist/lib/esm2022/for-angular.module.mjs +0 -118
- package/dist/lib/esm2022/helpers/index.mjs +0 -13
- package/dist/lib/esm2022/helpers/utils.mjs +0 -415
- package/dist/lib/esm2022/interfaces.mjs +0 -2
- package/dist/lib/esm2022/public-apis.mjs +0 -14
- package/dist/lib/fesm2022/decaf-ts-for-angular.mjs.map +0 -1
- /package/dist/{lib/README.md → README.md} +0 -0
- /package/dist/{lib/assets → assets}/i18n/en.json +0 -0
- /package/dist/{lib/assets → assets}/images/angular-logo.svg +0 -0
- /package/dist/{lib/assets → assets}/images/decaf-logo-black.svg +0 -0
- /package/dist/{lib/assets → assets}/images/decaf-logo-lw.svg +0 -0
- /package/dist/{lib/assets → assets}/images/decaf-logo-white.svg +0 -0
- /package/dist/{lib/assets → assets}/images/decaf-logo.svg +0 -0
- /package/dist/{lib/components → components}/component-renderer/component-renderer.component.d.ts +0 -0
- /package/dist/{lib/components → components}/crud-field/crud-field.component.d.ts +0 -0
- /package/dist/{lib/components → components}/crud-form/constants.d.ts +0 -0
- /package/dist/{lib/components → components}/crud-form/crud-form.component.d.ts +0 -0
- /package/dist/{lib/components → components}/crud-form/types.d.ts +0 -0
- /package/dist/{lib/components → components}/for-angular-components.module.d.ts +0 -0
- /package/dist/{lib/components → components}/index.d.ts +0 -0
- /package/dist/{lib/components → components}/list/constants.d.ts +0 -0
- /package/dist/{lib/directives → directives}/collapsable.directive.d.ts +0 -0
- /package/dist/{lib/directives → directives}/index.d.ts +0 -0
- /package/dist/{lib/engine → engine}/DynamicModule.d.ts +0 -0
- /package/dist/{lib/engine → engine}/NgxCrudFormField.d.ts +0 -0
- /package/dist/{lib/engine → engine}/NgxFormService.d.ts +0 -0
- /package/dist/{lib/engine → engine}/NgxRenderingEngine.d.ts +0 -0
- /package/dist/{lib/engine → engine}/NgxRenderingEngine2.d.ts +0 -0
- /package/dist/{lib/engine → engine}/ValidatorFactory.d.ts +0 -0
- /package/dist/{lib/engine → engine}/constants.d.ts +0 -0
- /package/dist/{lib/engine → engine}/decorators.d.ts +0 -0
- /package/dist/{lib/engine → engine}/index.d.ts +0 -0
- /package/dist/{lib/engine → engine}/types.d.ts +0 -0
- /package/dist/{lib/for-angular.module.d.ts → for-angular.module.d.ts} +0 -0
- /package/dist/{lib/helpers → helpers}/index.d.ts +0 -0
- /package/dist/{lib/helpers → helpers}/utils.d.ts +0 -0
- /package/dist/{lib/index.d.ts → index.d.ts} +0 -0
- /package/dist/{lib/interfaces.d.ts → interfaces.d.ts} +0 -0
- /package/dist/{lib/public-apis.d.ts → public-apis.d.ts} +0 -0
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, } from '@angular/core';
|
|
3
|
-
import { Location } from '@angular/common';
|
|
4
|
-
import { NgxFormService } from '../../engine/NgxFormService';
|
|
5
|
-
import { Dynamic, EventConstants } from '../../engine';
|
|
6
|
-
import { OperationKeys } from '@decaf-ts/db-decorators';
|
|
7
|
-
import { DefaultFormReactiveOptions } from './constants';
|
|
8
|
-
import { ForAngularModule, getLogger } from 'src/lib/for-angular.module';
|
|
9
|
-
import { IonIcon } from '@ionic/angular/standalone';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
12
|
-
import * as i2 from "@angular/forms";
|
|
13
|
-
/**
|
|
14
|
-
* @component CrudFormComponent
|
|
15
|
-
* @example <ngx-decaf-crud-form
|
|
16
|
-
* action="create"
|
|
17
|
-
* operation="create"
|
|
18
|
-
* formGroup="formGroup"
|
|
19
|
-
* rendererId="rendererId"
|
|
20
|
-
* submitEvent="submitEvent"
|
|
21
|
-
* target="_self"
|
|
22
|
-
* method="event">
|
|
23
|
-
* </ngx-decaf-crud-form>
|
|
24
|
-
*
|
|
25
|
-
* @param {string} action - The action to be performed (create, read, update, delete)
|
|
26
|
-
* @param {CrudOperations} operation - The CRUD operation being performed (create, read, update, delete)
|
|
27
|
-
* @param {FormGroup} formGroup - The form group
|
|
28
|
-
* @param {string} rendererId - The renderer id
|
|
29
|
-
* @param {SubmitEvent} submitEvent - The submit event
|
|
30
|
-
* @param {string} target - The target
|
|
31
|
-
* @param {string} method - The method
|
|
32
|
-
*/
|
|
33
|
-
let CrudFormComponent = class CrudFormComponent {
|
|
34
|
-
constructor() {
|
|
35
|
-
this.updateOn = 'change';
|
|
36
|
-
this.target = '_self';
|
|
37
|
-
this.method = 'event';
|
|
38
|
-
this.submitEvent = new EventEmitter();
|
|
39
|
-
/**
|
|
40
|
-
* @description Angular Location service.
|
|
41
|
-
* @summary Injected service that provides access to the browser's URL and history.
|
|
42
|
-
* This service is used for interacting with the browser's history API, allowing
|
|
43
|
-
* for back navigation and URL manipulation outside of Angular's router.
|
|
44
|
-
*
|
|
45
|
-
* @private
|
|
46
|
-
* @type {Location}
|
|
47
|
-
* @memberOf CrudFormComponent
|
|
48
|
-
*/
|
|
49
|
-
this.location = inject(Location);
|
|
50
|
-
this.OperationKeys = OperationKeys;
|
|
51
|
-
}
|
|
52
|
-
// ngAfterViewInit() {
|
|
53
|
-
// if (![OperationKeys.READ, OperationKeys.DELETE].includes(this.operation))
|
|
54
|
-
// NgxFormService.formAfterViewInit(this, this.rendererId);
|
|
55
|
-
// }
|
|
56
|
-
async ngOnInit() {
|
|
57
|
-
if (!this.logger)
|
|
58
|
-
this.logger = getLogger(this);
|
|
59
|
-
if (this.operation === OperationKeys.READ || this.operation === OperationKeys.DELETE)
|
|
60
|
-
this.formGroup = undefined;
|
|
61
|
-
this.options = Object.assign({}, DefaultFormReactiveOptions, this.options || {});
|
|
62
|
-
}
|
|
63
|
-
ngOnDestroy() {
|
|
64
|
-
if (this.formGroup)
|
|
65
|
-
NgxFormService.unregister(this.formGroup);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* @param {SubmitEvent} event
|
|
69
|
-
*/
|
|
70
|
-
async submit(event) {
|
|
71
|
-
event.preventDefault();
|
|
72
|
-
event.stopImmediatePropagation();
|
|
73
|
-
event.stopPropagation();
|
|
74
|
-
if (!NgxFormService.validateFields(this.formGroup))
|
|
75
|
-
return false;
|
|
76
|
-
const data = NgxFormService.getFormData(this.formGroup);
|
|
77
|
-
this.submitEvent.emit({
|
|
78
|
-
data,
|
|
79
|
-
component: 'CrudFormComponent',
|
|
80
|
-
name: this.action || EventConstants.SUBMIT_EVENT,
|
|
81
|
-
handlers: this.handlers,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
handleReset() {
|
|
85
|
-
this.location.back();
|
|
86
|
-
// if(OperationKeys.DELETE !== this.operation)
|
|
87
|
-
// NgxFormService.reset(this.formGroup);
|
|
88
|
-
// else
|
|
89
|
-
// this.location.back();
|
|
90
|
-
}
|
|
91
|
-
handleDelete() {
|
|
92
|
-
this.submitEvent.emit({
|
|
93
|
-
data: this.uid,
|
|
94
|
-
component: 'CrudFormComponent',
|
|
95
|
-
name: EventConstants.SUBMIT_EVENT,
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrudFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CrudFormComponent, isStandalone: true, selector: "ngx-decaf-crud-form", inputs: { model: "model", updateOn: "updateOn", target: "target", method: "method", options: "options", action: "action", operation: "operation", handlers: "handlers", formGroup: "formGroup", childOf: "childOf", rendererId: "rendererId", uid: "uid" }, outputs: { submitEvent: "submitEvent" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["reactiveForm"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div id=\"dcf-buttons-container\" class=\"dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n <div>\n @if(options.buttons.clear) {\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ ['create', 'update'].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" id=\"dcf-buttons-container\">\n\n @if(operation === 'delete' && uid) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ ['delete', 'read', 'update'].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: ["#dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 991px){#dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 990px){#dcf-buttons-container.dcf-flex div{width:100%}#dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
100
|
-
};
|
|
101
|
-
CrudFormComponent = __decorate([
|
|
102
|
-
Dynamic()
|
|
103
|
-
], CrudFormComponent);
|
|
104
|
-
export { CrudFormComponent };
|
|
105
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrudFormComponent, decorators: [{
|
|
106
|
-
type: Component,
|
|
107
|
-
args: [{ standalone: true, selector: 'ngx-decaf-crud-form', imports: [ForAngularModule, IonIcon], template: "@if(operation !== 'read' && operation !== 'delete') {\n <form #reactiveForm [id]=\"rendererId\" [formGroup]=\"formGroup\" (submit)=\"submit($event)\" novalidate [target]=\"target\">\n <ng-content #formContent></ng-content>\n <div id=\"dcf-buttons-container\" class=\"dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left\">\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{ action ? action : options.buttons.submit.text}}\n </ion-button>\n </div>\n <div>\n @if(options.buttons.clear) {\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ ['create', 'update'].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n }\n </div>\n </div>\n </form>\n} @else {\n <div [class]=\"'dcf-grid dcf-grid-collapse dcf-flex dcf-flex-left ' + operation\" id=\"dcf-buttons-container\">\n\n @if(operation === 'delete' && uid) {\n <div>\n <ion-button\n (click)=\"handleDelete()\"\n color=\"danger\"\n type=\"button\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n Delete\n </ion-button>\n </div>\n\n }\n @if(operation === OperationKeys.CREATE || operation === OperationKeys.UPDATE) {\n <div>\n <ion-button\n type=\"submit\">\n @if(options.buttons.submit.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.submit.iconSlot\" [name]=\"options.buttons.submit.icon\"></ion-icon>\n }\n {{options.buttons.submit.text}}\n </ion-button>\n </div>\n }\n\n @if(options.buttons.clear) {\n <div>\n <ion-button fill=\"clear\" (click)=\"handleReset()\">\n @if(options.buttons.clear?.icon) {\n <ion-icon aria-hidden=\"true\" [slot]=\"options.buttons.clear?.iconSlot\" [name]=\"options.buttons.clear?.icon\"></ion-icon>\n }\n {{ ['delete', 'read', 'update'].includes(operation) ? 'Back' : options.buttons.clear?.text}}\n </ion-button>\n </div>\n\n }\n </div>\n}\n\n", styles: ["#dcf-buttons-container{margin-top:1.8rem;margin-bottom:0}@media (min-width: 991px){#dcf-buttons-container.dcf-flex{flex-direction:row-reverse}}@media (max-width: 990px){#dcf-buttons-container.dcf-flex div{width:100%}#dcf-buttons-container.dcf-flex ion-button{width:100%;margin-bottom:1rem}}\n"] }]
|
|
108
|
-
}], propDecorators: { model: [{
|
|
109
|
-
type: Input
|
|
110
|
-
}], updateOn: [{
|
|
111
|
-
type: Input
|
|
112
|
-
}], component: [{
|
|
113
|
-
type: ViewChild,
|
|
114
|
-
args: ['reactiveForm', { static: false, read: ElementRef }]
|
|
115
|
-
}], target: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}], method: [{
|
|
118
|
-
type: Input
|
|
119
|
-
}], options: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}], action: [{
|
|
122
|
-
type: Input
|
|
123
|
-
}], operation: [{
|
|
124
|
-
type: Input,
|
|
125
|
-
args: [{ required: true }]
|
|
126
|
-
}], handlers: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], formGroup: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], childOf: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], rendererId: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], uid: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], submitEvent: [{
|
|
137
|
-
type: Output
|
|
138
|
-
}] } });
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixPQUFPLEVBQUUsY0FBYyxFQUFrRCxNQUFNLGNBQWMsQ0FBQztBQUV0SCxPQUFPLEVBQWtCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBS3BEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBU0ksSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBaUI7SUFBdkI7UUFhTCxhQUFRLEdBQW9CLFFBQVEsQ0FBQztRQU1yQyxXQUFNLEdBQW1CLE9BQU8sQ0FBQztRQUdqQyxXQUFNLEdBQTZCLE9BQU8sQ0FBQztRQTBDM0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQWtCaEQ7Ozs7Ozs7OztXQVNHO1FBQ0ssYUFBUSxHQUFhLE1BQU0sQ0FBQyxR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TixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFXTixHQUFHO3NCQURGLEtBQUs7Z0JBS04sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTmd4Rm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4Rm9ybVNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1FdmVudCwgRHluYW1pYywgRXZlbnRDb25zdGFudHMsIEZpZWxkVXBkYXRlTW9kZSwgSFRNTEZvcm1UYXJnZXQsIFJlbmRlcmVkTW9kZWwgfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1PcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucywgT3BlcmF0aW9uS2V5cyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSwgZ2V0TG9nZ2VyIH0gZnJvbSAnc3JjL2xpYi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnQGRlY2FmLXRzL2xvZ2dpbmcnO1xuXG5cbi8qKlxuICogQGNvbXBvbmVudCBDcnVkRm9ybUNvbXBvbmVudFxuICogQGV4YW1wbGUgPG5neC1kZWNhZi1jcnVkLWZvcm1cbiAqICAgYWN0aW9uPVwiY3JlYXRlXCJcbiAqICAgb3BlcmF0aW9uPVwiY3JlYXRlXCJcbiAqICAgZm9ybUdyb3VwPVwiZm9ybUdyb3VwXCJcbiAqICAgcmVuZGVyZXJJZD1cInJlbmRlcmVySWRcIlxuICogICBzdWJtaXRFdmVudD1cInN1Ym1pdEV2ZW50XCJcbiAqICAgdGFyZ2V0PVwiX3NlbGZcIlxuICogICBtZXRob2Q9XCJldmVudFwiPlxuICogPC9uZ3gtZGVjYWYtY3J1ZC1mb3JtPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Q3J1ZE9wZXJhdGlvbnN9IG9wZXJhdGlvbiAtIFRoZSBDUlVEIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIGZvcm0gZ3JvdXBcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW5kZXJlcklkIC0gVGhlIHJlbmRlcmVyIGlkXG4gKiBAcGFyYW0ge1N1Ym1pdEV2ZW50fSBzdWJtaXRFdmVudCAtIFRoZSBzdWJtaXQgZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBUaGUgdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gVGhlIG1ldGhvZFxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtY3J1ZC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NydWQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NydWQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZSwgSW9uSWNvbl0sXG59KVxuZXhwb3J0IGNsYXNzIENydWRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBGb3JtRWxlbWVudCwgT25EZXN0cm95LCBSZW5kZXJlZE1vZGVsIHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9zaXRvcnkgbW9kZWwgZm9yIGRhdGEgb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgVGhlIGRhdGEgbW9kZWwgcmVwb3NpdG9yeSB0aGF0IHRoaXMgY29tcG9uZW50IHdpbGwgdXNlIGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gICAqIFRoaXMgcHJvdmlkZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIGxheWVyIGZvciByZXRyaWV2aW5nIGFuZCBtYW5pcHVsYXRpbmcgZGF0YS5cbiAgICpcbiAgICogQHR5cGUge01vZGVsfCB1bmRlZmluZWR9XG4gICAqL1xuICBASW5wdXQoKVxuICBtb2RlbCE6IE1vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHVwZGF0ZU9uOiBGaWVsZFVwZGF0ZU1vZGUgPSAnY2hhbmdlJztcblxuICBAVmlld0NoaWxkKCdyZWFjdGl2ZUZvcm0nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKVxuICB0YXJnZXQ6IEhUTUxGb3JtVGFyZ2V0ID0gJ19zZWxmJztcblxuICBASW5wdXQoKVxuICBtZXRob2Q6ICdnZXQnIHwgJ3Bvc3QnIHwgJ2V2ZW50JyA9ICdldmVudCc7XG5cbiAgQElucHV0KClcbiAgb3B0aW9ucyE6IENydWRGb3JtT3B0aW9ucztcblxuICBASW5wdXQoKVxuICBhY3Rpb24/OiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgb3BlcmF0aW9uITogQ3J1ZE9wZXJhdGlvbnM7XG5cbiAgQElucHV0KClcbiAgaGFuZGxlcnMhOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPj47XG5cbiAgQElucHV0KClcbiAgZm9ybUdyb3VwITogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGF0aCB0byB0aGUgcGFyZW50IEZvcm1Hcm91cCwgaWYgbmVzdGVkLlxuICAgKiBAc3VtbWFyeSBGdWxsIGRvdC1kZWxpbWl0ZWQgcGF0aCBvZiB0aGUgcGFyZW50IEZvcm1Hcm91cC4gU2V0IG9ubHkgd2hlbiBpcyBwYXJ0IG9mIGEgbmVzdGVkIHN0cnVjdHVyZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIENydWRGb3JtQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjaGlsZE9mPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHJlbmRlcmVySWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgcmVjb3JkLlxuICAgKiBAc3VtbWFyeSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCByZWNvcmQgYmVpbmcgZGlzcGxheWVkIG9yIG1hbmlwdWxhdGVkLlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHByaW1hcnkga2V5IGZvciBvcGVyYXRpb25zIG9uIHNwZWNpZmljIHJlY29yZHMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9XG4gICAqL1xuICBASW5wdXQoKVxuICB1aWQhOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG5cblxuICBAT3V0cHV0KClcbiAgc3VibWl0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENydWRGb3JtRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGxvZ2dpbmcgY2FwYWJpbGl0aWVzIGZvciB0aGUgY29tcG9uZW50LCBhbGxvd2luZyBmb3IgY29uc2lzdGVudFxuICAgKiBhbmQgc3RydWN0dXJlZCBsb2dnaW5nIG9mIGluZm9ybWF0aW9uLCB3YXJuaW5ncywgYW5kIGVycm9ycy4gVGhpcyBsb2dnZXIgaXMgaW5pdGlhbGl6ZWRcbiAgICogaW4gdGhlIG5nT25Jbml0IG1ldGhvZCB1c2luZyB0aGUgZ2V0TG9nZ2VyIGZ1bmN0aW9uIGZyb20gdGhlIEZvckFuZ3VsYXJNb2R1bGUuXG4gICAqXG4gICAqIFRoZSBsb2dnZXIgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb21wb25lbnQgdG8gcmVjb3JkIGltcG9ydGFudCBldmVudHMsIGRlYnVnIGluZm9ybWF0aW9uLFxuICAgKiBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSXQgaGVscHMgaW4gbW9uaXRvcmluZyB0aGUgY29tcG9uZW50J3MgYmVoYXZpb3IsIHRyYWNraW5nIHRoZSBmbG93XG4gICAqIG9mIG9wZXJhdGlvbnMsIGFuZCBmYWNpbGl0YXRpbmcgZWFzaWVyIGRlYnVnZ2luZyBhbmQgbWFpbnRlbmFuY2UuXG4gICAqXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2dnZXIhOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIExvY2F0aW9uIHNlcnZpY2UuXG4gICAqIEBzdW1tYXJ5IEluamVjdGVkIHNlcnZpY2UgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGJyb3dzZXIncyBVUkwgYW5kIGhpc3RvcnkuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm93c2VyJ3MgaGlzdG9yeSBBUEksIGFsbG93aW5nXG4gICAqIGZvciBiYWNrIG5hdmlnYXRpb24gYW5kIFVSTCBtYW5pcHVsYXRpb24gb3V0c2lkZSBvZiBBbmd1bGFyJ3Mgcm91dGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7TG9jYXRpb259XG4gICAqIEBtZW1iZXJPZiBDcnVkRm9ybUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBpZiAoIVtPcGVyYXRpb25LZXlzLlJFQUQsIE9wZXJhdGlvbktleXMuREVMRVRFXS5pbmNsdWRlcyh0aGlzLm9wZXJhdGlvbikpXG4gICAgLy8gICBOZ3hGb3JtU2VydmljZS5mb3JtQWZ0ZXJWaWV3SW5pdCh0aGlzLCB0aGlzLnJlbmRlcmVySWQpO1xuICAvLyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmxvZ2dlcilcbiAgICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKHRoaXMpO1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5SRUFEIHx8IHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkRFTEVURSlcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRGb3JtUmVhY3RpdmVPcHRpb25zLFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXApXG4gICAgICBOZ3hGb3JtU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuZm9ybUdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtTdWJtaXRFdmVudH0gZXZlbnRcbiAgICovXG4gIGFzeW5jIHN1Ym1pdChldmVudDogU3VibWl0RXZlbnQpOiBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghTmd4Rm9ybVNlcnZpY2UudmFsaWRhdGVGaWVsZHModGhpcy5mb3JtR3JvdXAgYXMgRm9ybUdyb3VwKSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGRhdGEgPSBOZ3hGb3JtU2VydmljZS5nZXRGb3JtRGF0YSh0aGlzLmZvcm1Hcm91cCBhcyBGb3JtR3JvdXApO1xuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh7XG4gICAgICBkYXRhLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogdGhpcy5hY3Rpb24gfHwgRXZlbnRDb25zdGFudHMuU1VCTUlUX0VWRU5ULFxuICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVSZXNldCgpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAvLyBpZihPcGVyYXRpb25LZXlzLkRFTEVURSAhPT0gdGhpcy5vcGVyYXRpb24pXG4gICAgLy8gICBOZ3hGb3JtU2VydmljZS5yZXNldCh0aGlzLmZvcm1Hcm91cCk7XG4gICAgLy8gZWxzZVxuICAgIC8vICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICBoYW5kbGVEZWxldGUoKSB7XG4gICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMudWlkLFxuICAgICAgY29tcG9uZW50OiAnQ3J1ZEZvcm1Db21wb25lbnQnLFxuICAgICAgbmFtZTogRXZlbnRDb25zdGFudHMuU1VCTUlUX0VWRU5ULFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IE9wZXJhdGlvbktleXMgPSBPcGVyYXRpb25LZXlzO1xufVxuIiwiQGlmKG9wZXJhdGlvbiAhPT0gJ3JlYWQnICYmIG9wZXJhdGlvbiAhPT0gJ2RlbGV0ZScpIHtcbiAgPGZvcm0gI3JlYWN0aXZlRm9ybSBbaWRdPVwicmVuZGVyZXJJZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKHN1Ym1pdCk9XCJzdWJtaXQoJGV2ZW50KVwiIG5vdmFsaWRhdGUgW3RhcmdldF09XCJ0YXJnZXRcIj5cbiAgICA8bmctY29udGVudCAjZm9ybUNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgaWQ9XCJkY2YtYnV0dG9ucy1jb250YWluZXJcIiBjbGFzcz1cImRjZi1ncmlkIGRjZi1ncmlkLWNvbGxhcHNlIGRjZi1mbGV4IGRjZi1mbGV4LWxlZnRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb24pIHtcbiAgICAgICAgICAgIDxpb24taWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc2xvdF09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25TbG90XCIgW25hbWVdPVwib3B0aW9ucy5idXR0b25zLnN1Ym1pdC5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgYWN0aW9uID8gYWN0aW9uIDogb3B0aW9ucy5idXR0b25zLnN1Ym1pdC50ZXh0fX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJoYW5kbGVSZXNldCgpXCI+XG4gICAgICAgICAgICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHt7IFsnY3JlYXRlJywgJ3VwZGF0ZSddLmluY2x1ZGVzKG9wZXJhdGlvbikgPyAnQmFjaycgOiBvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbn0gQGVsc2Uge1xuICA8ZGl2IFtjbGFzc109XCInZGNmLWdyaWQgZGNmLWdyaWQtY29sbGFwc2UgZGNmLWZsZXggZGNmLWZsZXgtbGVmdCAnICsgb3BlcmF0aW9uXCIgaWQ9XCJkY2YtYnV0dG9ucy1jb250YWluZXJcIj5cblxuICAgIEBpZihvcGVyYXRpb24gPT09ICdkZWxldGUnICYmIHVpZCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRGVsZXRlKClcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBEZWxldGVcbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICB9XG4gICAgQGlmKG9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5DUkVBVEUgfHwgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlVQREFURSkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgICAgQGlmKG9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvbikge1xuICAgICAgICAgICAgPGlvbi1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5zdWJtaXQuaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuc3VibWl0Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7e29wdGlvbnMuYnV0dG9ucy5zdWJtaXQudGV4dH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZihvcHRpb25zLmJ1dHRvbnMuY2xlYXIpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImhhbmRsZVJlc2V0KClcIj5cbiAgICAgICAgICBAaWYob3B0aW9ucy5idXR0b25zLmNsZWFyPy5pY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtzbG90XT1cIm9wdGlvbnMuYnV0dG9ucy5jbGVhcj8uaWNvblNsb3RcIiBbbmFtZV09XCJvcHRpb25zLmJ1dHRvbnMuY2xlYXI/Lmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7eyBbJ2RlbGV0ZScsICdyZWFkJywgJ3VwZGF0ZSddLmluY2x1ZGVzKG9wZXJhdGlvbikgPyAnQmFjaycgOiBvcHRpb25zLmJ1dHRvbnMuY2xlYXI/LnRleHR9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgIH1cbiAgPC9kaXY+XG59XG5cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY3J1ZC1mb3JtL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEZvcm1SZWFjdGl2ZVN1Ym1pdEV2ZW50IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3J1ZEZvcm1PcHRpb25zIHtcbiAgYnV0dG9uczoge1xuICAgIHN1Ym1pdDoge1xuICAgICAgaWNvbj86IHN0cmluZztcbiAgICAgIGljb25TbG90PzogJ3N0YXJ0JyB8ICdlbmQnO1xuICAgICAgdGV4dD86IHN0cmluZztcbiAgICB9O1xuICAgIGNsZWFyPzoge1xuICAgICAgaWNvbj86IHN0cmluZztcbiAgICAgIGljb25TbG90PzogJ3N0YXJ0JyB8ICdlbmQnO1xuICAgICAgdGV4dD86IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuIl19
|
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Component, inject, Input } from '@angular/core';
|
|
3
|
-
import { IonCard, IonCardContent, IonIcon, IonTitle, NavController } from '@ionic/angular/standalone';
|
|
4
|
-
import * as allIcons from 'ionicons/icons';
|
|
5
|
-
import { addIcons } from 'ionicons';
|
|
6
|
-
import { ForAngularModule } from 'src/lib/for-angular.module';
|
|
7
|
-
import { Dynamic } from 'src/lib/engine';
|
|
8
|
-
import { stringToBoolean } from 'src/lib/helpers';
|
|
9
|
-
import { NgxBaseComponent } from 'src/lib/engine/NgxBaseComponent';
|
|
10
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
11
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
14
|
-
import * as i2 from "@angular/common";
|
|
15
|
-
/**
|
|
16
|
-
* @description Component for displaying empty state messages with optional actions.
|
|
17
|
-
* @summary This component provides a standardized way to display empty state messages
|
|
18
|
-
* when no data is available or when a user needs to take an action to populate content.
|
|
19
|
-
* It includes customizable title, subtitle, icon, and action button elements that can be
|
|
20
|
-
* styled and configured through input properties. The component supports localization
|
|
21
|
-
* and can trigger navigation or custom actions when the button is clicked.
|
|
22
|
-
*
|
|
23
|
-
* @mermaid
|
|
24
|
-
* classDiagram
|
|
25
|
-
* class EmptyStateComponent {
|
|
26
|
-
* +string title
|
|
27
|
-
* +string titleColor
|
|
28
|
-
* +string subtitle
|
|
29
|
-
* +string subtitleColor
|
|
30
|
-
* +StringOrBoolean showIcon
|
|
31
|
-
* +string icon
|
|
32
|
-
* +string iconSize
|
|
33
|
-
* +PredefinedColors iconColor
|
|
34
|
-
* +string|Function buttonLink
|
|
35
|
-
* +string buttonText
|
|
36
|
-
* +string buttonFill
|
|
37
|
-
* +Color buttonColor
|
|
38
|
-
* +string buttonSize
|
|
39
|
-
* +string searchValue
|
|
40
|
-
* -NavController navController
|
|
41
|
-
* +ngOnInit()
|
|
42
|
-
* +handleClick()
|
|
43
|
-
* }
|
|
44
|
-
* EmptyStateComponent --|> NgxBaseComponent
|
|
45
|
-
* EmptyStateComponent --|> OnInit
|
|
46
|
-
*
|
|
47
|
-
* @extends {NgxBaseComponent}
|
|
48
|
-
* @implements {OnInit}
|
|
49
|
-
*/
|
|
50
|
-
let EmptyStateComponent = class EmptyStateComponent extends NgxBaseComponent {
|
|
51
|
-
/**
|
|
52
|
-
* @description Creates an instance of EmptyStateComponent.
|
|
53
|
-
* @summary Initializes a new EmptyStateComponent by calling the parent class constructor
|
|
54
|
-
* with the component name for logging and identification purposes. This component provides
|
|
55
|
-
* a standardized way to display empty state messages with optional icons and action buttons.
|
|
56
|
-
*
|
|
57
|
-
* @memberOf EmptyStateComponent
|
|
58
|
-
*/
|
|
59
|
-
constructor() {
|
|
60
|
-
super("EmptyStateComponent");
|
|
61
|
-
/**
|
|
62
|
-
* @description The main title displayed in the empty state.
|
|
63
|
-
* @summary Specifies the primary message to show in the empty state component.
|
|
64
|
-
* This text is typically used to inform the user about why they're seeing an empty view.
|
|
65
|
-
* If translatable is true, this will be processed through the localization system.
|
|
66
|
-
*
|
|
67
|
-
* @type {string}
|
|
68
|
-
* @default "title"
|
|
69
|
-
* @memberOf EmptyStateComponent
|
|
70
|
-
*/
|
|
71
|
-
this.title = "title";
|
|
72
|
-
/**
|
|
73
|
-
* @description The color of the title text.
|
|
74
|
-
* @summary Specifies the color for the title text using the application's color system.
|
|
75
|
-
* The value should correspond to a color variable defined in the application's theme.
|
|
76
|
-
* The component will automatically prefix this with "color-" to create the CSS class.
|
|
77
|
-
*
|
|
78
|
-
* @type {string}
|
|
79
|
-
* @default 'gray-6'
|
|
80
|
-
* @memberOf EmptyStateComponent
|
|
81
|
-
*/
|
|
82
|
-
this.titleColor = 'gray-6';
|
|
83
|
-
/**
|
|
84
|
-
* @description The secondary message displayed in the empty state.
|
|
85
|
-
* @summary Provides additional context or instructions below the main title.
|
|
86
|
-
* This text is typically used to guide the user on what actions they can take.
|
|
87
|
-
* If translatable is true, this will be processed through the localization system.
|
|
88
|
-
*
|
|
89
|
-
* @type {string | undefined}
|
|
90
|
-
* @memberOf EmptyStateComponent
|
|
91
|
-
*/
|
|
92
|
-
this.subtitle = "";
|
|
93
|
-
/**
|
|
94
|
-
* @description The color of the subtitle text.
|
|
95
|
-
* @summary Specifies the color for the subtitle text using the application's color system.
|
|
96
|
-
* The value should correspond to a color variable defined in the application's theme.
|
|
97
|
-
* The component will automatically prefix this with "color-" to create the CSS class.
|
|
98
|
-
*
|
|
99
|
-
* @type {string}
|
|
100
|
-
* @default 'gray-4'
|
|
101
|
-
* @memberOf EmptyStateComponent
|
|
102
|
-
*/
|
|
103
|
-
this.subtitleColor = 'gray-4';
|
|
104
|
-
/**
|
|
105
|
-
* @description Controls whether the icon is displayed.
|
|
106
|
-
* @summary Determines if the visual icon should be shown in the empty state.
|
|
107
|
-
* This can be provided as a boolean or a string that will be converted to a boolean.
|
|
108
|
-
* Icons help visually communicate the empty state context to users.
|
|
109
|
-
*
|
|
110
|
-
* @type {StringOrBoolean}
|
|
111
|
-
* @default true
|
|
112
|
-
* @memberOf EmptyStateComponent
|
|
113
|
-
*/
|
|
114
|
-
this.showIcon = true;
|
|
115
|
-
/**
|
|
116
|
-
* @description The name of the icon to display.
|
|
117
|
-
* @summary Specifies which icon to show when showIcon is true.
|
|
118
|
-
* The component uses the icon system defined in the application,
|
|
119
|
-
* and this value should correspond to an available icon name.
|
|
120
|
-
*
|
|
121
|
-
* @type {string}
|
|
122
|
-
* @default "ti-info-square-rounded"
|
|
123
|
-
* @memberOf EmptyStateComponent
|
|
124
|
-
*/
|
|
125
|
-
this.icon = "ti-info-square-rounded";
|
|
126
|
-
/**
|
|
127
|
-
* @description The size of the displayed icon.
|
|
128
|
-
* @summary Controls the size of the icon shown in the empty state.
|
|
129
|
-
* Can be either 'large' or 'small' to accommodate different layout needs.
|
|
130
|
-
*
|
|
131
|
-
* @type {'large' | 'small' | undefined}
|
|
132
|
-
* @default 'large'
|
|
133
|
-
* @memberOf EmptyStateComponent
|
|
134
|
-
*/
|
|
135
|
-
this.iconSize = 'large';
|
|
136
|
-
/**
|
|
137
|
-
* @description The color of the displayed icon.
|
|
138
|
-
* @summary Specifies the color for the icon using Ionic's predefined color system.
|
|
139
|
-
* This allows the icon to match the application's color scheme.
|
|
140
|
-
*
|
|
141
|
-
* @type {PredefinedColors | undefined}
|
|
142
|
-
* @default 'medium'
|
|
143
|
-
* @memberOf EmptyStateComponent
|
|
144
|
-
*/
|
|
145
|
-
this.iconColor = 'medium';
|
|
146
|
-
/**
|
|
147
|
-
* @description The fill style of the action button.
|
|
148
|
-
* @summary Controls the visual style of the button using Ionic's button fill options.
|
|
149
|
-
* 'solid' creates a button with a solid background, 'outline' creates a button with
|
|
150
|
-
* just a border, and 'clear' creates a button with no background or border.
|
|
151
|
-
*
|
|
152
|
-
* @type {'clear' | 'solid' | 'outline'}
|
|
153
|
-
* @default 'solid'
|
|
154
|
-
* @memberOf EmptyStateComponent
|
|
155
|
-
*/
|
|
156
|
-
this.buttonFill = 'solid';
|
|
157
|
-
/**
|
|
158
|
-
* @description The color of the action button.
|
|
159
|
-
* @summary Specifies the color for the button using Ionic's color system.
|
|
160
|
-
* This allows the button to match the application's color scheme.
|
|
161
|
-
*
|
|
162
|
-
* @type {Color}
|
|
163
|
-
* @default 'primary'
|
|
164
|
-
* @memberOf EmptyStateComponent
|
|
165
|
-
*/
|
|
166
|
-
this.buttonColor = 'primary';
|
|
167
|
-
/**
|
|
168
|
-
* @description The size of the action button.
|
|
169
|
-
* @summary Controls the size of the button shown in the empty state.
|
|
170
|
-
* Can be 'large', 'small', or 'default' to accommodate different layout needs.
|
|
171
|
-
*
|
|
172
|
-
* @type {'large' | 'small' | 'default'}
|
|
173
|
-
* @default 'default'
|
|
174
|
-
* @memberOf EmptyStateComponent
|
|
175
|
-
*/
|
|
176
|
-
this.buttonSize = 'default';
|
|
177
|
-
/**
|
|
178
|
-
* @description Service for handling navigation operations.
|
|
179
|
-
* @summary Injected service that provides methods for navigating between routes.
|
|
180
|
-
* This service is used when the buttonLink is a string URL to navigate to that location.
|
|
181
|
-
*
|
|
182
|
-
* @private
|
|
183
|
-
* @type {NavController}
|
|
184
|
-
* @memberOf EmptyStateComponent
|
|
185
|
-
*/
|
|
186
|
-
this.navController = inject(NavController);
|
|
187
|
-
this.sanitizer = inject(DomSanitizer);
|
|
188
|
-
this.translate = inject(TranslateService);
|
|
189
|
-
addIcons(allIcons);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* @description Initializes the component after Angular first displays the data-bound properties.
|
|
193
|
-
* @summary Sets up the component by processing boolean inputs, applying localization to text
|
|
194
|
-
* elements if translation is enabled, and formatting CSS classes for title and subtitle colors.
|
|
195
|
-
* This method prepares the component for user interaction by ensuring all properties are
|
|
196
|
-
* properly initialized and localized.
|
|
197
|
-
*
|
|
198
|
-
* @mermaid
|
|
199
|
-
* sequenceDiagram
|
|
200
|
-
* participant A as Angular Lifecycle
|
|
201
|
-
* participant E as EmptyStateComponent
|
|
202
|
-
*
|
|
203
|
-
* A->>E: ngOnInit()
|
|
204
|
-
* E->>E: Process translatable flag
|
|
205
|
-
* E->>E: Process showIcon flag
|
|
206
|
-
* E->>E: Get locale settings
|
|
207
|
-
* alt translatable is true
|
|
208
|
-
* E->>E: Localize title
|
|
209
|
-
* E->>E: Localize subtitle
|
|
210
|
-
* E->>E: Localize buttonText
|
|
211
|
-
* end
|
|
212
|
-
* E->>E: Format title CSS class
|
|
213
|
-
* E->>E: Format subtitle CSS class
|
|
214
|
-
*
|
|
215
|
-
* @return {Promise<void>}
|
|
216
|
-
* @memberOf EmptyStateComponent
|
|
217
|
-
*/
|
|
218
|
-
async ngOnInit() {
|
|
219
|
-
this.parseProps(this);
|
|
220
|
-
this.translatable = stringToBoolean(this.translatable);
|
|
221
|
-
this.showIcon = stringToBoolean(this.showIcon);
|
|
222
|
-
this.locale = this.getLocale(this.translatable);
|
|
223
|
-
// if(this.translatable) {
|
|
224
|
-
// this.title = generateLocaleFromString(this.locale, this.title);
|
|
225
|
-
// this.subtitle = generateLocaleFromString(this.locale, this.subtitle);
|
|
226
|
-
// this.buttonText = generateLocaleFromString(this.locale, this.buttonText);
|
|
227
|
-
// }
|
|
228
|
-
this.titleColor = `dcf-title color-${this.titleColor}`;
|
|
229
|
-
this.subtitleColor = `dcf-subtitle color-${this.titleColor}`;
|
|
230
|
-
if (this.searchValue && this.translatable)
|
|
231
|
-
this.searchSubtitle = await this.getSearchSubtitle(this.subtitle);
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* @description Handles click events on the action button.
|
|
235
|
-
* @summary This method is triggered when the user clicks the action button in the empty state
|
|
236
|
-
* component. It supports three navigation patterns: 1) no action when buttonLink is not provided,
|
|
237
|
-
* 2) custom function execution when buttonLink is a function, and 3) navigation to a specific URL
|
|
238
|
-
* when buttonLink is a string. This flexibility allows the empty state to trigger various actions
|
|
239
|
-
* based on the context in which it's used.
|
|
240
|
-
*
|
|
241
|
-
* @mermaid
|
|
242
|
-
* sequenceDiagram
|
|
243
|
-
* participant U as User
|
|
244
|
-
* participant E as EmptyStateComponent
|
|
245
|
-
* participant N as NavController
|
|
246
|
-
*
|
|
247
|
-
* U->>E: Click action button
|
|
248
|
-
* E->>E: handleClick()
|
|
249
|
-
* alt buttonLink is not provided
|
|
250
|
-
* E-->>U: Return false (no action)
|
|
251
|
-
* else buttonLink is a function
|
|
252
|
-
* E->>E: Execute buttonLink function
|
|
253
|
-
* E-->>U: Return function result
|
|
254
|
-
* else buttonLink is a URL string
|
|
255
|
-
* E->>N: navigateForward(buttonLink)
|
|
256
|
-
* N-->>E: Return navigation result
|
|
257
|
-
* E-->>U: Return navigation result
|
|
258
|
-
* end
|
|
259
|
-
*
|
|
260
|
-
* @return {boolean | void | Promise<boolean>}
|
|
261
|
-
* - false if no action is taken
|
|
262
|
-
* - The result of the buttonLink function if it's a function
|
|
263
|
-
* - A Promise resolving to the navigation result if buttonLink is a URL
|
|
264
|
-
* @memberOf EmptyStateComponent
|
|
265
|
-
*/
|
|
266
|
-
handleClick() {
|
|
267
|
-
const fn = this.buttonLink;
|
|
268
|
-
if (!fn)
|
|
269
|
-
return false;
|
|
270
|
-
if (fn instanceof Function)
|
|
271
|
-
return fn();
|
|
272
|
-
return this.navController.navigateForward(fn);
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* @description Generates a localized and sanitized subtitle for search results.
|
|
276
|
-
* @summary This method takes a content string, typically the subtitle, and processes it
|
|
277
|
-
* through the translation service. It replaces a placeholder ('value0') with the actual
|
|
278
|
-
* search value, then sanitizes the result to safely use as HTML. This is particularly
|
|
279
|
-
* useful for displaying dynamic, localized messages in the empty state when a search
|
|
280
|
-
* yields no results.
|
|
281
|
-
*
|
|
282
|
-
* @param {string} content - The content string to be translated and processed
|
|
283
|
-
* @return {Promise<SafeHtml>} A promise that resolves to a sanitized HTML string
|
|
284
|
-
*
|
|
285
|
-
* @mermaid
|
|
286
|
-
* sequenceDiagram
|
|
287
|
-
* participant E as EmptyStateComponent
|
|
288
|
-
* participant T as TranslateService
|
|
289
|
-
* participant S as DomSanitizer
|
|
290
|
-
*
|
|
291
|
-
* E->>T: instant(content, {'value0': searchValue})
|
|
292
|
-
* T-->>E: Return translated string
|
|
293
|
-
* E->>S: bypassSecurityTrustHtml(translatedString)
|
|
294
|
-
* S-->>E: Return sanitized SafeHtml
|
|
295
|
-
*
|
|
296
|
-
* @memberOf EmptyStateComponent
|
|
297
|
-
*/
|
|
298
|
-
async getSearchSubtitle(content) {
|
|
299
|
-
const result = await this.translate.instant(content, { 'value0': this.searchValue });
|
|
300
|
-
return this.sanitizer.bypassSecurityTrustHtml(result);
|
|
301
|
-
}
|
|
302
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
303
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: EmptyStateComponent, isStandalone: true, selector: "ngx-decaf-empty-state", inputs: { title: "title", titleColor: "titleColor", subtitle: "subtitle", subtitleColor: "subtitleColor", showIcon: "showIcon", icon: "icon", iconSize: "iconSize", iconColor: "iconColor", buttonLink: "buttonLink", buttonText: "buttonText", buttonFill: "buttonFill", buttonColor: "buttonColor", buttonSize: "buttonSize", searchValue: "searchValue" }, usesInheritance: true, ngImport: i0, template: "\n<ion-card id=\"dcf-card-empty-state\" [ngClass]=\"className\">\n <ion-card-content>\n @if(icon && showIcon) {\n <div class=\"dcf-icon-container\">\n <ion-icon\n name=\"alert-circle-outline\"\n size=\"large\"\n color=\"danger\"\n />\n </div>\n }\n @if(title) {\n <h5 [class]=\"titleColor\" [innerHTML]=\"title\"></h5>\n }\n @if(subtitle) {\n @if(!searchValue) {\n <p [class]=\"subtitleColor\" [innerHTML]=\"subtitle\"></p>\n } @else {\n <p [class]=\"subtitleColor\" [innerHTML]=\"searchSubtitle\"></p>\n }\n }\n @if(buttonLink && buttonText) {\n <div>\n <ion-button\n [size]=\"buttonSize\"\n [fill]=\"buttonFill\"\n [color]=\"buttonColor\"\n (click)=\"handleClick()\">\n {{ buttonText }}\n </ion-button>\n </div>\n }\n </ion-card-content>\n</ion-card>\n", styles: ["ion-card{text-align:center}ion-card ion-button{margin-top:.75rem}ion-card ion-icon{font-size:2.5rem}ion-card .dcf-icon-container{transform:scale(1.25);opacity:.75;margin-top:1.25rem!important;margin-bottom:.5rem!important}ion-card .dcf-ititle{font-weight:600!important;color:var(--ion-color-gray-6)!important}ion-card .dcf-isubtitle{font-weight:500!important}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
304
|
-
};
|
|
305
|
-
EmptyStateComponent = __decorate([
|
|
306
|
-
Dynamic(),
|
|
307
|
-
__metadata("design:paramtypes", [])
|
|
308
|
-
], EmptyStateComponent);
|
|
309
|
-
export { EmptyStateComponent };
|
|
310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EmptyStateComponent, decorators: [{
|
|
311
|
-
type: Component,
|
|
312
|
-
args: [{ selector: 'ngx-decaf-empty-state', standalone: true, imports: [
|
|
313
|
-
ForAngularModule,
|
|
314
|
-
IonCard,
|
|
315
|
-
IonCardContent,
|
|
316
|
-
IonTitle,
|
|
317
|
-
IonIcon
|
|
318
|
-
], template: "\n<ion-card id=\"dcf-card-empty-state\" [ngClass]=\"className\">\n <ion-card-content>\n @if(icon && showIcon) {\n <div class=\"dcf-icon-container\">\n <ion-icon\n name=\"alert-circle-outline\"\n size=\"large\"\n color=\"danger\"\n />\n </div>\n }\n @if(title) {\n <h5 [class]=\"titleColor\" [innerHTML]=\"title\"></h5>\n }\n @if(subtitle) {\n @if(!searchValue) {\n <p [class]=\"subtitleColor\" [innerHTML]=\"subtitle\"></p>\n } @else {\n <p [class]=\"subtitleColor\" [innerHTML]=\"searchSubtitle\"></p>\n }\n }\n @if(buttonLink && buttonText) {\n <div>\n <ion-button\n [size]=\"buttonSize\"\n [fill]=\"buttonFill\"\n [color]=\"buttonColor\"\n (click)=\"handleClick()\">\n {{ buttonText }}\n </ion-button>\n </div>\n }\n </ion-card-content>\n</ion-card>\n", styles: ["ion-card{text-align:center}ion-card ion-button{margin-top:.75rem}ion-card ion-icon{font-size:2.5rem}ion-card .dcf-icon-container{transform:scale(1.25);opacity:.75;margin-top:1.25rem!important;margin-bottom:.5rem!important}ion-card .dcf-ititle{font-weight:600!important;color:var(--ion-color-gray-6)!important}ion-card .dcf-isubtitle{font-weight:500!important}\n"] }]
|
|
319
|
-
}], ctorParameters: () => [], propDecorators: { title: [{
|
|
320
|
-
type: Input
|
|
321
|
-
}], titleColor: [{
|
|
322
|
-
type: Input
|
|
323
|
-
}], subtitle: [{
|
|
324
|
-
type: Input
|
|
325
|
-
}], subtitleColor: [{
|
|
326
|
-
type: Input
|
|
327
|
-
}], showIcon: [{
|
|
328
|
-
type: Input
|
|
329
|
-
}], icon: [{
|
|
330
|
-
type: Input
|
|
331
|
-
}], iconSize: [{
|
|
332
|
-
type: Input
|
|
333
|
-
}], iconColor: [{
|
|
334
|
-
type: Input
|
|
335
|
-
}], buttonLink: [{
|
|
336
|
-
type: Input
|
|
337
|
-
}], buttonText: [{
|
|
338
|
-
type: Input
|
|
339
|
-
}], buttonFill: [{
|
|
340
|
-
type: Input
|
|
341
|
-
}], buttonColor: [{
|
|
342
|
-
type: Input
|
|
343
|
-
}], buttonSize: [{
|
|
344
|
-
type: Input
|
|
345
|
-
}], searchValue: [{
|
|
346
|
-
type: Input
|
|
347
|
-
}] } });
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sRUFDUCxRQUFRLEVBQ1IsYUFBYSxFQUNkLE1BQ0ksMkJBQTJCLENBQUM7QUFDakMsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUl2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQWdCSSxJQUFNLG1CQUFtQixHQUF6QixNQUFNLG1CQUFvQixTQUFRLGdCQUFnQjtJQWtNdkQ7Ozs7Ozs7T0FPRztJQUNIO1FBQ0UsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUF6TS9COzs7Ozs7Ozs7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QW1DQSxrYUQ0QkksZ0JBQWdCLDZYQUNoQixPQUFPLHlMQUNQLGNBQWMsK0VBRWQsT0FBTzs7QUFJRSxtQkFBbUI7SUFmL0IsT0FBTyxFQUFFOztHQWVHLG1CQUFtQixDQW9VL0I7OzRGQXBVWSxtQkFBbUI7a0JBZC9CLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUDt3QkFDUCxnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxRQUFRO3dCQUNSLE9BQU87cUJBQ1I7d0RBZ0JELEtBQUs7c0JBREosS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWNOLGFBQWE7c0JBRFosS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBY04sSUFBSTtzQkFESCxLQUFLO2dCQWFOLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sV0FBVztzQkFEVixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbG9yLCBQcmVkZWZpbmVkQ29sb3JzIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtcbiAgSW9uQ2FyZCxcbiAgSW9uQ2FyZENvbnRlbnQsXG4gIElvbkljb24sXG4gIElvblRpdGxlLFxuICBOYXZDb250cm9sbGVyXG59XG5mcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCAqIGFzIGFsbEljb25zIGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSB9IGZyb20gJ3NyYy9saWIvZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJ3NyYy9saWIvZW5naW5lJztcbmltcG9ydCB7IHN0cmluZ1RvQm9vbGVhbiB9IGZyb20gJ3NyYy9saWIvaGVscGVycyc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnc3JjL2xpYi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICdzcmMvbGliL2VuZ2luZS90eXBlcyc7XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgYWN0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzXG4gKiB3aGVuIG5vIGRhdGEgaXMgYXZhaWxhYmxlIG9yIHdoZW4gYSB1c2VyIG5lZWRzIHRvIHRha2UgYW4gYWN0aW9uIHRvIHBvcHVsYXRlIGNvbnRlbnQuXG4gKiBJdCBpbmNsdWRlcyBjdXN0b21pemFibGUgdGl0bGUsIHN1YnRpdGxlLCBpY29uLCBhbmQgYWN0aW9uIGJ1dHRvbiBlbGVtZW50cyB0aGF0IGNhbiBiZVxuICogc3R5bGVkIGFuZCBjb25maWd1cmVkIHRocm91Z2ggaW5wdXQgcHJvcGVydGllcy4gVGhlIGNvbXBvbmVudCBzdXBwb3J0cyBsb2NhbGl6YXRpb25cbiAqIGFuZCBjYW4gdHJpZ2dlciBuYXZpZ2F0aW9uIG9yIGN1c3RvbSBhY3Rpb25zIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuICpcbiAqIEBtZXJtYWlkXG4gKiBjbGFzc0RpYWdyYW1cbiAqICAgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCB7XG4gKiAgICAgK3N0cmluZyB0aXRsZVxuICogICAgICtzdHJpbmcgdGl0bGVDb2xvclxuICogICAgICtzdHJpbmcgc3VidGl0bGVcbiAqICAgICArc3RyaW5nIHN1YnRpdGxlQ29sb3JcbiAqICAgICArU3RyaW5nT3JCb29sZWFuIHNob3dJY29uXG4gKiAgICAgK3N0cmluZyBpY29uXG4gKiAgICAgK3N0cmluZyBpY29uU2l6ZVxuICogICAgICtQcmVkZWZpbmVkQ29sb3JzIGljb25Db2xvclxuICogICAgICtzdHJpbmd8RnVuY3Rpb24gYnV0dG9uTGlua1xuICogICAgICtzdHJpbmcgYnV0dG9uVGV4dFxuICogICAgICtzdHJpbmcgYnV0dG9uRmlsbFxuICogICAgICtDb2xvciBidXR0b25Db2xvclxuICogICAgICtzdHJpbmcgYnV0dG9uU2l6ZVxuICogICAgICtzdHJpbmcgc2VhcmNoVmFsdWVcbiAqICAgICAtTmF2Q29udHJvbGxlciBuYXZDb250cm9sbGVyXG4gKiAgICAgK25nT25Jbml0KClcbiAqICAgICAraGFuZGxlQ2xpY2soKVxuICogICB9XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBOZ3hCYXNlQ29tcG9uZW50XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBPbkluaXRcbiAqXG4gKiBAZXh0ZW5kcyB7Tmd4QmFzZUNvbXBvbmVudH1cbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1lbXB0eS1zdGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ2FyZENvbnRlbnQsXG4gICAgSW9uVGl0bGUsXG4gICAgSW9uSWNvblxuICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1haW4gdGl0bGUgZGlzcGxheWVkIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBwcmltYXJ5IG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZW1wdHkgc3RhdGUgY29tcG9uZW50LlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHdoeSB0aGV5J3JlIHNlZWluZyBhbiBlbXB0eSB2aWV3LlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcInRpdGxlXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmcgPSBcInRpdGxlXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIHRpdGxlIHRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSB0aXRsZSB0ZXh0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhlIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgY29sb3IgdmFyaWFibGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24ncyB0aGVtZS5cbiAgICogVGhlIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IHRoaXMgd2l0aCBcImNvbG9yLVwiIHRvIGNyZWF0ZSB0aGUgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZ3JheS02J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGVDb2xvciA9ICdncmF5LTYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlY29uZGFyeSBtZXNzYWdlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBvciBpbnN0cnVjdGlvbnMgYmVsb3cgdGhlIG1haW4gdGl0bGUuXG4gICAqIFRoaXMgdGV4dCBpcyB0eXBpY2FsbHkgdXNlZCB0byBndWlkZSB0aGUgdXNlciBvbiB3aGF0IGFjdGlvbnMgdGhleSBjYW4gdGFrZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzdWJ0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgc3VidGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlQ29sb3I6IHN0cmluZyA9ICdncmF5LTQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaWNvbiBpcyBkaXNwbGF5ZWQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgdGhlIHZpc3VhbCBpY29uIHNob3VsZCBiZSBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYm9vbGVhbiBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbi5cbiAgICogSWNvbnMgaGVscCB2aXN1YWxseSBjb21tdW5pY2F0ZSB0aGUgZW1wdHkgc3RhdGUgY29udGV4dCB0byB1c2Vycy5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0ljb246IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggaWNvbiB0byBzaG93IHdoZW4gc2hvd0ljb24gaXMgdHJ1ZS5cbiAgICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBpY29uIHN5c3RlbSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbixcbiAgICogYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gYXZhaWxhYmxlIGljb24gbmFtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aS1pbmZvLXNxdWFyZS1yb3VuZGVkXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb246IHN0cmluZyA9IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIENhbiBiZSBlaXRoZXIgJ2xhcmdlJyBvciAnc21hbGwnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ2xhcmdlJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvblNpemU/OiAnbGFyZ2UnIHwgJ3NtYWxsJyA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgaWNvbiB1c2luZyBJb25pYydzIHByZWRlZmluZWQgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgaWNvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtQcmVkZWZpbmVkQ29sb3JzIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvbkNvbG9yPzogUHJlZGVmaW5lZENvbG9ycyA9ICdtZWRpdW0nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG5hdmlnYXRpb24gdGFyZ2V0IG9yIGFjdGlvbiBmb3IgdGhlIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoZXJlIHRoZSBidXR0b24gc2hvdWxkIG5hdmlnYXRlIHRvIHdoZW4gY2xpY2tlZCBvciB3aGF0IGZ1bmN0aW9uXG4gICAqIGl0IHNob3VsZCBleGVjdXRlLiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBVUkwgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG5hdmlnYXRpb24uXG4gICAqIFdoZW4gbm90IHByb3ZpZGVkLCB0aGUgYnV0dG9uIHdpbGwgbm90IHBlcmZvcm0gYW55IGFjdGlvbi5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IEZ1bmN0aW9uTGlrZSB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkxpbms/OiBzdHJpbmcgfCBGdW5jdGlvbkxpa2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdGV4dCBkaXNwbGF5ZWQgb24gdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgbGFiZWwgZm9yIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgYnV0dG9uIHdpbGwgbm90IGRpc3BsYXkgYW55IHRleHQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGZpbGwgc3R5bGUgb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIGJ1dHRvbiB1c2luZyBJb25pYydzIGJ1dHRvbiBmaWxsIG9wdGlvbnMuXG4gICAqICdzb2xpZCcgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoIGEgc29saWQgYmFja2dyb3VuZCwgJ291dGxpbmUnIGNyZWF0ZXMgYSBidXR0b24gd2l0aFxuICAgKiBqdXN0IGEgYm9yZGVyLCBhbmQgJ2NsZWFyJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGggbm8gYmFja2dyb3VuZCBvciBib3JkZXIuXG4gICAqXG4gICAqIEB0eXBlIHsnY2xlYXInIHwgJ3NvbGlkJyB8ICdvdXRsaW5lJ31cbiAgICogQGRlZmF1bHQgJ3NvbGlkJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uRmlsbDogJ2NsZWFyJyB8ICdzb2xpZCcgfCAnb3V0bGluZScgPSAgJ3NvbGlkJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3IgdGhlIGJ1dHRvbiB1c2luZyBJb25pYydzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhpcyBhbGxvd3MgdGhlIGJ1dHRvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtDb2xvcn1cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25Db2xvcjogQ29sb3IgPSAgJ3ByaW1hcnknO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidXR0b24gc2hvd24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBDYW4gYmUgJ2xhcmdlJywgJ3NtYWxsJywgb3IgJ2RlZmF1bHQnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8ICdkZWZhdWx0J31cbiAgICogQGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25TaXplOiAnbGFyZ2UnIHwgJ3NtYWxsJyB8ICdkZWZhdWx0JyA9ICAnZGVmYXVsdCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VhcmNoIHZhbHVlIHRoYXQgcmVzdWx0ZWQgaW4gbm8gcmVzdWx0cy5cbiAgICogQHN1bW1hcnkgV2hlbiB0aGUgZW1wdHkgc3RhdGUgaXMgc2hvd24gZHVlIHRvIGEgc2VhcmNoIHdpdGggbm8gcmVzdWx0cyxcbiAgICogdGhpcyBwcm9wZXJ0eSBjYW4gaG9sZCB0aGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZC4gVGhpcyBjYW4gYmUgZGlzcGxheWVkXG4gICAqIGluIHRoZSBlbXB0eSBzdGF0ZSBtZXNzYWdlIHRvIHByb3ZpZGUgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFZhbHVlITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2VydmljZSBmb3IgaGFuZGxpbmcgbmF2aWdhdGlvbiBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBJbmplY3RlZCBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgbmF2aWdhdGluZyBiZXR3ZWVuIHJvdXRlcy5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgd2hlbiB0aGUgYnV0dG9uTGluayBpcyBhIHN0cmluZyBVUkwgdG8gbmF2aWdhdGUgdG8gdGhhdCBsb2NhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge05hdkNvbnRyb2xsZXJ9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIgPSBpbmplY3QoTmF2Q29udHJvbGxlcik7XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHNlYXJjaFN1YnRpdGxlITogU2FmZUh0bWxcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBFbXB0eVN0YXRlQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBFbXB0eVN0YXRlQ29tcG9uZW50IGJ5IGNhbGxpbmcgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvclxuICAgKiB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgbG9nZ2luZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzXG4gICAqIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgaWNvbnMgYW5kIGFjdGlvbiBidXR0b25zLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFbXB0eVN0YXRlQ29tcG9uZW50XCIpO1xuICAgIGFkZEljb25zKGFsbEljb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBwcm9jZXNzaW5nIGJvb2xlYW4gaW5wdXRzLCBhcHBseWluZyBsb2NhbGl6YXRpb24gdG8gdGV4dFxuICAgKiBlbGVtZW50cyBpZiB0cmFuc2xhdGlvbiBpcyBlbmFibGVkLCBhbmQgZm9ybWF0dGluZyBDU1MgY2xhc3NlcyBmb3IgdGl0bGUgYW5kIHN1YnRpdGxlIGNvbG9ycy5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBieSBlbnN1cmluZyBhbGwgcHJvcGVydGllcyBhcmVcbiAgICogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGxvY2FsaXplZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5FOiBuZ09uSW5pdCgpXG4gICAqICAgRS0+PkU6IFByb2Nlc3MgdHJhbnNsYXRhYmxlIGZsYWdcbiAgICogICBFLT4+RTogUHJvY2VzcyBzaG93SWNvbiBmbGFnXG4gICAqICAgRS0+PkU6IEdldCBsb2NhbGUgc2V0dGluZ3NcbiAgICogICBhbHQgdHJhbnNsYXRhYmxlIGlzIHRydWVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSB0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIHN1YnRpdGxlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgYnV0dG9uVGV4dFxuICAgKiAgIGVuZFxuICAgKiAgIEUtPj5FOiBGb3JtYXQgdGl0bGUgQ1NTIGNsYXNzXG4gICAqICAgRS0+PkU6IEZvcm1hdCBzdWJ0aXRsZSBDU1MgY2xhc3NcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucGFyc2VQcm9wcyh0aGlzKTtcbiAgICB0aGlzLnRyYW5zbGF0YWJsZSA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5zaG93SWNvbiA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnNob3dJY29uKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcblxuICAgIC8vIGlmKHRoaXMudHJhbnNsYXRhYmxlKSB7XG4gICAgLy8gICB0aGlzLnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuc3VidGl0bGUgPSBnZW5lcmF0ZUxvY2FsZUZyb21TdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMuc3VidGl0bGUpO1xuICAgIC8vICAgdGhpcy5idXR0b25UZXh0ID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLmJ1dHRvblRleHQpO1xuICAgIC8vIH1cblxuICAgIHRoaXMudGl0bGVDb2xvciA9IGBkY2YtdGl0bGUgY29sb3ItJHt0aGlzLnRpdGxlQ29sb3J9YDtcbiAgICB0aGlzLnN1YnRpdGxlQ29sb3IgPSBgZGNmLXN1YnRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG5cbiAgICBpZih0aGlzLnNlYXJjaFZhbHVlICYmIHRoaXMudHJhbnNsYXRhYmxlKVxuICAgICAgdGhpcy5zZWFyY2hTdWJ0aXRsZSA9IGF3YWl0IHRoaXMuZ2V0U2VhcmNoU3VidGl0bGUodGhpcy5zdWJ0aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZVxuICAgKiBjb21wb25lbnQuIEl0IHN1cHBvcnRzIHRocmVlIG5hdmlnYXRpb24gcGF0dGVybnM6IDEpIG5vIGFjdGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkLFxuICAgKiAyKSBjdXN0b20gZnVuY3Rpb24gZXhlY3V0aW9uIHdoZW4gYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uLCBhbmQgMykgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIFVSTFxuICAgKiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcuIFRoaXMgZmxleGliaWxpdHkgYWxsb3dzIHRoZSBlbXB0eSBzdGF0ZSB0byB0cmlnZ2VyIHZhcmlvdXMgYWN0aW9uc1xuICAgKiBiYXNlZCBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgTmF2Q29udHJvbGxlclxuICAgKlxuICAgKiAgIFUtPj5FOiBDbGljayBhY3Rpb24gYnV0dG9uXG4gICAqICAgRS0+PkU6IGhhbmRsZUNsaWNrKClcbiAgICogICBhbHQgYnV0dG9uTGluayBpcyBub3QgcHJvdmlkZWRcbiAgICogICAgIEUtLT4+VTogUmV0dXJuIGZhbHNlIChubyBhY3Rpb24pXG4gICAqICAgZWxzZSBidXR0b25MaW5rIGlzIGEgZnVuY3Rpb25cbiAgICogICAgIEUtPj5FOiBFeGVjdXRlIGJ1dHRvbkxpbmsgZnVuY3Rpb25cbiAgICogICAgIEUtLT4+VTogUmV0dXJuIGZ1bmN0aW9uIHJlc3VsdFxuICAgKiAgIGVsc2UgYnV0dG9uTGluayBpcyBhIFVSTCBzdHJpbmdcbiAgICogICAgIEUtPj5OOiBuYXZpZ2F0ZUZvcndhcmQoYnV0dG9uTGluaylcbiAgICogICAgIE4tLT4+RTogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgICBFLS0+PlU6IFJldHVybiBuYXZpZ2F0aW9uIHJlc3VsdFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbj59XG4gICAqICAgLSBmYWxzZSBpZiBubyBhY3Rpb24gaXMgdGFrZW5cbiAgICogICAtIFRoZSByZXN1bHQgb2YgdGhlIGJ1dHRvbkxpbmsgZnVuY3Rpb24gaWYgaXQncyBhIGZ1bmN0aW9uXG4gICAqICAgLSBBIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBuYXZpZ2F0aW9uIHJlc3VsdCBpZiBidXR0b25MaW5rIGlzIGEgVVJMXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDbGljaygpOiBib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGZuID0gdGhpcy5idXR0b25MaW5rO1xuICAgIGlmKCFmbilcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihmbiBpbnN0YW5jZW9mIEZ1bmN0aW9uKVxuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoZm4gYXMgc3RyaW5nKTtcbiAgfVxuXG5cbiAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGxvY2FsaXplZCBhbmQgc2FuaXRpemVkIHN1YnRpdGxlIGZvciBzZWFyY2ggcmVzdWx0cy5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgdGFrZXMgYSBjb250ZW50IHN0cmluZywgdHlwaWNhbGx5IHRoZSBzdWJ0aXRsZSwgYW5kIHByb2Nlc3NlcyBpdFxuICAgKiB0aHJvdWdoIHRoZSB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBJdCByZXBsYWNlcyBhIHBsYWNlaG9sZGVyICgndmFsdWUwJykgd2l0aCB0aGUgYWN0dWFsXG4gICAqIHNlYXJjaCB2YWx1ZSwgdGhlbiBzYW5pdGl6ZXMgdGhlIHJlc3VsdCB0byBzYWZlbHkgdXNlIGFzIEhUTUwuIFRoaXMgaXMgcGFydGljdWxhcmx5XG4gICAqIHVzZWZ1bCBmb3IgZGlzcGxheWluZyBkeW5hbWljLCBsb2NhbGl6ZWQgbWVzc2FnZXMgaW4gdGhlIGVtcHR5IHN0YXRlIHdoZW4gYSBzZWFyY2hcbiAgICogeWllbGRzIG5vIHJlc3VsdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgc3RyaW5nIHRvIGJlIHRyYW5zbGF0ZWQgYW5kIHByb2Nlc3NlZFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFNhZmVIdG1sPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBzYW5pdGl6ZWQgSFRNTCBzdHJpbmdcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgVCBhcyBUcmFuc2xhdGVTZXJ2aWNlXG4gICAqICAgcGFydGljaXBhbnQgUyBhcyBEb21TYW5pdGl6ZXJcbiAgICpcbiAgICogICBFLT4+VDogaW5zdGFudChjb250ZW50LCB7J3ZhbHVlMCc6IHNlYXJjaFZhbHVlfSlcbiAgICogICBULS0+PkU6IFJldHVybiB0cmFuc2xhdGVkIHN0cmluZ1xuICAgKiAgIEUtPj5TOiBieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0cmFuc2xhdGVkU3RyaW5nKVxuICAgKiAgIFMtLT4+RTogUmV0dXJuIHNhbml0aXplZCBTYWZlSHRtbFxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgZ2V0U2VhcmNoU3VidGl0bGUoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxTYWZlSHRtbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiB0aGlzLnNlYXJjaFZhbHVlfSk7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHJlc3VsdCk7XG4gIH1cbn1cbiIsIlxuPGlvbi1jYXJkIGlkPVwiZGNmLWNhcmQtZW1wdHktc3RhdGVcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgQGlmKGljb24gJiYgc2hvd0ljb24pIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1pY29uXG4gICAgICAgICAgbmFtZT1cImFsZXJ0LWNpcmNsZS1vdXRsaW5lXCJcbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZih0aXRsZSkge1xuICAgICAgPGg1IFtjbGFzc109XCJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvaDU+XG4gICAgfVxuICAgIEBpZihzdWJ0aXRsZSkge1xuICAgICAgQGlmKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgICA8cCBbY2xhc3NdPVwic3VidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwic3VidGl0bGVcIj48L3A+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cInN1YnRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInNlYXJjaFN1YnRpdGxlXCI+PC9wPlxuICAgICAgfVxuICAgIH1cbiAgICBAaWYoYnV0dG9uTGluayAmJiBidXR0b25UZXh0KSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIFtzaXplXT1cImJ1dHRvblNpemVcIlxuICAgICAgICAgIFtmaWxsXT1cImJ1dHRvbkZpbGxcIlxuICAgICAgICAgIFtjb2xvcl09XCJidXR0b25Db2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKClcIj5cbiAgICAgICAgICB7eyAgYnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvaW9uLWNhcmQtY29udGVudD5cbjwvaW9uLWNhcmQ+XG4iXX0=
|