UNPKG

cfc-ds

Version:

Design System do Conselho Federal de Contabilidade baseado no govbr-ds

101 lines 25 kB
// radio.component.ts import { Component, Input, Output, EventEmitter, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class RadioComponent { options = []; label = ''; helperText = ''; name = 'radio-group-' + Math.random().toString(36).substring(2); horizontal = false; invalid = false; valid = false; errorMessage = ''; successMessage = ''; disabled = false; selectionChange = new EventEmitter(); value = null; focusedIndex = null; // ControlValueAccessor implementation onChange = () => { }; onTouched = () => { }; writeValue(value) { this.value = value; } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; } // Component methods onSelect(option) { if (this.disabled || option.disabled) { return; } this.value = option.value; this.onChange(this.value); this.onTouched(); this.selectionChange.emit(this.value); } setFocus(index) { this.focusedIndex = index; } clearFocus() { this.focusedIndex = null; } isSelected(option) { return this.value === option.value; } getAriaInvalid() { return this.invalid; } trackByFn(index, item) { return item.value || index; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RadioComponent, selector: "cfc-radio", inputs: { options: "options", label: "label", helperText: "helperText", name: "name", horizontal: "horizontal", invalid: "invalid", valid: "valid", errorMessage: "errorMessage", successMessage: "successMessage", disabled: "disabled" }, outputs: { selectionChange: "selectionChange" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioComponent), multi: true } ], ngImport: i0, template: "<!-- radio.component.html -->\r\n<div class=\"cfc-radio-group\" [class.cfc-radio--horizontal]=\"horizontal\" [class.cfc-radio--disabled]=\"disabled\">\r\n <!-- Label and helper text (optional) -->\r\n <div class=\"cfc-radio-header\" *ngIf=\"label || helperText\">\r\n <label class=\"cfc-radio-label\" *ngIf=\"label\">{{ label }}</label>\r\n <div class=\"cfc-radio-helper-text\" *ngIf=\"helperText\">{{ helperText }}</div>\r\n </div>\r\n\r\n <!-- Radio options list -->\r\n <div class=\"cfc-radio-options\" [attr.aria-invalid]=\"getAriaInvalid()\" role=\"radiogroup\" [attr.aria-labelledby]=\"label ? 'radio-label-' + name : null\">\r\n <div \r\n *ngFor=\"let option of options; let i = index; trackBy: trackByFn\" \r\n class=\"cfc-radio-item\"\r\n [class.cfc-radio-item--disabled]=\"option.disabled || disabled\"\r\n >\r\n <div class=\"cfc-radio-container\" \r\n [class.cfc-radio--selected]=\"isSelected(option)\"\r\n [class.cfc-radio--focused]=\"focusedIndex === i\"\r\n [class.cfc-radio--invalid]=\"invalid && isSelected(option)\"\r\n [class.cfc-radio--valid]=\"valid && isSelected(option)\"\r\n (click)=\"onSelect(option)\"\r\n (keydown.space)=\"$event.preventDefault(); onSelect(option)\"\r\n (focus)=\"setFocus(i)\"\r\n (blur)=\"clearFocus()\"\r\n tabindex=\"0\"\r\n role=\"radio\"\r\n [attr.aria-checked]=\"isSelected(option)\"\r\n [attr.aria-disabled]=\"option.disabled || disabled\"\r\n >\r\n <div class=\"cfc-radio-outer-circle\">\r\n <div class=\"cfc-radio-inner-circle\" *ngIf=\"isSelected(option)\"></div>\r\n </div>\r\n </div>\r\n <label class=\"cfc-radio-label\" (click)=\"onSelect(option)\" [class.cfc-radio-label--disabled]=\"option.disabled || disabled\">{{ option.label }}</label>\r\n </div>\r\n </div>\r\n\r\n <!-- Feedback messages -->\r\n <div class=\"cfc-radio-feedback\" *ngIf=\"invalid && errorMessage\">\r\n <div class=\"cfc-radio-error-message\">\r\n <svg class=\"cfc-radio-icon-error\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-7v2h2v-2h-2zm0-8v6h2V7h-2z\" fill=\"currentColor\"/>\r\n </svg>\r\n {{ errorMessage }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"cfc-radio-feedback\" *ngIf=\"valid && successMessage\">\r\n <div class=\"cfc-radio-success-message\">\r\n <svg class=\"cfc-radio-icon-success\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-.997-6l7.07-7.071-1.414-1.414-5.656 5.657-2.829-2.829-1.414 1.414L11.003 16z\" fill=\"currentColor\"/>\r\n </svg>\r\n {{ successMessage }}\r\n </div>\r\n </div>\r\n</div>", styles: [".cfc-radio-group{display:flex;flex-direction:column;margin-bottom:16px}.cfc-radio-header{margin-bottom:12px}.cfc-radio-label{display:block;font-size:1rem;font-weight:500;color:#1b1b1b}.cfc-radio-helper-text{font-size:.875rem;color:#1b1b1bcc;margin-top:4px}.cfc-radio-options{display:flex;flex-direction:column}.cfc-radio--horizontal .cfc-radio-options{flex-direction:row;flex-wrap:wrap}.cfc-radio-item{display:flex;align-items:center;margin-bottom:12px;cursor:pointer}.cfc-radio--horizontal .cfc-radio-item{margin-right:16px;min-width:120px;max-width:320px}.cfc-radio-item.cfc-radio-item--disabled{cursor:not-allowed}.cfc-radio-container{display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:12px;position:relative;cursor:pointer;outline:none}.cfc-radio-container:hover:not(.cfc-radio-item--disabled) .cfc-radio-outer-circle{background-color:#d9e8f6}.cfc-radio-container.cfc-radio--focused .cfc-radio-outer-circle{box-shadow:0 0 0 2px #ffbe2e}.cfc-radio-container.cfc-radio--invalid .cfc-radio-outer-circle{border-color:#e52207}.cfc-radio-container.cfc-radio--valid .cfc-radio-outer-circle{border-color:#00a878}.cfc-radio-item--disabled .cfc-radio-container{cursor:not-allowed}.cfc-radio-item--disabled .cfc-radio-container .cfc-radio-outer-circle{border-color:#d6d7d9;background-color:#d6d7d94d}.cfc-radio-item--disabled .cfc-radio-container .cfc-radio-inner-circle{background-color:#d6d7d9}.cfc-radio-outer-circle{display:block;width:100%;height:100%;border:2px solid #1b1b1b;border-radius:50%;transition:all .2s ease-in-out}.cfc-radio-inner-circle{position:absolute;width:10px;height:10px;background-color:#06c;border-radius:50%;transition:transform .2s ease-in-out;top:50%;left:50%;transform:translate(-50%,-50%)}.cfc-radio--selected .cfc-radio-outer-circle{border-color:#06c}.cfc-radio--selected.cfc-radio--invalid .cfc-radio-inner-circle{background-color:#e52207}.cfc-radio--selected.cfc-radio--valid .cfc-radio-inner-circle{background-color:#00a878}.cfc-radio-label{font-size:1rem;color:#1b1b1b;line-height:1.5}.cfc-radio-label:first-letter{text-transform:capitalize}.cfc-radio-label.cfc-radio-label--disabled{color:#d6d7d9}.cfc-radio-feedback{margin-top:12px}.cfc-radio-error-message,.cfc-radio-success-message{display:flex;align-items:center;font-size:.875rem;padding:4px 8px;border-radius:2px}.cfc-radio-error-message{color:#fff;background-color:#e52207}.cfc-radio-success-message{color:#fff;background-color:#00a878}.cfc-radio-icon-error,.cfc-radio-icon-success{width:16px;height:16px;margin-right:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioComponent, decorators: [{ type: Component, args: [{ selector: 'cfc-radio', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioComponent), multi: true } ], template: "<!-- radio.component.html -->\r\n<div class=\"cfc-radio-group\" [class.cfc-radio--horizontal]=\"horizontal\" [class.cfc-radio--disabled]=\"disabled\">\r\n <!-- Label and helper text (optional) -->\r\n <div class=\"cfc-radio-header\" *ngIf=\"label || helperText\">\r\n <label class=\"cfc-radio-label\" *ngIf=\"label\">{{ label }}</label>\r\n <div class=\"cfc-radio-helper-text\" *ngIf=\"helperText\">{{ helperText }}</div>\r\n </div>\r\n\r\n <!-- Radio options list -->\r\n <div class=\"cfc-radio-options\" [attr.aria-invalid]=\"getAriaInvalid()\" role=\"radiogroup\" [attr.aria-labelledby]=\"label ? 'radio-label-' + name : null\">\r\n <div \r\n *ngFor=\"let option of options; let i = index; trackBy: trackByFn\" \r\n class=\"cfc-radio-item\"\r\n [class.cfc-radio-item--disabled]=\"option.disabled || disabled\"\r\n >\r\n <div class=\"cfc-radio-container\" \r\n [class.cfc-radio--selected]=\"isSelected(option)\"\r\n [class.cfc-radio--focused]=\"focusedIndex === i\"\r\n [class.cfc-radio--invalid]=\"invalid && isSelected(option)\"\r\n [class.cfc-radio--valid]=\"valid && isSelected(option)\"\r\n (click)=\"onSelect(option)\"\r\n (keydown.space)=\"$event.preventDefault(); onSelect(option)\"\r\n (focus)=\"setFocus(i)\"\r\n (blur)=\"clearFocus()\"\r\n tabindex=\"0\"\r\n role=\"radio\"\r\n [attr.aria-checked]=\"isSelected(option)\"\r\n [attr.aria-disabled]=\"option.disabled || disabled\"\r\n >\r\n <div class=\"cfc-radio-outer-circle\">\r\n <div class=\"cfc-radio-inner-circle\" *ngIf=\"isSelected(option)\"></div>\r\n </div>\r\n </div>\r\n <label class=\"cfc-radio-label\" (click)=\"onSelect(option)\" [class.cfc-radio-label--disabled]=\"option.disabled || disabled\">{{ option.label }}</label>\r\n </div>\r\n </div>\r\n\r\n <!-- Feedback messages -->\r\n <div class=\"cfc-radio-feedback\" *ngIf=\"invalid && errorMessage\">\r\n <div class=\"cfc-radio-error-message\">\r\n <svg class=\"cfc-radio-icon-error\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-7v2h2v-2h-2zm0-8v6h2V7h-2z\" fill=\"currentColor\"/>\r\n </svg>\r\n {{ errorMessage }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"cfc-radio-feedback\" *ngIf=\"valid && successMessage\">\r\n <div class=\"cfc-radio-success-message\">\r\n <svg class=\"cfc-radio-icon-success\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-.997-6l7.07-7.071-1.414-1.414-5.656 5.657-2.829-2.829-1.414 1.414L11.003 16z\" fill=\"currentColor\"/>\r\n </svg>\r\n {{ successMessage }}\r\n </div>\r\n </div>\r\n</div>", styles: [".cfc-radio-group{display:flex;flex-direction:column;margin-bottom:16px}.cfc-radio-header{margin-bottom:12px}.cfc-radio-label{display:block;font-size:1rem;font-weight:500;color:#1b1b1b}.cfc-radio-helper-text{font-size:.875rem;color:#1b1b1bcc;margin-top:4px}.cfc-radio-options{display:flex;flex-direction:column}.cfc-radio--horizontal .cfc-radio-options{flex-direction:row;flex-wrap:wrap}.cfc-radio-item{display:flex;align-items:center;margin-bottom:12px;cursor:pointer}.cfc-radio--horizontal .cfc-radio-item{margin-right:16px;min-width:120px;max-width:320px}.cfc-radio-item.cfc-radio-item--disabled{cursor:not-allowed}.cfc-radio-container{display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:12px;position:relative;cursor:pointer;outline:none}.cfc-radio-container:hover:not(.cfc-radio-item--disabled) .cfc-radio-outer-circle{background-color:#d9e8f6}.cfc-radio-container.cfc-radio--focused .cfc-radio-outer-circle{box-shadow:0 0 0 2px #ffbe2e}.cfc-radio-container.cfc-radio--invalid .cfc-radio-outer-circle{border-color:#e52207}.cfc-radio-container.cfc-radio--valid .cfc-radio-outer-circle{border-color:#00a878}.cfc-radio-item--disabled .cfc-radio-container{cursor:not-allowed}.cfc-radio-item--disabled .cfc-radio-container .cfc-radio-outer-circle{border-color:#d6d7d9;background-color:#d6d7d94d}.cfc-radio-item--disabled .cfc-radio-container .cfc-radio-inner-circle{background-color:#d6d7d9}.cfc-radio-outer-circle{display:block;width:100%;height:100%;border:2px solid #1b1b1b;border-radius:50%;transition:all .2s ease-in-out}.cfc-radio-inner-circle{position:absolute;width:10px;height:10px;background-color:#06c;border-radius:50%;transition:transform .2s ease-in-out;top:50%;left:50%;transform:translate(-50%,-50%)}.cfc-radio--selected .cfc-radio-outer-circle{border-color:#06c}.cfc-radio--selected.cfc-radio--invalid .cfc-radio-inner-circle{background-color:#e52207}.cfc-radio--selected.cfc-radio--valid .cfc-radio-inner-circle{background-color:#00a878}.cfc-radio-label{font-size:1rem;color:#1b1b1b;line-height:1.5}.cfc-radio-label:first-letter{text-transform:capitalize}.cfc-radio-label.cfc-radio-label--disabled{color:#d6d7d9}.cfc-radio-feedback{margin-top:12px}.cfc-radio-error-message,.cfc-radio-success-message{display:flex;align-items:center;font-size:.875rem;padding:4px 8px;border-radius:2px}.cfc-radio-error-message{color:#fff;background-color:#e52207}.cfc-radio-success-message{color:#fff;background-color:#00a878}.cfc-radio-icon-error,.cfc-radio-icon-success{width:16px;height:16px;margin-right:4px}\n"] }] }], propDecorators: { options: [{ type: Input }], label: [{ type: Input }], helperText: [{ type: Input }], name: [{ type: Input }], horizontal: [{ type: Input }], invalid: [{ type: Input }], valid: [{ type: Input }], errorMessage: [{ type: Input }], successMessage: [{ type: Input }], disabled: [{ type: Input }], selectionChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2ZjLWRzL3NyYy9saWIvY29tcG9uZW50cy9yYWRpby9yYWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL3JhZGlvL3JhZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFxQjtBQUNyQixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7OztBQWV6RSxNQUFNLE9BQU8sY0FBYztJQUNoQixPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUM1QixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDeEIsSUFBSSxHQUFXLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLE9BQU8sR0FBWSxLQUFLLENBQUM7SUFDekIsS0FBSyxHQUFZLEtBQUssQ0FBQztJQUN2QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUV6QixlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUVwRCxLQUFLLEdBQVEsSUFBSSxDQUFDO0lBQ2xCLFlBQVksR0FBa0IsSUFBSSxDQUFDO0lBRW5DLHNDQUFzQztJQUN0QyxRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3pCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFMUIsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsUUFBUSxDQUFDLE1BQW1CO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLElBQWlCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDN0IsQ0FBQzt3R0FuRVUsY0FBYzs0RkFBZCxjQUFjLGlVQVJkO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0JBQzdDLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkNmSCwrMUZBdURNOzs0RkR0Q08sY0FBYztrQkFaMUIsU0FBUzsrQkFDRSxXQUFXLGFBR1Y7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDOzRCQUM3QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFHUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmFkaW8uY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmFkaW9PcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmFkaW8ubW9kZWwnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NmYy1yYWRpbycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFkaW9Db21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJhZGlvQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJhZGlvT3B0aW9uW10gPSBbXTtcclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJ3JhZGlvLWdyb3VwLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XHJcbiAgQElucHV0KCkgaG9yaXpvbnRhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgdmFsdWU6IGFueSA9IG51bGw7XHJcbiAgZm9jdXNlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcG9uZW50IG1ldGhvZHNcclxuICBvblNlbGVjdChvcHRpb246IFJhZGlvT3B0aW9uKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCBvcHRpb24uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLnZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXMoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5mb2N1c2VkSW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIGNsZWFyRm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvY3VzZWRJbmRleCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkKG9wdGlvbjogUmFkaW9PcHRpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBvcHRpb24udmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRBcmlhSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogUmFkaW9PcHRpb24pOiBhbnkge1xyXG4gICAgcmV0dXJuIGl0ZW0udmFsdWUgfHwgaW5kZXg7XHJcbiAgfVxyXG59IiwiPCEtLSByYWRpby5jb21wb25lbnQuaHRtbCAtLT5cclxuPGRpdiBjbGFzcz1cImNmYy1yYWRpby1ncm91cFwiIFtjbGFzcy5jZmMtcmFkaW8tLWhvcml6b250YWxdPVwiaG9yaXpvbnRhbFwiIFtjbGFzcy5jZmMtcmFkaW8tLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgPCEtLSBMYWJlbCBhbmQgaGVscGVyIHRleHQgKG9wdGlvbmFsKSAtLT5cclxuICA8ZGl2IGNsYXNzPVwiY2ZjLXJhZGlvLWhlYWRlclwiICpuZ0lmPVwibGFiZWwgfHwgaGVscGVyVGV4dFwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY2ZjLXJhZGlvLWxhYmVsXCIgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJjZmMtcmFkaW8taGVscGVyLXRleHRcIiAqbmdJZj1cImhlbHBlclRleHRcIj57eyBoZWxwZXJUZXh0IH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUmFkaW8gb3B0aW9ucyBsaXN0IC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjZmMtcmFkaW8tb3B0aW9uc1wiIFthdHRyLmFyaWEtaW52YWxpZF09XCJnZXRBcmlhSW52YWxpZCgpXCIgcm9sZT1cInJhZGlvZ3JvdXBcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWwgPyAncmFkaW8tbGFiZWwtJyArIG5hbWUgOiBudWxsXCI+XHJcbiAgICA8ZGl2IFxyXG4gICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlGblwiIFxyXG4gICAgICBjbGFzcz1cImNmYy1yYWRpby1pdGVtXCJcclxuICAgICAgW2NsYXNzLmNmYy1yYWRpby1pdGVtLS1kaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWQgfHwgZGlzYWJsZWRcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2ZjLXJhZGlvLWNvbnRhaW5lclwiIFxyXG4gICAgICAgIFtjbGFzcy5jZmMtcmFkaW8tLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQob3B0aW9uKVwiXHJcbiAgICAgICAgW2NsYXNzLmNmYy1yYWRpby0tZm9jdXNlZF09XCJmb2N1c2VkSW5kZXggPT09IGlcIlxyXG4gICAgICAgIFtjbGFzcy5jZmMtcmFkaW8tLWludmFsaWRdPVwiaW52YWxpZCAmJiBpc1NlbGVjdGVkKG9wdGlvbilcIlxyXG4gICAgICAgIFtjbGFzcy5jZmMtcmFkaW8tLXZhbGlkXT1cInZhbGlkICYmIGlzU2VsZWN0ZWQob3B0aW9uKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KG9wdGlvbilcIlxyXG4gICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBvblNlbGVjdChvcHRpb24pXCJcclxuICAgICAgICAoZm9jdXMpPVwic2V0Rm9jdXMoaSlcIlxyXG4gICAgICAgIChibHVyKT1cImNsZWFyRm9jdXMoKVwiXHJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgICByb2xlPVwicmFkaW9cIlxyXG4gICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpc1NlbGVjdGVkKG9wdGlvbilcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkIHx8IGRpc2FibGVkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZmMtcmFkaW8tb3V0ZXItY2lyY2xlXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2ZjLXJhZGlvLWlubmVyLWNpcmNsZVwiICpuZ0lmPVwiaXNTZWxlY3RlZChvcHRpb24pXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjZmMtcmFkaW8tbGFiZWxcIiAoY2xpY2spPVwib25TZWxlY3Qob3B0aW9uKVwiIFtjbGFzcy5jZmMtcmFkaW8tbGFiZWwtLWRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZCB8fCBkaXNhYmxlZFwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBGZWVkYmFjayBtZXNzYWdlcyAtLT5cclxuICA8ZGl2IGNsYXNzPVwiY2ZjLXJhZGlvLWZlZWRiYWNrXCIgKm5nSWY9XCJpbnZhbGlkICYmIGVycm9yTWVzc2FnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNmYy1yYWRpby1lcnJvci1tZXNzYWdlXCI+XHJcbiAgICAgIDxzdmcgY2xhc3M9XCJjZmMtcmFkaW8taWNvbi1lcnJvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTEyIDIyQzYuNDc3IDIyIDIgMTcuNTIzIDIgMTJTNi40NzcgMiAxMiAyczEwIDQuNDc3IDEwIDEwLTQuNDc3IDEwLTEwIDEwem0tMS03djJoMnYtMmgtMnptMC04djZoMlY3aC0yelwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY2ZjLXJhZGlvLWZlZWRiYWNrXCIgKm5nSWY9XCJ2YWxpZCAmJiBzdWNjZXNzTWVzc2FnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNmYy1yYWRpby1zdWNjZXNzLW1lc3NhZ2VcIj5cclxuICAgICAgPHN2ZyBjbGFzcz1cImNmYy1yYWRpby1pY29uLXN1Y2Nlc3NcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgPHBhdGggZD1cIk0xMiAyMkM2LjQ3NyAyMiAyIDE3LjUyMyAyIDEyUzYuNDc3IDIgMTIgMnMxMCA0LjQ3NyAxMCAxMC00LjQ3NyAxMC0xMCAxMHptLS45OTctNmw3LjA3LTcuMDcxLTEuNDE0LTEuNDE0LTUuNjU2IDUuNjU3LTIuODI5LTIuODI5LTEuNDE0IDEuNDE0TDExLjAwMyAxNnpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAge3sgc3VjY2Vzc01lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=