UNPKG

@clr/angular

Version:

Angular components for Clarity

122 lines 17.4 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { ContentChild, Directive, Optional } from '@angular/core'; import { ClrControlError } from './error'; import { ClrControlHelper } from './helper'; import { CONTROL_STATE } from './if-control-state/if-control-state.service'; import { ClrLabel } from './label'; import { ClrControlSuccess } from './success'; import * as i0 from "@angular/core"; import * as i1 from "./if-control-state/if-control-state.service"; import * as i2 from "./providers/layout.service"; import * as i3 from "./providers/control-class.service"; import * as i4 from "./providers/ng-control.service"; export class ClrAbstractContainer { constructor(ifControlStateService, layoutService, controlClassService, ngControlService) { this.ifControlStateService = ifControlStateService; this.layoutService = layoutService; this.controlClassService = controlClassService; this.ngControlService = ngControlService; this._dynamic = false; this.subscriptions = []; this.subscriptions.push(this.ifControlStateService.statusChanges.subscribe((state) => { this.state = state; this.updateHelpers(); })); this.subscriptions.push(this.ngControlService.controlChanges.subscribe(control => { this.control = control; })); } /** * @NOTE * Helper control is a bit different than the others, it must be visible most of the time: * - Helper must NOT be visible when CONTROL_STATE is not NONE and Success or Error components are \ * defined. * * For example user implement only Error control then if CONTROL_STATE is VALID then helper * control must be visible. */ get showHelper() { // without existence of helper component there is no need of additional checks. if (!!this.controlHelperComponent === false) { return false; } return ( /* Helper Component exist and the state of the form is NONE (not touched) */ (!!this.controlHelperComponent && (!this.touched || this.state === CONTROL_STATE.NONE)) || /* or there is no success component but the state of the form is VALID - show helper information */ (!!this.controlSuccessComponent === false && this.state === CONTROL_STATE.VALID) || /* or there is no error component but the state of the form is INVALID - show helper information */ (!!this.controlErrorComponent === false && this.state === CONTROL_STATE.INVALID)); } get showValid() { return this.touched && this.state === CONTROL_STATE.VALID && !!this.controlSuccessComponent; } get showInvalid() { return this.touched && this.state === CONTROL_STATE.INVALID && !!this.controlErrorComponent; } get touched() { return this.control?.touched; } ngAfterContentInit() { /** * We gonna set the helper control state, after all or most of the components * are ready - also this will trigger some initial flows into wrappers and controls, * like locating IDs and setting attributes. */ this.updateHelpers(); } ngOnDestroy() { this.subscriptions.forEach(subscription => subscription.unsubscribe()); } controlClass() { /** * Decide what subtext to display: * - container is valid but no success component is implemented - use helper class * - container is valid and success component is implemented - use success class */ if ((!this.controlSuccessComponent && this.state === CONTROL_STATE.VALID) || !this.touched) { return this.controlClassService.controlClass(CONTROL_STATE.NONE, this.addGrid()); } /** * Pass form control state and return string of classes to be applied to the container. */ return this.controlClassService.controlClass(this.state, this.addGrid()); } addGrid() { return this.layoutService && !this.layoutService.isVertical(); } updateHelpers() { if (this.ngControlService) { this.ngControlService.setHelpers({ show: this.showInvalid || this.showHelper || this.showValid, showInvalid: this.showInvalid, showHelper: this.showHelper, showValid: this.showValid, }); } } } ClrAbstractContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAbstractContainer, deps: [{ token: i1.IfControlStateService }, { token: i2.LayoutService, optional: true }, { token: i3.ControlClassService }, { token: i4.NgControlService }], target: i0.ɵɵFactoryTarget.Directive }); ClrAbstractContainer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrAbstractContainer, queries: [{ propertyName: "label", first: true, predicate: ClrLabel, descendants: true }, { propertyName: "controlSuccessComponent", first: true, predicate: ClrControlSuccess, descendants: true }, { propertyName: "controlErrorComponent", first: true, predicate: ClrControlError, descendants: true }, { propertyName: "controlHelperComponent", first: true, predicate: ClrControlHelper, descendants: true }], ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAbstractContainer, decorators: [{ type: Directive }], ctorParameters: function () { return [{ type: i1.IfControlStateService }, { type: i2.LayoutService, decorators: [{ type: Optional }] }, { type: i3.ControlClassService }, { type: i4.NgControlService }]; }, propDecorators: { label: [{ type: ContentChild, args: [ClrLabel, { static: false }] }], controlSuccessComponent: [{ type: ContentChild, args: [ClrControlSuccess] }], controlErrorComponent: [{ type: ContentChild, args: [ClrControlError] }], controlHelperComponent: [{ type: ContentChild, args: [ClrControlHelper] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvY29tbW9uL2Fic3RyYWN0LWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFvQixZQUFZLEVBQUUsU0FBUyxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUsvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUF5QixNQUFNLDZDQUE2QyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFJbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFHOUMsTUFBTSxPQUFnQixvQkFBb0I7SUFheEMsWUFDWSxxQkFBNEMsRUFDaEMsYUFBNEIsRUFDeEMsbUJBQXdDLEVBQ3hDLGdCQUFrQztRQUhsQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVY5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRVAsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBVTNDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUMxRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENB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LEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUMxQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7O2lIQS9HbUIsb0JBQW9CO3FHQUFwQixvQkFBb0IsNkRBQzFCLFFBQVEsMEZBQ1IsaUJBQWlCLHdGQUNqQixlQUFlLHlGQUNmLGdCQUFnQjsyRkFKVixvQkFBb0I7a0JBRHpDLFNBQVM7OzBCQWdCTCxRQUFROzZHQWRnQyxLQUFLO3NCQUEvQyxZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1IsdUJBQXVCO3NCQUF2RCxZQUFZO3VCQUFDLGlCQUFpQjtnQkFDQSxxQkFBcUI7c0JBQW5ELFlBQVk7dUJBQUMsZUFBZTtnQkFDRyxzQkFBc0I7c0JBQXJELFlBQVk7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIzIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IER5bmFtaWNXcmFwcGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaG9zdC13cmFwcGluZy9keW5hbWljLXdyYXBwZXInO1xuaW1wb3J0IHsgQ2xyQ29udHJvbEVycm9yIH0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgeyBDbHJDb250cm9sSGVscGVyIH0gZnJvbSAnLi9oZWxwZXInO1xuaW1wb3J0IHsgQ09OVFJPTF9TVEFURSwgSWZDb250cm9sU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9pZi1jb250cm9sLXN0YXRlL2lmLWNvbnRyb2wtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDbHJMYWJlbCB9IGZyb20gJy4vbGFiZWwnO1xuaW1wb3J0IHsgQ29udHJvbENsYXNzU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2NvbnRyb2wtY2xhc3Muc2VydmljZSc7XG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTmdDb250cm9sU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL25nLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBDbHJDb250cm9sU3VjY2VzcyB9IGZyb20gJy4vc3VjY2Vzcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENsckFic3RyYWN0Q29udGFpbmVyIGltcGxlbWVudHMgRHluYW1pY1dyYXBwZXIsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBDb250ZW50Q2hpbGQoQ2xyTGFiZWwsIHsgc3RhdGljOiBmYWxzZSB9KSBsYWJlbDogQ2xyTGFiZWw7XG4gIEBDb250ZW50Q2hpbGQoQ2xyQ29udHJvbFN1Y2Nlc3MpIGNvbnRyb2xTdWNjZXNzQ29tcG9uZW50OiBDbHJDb250cm9sU3VjY2VzcztcbiAgQENvbnRlbnRDaGlsZChDbHJDb250cm9sRXJyb3IpIGNvbnRyb2xFcnJvckNvbXBvbmVudDogQ2xyQ29udHJvbEVycm9yO1xuICBAQ29udGVudENoaWxkKENsckNvbnRyb2xIZWxwZXIpIGNvbnRyb2xIZWxwZXJDb21wb25lbnQ6IENsckNvbnRyb2xIZWxwZXI7XG5cbiAgY29udHJvbDogTmdDb250cm9sO1xuICBfZHluYW1pYyA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHByaXZhdGUgc3RhdGU6IENPTlRST0xfU1RBVEU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGlmQ29udHJvbFN0YXRlU2VydmljZTogSWZDb250cm9sU3RhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjb250cm9sQ2xhc3NTZXJ2aWNlOiBDb250cm9sQ2xhc3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuZ0NvbnRyb2xTZXJ2aWNlOiBOZ0NvbnRyb2xTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2Uuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXRlOiBDT05UUk9MX1NUQVRFKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy51cGRhdGVIZWxwZXJzKCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUoY29udHJvbCA9PiB7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IGNvbnRyb2w7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQE5PVEVcbiAgICogSGVscGVyIGNvbnRyb2wgaXMgYSBiaXQgZGlmZmVyZW50IHRoYW4gdGhlIG90aGVycywgaXQgbXVzdCBiZSB2aXNpYmxlIG1vc3Qgb2YgdGhlIHRpbWU6XG4gICAqICAgLSBIZWxwZXIgbXVzdCBOT1QgYmUgdmlzaWJsZSB3aGVuIENPTlRST0xfU1RBVEUgaXMgbm90IE5PTkUgYW5kIFN1Y2Nlc3Mgb3IgRXJyb3IgY29tcG9uZW50cyBhcmUgXFxcbiAgICogZGVmaW5lZC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUgdXNlciBpbXBsZW1lbnQgb25seSBFcnJvciBjb250cm9sIHRoZW4gaWYgQ09OVFJPTF9TVEFURSBpcyBWQUxJRCB0aGVuIGhlbHBlclxuICAgKiBjb250cm9sIG11c3QgYmUgdmlzaWJsZS5cbiAgICovXG4gIGdldCBzaG93SGVscGVyKCk6IGJvb2xlYW4ge1xuICAgIC8vIHdpdGhvdXQgZXhpc3RlbmNlIG9mIGhlbHBlciBjb21wb25lbnQgdGhlcmUgaXMgbm8gbmVlZCBvZiBhZGRpdGlvbmFsIGNoZWNrcy5cbiAgICBpZiAoISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qIEhlbHBlciBDb21wb25lbnQgZXhpc3QgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgZm9ybSBpcyBOT05FIChub3QgdG91Y2hlZCkgKi9cbiAgICAgICghIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudCAmJiAoIXRoaXMudG91Y2hlZCB8fCB0aGlzLnN0YXRlID09PSBDT05UUk9MX1NUQVRFLk5PTkUpKSB8fFxuICAgICAgLyogb3IgdGhlcmUgaXMgbm8gc3VjY2VzcyBjb21wb25lbnQgYnV0IHRoZSBzdGF0ZSBvZiB0aGUgZm9ybSBpcyBWQUxJRCAtIHNob3cgaGVscGVyIGluZm9ybWF0aW9uICovXG4gICAgICAoISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50ID09PSBmYWxzZSAmJiB0aGlzLnN0YXRlID09PSBDT05UUk9MX1NUQVRFLlZBTElEKSB8fFxuICAgICAgLyogb3IgdGhlcmUgaXMgbm8gZXJyb3IgY29tcG9uZW50IGJ1dCB0aGUgc3RhdGUgb2YgdGhlIGZvcm0gaXMgSU5WQUxJRCAtIHNob3cgaGVscGVyIGluZm9ybWF0aW9uICovXG4gICAgICAoISF0aGlzLmNvbnRyb2xFcnJvckNvbXBvbmVudCA9PT0gZmFsc2UgJiYgdGhpcy5zdGF0ZSA9PT0gQ09OVFJPTF9TVEFURS5JTlZBTElEKVxuICAgICk7XG4gIH1cblxuICBnZXQgc2hvd1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvdWNoZWQgJiYgdGhpcy5zdGF0ZSA9PT0gQ09OVFJPTF9TVEFURS5WQUxJRCAmJiAhIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQ7XG4gIH1cblxuICBnZXQgc2hvd0ludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudG91Y2hlZCAmJiB0aGlzLnN0YXRlID09PSBDT05UUk9MX1NUQVRFLklOVkFMSUQgJiYgISF0aGlzLmNvbnRyb2xFcnJvckNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRvdWNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbD8udG91Y2hlZDtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAvKipcbiAgICAgKiBXZSBnb25uYSBzZXQgdGhlIGhlbHBlciBjb250cm9sIHN0YXRlLCBhZnRlciBhbGwgb3IgbW9zdCBvZiB0aGUgY29tcG9uZW50c1xuICAgICAqIGFyZSByZWFkeSAtIGFsc28gdGhpcyB3aWxsIHRyaWdnZXIgc29tZSBpbml0aWFsIGZsb3dzIGludG8gd3JhcHBlcnMgYW5kIGNvbnRyb2xzLFxuICAgICAqIGxpa2UgbG9jYXRpbmcgSURzICBhbmQgc2V0dGluZyAgYXR0cmlidXRlcy5cbiAgICAgKi9cbiAgICB0aGlzLnVwZGF0ZUhlbHBlcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBjb250cm9sQ2xhc3MoKSB7XG4gICAgLyoqXG4gICAgICogRGVjaWRlIHdoYXQgc3VidGV4dCB0byBkaXNwbGF5OlxuICAgICAqICAgLSBjb250YWluZXIgaXMgdmFsaWQgYnV0IG5vIHN1Y2Nlc3MgY29tcG9uZW50IGlzIGltcGxlbWVudGVkIC0gdXNlIGhlbHBlciBjbGFzc1xuICAgICAqICAgLSBjb250YWluZXIgaXMgdmFsaWQgYW5kIHN1Y2Nlc3MgY29tcG9uZW50IGlzIGltcGxlbWVudGVkIC0gdXNlIHN1Y2Nlc3MgY2xhc3NcbiAgICAgKi9cbiAgICBpZiAoKCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50ICYmIHRoaXMuc3RhdGUgPT09IENPTlRST0xfU1RBVEUuVkFMSUQpIHx8ICF0aGlzLnRvdWNoZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuY29udHJvbENsYXNzKENPTlRST0xfU1RBVEUuTk9ORSwgdGhpcy5hZGRHcmlkKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXNzIGZvcm0gY29udHJvbCBzdGF0ZSBhbmQgcmV0dXJuIHN0cmluZyBvZiBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICByZXR1cm4gdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmNvbnRyb2xDbGFzcyh0aGlzLnN0YXRlLCB0aGlzLmFkZEdyaWQoKSk7XG4gIH1cblxuICBhZGRHcmlkKCkge1xuICAgIHJldHVybiB0aGlzLmxheW91dFNlcnZpY2UgJiYgIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhlbHBlcnMoKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sU2VydmljZSkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLnNldEhlbHBlcnMoe1xuICAgICAgICBzaG93OiB0aGlzLnNob3dJbnZhbGlkIHx8IHRoaXMuc2hvd0hlbHBlciB8fCB0aGlzLnNob3dWYWxpZCxcbiAgICAgICAgc2hvd0ludmFsaWQ6IHRoaXMuc2hvd0ludmFsaWQsXG4gICAgICAgIHNob3dIZWxwZXI6IHRoaXMuc2hvd0hlbHBlcixcbiAgICAgICAgc2hvd1ZhbGlkOiB0aGlzLnNob3dWYWxpZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19