ngx-i18n-input
Version:
Angular library for internationalized input fields
315 lines • 93 kB
JavaScript
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output, ViewChildren } from '@angular/core';
import { FormControl, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';
import { mergeNgxI18nConfigs, NGX_I18N_INPUT_CONFIG, NGX_I18N_INPUT_DEFAULT_CONFIGS } from './types';
import { generateUid } from './types';
import { BehaviorSubject, map } from 'rxjs';
import { NgxI18nInputSingleLangInputComponent } from './ngx-i18n-input-single-lang-input/ngx-i18n-input-single-lang-input.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/forms";
import * as i3 from "./ngx-i18n-input-single-lang-input/ngx-i18n-input-single-lang-input.component";
export class NgxI18nInputComponent {
constructor() {
/*************************************** Dependencies ***************************************/
this.cd = inject(ChangeDetectorRef);
/*************************************** Instance variables ***************************************/
this.activeLang = null;
this.forms = new FormGroup({});
/*************************************** Inputs and Configs ***************************************/
this.uid = generateUid();
this.configs = mergeNgxI18nConfigs(inject(NGX_I18N_INPUT_CONFIG, { optional: true }) || NGX_I18N_INPUT_DEFAULT_CONFIGS);
/*************************************** Outputs ***************************************/
this.valueChanges = this.forms.valueChanges.pipe(map(this.configs.formatOutput));
this.activeLangChange = new BehaviorSubject(null);
this.onCustomEvent = new EventEmitter();
}
/**
* Customize input template. Suggested but not required.
* Usage:
* ```html
* <ng-template #titleTemplate let-all>
* <input [formControl]="all.control">
* </ng-template>
*
* <ngx-i18n-input [inputTemplate]="titleTemplate" formControlName="title">
* ```
*/
set inputTemplate(template) {
this.configs.inputTemplate = template || null;
}
get inputTemplate() {
return this.configs.inputTemplate;
}
/**
* Customize language name template.
* Usage:
* ```html
* <ng-template #labelTemplate let-context>
* <span>{{ context.configs.formatLabel(context.lang, context.configs.label) }}</span>
* </ng-template>
*
* <ngx-i18n-input [labelTemplate]="labelTemplate"></ngx-i18n-input>
* ```
*/
set labelTemplate(template) {
this.configs.labelTemplate = template ?? null;
}
get labelTemplate() {
return this.configs.labelTemplate;
}
/**
* Customize label of the component.
* When provided, will be used as string inside the template.
*/
set label(label) {
this.configs.label = label || null;
}
get label() {
return this.configs.label;
}
/**
* Customize layout of the component.
* Available layouts:
* - tabs
* - vertical
* Default: vertical
*/
set layout(layout) {
if (layout)
this.configs.layout = layout;
}
get layout() {
return this.configs.layout;
}
/**
* Autofocus input.
* When boolean, will autofocus the first input.
* When string, will autofocus the input with the given lang.
*/
set autofocus(autofocus) {
if (autofocus === null || autofocus === undefined)
autofocus = false;
this.configs.autofocus = autofocus;
}
get autofocus() {
return this.configs.autofocus;
}
/**
* When true, labels won't be displayed.
*/
set hideLabels(hideLabels) {
if (hideLabels === null || hideLabels === undefined)
hideLabels = false;
this.configs.hideLabels = hideLabels;
}
get hideLabels() {
return this.configs.hideLabels;
}
get availableLangs() {
return this.configs.availableLangs;
}
set languages(langs) {
if (langs === null || langs === undefined)
langs = [];
this.configs.availableLangs = langs;
}
get languages() {
return this.configs.availableLangs;
}
/**
* When true, all inputs will be required.
*/
set required(required) {
this.configs.required = (required === true);
}
get required() {
return this.configs.required;
}
/**
* Adding validators to the input.
*/
set validators(validators) {
this.configs.validators = validators || [];
}
get validators() {
return this.configs.validators || [];
}
set defaultInputComponent(v) {
this.configs.defaultInputComponent = v;
}
get defaultInputComponent() {
return this.configs.defaultInputComponent;
}
/*************************************** ANGULAR LIFECYCLE HOOKS ***************************************/
ngOnInit() {
this.availableLangs.forEach((lang) => {
if (!this.forms.get(lang))
this.forms.addControl(lang, new FormControl(null, [
this.validateFn.bind(this)
]));
});
// this.service.configs$.subscribe({next: (c) => this.configs = c});
if (typeof this.autofocus === "string" && this.forms.get(this.autofocus)) {
this.focusInput(this.autofocus);
}
else if (this.autofocus === true) {
this.focusInput(this.availableLangs[0]);
}
}
ngOnChanges(changes) {
this.inputs?.forEach((input) => {
input.detectChanges();
});
setTimeout(() => {
Object.values(this.forms.controls).forEach((control) => control.updateValueAndValidity({ emitEvent: false }));
});
}
writeValue(value) {
if (value === null || value === undefined)
value = {};
if (typeof value !== 'object') {
console.warn('NgxI18nInputComponent: value must be an object or null. Will reset input. got ', value);
value = {};
}
this.forms.patchValue(value, { emitEvent: false });
}
registerOnChange(fn) {
this.valueChanges.subscribe({
next: (value) => fn(value)
});
}
registerOnTouched(fn) {
this.registerOnChange(fn);
}
setDisabledState(isDisabled) {
this.forms[isDisabled ? 'disable' : 'enable']();
}
/*************************************** PUBLIC METHODS ***************************************/
validateFn(control) {
const value = control.value;
const acc = {};
if (this.required === true) {
if (value == null ||
value == undefined ||
((typeof value === "string" || Array.isArray(value)) && value.length === 0) ||
(typeof value === "object" && Object.keys(value).length === 0)) {
acc["required"] = true;
}
}
this.validators?.forEach((validator) => {
const result = validator(control);
if (result) {
Object.keys(result).forEach((key) => {
acc[key] = result[key];
});
}
});
return Object.keys(acc).length > 0 ? acc : null;
}
getStrLabelFor(lang) {
if (typeof this.label === "string")
return this.label;
if (this.label && this.label[lang])
return this.label[lang];
return lang;
}
getId(lang) {
return `${this.uid}-${lang}`;
}
inputId(lang) {
return `input-${this.getId(lang)}`;
}
containerId(lang) {
return `container-${this.getId(lang)}`;
}
isActiveLang(lang) {
return this.activeLang === lang || (this.activeLang === null &&
this.availableLangs &&
lang === this.availableLangs[0]);
}
focusInput(lang) {
this.activeLang = lang;
this.activeLangChange.next(lang);
setTimeout(() => this.tryLocateAndFocusInput(lang));
this.detectChanges();
}
detectChanges() {
this.cd.detectChanges();
}
/*************************************** PRIVATE METHODS ***************************************/
/**
* This method will try to locate the input with the given lang and focus it.
*/
tryLocateAndFocusInput(lang) {
const done = () => this.detectChanges();
const input = document.getElementById(this.inputId(lang));
if (input) {
input.focus();
return done();
}
const container = document.getElementById(this.containerId(lang));
if (container) {
const input = container.querySelector('input');
if (input) {
input.focus();
return done();
}
const textarea = container.querySelector('textarea');
if (textarea) {
textarea.focus();
return done();
}
}
done();
}
}
NgxI18nInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgxI18nInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
NgxI18nInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NgxI18nInputComponent, selector: "ngx-i18n-input", inputs: { uid: "uid", inputTemplate: "inputTemplate", labelTemplate: "labelTemplate", label: "label", layout: "layout", autofocus: "autofocus", hideLabels: "hideLabels", languages: "languages", required: "required", validators: "validators", defaultInputComponent: "defaultInputComponent" }, outputs: { valueChanges: "valueChanges", activeLangChange: "activeLangChange", onCustomEvent: "onCustomEvent" }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => NgxI18nInputComponent),
multi: true
}
], viewQueries: [{ propertyName: "inputs", predicate: NgxI18nInputSingleLangInputComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!------------------- TEMPLATES ------------------->\n<ng-template #defaultlabelTemplate let-all>\n <span [ngClass]=\"{'underline decoration-wavy decoration-red-500': all.control.touched && all.control.invalid && (layout === 'vertical' || !isActiveLang(all.lang))}\">\n {{ all.configs.formatLabel(all.lang, all.configs.label) }}\n </span>\n</ng-template>\n\n<ng-template #actualLabel let-all>\n <ng-container *ngTemplateOutlet=\"labelTemplate || defaultlabelTemplate; context: {\n $implicit: {\n lang: all.lang,\n control: forms.controls[all.lang],\n id: all.id,\n configs: all.configs\n }\n }\"></ng-container>\n</ng-template>\n\n<!------------------- CONTENT ------------------->\n<form class=\"layout-{{ layout }}\" [ngClass]=\"{'labels-hidden': hideLabels}\" [formGroup]=\"forms\">\n <ng-container [ngSwitch]=\"layout\">\n <ng-container *ngSwitchCase=\"'tabs'\">\n <ul *ngIf=\"!hideLabels\"\n class=\"m-0 p-0 flex flex-wrap text-sm font-medium text-center text-gray-500 border-b border-gray-200\">\n <ng-container *ngFor=\"let lang of availableLangs;\">\n <li class=\"me-2\">\n <label for=\"input-{{uid}}-{{lang}}\" (click)=\"focusInput(lang)\"\n class=\"inline-block px-4 py-3 rounded-t-lg cursor-pointer\" [ngClass]=\"{\n 'text-blue-600 bg-gray-100 active': isActiveLang(lang),\n 'hover:text-gray-600 hover:bg-gray-50': !isActiveLang(lang)\n }\">\n <ng-container *ngTemplateOutlet=\"actualLabel; context: { $implicit: { lang: lang, configs } }\"></ng-container>\n </label>\n </li>\n </ng-container>\n </ul>\n \n <ng-container *ngFor=\"let lang of availableLangs;\">\n <div id=\"{{ containerId(lang) }}\" [ngClass]=\"{\n 'hidden': !isActiveLang(lang)\n }\">\n <lib-ngx-i18n-input-single-lang-input\n [inputId]=\"inputId(lang)\"\n (onCustomEvent)=\"onCustomEvent.emit($event)\"\n [configs]=\"configs\"\n [formControlName]=\"lang\"\n [lang]=\"lang\"\n ></lib-ngx-i18n-input-single-lang-input>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngFor=\"let lang of availableLangs\">\n <div class=\"block mb-4\">\n <div class=\"flex flex-col\">\n <label *ngIf=\"!hideLabels\" for=\"input-{{ uid }}-{{ lang }}\">\n <ng-container *ngTemplateOutlet=\"actualLabel; context: { $implicit: { lang: lang, configs } }\"></ng-container>\n </label>\n \n <div id=\"{{ containerId(lang) }}\">\n <lib-ngx-i18n-input-single-lang-input\n [inputId]=\"inputId(lang)\"\n (onCustomEvent)=\"onCustomEvent.emit($event)\"\n [configs]=\"configs\"\n [formControlName]=\"lang\"\n [lang]=\"lang\"\n ></lib-ngx-i18n-input-single-lang-input>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n</form>\n", styles: ["/*! tailwindcss v4.0.4 | MIT License | https://tailwindcss.com */@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--font-serif: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--color-red-50: oklch(.971 .013 17.38);--color-red-100: oklch(.936 .032 17.717);--color-red-200: oklch(.885 .062 18.334);--color-red-300: oklch(.808 .114 19.571);--color-red-400: oklch(.704 .191 22.216);--color-red-500: oklch(.637 .237 25.331);--color-red-600: oklch(.577 .245 27.325);--color-red-700: oklch(.505 .213 27.518);--color-red-800: oklch(.444 .177 26.899);--color-red-900: oklch(.396 .141 25.723);--color-red-950: oklch(.258 .092 26.042);--color-orange-50: oklch(.98 .016 73.684);--color-orange-100: oklch(.954 .038 75.164);--color-orange-200: oklch(.901 .076 70.697);--color-orange-300: oklch(.837 .128 66.29);--color-orange-400: oklch(.75 .183 55.934);--color-orange-500: oklch(.705 .213 47.604);--color-orange-600: oklch(.646 .222 41.116);--color-orange-700: oklch(.553 .195 38.402);--color-orange-800: oklch(.47 .157 37.304);--color-orange-900: oklch(.408 .123 38.172);--color-orange-950: oklch(.266 .079 36.259);--color-amber-50: oklch(.987 .022 95.277);--color-amber-100: oklch(.962 .059 95.617);--color-amber-200: oklch(.924 .12 95.746);--color-amber-300: oklch(.879 .169 91.605);--color-amber-400: oklch(.828 .189 84.429);--color-amber-500: oklch(.769 .188 70.08);--color-amber-600: oklch(.666 .179 58.318);--color-amber-700: oklch(.555 .163 48.998);--color-amber-800: oklch(.473 .137 46.201);--color-amber-900: oklch(.414 .112 45.904);--color-amber-950: oklch(.279 .077 45.635);--color-yellow-50: oklch(.987 .026 102.212);--color-yellow-100: oklch(.973 .071 103.193);--color-yellow-200: oklch(.945 .129 101.54);--color-yellow-300: oklch(.905 .182 98.111);--color-yellow-400: oklch(.852 .199 91.936);--color-yellow-500: oklch(.795 .184 86.047);--color-yellow-600: oklch(.681 .162 75.834);--color-yellow-700: oklch(.554 .135 66.442);--color-yellow-800: oklch(.476 .114 61.907);--color-yellow-900: oklch(.421 .095 57.708);--color-yellow-950: oklch(.286 .066 53.813);--color-lime-50: oklch(.986 .031 120.757);--color-lime-100: oklch(.967 .067 122.328);--color-lime-200: oklch(.938 .127 124.321);--color-lime-300: oklch(.897 .196 126.665);--color-lime-400: oklch(.841 .238 128.85);--color-lime-500: oklch(.768 .233 130.85);--color-lime-600: oklch(.648 .2 131.684);--color-lime-700: oklch(.532 .157 131.589);--color-lime-800: oklch(.453 .124 130.933);--color-lime-900: oklch(.405 .101 131.063);--color-lime-950: oklch(.274 .072 132.109);--color-green-50: oklch(.982 .018 155.826);--color-green-100: oklch(.962 .044 156.743);--color-green-200: oklch(.925 .084 155.995);--color-green-300: oklch(.871 .15 154.449);--color-green-400: oklch(.792 .209 151.711);--color-green-500: oklch(.723 .219 149.579);--color-green-600: oklch(.627 .194 149.214);--color-green-700: oklch(.527 .154 150.069);--color-green-800: oklch(.448 .119 151.328);--color-green-900: oklch(.393 .095 152.535);--color-green-950: oklch(.266 .065 152.934);--color-emerald-50: oklch(.979 .021 166.113);--color-emerald-100: oklch(.95 .052 163.051);--color-emerald-200: oklch(.905 .093 164.15);--color-emerald-300: oklch(.845 .143 164.978);--color-emerald-400: oklch(.765 .177 163.223);--color-emerald-500: oklch(.696 .17 162.48);--color-emerald-600: oklch(.596 .145 163.225);--color-emerald-700: oklch(.508 .118 165.612);--color-emerald-800: oklch(.432 .095 166.913);--color-emerald-900: oklch(.378 .077 168.94);--color-emerald-950: oklch(.262 .051 172.552);--color-teal-50: oklch(.984 .014 180.72);--color-teal-100: oklch(.953 .051 180.801);--color-teal-200: oklch(.91 .096 180.426);--color-teal-300: oklch(.855 .138 181.071);--color-teal-400: oklch(.777 .152 181.912);--color-teal-500: oklch(.704 .14 182.503);--color-teal-600: oklch(.6 .118 184.704);--color-teal-700: oklch(.511 .096 186.391);--color-teal-800: oklch(.437 .078 188.216);--color-teal-900: oklch(.386 .063 188.416);--color-teal-950: oklch(.277 .046 192.524);--color-cyan-50: oklch(.984 .019 200.873);--color-cyan-100: oklch(.956 .045 203.388);--color-cyan-200: oklch(.917 .08 205.041);--color-cyan-300: oklch(.865 .127 207.078);--color-cyan-400: oklch(.789 .154 211.53);--color-cyan-500: oklch(.715 .143 215.221);--color-cyan-600: oklch(.609 .126 221.723);--color-cyan-700: oklch(.52 .105 223.128);--color-cyan-800: oklch(.45 .085 224.283);--color-cyan-900: oklch(.398 .07 227.392);--color-cyan-950: oklch(.302 .056 229.695);--color-sky-50: oklch(.977 .013 236.62);--color-sky-100: oklch(.951 .026 236.824);--color-sky-200: oklch(.901 .058 230.902);--color-sky-300: oklch(.828 .111 230.318);--color-sky-400: oklch(.746 .16 232.661);--color-sky-500: oklch(.685 .169 237.323);--color-sky-600: oklch(.588 .158 241.966);--color-sky-700: oklch(.5 .134 242.749);--color-sky-800: oklch(.443 .11 240.79);--color-sky-900: oklch(.391 .09 240.876);--color-sky-950: oklch(.293 .066 243.157);--color-blue-50: oklch(.97 .014 254.604);--color-blue-100: oklch(.932 .032 255.585);--color-blue-200: oklch(.882 .059 254.128);--color-blue-300: oklch(.809 .105 251.813);--color-blue-400: oklch(.707 .165 254.624);--color-blue-500: oklch(.623 .214 259.815);--color-blue-600: oklch(.546 .245 262.881);--color-blue-700: oklch(.488 .243 264.376);--color-blue-800: oklch(.424 .199 265.638);--color-blue-900: oklch(.379 .146 265.522);--color-blue-950: oklch(.282 .091 267.935);--color-indigo-50: oklch(.962 .018 272.314);--color-indigo-100: oklch(.93 .034 272.788);--color-indigo-200: oklch(.87 .065 274.039);--color-indigo-300: oklch(.785 .115 274.713);--color-indigo-400: oklch(.673 .182 276.935);--color-indigo-500: oklch(.585 .233 277.117);--color-indigo-600: oklch(.511 .262 276.966);--color-indigo-700: oklch(.457 .24 277.023);--color-indigo-800: oklch(.398 .195 277.366);--color-indigo-900: oklch(.359 .144 278.697);--color-indigo-950: oklch(.257 .09 281.288);--color-violet-50: oklch(.969 .016 293.756);--color-violet-100: oklch(.943 .029 294.588);--color-violet-200: oklch(.894 .057 293.283);--color-violet-300: oklch(.811 .111 293.571);--color-violet-400: oklch(.702 .183 293.541);--color-violet-500: oklch(.606 .25 292.717);--color-violet-600: oklch(.541 .281 293.009);--color-violet-700: oklch(.491 .27 292.581);--color-violet-800: oklch(.432 .232 292.759);--color-violet-900: oklch(.38 .189 293.745);--color-violet-950: oklch(.283 .141 291.089);--color-purple-50: oklch(.977 .014 308.299);--color-purple-100: oklch(.946 .033 307.174);--color-purple-200: oklch(.902 .063 306.703);--color-purple-300: oklch(.827 .119 306.383);--color-purple-400: oklch(.714 .203 305.504);--color-purple-500: oklch(.627 .265 303.9);--color-purple-600: oklch(.558 .288 302.321);--color-purple-700: oklch(.496 .265 301.924);--color-purple-800: oklch(.438 .218 303.724);--color-purple-900: oklch(.381 .176 304.987);--color-purple-950: oklch(.291 .149 302.717);--color-fuchsia-50: oklch(.977 .017 320.058);--color-fuchsia-100: oklch(.952 .037 318.852);--color-fuchsia-200: oklch(.903 .076 319.62);--color-fuchsia-300: oklch(.833 .145 321.434);--color-fuchsia-400: oklch(.74 .238 322.16);--color-fuchsia-500: oklch(.667 .295 322.15);--color-fuchsia-600: oklch(.591 .293 322.896);--color-fuchsia-700: oklch(.518 .253 323.949);--color-fuchsia-800: oklch(.452 .211 324.591);--color-fuchsia-900: oklch(.401 .17 325.612);--color-fuchsia-950: oklch(.293 .136 325.661);--color-pink-50: oklch(.971 .014 343.198);--color-pink-100: oklch(.948 .028 342.258);--color-pink-200: oklch(.899 .061 343.231);--color-pink-300: oklch(.823 .12 346.018);--color-pink-400: oklch(.718 .202 349.761);--color-pink-500: oklch(.656 .241 354.308);--color-pink-600: oklch(.592 .249 .584);--color-pink-700: oklch(.525 .223 3.958);--color-pink-800: oklch(.459 .187 3.815);--color-pink-900: oklch(.408 .153 2.432);--color-pink-950: oklch(.284 .109 3.907);--color-rose-50: oklch(.969 .015 12.422);--color-rose-100: oklch(.941 .03 12.58);--color-rose-200: oklch(.892 .058 10.001);--color-rose-300: oklch(.81 .117 11.638);--color-rose-400: oklch(.712 .194 13.428);--color-rose-500: oklch(.645 .246 16.439);--color-rose-600: oklch(.586 .253 17.585);--color-rose-700: oklch(.514 .222 16.935);--color-rose-800: oklch(.455 .188 13.697);--color-rose-900: oklch(.41 .159 10.272);--color-rose-950: oklch(.271 .105 12.094);--color-slate-50: oklch(.984 .003 247.858);--color-slate-100: oklch(.968 .007 247.896);--color-slate-200: oklch(.929 .013 255.508);--color-slate-300: oklch(.869 .022 252.894);--color-slate-400: oklch(.704 .04 256.788);--color-slate-500: oklch(.554 .046 257.417);--color-slate-600: oklch(.446 .043 257.281);--color-slate-700: oklch(.372 .044 257.287);--color-slate-800: oklch(.279 .041 260.031);--color-slate-900: oklch(.208 .042 265.755);--color-slate-950: oklch(.129 .042 264.695);--color-gray-50: oklch(.985 .002 247.839);--color-gray-100: oklch(.967 .003 264.542);--color-gray-200: oklch(.928 .006 264.531);--color-gray-300: oklch(.872 .01 258.338);--color-gray-400: oklch(.707 .022 261.325);--color-gray-500: oklch(.551 .027 264.364);--color-gray-600: oklch(.446 .03 256.802);--color-gray-700: oklch(.373 .034 259.733);--color-gray-800: oklch(.278 .033 256.848);--color-gray-900: oklch(.21 .034 264.665);--color-gray-950: oklch(.13 .028 261.692);--color-zinc-50: oklch(.985 0 0);--color-zinc-100: oklch(.967 .001 286.375);--color-zinc-200: oklch(.92 .004 286.32);--color-zinc-300: oklch(.871 .006 286.286);--color-zinc-400: oklch(.705 .015 286.067);--color-zinc-500: oklch(.552 .016 285.938);--color-zinc-600: oklch(.442 .017 285.786);--color-zinc-700: oklch(.37 .013 285.805);--color-zinc-800: oklch(.274 .006 286.033);--color-zinc-900: oklch(.21 .006 285.885);--color-zinc-950: oklch(.141 .005 285.823);--color-neutral-50: oklch(.985 0 0);--color-neutral-100: oklch(.97 0 0);--color-neutral-200: oklch(.922 0 0);--color-neutral-300: oklch(.87 0 0);--color-neutral-400: oklch(.708 0 0);--color-neutral-500: oklch(.556 0 0);--color-neutral-600: oklch(.439 0 0);--color-neutral-700: oklch(.371 0 0);--color-neutral-800: oklch(.269 0 0);--color-neutral-900: oklch(.205 0 0);--color-neutral-950: oklch(.145 0 0);--color-stone-50: oklch(.985 .001 106.423);--color-stone-100: oklch(.97 .001 106.424);--color-stone-200: oklch(.923 .003 48.717);--color-stone-300: oklch(.869 .005 56.366);--color-stone-400: oklch(.709 .01 56.259);--color-stone-500: oklch(.553 .013 58.071);--color-stone-600: oklch(.444 .011 73.639);--color-stone-700: oklch(.374 .01 67.558);--color-stone-800: oklch(.268 .007 34.298);--color-stone-900: oklch(.216 .006 56.043);--color-stone-950: oklch(.147 .004 49.25);--color-black: #000;--color-white: #fff;--spacing: .25rem;--breakpoint-sm: 40rem;--breakpoint-md: 48rem;--breakpoint-lg: 64rem;--breakpoint-xl: 80rem;--breakpoint-2xl: 96rem;--container-3xs: 16rem;--container-2xs: 18rem;--container-xs: 20rem;--container-sm: 24rem;--container-md: 28rem;--container-lg: 32rem;--container-xl: 36rem;--container-2xl: 42rem;--container-3xl: 48rem;--container-4xl: 56rem;--container-5xl: 64rem;--container-6xl: 72rem;--container-7xl: 80rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-base: 1rem;--text-base--line-height:1.5;--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--text-2xl: 1.5rem;--text-2xl--line-height: calc(2 / 1.5);--text-3xl: 1.875rem;--text-3xl--line-height:1.2;--text-4xl: 2.25rem;--text-4xl--line-height: calc(2.5 / 2.25);--text-5xl: 3rem;--text-5xl--line-height: 1;--text-6xl: 3.75rem;--text-6xl--line-height: 1;--text-7xl: 4.5rem;--text-7xl--line-height: 1;--text-8xl: 6rem;--text-8xl--line-height: 1;--text-9xl: 8rem;--text-9xl--line-height: 1;--font-weight-thin: 100;--font-weight-extralight: 200;--font-weight-light: 300;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800;--font-weight-black: 900;--tracking-tighter: -.05em;--tracking-tight: -.025em;--tracking-normal: 0em;--tracking-wide: .025em;--tracking-wider: .05em;--tracking-widest: .1em;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.625;--leading-loose: 2;--radius-xs: .125rem;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--radius-2xl: 1rem;--radius-3xl: 1.5rem;--radius-4xl: 2rem;--shadow-2xs: 0 1px rgb(0 0 0 / .05);--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25);--inset-shadow-2xs: inset 0 1px rgb(0 0 0 / .05);--inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / .05);--inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / .05);--drop-shadow-xs: 0 1px 1px rgb(0 0 0 / .05);--drop-shadow-sm: 0 1px 2px rgb(0 0 0 / .15);--drop-shadow-md: 0 3px 3px rgb(0 0 0 / .12);--drop-shadow-lg: 0 4px 4px rgb(0 0 0 / .15);--drop-shadow-xl: 0 9px 7px rgb(0 0 0 / .1);--drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / .15);--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--animate-spin: spin 1s linear infinite;--animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animate-bounce: bounce 1s infinite;--blur-xs: 4px;--blur-sm: 8px;--blur-md: 12px;--blur-lg: 16px;--blur-xl: 24px;--blur-2xl: 40px;--blur-3xl: 64px;--perspective-dramatic: 100px;--perspective-near: 300px;--perspective-normal: 500px;--perspective-midrange: 800px;--perspective-distant: 1200px;--aspect-video: 16 / 9;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-font-feature-settings: var(--font-sans--font-feature-settings);--default-font-variation-settings: var( --font-sans--font-variation-settings );--default-mono-font-family: var(--font-mono);--default-mono-font-feature-settings: var( --font-mono--font-feature-settings );--default-mono-font-variation-settings: var( --font-mono--font-variation-settings )}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.collapse{visibility:collapse}.relative{position:relative}.static{position:static}.container{width:100%}@media (width >= 40rem){.container{max-width:40rem}}@media (width >= 48rem){.container{max-width:48rem}}@media (width >= 64rem){.container{max-width:64rem}}@media (width >= 80rem){.container{max-width:80rem}}@media (width >= 96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.me-2{margin-inline-end:calc(var(--spacing) * 2)}.-mt-px{margin-top:-1px}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.w-full{width:100%}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y)}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.rounded-lg{border-radius:var(--radius-lg)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-solid{--tw-border-style: solid;border-style:solid}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-red-500{border-color:var(--color-red-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-3{padding-block:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-blue-600{color:var(--color-blue-600)}.text-gray-500{color:var(--color-gray-500)}.text-gray-900{color:var(--color-gray-900)}.underline{text-decoration-line:underline}.decoration-red-500{text-decoration-color:var(--color-red-500)}.decoration-wavy{text-decoration-style:wavy}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-0{outline-style:var(--tw-outline-style);outline-width:0px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.filter{filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}@media (hover: hover){.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}}@media (hover: hover){.hover\\:text-gray-600:hover{color:var(--color-gray-600)}}.focus\\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\\:ring-blue-500:focus{--tw-ring-color: var(--color-blue-500)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}@property --tw-rotate-x{syntax: \"*\"; inherits: false; initial-value: rotateX(0);}@property --tw-rotate-y{syntax: \"*\"; inherits: false; initial-value: rotateY(0);}@property --tw-rotate-z{syntax: \"*\"; inherits: false; initial-value: rotateZ(0);}@property --tw-skew-x{syntax: \"*\"; inherits: false; initial-value: skewX(0);}@property --tw-skew-y{syntax: \"*\"; inherits: false; initial-value: skewY(0);}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: \"*\"; inherits: false;}@property --tw-brightness{syntax: \"*\"; inherits: false;}@property --tw-contrast{syntax: \"*\"; inherits: false;}@property --tw-grayscale{syntax: \"*\"; inherits: false;}@property --tw-hue-rotate{syntax: \"*\"; inherits: false;}@property --tw-invert{syntax: \"*\"; inherits: false;}@property --tw-opacity{syntax: \"*\"; inherits: false;}@property --tw-saturate{syntax: \"*\"; inherits: false;}@property --tw-sepia{syntax: \"*\"; inherits: false;}\n", ":host,:host *{box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { 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: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.NgxI18nInputSingleLangInputComponent, selector: "lib-ngx-i18n-input-single-lang-input", inputs: ["inputId", "configs", "lang"], outputs: ["onCustomEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgxI18nInputComponent, decorators: [{
type: Component,
args: [{ selector: 'ngx-i18n-input', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => NgxI18nInputComponent),
multi: true
}
], template: "<!------------------- TEMPLATES ------------------->\n<ng-template #defaultlabelTemplate let-all>\n <span [ngClass]=\"{'underline decoration-wavy decoration-red-500': all.control.touched && all.control.invalid && (layout === 'vertical' || !isActiveLang(all.lang))}\">\n {{ all.configs.formatLabel(all.lang, all.configs.label) }}\n </span>\n</ng-template>\n\n<ng-template #actualLabel let-all>\n <ng-container *ngTemplateOutlet=\"labelTemplate || defaultlabelTemplate; context: {\n $implicit: {\n lang: all.lang,\n control: forms.controls[all.lang],\n id: all.id,\n configs: all.configs\n }\n }\"></ng-container>\n</ng-template>\n\n<!------------------- CONTENT ------------------->\n<form class=\"layout-{{ layout }}\" [ngClass]=\"{'labels-hidden': hideLabels}\" [formGroup]=\"forms\">\n <ng-container [ngSwitch]=\"layout\">\n <ng-container *ngSwitchCase=\"'tabs'\">\n <ul *ngIf=\"!hideLabels\"\n class=\"m-0 p-0 flex flex-wrap text-sm font-medium text-center text-gray-500 border-b border-gray-200\">\n <ng-container *ngFor=\"let lang of availableLangs;\">\n <li class=\"me-2\">\n <label for=\"input-{{uid}}-{{lang}}\" (click)=\"focusInput(lang)\"\n class=\"inline-block px-4 py-3 rounded-t-lg cursor-pointer\" [ngClass]=\"{\n 'text-blue-600 bg-gray-100 active': isActiveLang(lang),\n 'hover:text-gray-600 hover:bg-gray-50': !isActiveLang(lang)\n }\">\n <ng-container *ngTemplateOutlet=\"actualLabel; context: { $implicit: { lang: lang, configs } }\"></ng-container>\n </label>\n </li>\n </ng-container>\n </ul>\n \n <ng-container *ngFor=\"let lang of availableLangs;\">\n <div id=\"{{ containerId(lang) }}\" [ngClass]=\"{\n 'hidden': !isActiveLang(lang)\n }\">\n <lib-ngx-i18n-input-single-lang-input\n [inputId]=\"inputId(lang)\"\n (onCustomEvent)=\"onCustomEvent.emit($event)\"\n [configs]=\"configs\"\n [formControlName]=\"lang\"\n [lang]=\"lang\"\n ></lib-ngx-i18n-input-single-lang-input>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngFor=\"let lang of availableLangs\">\n <div class=\"block mb-4\">\n <div class=\"flex flex-col\">\n <label *ngIf=\"!hideLabels\" for=\"input-{{ uid }}-{{ lang }}\">\n <ng-container *ngTemplateOutlet=\"actualLabel; context: { $implicit: { lang: lang, configs } }\"></ng-container>\n </label>\n \n <div id=\"{{ containerId(lang) }}\">\n <lib-ngx-i18n-input-single-lang-input\n [inputId]=\"inputId(lang)\"\n (onCustomEvent)=\"onCustomEvent.emit($event)\"\n [configs]=\"configs\"\n [formControlName]=\"lang\"\n [lang]=\"lang\"\n ></lib-ngx-i18n-input-single-lang-input>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n</form>\n", styles: ["/*! tailwindcss v4.0.4 | MIT License | https://tailwindcss.com */@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--font-serif: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--color-red-50: oklch(.971 .013 17.38);--color-red-100: oklch(.936 .032 17.717);--color-red-200: oklch(.885 .062 18.334);--color-red-300: oklch(.808 .114 19.571);--color-red-400: oklch(.704 .191 22.216);--color-red-500: oklch(.637 .237 25.331);--color-red-600: oklch(.577 .245 27.325);--color-red-700: oklch(.505 .213 27.518);--color-red-800: oklch(.444 .177 26.899);--color-red-900: oklch(.396 .141 25.723);--color-red-950: oklch(.258 .092 26.042);--color-orange-50: oklch(.98 .016 73.684);--color-orange-100: oklch(.954 .038 75.164);--color-orange-200: oklch(.901 .076 70.697);--color-orange-300: oklch(.837 .128 66.29);--color-orange-400: oklch(.75 .183 55.934);--color-orange-500: oklch(.705 .213 47.604);--color-orange-600: oklch(.646 .222 41.116);--color-orange-700: oklch(.553 .195 38.402);--color-orange-800: oklch(.47 .157 37.304);--color-orange-900: oklch(.408 .123 38.172);--color-orange-950: oklch(.266 .079 36.259);--color-amber-50: oklch(.987 .022 95.277);--color-amber-100: oklch(.962 .059 95.617);--color-amber-200: oklch(.924 .12 95.746);--color-amber-300: oklch(.879 .169 91.605);--color-amber-400: oklch(.828 .189 84.429);--color-amber-500: oklch(.769 .188 70.08);--color-amber-600: oklch(.666 .179 58.318);--color-amber-700: oklch(.555 .163 48.998);--color-amber-800: oklch(.473 .137 46.201);--color-amber-900: oklch(.414 .112 45.904);--color-amber-950: oklch(.279 .077 45.635);--color-yellow-50: oklch(.987 .026 102.212);--color-yellow-100: oklch(.973 .071 103.193);--color-yellow-200: oklch(.945 .129 101.54);--color-yellow-300: oklch(.905 .182 98.111);--color-yellow-400: oklch(.852 .199 91.936);--color-yellow-500: oklch(.795 .184 86.047);--color-yellow-600: oklch(.681 .162 75.834);--color-yellow-700: oklch(.554 .135 66.442);--color-yellow-800: oklch(.476 .114 61.907);--color-yellow-900: oklch(.421 .095 57.708);--color-yellow-950: oklch(.286 .066 53.813);--color-lime-50: oklch(.986 .031 120.757);--color-lime-100: oklch(.967 .067 122.328);--color-lime-200: oklch(.938 .127 124.321);--color-lime-300: oklch(.897 .196 126.665);--color-lime-400: oklch(.841 .238 128.85);--color-lime-500: oklch(.768 .233 130.85);--color-lime-600: oklch(.648 .2 131.684);--color-lime-700: oklch(.532 .157 131.589);--color-lime-800: oklch(.453 .124 130.933);--color-lime-900: oklch(.405 .101 131.063);--color-lime-950: oklch(.274 .072 132.109);--color-green-50: oklch(.982 .018 155.826);--color-green-100: oklch(.962 .044 156.743);--color-green-200: oklch(.925 .084 155.995);--color-green-300: oklch(.871 .15 154.449);--color-green-400: oklch(.792 .209 151.711);--color-green-500: oklch(.723 .219 149.579);--color-green-600: oklch(.627 .194 149.214);--color-green-700: oklch(.527 .154 150.069);--color-green-800: oklch(.448 .119 151.328);--color-green-900: oklch(.393 .095 152.535);--color-green-950: oklch(.266 .065 152.934);--color-emerald-50: oklch(.979 .021 166.113);--color-emerald-100: oklch(.95 .052 163.051);--color-emerald-200: oklch(.905 .093 164.15);--color-emerald-300: oklch(.845 .143 164.978);--color-emerald-400: oklch(.765 .177 163.223);--color-emerald-500: oklch(.696 .17 162.48);--color-emerald-600: oklch(.596 .145 163.225);--color-emerald-700: oklch(.508 .118 165.612);--color-emerald-800: oklch(.432 .095 166.913);--color-emerald-900: oklch(.378 .077 168.94);--color-emerald-950: oklch(.262 .051 172.552);--color-teal-50: oklch(.984 .014 180.72);--color-teal-100: oklch(.953 .051 180.801);--color-teal-200: oklch(.91 .096 180.426);--color-teal-300: oklch(.855 .138 181.071);--color-teal-400: oklch(.777 .152 181.912);--color-teal-500: oklch(.704 .14 182.503);--color-teal-600: oklch(.6 .118 184.704);--color-teal-700: oklch(.511 .096 186.391);--color-teal-800: oklch(.437 .078 188.216);--color-teal-900: oklch(.386 .063 188.416);--color-teal-950: oklch(.277 .046 192.524);--color-cyan-50: oklch(.984 .019 200.873);--color-cyan-100: oklch(.956 .045 203.388);--color-cyan-200: oklch(.917 .08 205.041);--color-cyan-300: oklch(.865 .127 207.078);--color-cyan-400: oklch(.789 .154 211.53);--color-cyan-500: oklch(.715 .143 215.221);--color-cyan-600: oklch(.609 .126 221.723);--color-cyan-700: oklch(.52 .105 223.128);--color-cyan-800: oklch(.45 .085 224.283);--color-cyan-900: oklch(.398 .07 227.392);--color-cyan-950: oklch(.302 .056 229.695);--color-sky-50: oklch(.977 .013 236.62);--color-sky-100: oklch(.951 .026 236.824);--color-sky-200: oklch(.901 .058 230.902);--color-sky-300: oklch(.828 .111 230.318);--color-sky-400: oklch(.746 .16 232.661);--color-sky-500: oklch(.685 .169 237.323);--color-sky-600: oklch(.588 .158 241.966);--color-sky-700: oklch(.5 .134 242.749);--color-sky-800: oklch(.443 .11 240.79);--color-sky-900: oklch(.391 .09 240.876);--color-sky-950: oklch(.293 .066 243.157);--color-blue-50: oklch(.97 .014 254.604);--color-blue-100: oklch(.932 .032 255.585);--color-blue-200: oklch(.882 .059 254.128);--color-blue-300: oklch(.809 .105 251.813);--color-blue-400: oklch(.707 .165 254.624);--color-blue-500: oklch(.623 .214 259.815);--color-blue-600: oklch(.546 .245 262.881);--color-blue-700: oklch(.488 .243 264.376);--color-blue-800: oklch(.424 .199 265.638);--color-blue-900: oklch(.379 .146 265.522);--color-blue-950: oklch(.282 .091 267.935);--color-indigo-50: oklch(.962 .018 272.314);--color-indigo-100: oklch(.93 .034 272.788);--color-indigo-200: oklch(.87 .065 274.039);--color-indigo-300: oklch(.785 .115 274.713);--color-indigo-400: oklch(.673 .182 276.935);--color-indigo-500: oklch(.585 .233 277.117);--color-indigo-600: oklch(.511 .262 276.966);--color-indigo-700: oklch(.457 .24 277.023);--color-indigo-800: oklch(.398 .195 277.366);--color-indigo-900: oklch(.359 .144 278.697);--color-indigo-950: oklch(.257 .09 281.288);--color-violet-50: oklch(.969 .016 293.756);--color-violet-100: oklch(.943 .029 294.588);--color-violet-200: oklch(.894 .057 293.283);--color-violet-300: oklch(.811 .111 293.571);--color-violet-400: oklch(.702 .183 293.541);--color-violet-500: oklch(.606 .25 292.717);--color-violet-600: oklch(.541 .281 293.009);--color-violet-700: oklch(.491 .27 292.581);--color-violet-800: oklch(.432 .232 292.759);--color-violet-900: oklch(.38 .189 293.745);--color-violet-950: oklch(.283 .141 291.089);--color-purple-50: oklch(.977 .014 308.299);--color-purple-100: oklch(.946 .033 307.174);--color-purple-200: oklch(.902 .063 306.703);--color-purple-300: oklch(.827 .119 306.383);--color-purple-400: oklch(.714 .203 305.504);--color-purple-500: oklch(.627 .265 303.9);--color-purple-600: oklch(.558 .288 302.321);--color-purple-700: oklch(.496 .265 301.924);--color-purple-800: oklch(.438 .218 303.724);--color-purple-900: oklch(.381 .176 304.987);--color-purple-950: oklch(.291 .149 302.717);--color-fuchsia-50: oklch(.977 .017 320.058);--color-fuchsia-100: oklch(.952 .037 318.852);--color-fuchsia-200: oklch(.903 .076 319.62);--color-fuchsia-300: oklch(.833 .145 321.434);--color-fuchsia-400: oklch(.74 .238 322.16);--color-fuchsia-500: oklch(.667 .295 322.15);--color-fuchsia-600: oklch(.591 .293 322.896);--color-fuchsia-700: oklch(.518 .253 323.949);--color-fuchsia-800: oklch(.452 .211 324.591);--color-fuchsia-900: oklch(.401 .17 325.612);--color-fuchsia-950: oklch(.293 .136 325.661);--color-pink-50: oklch(.971 .014 343.198);--color-pink-100: oklch(.948 .028 342.258);--color-pink-200: oklch(.899 .061 343.231);--color-pink-300: oklch(.823 .12 346.018);--color-pink-400: oklch(.718 .202 349.761);--color-pink-500: oklch(.656 .241 354.308);--color-pink-600: oklch(.592 .249 .584);--color-pink-700: oklch(.525 .223 3.958);--color-pink-800: oklch(.459 .187 3.815);--color-pink-900: oklch(.408 .153 2.432);--color-pink-950: oklch(.284 .109 3.907);--color-rose-50: oklch(.969 .015 12.422);--color-rose-100: oklch(.941 .03 12.58);--color-rose-200: oklch(.892 .058 10.001);--color-rose-300: oklch(.81 .117 11.638);--color-rose-400: oklch(.712 .194 13.428);--color-rose-500: oklch(.645 .246 16.439);--color-rose-600: oklch(.586 .253 17.585);--color-rose-700: oklch(.514 .222 16.935);--color-rose-800: oklch(.455 .188 13.697);--color-rose-900: oklch(.41 .159 10.272);--color-rose-950: oklch(.271 .105 12.094);--color-slate-50: oklch(.984 .003 247.858);--color-slate-100: oklch(.968 .007 247.896);--color-slate-200: oklch(.929 .013 255.508);--color-slate-300: oklch(.869 .022 252.894);--color-slate-400: oklch(.704 .04 256.788);--color-slate-500: oklch(.554 .046 257.417);--color-slate-600: oklch(.446 .043 257.281);--color-slate-700: oklch(.372 .044 257.287);--color-slate-800: oklch(.279 .041 260.031);--color-slate-900: oklch(.208 .042 265.755);--color-slate-950: oklch(.129 .042 264.695);--color-gray-50: oklch(.985 .002 247.839);--color-gray-100: oklch(.967 .003 264.542);--color-gray-200: oklch(.928 .006 264.531);--color-gray-300: oklch(.872 .01 258.338);--color-gray-400: oklch(.707 .022 261.325);--color-gray-500: oklch(.551 .027 264.364);--color-gray-600: oklch(.446 .03 256.802);--color-gray-700: oklch(.373 .034 259.733);--color-gray-800: oklch(.278 .033 256.848);--color-gray-900: oklch(.21 .034 264.665);--color-gray-950: oklch(.13 .028 261.692);--color-zinc-50: oklch(.985 0 0);--color-zinc-100: oklch(.967 .001 286.375);--color-zinc-200: oklch(.92 .004 286.32);--color-zinc-300: oklch(.871 .006 286.286);--color-zinc-400: oklch(.705 .015 286.067);--color-zinc-500: oklch(.552 .016 285.938);--color-zinc-600: oklch(.442 .017 285.786);--color-zinc-700: oklch(.37 .013 285.805);--color-zinc-800: oklch(.274 .006 286.033);--color-zinc-900: oklch(.21 .006 285.885);--color-zinc-950: oklch(.141 .005 285.823);--color-neutral-50: oklch(.985 0 0);--color-neutral-100: oklch(.97 0 0);--color-neutral-200: oklch(.922 0 0);--color-neutral-300: oklch(.87 0 0);--color-neutral-400: oklch(.708 0 0);--color-neutral-500: oklch(.556 0 0);--color-neutral-600: oklch(.439 0 0);--color-neutral-700: oklch(.371 0 0);--color-neutral-800: oklch(.269 0 0);--color-neutral-900: oklch(.205 0 0);--color-neutral-950: oklch(.145 0 0);--color-stone-50: oklch(.985 .001 106.423);--color-stone-100: oklch(.97 .001 106.424);--color-stone-200: oklch(.923 .003 48.717);--color-stone-300: oklch(.869 .005 56.366);--color-stone-400: oklch(.709 .01 56.259);--color-stone-500: oklch(.553 .013 58.071);--color-stone-600: oklch(.444 .011 73.639);--color-stone-700: oklch(.374 .01 67.558);--color-stone-800: oklch(.268 .007 34.298);--color-stone-900: oklch(.216 .006 56.043);--color-stone-950: oklch(.147 .004 49.25);--color-black: #000;--color-white: #fff;--spacing: .25rem;--breakpoint-sm: 40rem;--breakpoint-md: 48rem;--breakpoint-lg: 64rem;--breakpoint-xl: 80rem;--breakpoint-2xl: 96rem;--container-3xs: 16rem;--container-2xs: 18rem;--container-xs: 20rem;--container-sm: 24rem;--container-md: 28rem;--container-lg: 32rem;--container-xl: 36rem;--container-2xl: 42rem;--container-3xl: 48rem;--container-4xl: 56rem;--container-5xl: 64rem;--container-6xl: 72rem;--container-7xl: 80rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-base: 1rem;--text-base--line-height:1.5;--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--text-xl: 1.25rem;--text-xl--line-height: calc(1.75 / 1.25);--text-2xl: 1.5rem;--text-2xl--line-height: calc(2 / 1.5);--text-3xl: 1.875rem;--text-3xl--line-height:1.2;--text-4xl: 2.25rem;--text-4xl--line-height: calc(2.5 / 2.25);--text-5xl: 3rem;--text-5xl--line-height: 1;--text-6xl: 3.75rem;--text-6xl--line-height: 1;--text-7xl: 4.5rem;--text-7xl--line-height: 1;--text-8xl: 6rem;--text-8xl--line-height: 1;--text-9xl: 8rem;--text-9xl--line-height: 1;--font-weight-thin: 100;--font-weight-extralight: 200;--font-weight-light: 300;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800;--font-weight-black: 900;--tracking-tighter: -.05em;--tracking-tight: -.025em;--tracking-normal: 0em;--tracking-wide: .025em;--tracking-wider: .05em;--tracking-widest: .1em;--leading-tight: 1.25;--leading-snug: 1.375;--leading-normal: 1.5;--leading-relaxed: 1.625;--leading-loose: 2;--radius-xs: .125rem;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--radius-2xl: 1rem;--radius-3xl: 1.5rem;--radius-4xl: 2rem;--shadow-2xs: 0 1px rgb(0 0 0 / .05);--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25);--inset-shadow-2xs: inset 0 1px rgb(0 0 0 / .05);--inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / .05);--inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / .05);--drop-shadow-xs: 0 1px 1px rgb(0 0 0 / .05);--drop-shadow-sm: 0 1px 2px rgb(0 0 0 / .15);--drop-shadow-md: 0 3px 3px rgb(0 0 0 / .12);--drop-shadow-lg: 0 4px 4px rgb(0 0 0 / .15);--drop-shadow-xl: 0 9px 7px rgb(0 0 0 / .1);--drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / .15);--ease-in: cubic-bezier(.4, 0, 1, 1);--ease-out: cubic-bezier(0, 0, .2, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--animate-spin: spin 1s linear infinite;--animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animate-bounce: bounce 1s infinite;--blur-xs: 4px;--blur-sm: 8px;--blur-md: 12px;--blur-lg: 16px;--blur-xl: 24px;--blur-2xl: 40px;--blur-3xl: 64px;--perspective-dramatic: 100px;--perspective-near: 300px;--perspective-normal: 500px;--perspective-midrange: 800px;--perspective-distant: 1200px;--aspect-video: 16 / 9;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-font-feature-settings: var(--font-sans--font-feature-settings);--default-font-variation-settings: var( --font-sans--font-variation-settings );--default-mono-font-family: var(--font-mono);--default-mono-font-feature-settings: var( --font-mono--font-feature-settings );--default-mono-font-variation-settings: var( --font-mono--font-variation-settings )}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.collapse{visibility:collapse}.relative{position:relative}.static{position:static}.container{width:100%}@media (width >= 40rem){.container{max-width:40rem}}@media (width >= 48rem){.container{max-width:48rem}}@media (width >= 64rem){.container{max-width:64rem}}@media (width >= 80rem){.container{max-width:80rem}}@media (width >= 96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.me-2{margin-inline-end:calc(var(--spacing) * 2)}.-mt-px{margin-top:-1px}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.w-full{width:100%}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y)}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.rounded-lg{border-radius:var(--radius-lg)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-solid{--tw-border-style: solid;border-style:solid}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-red-500{border-color:var(--color-red-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.p-0{padding:calc(var(--spacing) * 0)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-3{padding-block:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-blue-600{color:var(--color-blue-600)}.text-gray-500{color:var(--color-gray-500)}.text-gray-900{color:var(--color-gray-900)}.underline{text-decoration-line:underline}.decoration-red-500{text-decoration-color:var(--color-red-500)}.decoration-wavy{text-decoration-style:wavy}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-0{outline-style:var(--tw-outline-style);outline-width:0px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}.filter{filter:var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, )}@media (hover: hover){.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}}@media (hover: hover){.hover\\:text-gray-600:hover{color:var(--color-gray-600)}}.focus\\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\\:ring-blue-500:focus{--tw-ring-color: var(--color-blue-500)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}@property --tw-rotate-x{syntax: \"*\"; inherits: false; initial-value: rotateX(0);}@property --tw-rotate-y{syntax: \"*\"; inherits: false; initial-value: rotateY(0);}@property --tw-rotate-z{syntax: \"*\"; inherits: false; initial-value: rotateZ(0);}@property --tw-skew-x{syntax: \"*\"; inherits: false; initial-value: skewX(0);}@property --tw-skew-y{syntax: \"*\"; inherits: false; initial-value: skewY(0);}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-outline-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: \"*\"; inherits: false;}@property --tw-brightness{syntax: \"*\"; inherits: false;}@property --tw-contrast{syntax: \"*\"; inherits: false;}@property --tw-grayscale{syntax: \"*\"; inherits: false;}@property --tw-hue-rotate{syntax: \"*\"; inherits: false;}@property --tw-invert{syntax: \"*\"; inherits: false;}@property --tw-opacity{syntax: \"*\"; inherits: false;}@property --tw-saturate{syntax: \"*\"; inherits: false;}@property --tw-sepia{syntax: \"*\"; inherits: false;}\n", ":host,:host *{box-sizing:border-box}\n"] }]
}], propDecorators: { inputs: [{
type: ViewChildren,
args: [NgxI18nInputSingleLangInputComponent]
}], uid: [{
type: Input
}], inputTemplate: [{
type: Input
}], labelTemplate: [{
type: Input
}], label: [{
type: Input
}], layout: [{
type: Input
}], autofocus: [{
type: Input
}], hideLabels: [{
type: Input
}], languages: [{
type: Input
}], required: [{
type: Input
}], validators: [{
type: Input
}], defaultInputComponent: [{
type: Input
}], valueChanges: [{
type: Output
}], activeLangChange: [{
type: Output
}], onCustomEvent: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWkxOG4taW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9uZ3gtaTE4bi1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9zcmMvbGliL25neC1pMThuLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFVBQVUsRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQStDLFlBQVksRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNVAsT0FBTyxFQUFvRCxXQUFXLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFrQyxNQUFNLGdCQUFnQixDQUFDO0FBQzdKLE9BQU8sRUFBUSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEIsRUFBK0QsTUFBTSxTQUFTLENBQUM7QUFDeEssT0FBTyxFQUFFLFdBQVcsRUFBOEIsTUFBTSxTQUFTLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQWtCLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLCtFQUErRSxDQUFDOzs7OztBQWtCckksTUFBTSxPQUFPLHFCQUFxQjtJQWhCbEM7UUFrQkUsOEZBQThGO1FBQzdFLE9BQUUsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFbkUsb0dBQW9HO1FBQ3BHLGVBQVUsR0FBZ0IsSUFBSSxDQUFDO1FBSXRCLFVBQUssR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5QyxvR0FBb0c7UUFDM0YsUUFBRyxHQUFXLFdBQVcsRUFBRSxDQUFDO1FBRTVCLFlBQU8sR0FBdUIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFD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VFUscUJBQXFCO3VHQUFyQixxQkFBcUIsOGJBUnJCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUM7WUFDcEQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLHFEQVVhLG9DQUFvQyxxRUMvQnBELHdpR0EyRUE7NEZEcERhLHFCQUFxQjtrQkFoQmpDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQU1ULHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQVVtRCxNQUFNO3NCQUF6RCxZQUFZO3VCQUFDLG9DQUFvQztnQkFLekMsR0FBRztzQkFBWCxLQUFLO2dCQWVPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBbUJPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBWU8sS0FBSztzQkFBakIsS0FBSztnQkFlTyxNQUFNO3NCQUFsQixLQUFLO2dCQWFPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBYU8sVUFBVTtzQkFBdEIsS0FBSztnQkFjTyxTQUFTO3NCQUFyQixLQUFLO2dCQWFPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBV08sVUFBVTtzQkFBdEIsS0FBSztnQkFRTyxxQkFBcUI7c0JBQWpDLEtBQUs7Z0JBVWEsWUFBWTtzQkFBOUIsTUFBTTtnQkFFWSxnQkFBZ0I7c0JBQWxDLE1BQU07Z0JBRVksYUFBYTtzQkFBL0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdCwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVHlwZSwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVxdWlyZWRWYWxpZGF0b3IsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTGFuZywgbWVyZ2VOZ3hJMThuQ29uZmlncywgTkdYX0kxOE5fSU5QVVRfQ09ORklHLCBOR1hfSTE4Tl9JTlBVVF9ERUZBVUxUX0NPTkZJR1MsIE5neEkxOG5JbnB1dENvbmZpZywgTmd4STE4bklucHV0TGF5b3V0LCBOZ3hJMThuSW5wdXRMYXlvdXRzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVpZCwgbmd4STE4bkRlZmF1bHRGb3JtYXRPdXRwdXQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmd4STE4bklucHV0U2luZ2xlTGFuZ0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtaTE4bi1pbnB1dC1zaW5nbGUtbGFuZy1pbnB1dC9uZ3gtaTE4bi1pbnB1dC1zaW5nbGUtbGFuZy1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtaTE4bi1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtaTE4bi1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW1xuICAgICcuL3R3LnNjc3MnLFxuICAgICcuL25neC1pMThuLWlucHV0LmNvbXBvbmVudC5zY3NzJyxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmd4STE4bklucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE5neEkxOG5JbnB1dENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBEZXBlbmRlbmNpZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBJbnN0YW5jZSB2YXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICBhY3RpdmVMYW5nOiBMYW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQFZpZXdDaGlsZHJlbihOZ3hJMThuSW5wdXRTaW5nbGVMYW5nSW5wdXRDb21wb25lbnQpIGlucHV0cz86IFF1ZXJ5TGlzdDxOZ3hJMThuSW5wdXRTaW5nbGVMYW5nSW5wdXRDb21wb25lbnQ8VD4+O1xuXG4gIHJlYWRvbmx5IGZvcm1zOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElucHV0cyBhbmQgQ29uZmlncyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIEBJbnB1dCgpIHVpZDogc3RyaW5nID0gZ2VuZXJhdGVVaWQoKTtcblxuICByZWFkb25seSBjb25maWdzOiBOZ3hJMThuSW5wdXRDb25maWcgPSBtZXJnZU5neEkxOG5Db25maWdzKGluamVjdChOR1hfSTE4Tl9JTlBVVF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSkgfHwgTkdYX0kxOE5fSU5QVVRfREVGQVVMVF9DT05GSUdTKTtcblxuICAvKipcbiAgICogQ3VzdG9taXplIGlucHV0IHRlbXBsYXRlLiBTdWdnZXN0ZWQgYnV0IG5vdCByZXF1aXJlZC5cbiAgICogVXNhZ2U6XG4gICAqIGBgYGh0bWxcbiAgICogIDxuZy10ZW1wbGF0ZSAjdGl0bGVUZW1wbGF0ZSBsZXQtYWxsPlxuICAgKiAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwiYWxsLmNvbnRyb2xcIj5cbiAgICogIDwvbmctdGVtcGxhdGU+XG4gICAqXG4gICAqICA8bmd4LWkxOG4taW5wdXQgW2lucHV0VGVtcGxhdGVdPVwidGl0bGVUZW1wbGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCI+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGlucHV0VGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29uZmlncy5pbnB1dFRlbXBsYXRlID0gdGVtcGxhdGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBpbnB1dFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3MuaW5wdXRUZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b21pemUgbGFuZ3VhZ2UgbmFtZSB0ZW1wbGF0ZS5cbiAgICogVXNhZ2U6XG4gICAqIGBgYGh0bWxcbiAgICogIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZSBsZXQtY29udGV4dD5cbiAgICogICAgPHNwYW4+e3sgY29udGV4dC5jb25maWdzLmZvcm1hdExhYmVsKGNvbnRleHQubGFuZywgY29udGV4dC5jb25maWdzLmxhYmVsKSB9fTwvc3Bhbj5cbiAgICogIDwvbmctdGVtcGxhdGU+XG4gICAqXG4gICAqICA8bmd4LWkxOG4taW5wdXQgW2xhYmVsVGVtcGxhdGVdPVwibGFiZWxUZW1wbGF0ZVwiPjwvbmd4LWkxOG4taW5wdXQ+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGxhYmVsVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29uZmlncy5sYWJlbFRlbXBsYXRlID0gdGVtcGxhdGUgPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBsYWJlbFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3MubGFiZWxUZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b21pemUgbGFiZWwgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogV2hlbiBwcm92aWRlZCwgd2lsbCBiZSB1c2VkIGFzIHN0cmluZyBpbnNpZGUgdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGxhYmVsKGxhYmVsOiBzdHJpbmcgfCBSZWNvcmQ8TGFuZywgc3RyaW5nPiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmNvbmZpZ3MubGFiZWwgPSBsYWJlbCB8fCBudWxsO1xuICB9XG5cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3MubGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9taXplIGxheW91dCBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBBdmFpbGFibGUgbGF5b3V0czpcbiAgICogLSB0YWJzXG4gICAqIC0gdmVydGljYWxcbiAgICogRGVmYXVsdDogdmVydGljYWxcbiAgICovXG4gIEBJbnB1dCgpIHNldCBsYXlvdXQobGF5b3V0OiBOZ3hJMThuSW5wdXRMYXlvdXQgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKGxheW91dCkgdGhpcy5jb25maWdzLmxheW91dCA9IGxheW91dDtcbiAgfVxuXG4gIGdldCBsYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlncy5sYXlvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQXV0b2ZvY3VzIGlucHV0LlxuICAgKiBXaGVuIGJvb2xlYW4sIHdpbGwgYXV0b2ZvY3VzIHRoZSBmaXJzdCBpbnB1dC5cbiAgICogV2hlbiBzdHJpbmcsIHdpbGwgYXV0b2ZvY3VzIHRoZSBpbnB1dCB3aXRoIHRoZSBnaXZlbiBsYW5nLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGF1dG9mb2N1cyhhdXRvZm9jdXM6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKGF1dG9mb2N1cyA9PT0gbnVsbCB8fCBhdXRvZm9jdXMgPT09IHVuZGVmaW5lZCkgYXV0b2ZvY3VzID0gZmFsc2U7XG5cbiAgICB0aGlzLmNvbmZpZ3MuYXV0b2ZvY3VzID0gYXV0b2ZvY3VzO1xuICB9XG5cbiAgZ2V0IGF1dG9mb2N1cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdzLmF1dG9mb2N1cztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGxhYmVscyB3b24ndCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgaGlkZUxhYmVscyhoaWRlTGFiZWxzOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChoaWRlTGFiZWxzID09PSBudWxsIHx8IGhpZGVMYWJlbHMgPT09IHVuZGVmaW5lZCkgaGlkZUxhYmVscyA9IGZhbHNlO1xuXG4gICAgdGhpcy5jb25maWdzLmhpZGVMYWJlbHMgPSBoaWRlTGFiZWxzO1xuICB9XG5cbiAgZ2V0IGhpZGVMYWJlbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlncy5oaWRlTGFiZWxzO1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUxhbmdzKCk6IExhbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlncy5hdmFpbGFibGVMYW5ncztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBsYW5ndWFnZXMobGFuZ3M6IExhbmdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAobGFuZ3MgPT09IG51bGwgfHwgbGFuZ3MgPT09IHVuZGVmaW5lZCkgbGFuZ3MgPSBbXTtcblxuICAgIHRoaXMuY29uZmlncy5hdmFpbGFibGVMYW5ncyA9IGxhbmdzO1xuICB9XG5cbiAgZ2V0IGxhbmd1YWdlcygpOiBMYW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3MuYXZhaWxhYmxlTGFuZ3M7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBhbGwgaW5wdXRzIHdpbGwgYmUgcmVxdWlyZWQuXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5jb25maWdzLnJlcXVpcmVkID0gKHJlcXVpcmVkID09PSB0cnVlKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdzLnJlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZGluZyB2YWxpZGF0b3JzIHRvIHRoZSBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCB2YWxpZGF0b3JzKHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5jb25maWdzLnZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzIHx8IFtdO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRvcnMoKTogVmFsaWRhdG9yRm5bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlncy52YWxpZGF0b3JzIHx8IFtdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRlZmF1bHRJbnB1dENvbXBvbmVudCh2OiBUeXBlPGFueT4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5jb25maWdzLmRlZmF1bHRJbnB1dENvbXBvbmVudCA9IHY7XG4gIH1cblxuICBnZXQgZGVmYXVsdElucHV0Q29tcG9uZW50KCk6IFR5cGU8YW55PiB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3MuZGVmYXVsdElucHV0Q29tcG9uZW50O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBPdXRwdXRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPFJlY29yZDxMYW5nLCBUIHwgbnVsbD4+ID0gdGhpcy5mb3Jtcy52YWx1ZUNoYW5nZXMucGlwZShtYXAodGhpcy5jb25maWdzLmZvcm1hdE91dHB1dCkpO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3RpdmVMYW5nQ2hhbmdlOiBCZWhhdmlvclN1YmplY3Q8TGFuZyB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG9uQ3VzdG9tRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbGFuZzogTGFuZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55IH0+KCk7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBTkdVTEFSIExJRkVDWUNMRSBIT09LUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ncy5mb3JFYWNoKChsYW5nOiBMYW5nKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybXMuZ2V0KGxhbmcpKSB0aGlzLmZvcm1zLmFkZENvbnRyb2wobGFuZywgbmV3IEZvcm1Db250cm9sKG51bGwsIFtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUZuLmJpbmQodGhpcylcbiAgICAgIF0pKTtcbiAgICB9KTtcblxuICAgIC8vIHRoaXMuc2VydmljZS5jb25maWdzJC5zdWJzY3JpYmUoe25leHQ6IChjKSA9PiB0aGlzLmNvbmZpZ3MgPSBjfSk7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuYXV0b2ZvY3VzID09PSBcInN0cmluZ1wiICYmIHRoaXMuZm9ybXMuZ2V0KHRoaXMuYXV0b2ZvY3VzKSkge1xuICAgICAgdGhpcy5mb2N1c0lucHV0KHRoaXMuYXV0b2ZvY3VzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXV0b2ZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmZvY3VzSW5wdXQodGhpcy5hdmFpbGFibGVMYW5nc1swXSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRzPy5mb3JFYWNoKChpbnB1dDogTmd4STE4bklucHV0U2luZ2xlTGFuZ0lucHV0Q29tcG9uZW50PFQ+KSA9PiB7XG4gICAgICBpbnB1dC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3Jtcy5jb250cm9scykuZm9yRWFjaCgoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgdmFsdWUgPSB7fTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05neEkxOG5JbnB1dENvbXBvbmVudDogdmFsdWUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbC4gV2lsbCByZXNldCBpbnB1dC4gZ290ICcsIHZhbHVlKTtcbiAgICAgIHZhbHVlID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5mb3Jtcy5wYXRjaFZhbHVlKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHZhbHVlOiBSZWNvcmQ8TGFuZywgVCB8IG51bGw+KSA9PiBmbih2YWx1ZSlcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyT25DaGFuZ2UoZm4pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mb3Jtc1tpc0Rpc2FibGVkID8gJ2Rpc2FibGUnIDogJ2VuYWJsZSddKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFBVQkxJQyBNRVRIT0RTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICB2YWxpZGF0ZUZuKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBpZiAodGhpcy5yZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZSA9PSBudWxsIHx8XG4gICAgICAgIHZhbHVlID09IHVuZGVmaW5lZCB8fFxuICAgICAgICAoKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5sZW5ndGggPT09IDApXG4gICAgICApIHtcbiAgICAgICAgYWNjW1wicmVxdWlyZWRcIl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdG9ycz8uZm9yRWFjaCgodmFsaWRhdG9yOiBWYWxpZGF0b3JGbikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IHZhbGlkYXRvcihjb250cm9sKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gcmVzdWx0W2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjYykubGVuZ3RoID4gMCA/IGFjYyA6IG51bGw7XG4gIH1cblxuICBnZXRTdHJMYWJlbEZvcihsYW5nOiBMYW5nKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIHRoaXMubGFiZWwgPT09IFwic3RyaW5nXCIpIHJldHVybiB0aGlzLmxhYmVsO1xuICAgIGlmICh0aGlzLmxhYmVsICYmIHRoaXMubGFiZWxbbGFuZ10pIHJldHVybiB0aGlzLmxhYmVsW2xhbmddO1xuXG4gICAgcmV0dXJuIGxhbmc7XG4gIH1cblxuICBnZXRJZChsYW5nOiBMYW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy51aWR9LSR7bGFuZ31gO1xuICB9XG5cbiAgaW5wdXRJZChsYW5nOiBMYW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGlucHV0LSR7dGhpcy5nZXRJZChsYW5nKX1gO1xuICB9XG5cbiAgY29udGFpbmVySWQobGFuZzogTGFuZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjb250YWluZXItJHt0aGlzLmdldElkKGxhbmcpfWA7XG4gIH1cblxuICBpc0FjdGl2ZUxhbmcobGFuZzogTGFuZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUxhbmcgPT09IGxhbmcgfHwgKFxuICAgICAgdGhpcy5hY3RpdmVMYW5nID09PSBudWxsICYmXG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmdzICYmXG4gICAgICBsYW5nID09PSB0aGlzLmF2YWlsYWJsZUxhbmdzWzBdXG4gICAgKTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQobGFuZzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVMYW5nID0gbGFuZztcbiAgICB0aGlzLmFjdGl2ZUxhbmdDaGFuZ2UubmV4dChsYW5nIGFzIExhbmcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cnlMb2NhdGVBbmRGb2N1c0lucHV0KGxhbmcpKTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFBSSVZBVEUgTUVUSE9EUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIGxvY2F0ZSB0aGUgaW5wdXQgd2l0aCB0aGUgZ2l2ZW4gbGFuZyBhbmQgZm9jdXMgaXQuXG4gICAqL1xuICBwcml2YXRlIHRyeUxvY2F0ZUFuZEZvY3VzSW5wdXQobGFuZzogTGFuZyk6IHZvaWQge1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB0aGlzLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pbnB1dElkKGxhbmcpKTtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICByZXR1cm4gZG9uZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY29udGFpbmVySWQobGFuZykpO1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnN0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRleHRhcmVhOiBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xuICAgICAgaWYgKHRleHRhcmVhKSB7XG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9uZSgpO1xuICB9XG59XG4iLCI8IS0tLS0tLS0tLS0tLS0tLS0tLS0gIFRFTVBMQVRFUyAtLS0tLS0tLS0tLS0tLS0tLS0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0bGFiZWxUZW1wbGF0ZSBsZXQtYWxsPlxuICA8c3BhbiBbbmdDbGFzc109XCJ7J3VuZGVybGluZSBkZWNvcmF0aW9uLXdhdnkgZGVjb3JhdGlvbi1yZWQtNTAwJzogYWxsLmNvbnRyb2wudG91Y2hlZCAmJiBhbGwuY29udHJvbC5pbnZhbGlkICYmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcgfHwgIWlzQWN0aXZlTGFuZyhhbGwubGFuZykpfVwiPlxuICAgIHt7IGFsbC5jb25maWdzLmZvcm1hdExhYmVsKGFsbC5sYW5nLCBhbGwuY29uZmlncy5sYWJlbCkgfX1cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY3R1YWxMYWJlbCBsZXQtYWxsPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxUZW1wbGF0ZSB8fCBkZWZhdWx0bGFiZWxUZW1wbGF0ZTsgY29udGV4dDoge1xuICAgICRpbXBsaWNpdDoge1xuICAgICAgbGFuZzogYWxsLmxhbmcsXG4gICAgICBjb250cm9sOiBmb3Jtcy5jb250cm9sc1thbGwubGFuZ10sXG4gICAgICBpZDogYWxsLmlkLFxuICAgICAgY29uZmlnczogYWxsLmNvbmZpZ3NcbiAgICB9XG4gICAgfVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tICBDT05URU5UIC0tLS0tLS0tLS0tLS0tLS0tLS0+XG48Zm9ybSBjbGFzcz1cImxheW91dC17eyBsYXlvdXQgfX1cIiBbbmdDbGFzc109XCJ7J2xhYmVscy1oaWRkZW4nOiBoaWRlTGFiZWxzfVwiIFtmb3JtR3JvdXBdPVwiZm9ybXNcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibGF5b3V0XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYnMnXCI+XG4gICAgICA8dWwgKm5nSWY9XCIhaGlkZUxhYmVsc1wiXG4gICAgICBjbGFzcz1cIm0tMCBwLTAgZmxleCBmbGV4LXdyYXAgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWNlbnRlciB0ZXh0LWdyYXktNTAwIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGFuZyBvZiBhdmFpbGFibGVMYW5ncztcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwibWUtMlwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJpbnB1dC17e3VpZH19LXt7bGFuZ319XCIgKGNsaWNrKT1cImZvY3VzSW5wdXQobGFuZylcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgcHgtNCBweS0zIHJvdW5kZWQtdC1sZyBjdXJzb3ItcG9pbnRlclwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3RleHQtYmx1ZS02MDAgYmctZ3JheS0xMDAgYWN0aXZlJzogaXNBY3RpdmVMYW5nKGxhbmcpLFxuICAgICAgICAgICAgICAnaG92ZXI6dGV4dC1ncmF5LTYwMCBob3ZlcjpiZy1ncmF5LTUwJzogIWlzQWN0aXZlTGFuZyhsYW5nKVxuICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0dWFsTGFiZWw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IGxhbmc6IGxhbmcsIGNvbmZpZ3MgfSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdWw+XG4gIFxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxhbmcgb2YgYXZhaWxhYmxlTGFuZ3M7XCI+XG4gICAgICA8ZGl2IGlkPVwie3sgY29udGFpbmVySWQobGFuZykgfX1cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICdoaWRkZW4nOiAhaXNBY3RpdmVMYW5nKGxhbmcpXG4gICAgICB9XCI+XG4gICAgICAgIDxsaWItbmd4LWkxOG4taW5wdXQtc2luZ2xlLWxhbmctaW5wdXRcbiAgICAgICAgICBbaW5wdXRJZF09XCJpbnB1dElkKGxhbmcpXCJcbiAgICAgICAgICAob25DdXN0b21FdmVudCk9XCJvbkN1c3RvbUV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgW2NvbmZpZ3NdPVwiY29uZmlnc1wiXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJsYW5nXCJcbiAgICAgICAgICBbbGFuZ109XCJsYW5nXCJcbiAgICAgICAgPjwvbGliLW5neC1pMThuLWlucHV0LXNpbmdsZS1sYW5nLWlucHV0PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5nIG9mIGF2YWlsYWJsZUxhbmdzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJibG9jayBtYi00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFoaWRlTGFiZWxzXCIgZm9yPVwiaW5wdXQte3sgdWlkIH19LXt7IGxhbmcgfX1cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjdHVhbExhYmVsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBsYW5nOiBsYW5nLCBjb25maWdzIH0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICBcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ7eyBjb250YWluZXJJZChsYW5nKSB9fVwiPlxuICAgICAgICAgICAgICA8bGliLW5neC1pMThuLWlucHV0LXNpbmdsZS1sYW5nLWlucHV0XG4gICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiaW5wdXRJZChsYW5nKVwiXG4gICAgICAgICAgICAgICAgKG9uQ3VzdG9tRXZlbnQpPVwib25DdXN0b21FdmVudC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtjb25maWdzXT1cImNvbmZpZ3NcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibGFuZ1wiXG4gICAgICAgICAgICAgICAgW2xhbmddPVwibGFuZ1wiXG4gICAgICAgICAgICAgID48L2xpYi1uZ3gtaTE4bi1pbnB1dC1zaW5nbGUtbGFuZy1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZm9ybT5cbiJdfQ==