From dcb7a4229920e59b8744a0fd5e45c0e0877e9893 Mon Sep 17 00:00:00 2001 From: imranaalam Date: Fri, 4 Jun 2021 12:33:58 +0500 Subject: [PATCH 1/3] handleFileInput return base64encoded url now. --- angular.json | 2 + package-lock.json | 8 + package.json | 1 + .../src/lib/json-schema-form.component.ts | 375 ++++++++++-------- src/index.html | 5 +- src/styles.css | 3 + 6 files changed, 236 insertions(+), 158 deletions(-) diff --git a/angular.json b/angular.json index 6688c91..a92030f 100644 --- a/angular.json +++ b/angular.json @@ -24,6 +24,7 @@ "src/assets" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [] @@ -87,6 +88,7 @@ "src/assets" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [] diff --git a/package-lock.json b/package-lock.json index e1c3b39..0ff4cd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1879,6 +1879,14 @@ "to-fast-properties": "^2.0.0" } }, + "@dashjoin/json-schema-form": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@dashjoin/json-schema-form/-/json-schema-form-0.8.1.tgz", + "integrity": "sha512-FvqdgXb7AYvTjh6H5G6OX5+A2rJm9TUA3U1X4Iusq0z2Ku58VamQIey6hqUOtpX4fR6UepIOrHcA7a6OGujHkw==", + "requires": { + "tslib": "^2.0.0" + } + }, "@discoveryjs/json-ext": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", diff --git a/package.json b/package.json index 0d5b8ae..fb3d289 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@angular/platform-browser": "~11.2.12", "@angular/platform-browser-dynamic": "~11.2.12", "@angular/router": "~11.2.12", + "@dashjoin/json-schema-form": "^0.8.1", "json-logic-js": "^2.0.0", "jsonata": "^1.8.4", "ngx-editor": "^8.1.0", diff --git a/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts b/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts index e1252ac..4b02dc6 100644 --- a/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts +++ b/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts @@ -1,40 +1,48 @@ import { - Component, OnInit, Input, Output, EventEmitter, SimpleChanges, - OnChanges, ComponentFactoryResolver, ViewChild, ViewChildren, QueryList -} from '@angular/core'; -import { MatSelectChange } from '@angular/material/select'; -import { MatDatepickerInputEvent } from '@angular/material/datepicker'; -import { MatCheckboxChange } from '@angular/material/checkbox'; -import { HttpClient } from '@angular/common/http'; -import { forkJoin, Observable, ReplaySubject } from 'rxjs'; -import { KeyValue } from '@angular/common'; -import { Schema } from './schema'; -import { WidgetComponent } from './widget.component'; -import { WidgetDirective } from './widget.directive'; -import { JsonSchemaFormService } from './json-schema-form.service'; -import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; -import { JsonPointer } from './json-pointer'; -import { Choice, ChoiceHandler, DefaultChoiceHandler } from './choice'; -import { FormControl } from '@angular/forms'; -import { debounceTime, startWith, switchMap } from 'rxjs/operators'; -import { MatDialog } from '@angular/material/dialog'; -import { Edit } from './edit'; -import { MatChipInputEvent } from '@angular/material/chips'; -import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'; -import { COMMA, ENTER, TAB } from '@angular/cdk/keycodes'; -import jsonata from 'jsonata'; + Component, + OnInit, + Input, + Output, + EventEmitter, + SimpleChanges, + OnChanges, + ComponentFactoryResolver, + ViewChild, + ViewChildren, + QueryList, +} from "@angular/core"; +import { MatSelectChange } from "@angular/material/select"; +import { MatDatepickerInputEvent } from "@angular/material/datepicker"; +import { MatCheckboxChange } from "@angular/material/checkbox"; +import { HttpClient } from "@angular/common/http"; +import { forkJoin, Observable, ReplaySubject } from "rxjs"; +import { KeyValue } from "@angular/common"; +import { Schema } from "./schema"; +import { WidgetComponent } from "./widget.component"; +import { WidgetDirective } from "./widget.directive"; +import { JsonSchemaFormService } from "./json-schema-form.service"; +import { MatAutocompleteSelectedEvent } from "@angular/material/autocomplete"; +import { JsonPointer } from "./json-pointer"; +import { Choice, ChoiceHandler, DefaultChoiceHandler } from "./choice"; +import { FormControl } from "@angular/forms"; +import { debounceTime, startWith, switchMap } from "rxjs/operators"; +import { MatDialog } from "@angular/material/dialog"; +import { Edit } from "./edit"; +import { MatChipInputEvent } from "@angular/material/chips"; +import { CdkDragDrop, moveItemInArray } from "@angular/cdk/drag-drop"; +import { COMMA, ENTER, TAB } from "@angular/cdk/keycodes"; +import jsonata from "jsonata"; /** * generates an input form base on JSON schema and JSON object. * The component is used recursively. */ @Component({ - selector: 'lib-json-schema-form', - templateUrl: './json-schema-form.component.html', - styleUrls: ['./json-schema-form.component.css'] + selector: "lib-json-schema-form", + templateUrl: "./json-schema-form.component.html", + styleUrls: ["./json-schema-form.component.css"], }) export class JsonSchemaFormComponent implements OnInit, OnChanges { - /** * component constructor * @param http http client @@ -46,17 +54,18 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { private http: HttpClient, private componentFactoryResolver: ComponentFactoryResolver, public service: JsonSchemaFormService, - private dialog: MatDialog) { } + private dialog: MatDialog + ) {} /** * container children for event propagation */ - @ViewChildren('children') children: QueryList; + @ViewChildren("children") children: QueryList; /** * container children for event propagation */ - @ViewChild('child') child: JsonSchemaFormComponent; + @ViewChild("child") child: JsonSchemaFormComponent; /** * if an array is displayed, indicates which array index is being hovered over in order to @@ -236,7 +245,8 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { * replace undefined with null and init autocomplete choices */ ngOnInit(): void { - this.readOnly = this.schema.readOnly || (this.schema.createOnly && this.value); + this.readOnly = + this.schema.readOnly || (this.schema.createOnly && this.value); if (!this.rootSchema) { this.rootSchema = this.schema; @@ -246,7 +256,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { if (!this.schema.type) { const p = this.schema.$ref; - const parts = p.split('#'); + const parts = p.split("#"); if (parts.length === 1) { // URL only this.url(parts[0], null); @@ -264,7 +274,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { this.setOrderedProperties(); } - if (typeof this.value === 'undefined') { + if (typeof this.value === "undefined") { if (this.schema.default) { this.value = this.schema.default; setTimeout(() => this.emit(this.value), 500); @@ -275,7 +285,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { } } - if (this.getLayout() === 'custom') { + if (this.getLayout() === "custom") { this.loadComponent(); } @@ -306,29 +316,36 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { for (const i of this.value) { arr.push(this.ch.choice(i, this.schema)); } - forkJoin(arr).subscribe(res => this.choices.next(res)); + forkJoin(arr).subscribe((res) => this.choices.next(res)); } else { - this.ch.choice(this.value, this.schema).subscribe(res => this.choices.next([res])); + this.ch + .choice(this.value, this.schema) + .subscribe((res) => this.choices.next([res])); } } - this.filteredOptions = this.control.valueChanges - .pipe( - startWith(this.value), - debounceTime(this.ch.debounceTime()), - switchMap(x => { - this.change({ target: { value: x } }); - return this.ch.filter(this.value, this.schema, x, this.choices); - }) - ); - - this.edit = new Edit(this.schemaChange, this.name, this.schema, this.parentSchema, this.dialog); + this.filteredOptions = this.control.valueChanges.pipe( + startWith(this.value), + debounceTime(this.ch.debounceTime()), + switchMap((x) => { + this.change({ target: { value: x } }); + return this.ch.filter(this.value, this.schema, x, this.choices); + }) + ); + + this.edit = new Edit( + this.schemaChange, + this.name, + this.schema, + this.parentSchema, + this.dialog + ); } /** * choice element activated - load values */ focus() { - this.ch.load(this.value, this.schema).subscribe(res => { + this.ch.load(this.value, this.schema).subscribe((res) => { this.choices.next(res); }); } @@ -348,13 +365,16 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { return; } - this.http.get(this.base).subscribe(res => { - this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res; - this.setOrderedProperties(); - }, error => console.log(error)); + this.http.get(this.base).subscribe( + (res) => { + this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res; + this.setOrderedProperties(); + }, + (error) => console.log(error) + ); // set temporary pseudo schema - this.schema = { type: 'string' }; + this.schema = { type: "string" }; this.setOrderedProperties(); } @@ -386,7 +406,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { } if (changes.switch && !changes.switch.isFirstChange()) { - if (this.getLayout() === 'custom') { + if (this.getLayout() === "custom") { this.loadComponent(); } else { if (this.widgetHost.viewContainerRef) { @@ -400,72 +420,75 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { * angular pipe sorting function for keyValue - keep the JSON order and do not * order alphabetically */ - originalOrder = (a: KeyValue, b: KeyValue): number => { + originalOrder = ( + a: KeyValue, + b: KeyValue + ): number => { return 0; - } + }; /** * key method to instruct the display which HTML block to activate. */ getLayout(): string { if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) { - return 'none'; + return "none"; } - if (this.schema.widget === 'custom') { - return 'custom'; + if (this.schema.widget === "custom") { + return "custom"; } if (this.hideUndefined && this.value === undefined) { - return 'none'; + return "none"; } - if (this.schema.type === 'object') { + if (this.schema.type === "object") { if (this.schema.additionalProperties) { - if (this.schema.layout === 'tab') { - return 'additionalPropertiesTab'; + if (this.schema.layout === "tab") { + return "additionalPropertiesTab"; } - return 'additionalProperties'; + return "additionalProperties"; } - return 'object'; + return "object"; } - if (this.schema.type === 'array') { - if (this.schema.layout === 'tab') { - return 'tab'; + if (this.schema.type === "array") { + if (this.schema.layout === "tab") { + return "tab"; } - if (this.schema.layout === 'table') { - return 'table'; + if (this.schema.layout === "table") { + return "table"; } - if (this.schema.layout === 'select') { - return 'array-select'; + if (this.schema.layout === "select") { + return "array-select"; } - if (this.schema.layout === 'chips') { - return 'chips'; + if (this.schema.layout === "chips") { + return "chips"; } - return 'array'; + return "array"; } if (this.schema.enum) { - return 'enum'; + return "enum"; } - if (this.schema.widget === 'date') { - return 'date'; + if (this.schema.widget === "date") { + return "date"; } - if (this.schema.widget === 'upload') { - return 'upload'; + if (this.schema.widget === "upload") { + return "upload"; } - if (this.schema.widget === 'textarea') { - return 'textarea'; + if (this.schema.widget === "textarea") { + return "textarea"; } - if (this.schema.type === 'boolean') { - return 'checkbox'; + if (this.schema.type === "boolean") { + return "checkbox"; } if (this.schema.choicesUrl) { - return 'autocomplete'; + return "autocomplete"; } if (this.schema.choices) { - return 'autocomplete'; + return "autocomplete"; } if (this.schema.displayWith) { - return 'autocomplete'; + return "autocomplete"; } - return 'single'; + return "single"; } /** @@ -473,11 +496,11 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { * the HTML input type is "number" which avoids normal string input */ getInputType(schema: Schema): string { - if (schema.type === 'number') { - return 'number'; + if (schema.type === "number") { + return "number"; } - if (schema.type === 'integer') { - return 'number'; + if (schema.type === "integer") { + return "number"; } return schema.widget; } @@ -511,9 +534,9 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { if (!(this.value instanceof Array)) { this.value = []; } - if (this.schema.items.type === 'array') { + if (this.schema.items.type === "array") { this.value.push([]); - } else if (this.schema.items.type === 'object') { + } else if (this.schema.items.type === "object") { this.value.push({}); } else { this.value.push(null); @@ -528,10 +551,10 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { if (!this.value) { this.value = {}; } - if (this.value['']) { + if (this.value[""]) { return; } - this.value[''] = null; + this.value[""] = null; this.emit(this.value); } @@ -598,8 +621,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { * return error string */ error(): string { - - if (this.schema.widget === 'custom') { + if (this.schema.widget === "custom") { return this.customError; } if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) { @@ -608,29 +630,35 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { if (this.value) { if (this.schema.maxItems) { if (!(this.value.length <= this.schema.maxItems)) { - return this.e('Only ' + this.schema.maxItems + ' array entries allowed'); + return this.e( + "Only " + this.schema.maxItems + " array entries allowed" + ); } } if (this.schema.uniqueItems) { if (!(new Set(this.value).size === this.value.length)) { - return this.e('Array entries must be unique'); + return this.e("Array entries must be unique"); } } if (this.schema.minItems) { if (!(this.value.length >= this.schema.minItems)) { - return this.e('At least ' + this.schema.minItems + ' array entries required'); + return this.e( + "At least " + this.schema.minItems + " array entries required" + ); } } if (this.schema.maxProperties) { if (!(Object.keys(this.value).length <= this.schema.maxProperties)) { - return this.e('Only ' + this.schema.maxProperties + ' fields allowed'); + return this.e( + "Only " + this.schema.maxProperties + " fields allowed" + ); } } if (this.schema.propertyNames) { for (const key of Object.keys(this.value)) { const re = new RegExp(this.schema.propertyNames); if (!re.test(key)) { - return this.e('illegal field name: ' + key); + return this.e("illegal field name: " + key); } } } @@ -639,7 +667,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { if (this.value[dep]) { for (const l of this.schema.dependencies[dep]) { if (!this.value[l]) { - return this.e(dep + ' depends on ' + l); + return this.e(dep + " depends on " + l); } } } @@ -647,53 +675,59 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { } if (this.schema.minProperties) { if (!(Object.keys(this.value).length >= this.schema.minProperties)) { - return this.e('At least ' + this.schema.minProperties + ' fields required'); + return this.e( + "At least " + this.schema.minProperties + " fields required" + ); } } if (this.schema.maxLength) { - if (!(('' + this.value).length <= this.schema.maxLength)) { - return this.e('Input is longer than ' + this.schema.maxLength); + if (!(("" + this.value).length <= this.schema.maxLength)) { + return this.e("Input is longer than " + this.schema.maxLength); } } if (this.schema.minLength) { - if (!(('' + this.value).length >= this.schema.minLength)) { - return this.e('Input is shorter than ' + this.schema.minLength); + if (!(("" + this.value).length >= this.schema.minLength)) { + return this.e("Input is shorter than " + this.schema.minLength); } } if (this.schema.multipleOf) { if (!Number.isInteger(Number(this.value) / this.schema.multipleOf)) { - return this.e('Must be multiple of ' + this.schema.multipleOf); + return this.e("Must be multiple of " + this.schema.multipleOf); } } if (this.schema.exclusiveMaximum) { if (!(Number(this.value) < this.schema.exclusiveMaximum)) { - return this.e('Must be less than ' + this.schema.exclusiveMaximum); + return this.e("Must be less than " + this.schema.exclusiveMaximum); } } if (this.schema.maximum) { if (!(Number(this.value) <= this.schema.maximum)) { - return this.e('Must be less than or equal ' + this.schema.maximum); + return this.e("Must be less than or equal " + this.schema.maximum); } } if (this.schema.exclusiveMinimum) { if (!(Number(this.value) > this.schema.exclusiveMinimum)) { - return this.e('Must greater than ' + this.schema.exclusiveMinimum); + return this.e("Must greater than " + this.schema.exclusiveMinimum); } } if (this.schema.minimum) { if (!(Number(this.value) >= this.schema.minimum)) { - return this.e('Must greater than or equal ' + this.schema.minimum); + return this.e("Must greater than or equal " + this.schema.minimum); } } } if (this.required) { if (this.value == null || Object.is(this.value, NaN)) { - return this.e('required'); + return this.e("required"); } } if (this.schema.required) { for (const dep of this.schema.required) { - if (!this.value[dep] && this.value[dep] !== false && this.value[dep] !== 0) { + if ( + !this.value[dep] && + this.value[dep] !== false && + this.value[dep] !== 0 + ) { // ignore 'required' if dep is inactive due to switch / case let inactive = false; if (this.schema.switch) { @@ -702,26 +736,28 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { inactive = true; } } - if (!inactive) { return this.e(dep + ' is required'); } + if (!inactive) { + return this.e(dep + " is required"); + } } } } if (this.schema.pattern) { const re = new RegExp(this.schema.pattern); if (!this.value) { - return this.e('illegal string'); + return this.e("illegal string"); } if (!re.test(this.value)) { - return this.e('illegal string'); + return this.e("illegal string"); } } if (this.schema.format && this.service.formats[this.schema.format]) { const re = new RegExp(this.service.formats[this.schema.format]); if (!this.value) { - return this.e('illegal string'); + return this.e("illegal string"); } if (!re.test(this.value)) { - return this.e('illegal string'); + return this.e("illegal string"); } } return null; @@ -737,7 +773,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { if (this.label) { return this.label; } - return ''; + return ""; } /** @@ -745,13 +781,16 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { * normalize the different kind of events, handle the datatypes, set the value and emit the change */ change(event: any) { - let eventTarget: any; if (event instanceof MatSelectChange) { event = event.value; } else if (event instanceof MatDatepickerInputEvent) { - event = this.serializeDate(event.value, this.schema.dateFormat, this.schema.type); + event = this.serializeDate( + event.value, + this.schema.dateFormat, + this.schema.type + ); } else if (event instanceof MatAutocompleteSelectedEvent) { event = event.option.value; } else if (event instanceof MatCheckboxChange) { @@ -763,7 +802,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { event = event.target.value; } - if (event === '') { + if (event === "") { event = null; } @@ -771,15 +810,15 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { this.value = null; } - if (this.schema.type === 'number') { + if (this.schema.type === "number") { this.value = parseFloat(event); - } else if (this.schema.type === 'integer') { + } else if (this.schema.type === "integer") { this.value = parseInt(event, 10); - } else if (this.schema.type === 'boolean') { - if (typeof event === 'string') { - if (event === 'true') { + } else if (this.schema.type === "boolean") { + if (typeof event === "string") { + if (event === "true") { this.value = true; - } else if (event === 'false') { + } else if (event === "false") { this.value = false; } else { this.value = null; @@ -787,12 +826,12 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { } else { this.value = event; } - } else if (this.schema.type === 'string') { + } else if (this.schema.type === "string") { this.value = event; - } else if (this.schema.type === 'array') { + } else if (this.schema.type === "array") { this.value = event; } else { - throw new Error('unknown type: ' + this.schema.type); + throw new Error("unknown type: " + this.schema.type); } this.emit(this.value); @@ -803,7 +842,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { */ handleFileInput(event: any) { if (1024 * 1024 <= event.target.files.item(0).size) { - console.log('The file size is limited to 1MB'); + console.log("The file size is limited to 1MB"); return; } const reader = new FileReader(); @@ -811,7 +850,8 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { this.value = reader.result; this.emit(this.value); }; - reader.readAsText(event.target.files.item(0)); + console.log("read as url"); + reader.readAsDataURL(event.target.files.item(0)); } /** @@ -831,7 +871,10 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { * load the dynamic custom widget */ loadComponent() { - const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.service.registry[this.schema.widgetType]); + const componentFactory = + this.componentFactoryResolver.resolveComponentFactory( + this.service.registry[this.schema.widgetType] + ); const viewContainerRef = this.widgetHost.viewContainerRef; viewContainerRef.clear(); const componentRef = viewContainerRef.createComponent(componentFactory); @@ -844,16 +887,18 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { (componentRef.instance as WidgetComponent).rootValue = this.rootValue; // subscribe to value changes and forward them - (componentRef.instance as WidgetComponent).valueChange.subscribe(data => { + (componentRef.instance as WidgetComponent).valueChange.subscribe((data) => { this.value = data; this.emit(this.value); }); // subscribe to error changes and forward them - (componentRef.instance as WidgetComponent).errorChange.subscribe(error => { - this.customError = error; - this.errorChange.emit(error); - }); + (componentRef.instance as WidgetComponent).errorChange.subscribe( + (error) => { + this.customError = error; + this.errorChange.emit(error); + } + ); } /** @@ -927,7 +972,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { if (!date && date !== 0) { return date; } - if (typeof date === 'number') { + if (typeof date === "number") { return this.sameDate(new Date(date)); } if (!format) { @@ -935,7 +980,13 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { } const pdate = date.split(this.getDelimiter(format)); const pformat = format.split(this.getDelimiter(format)); - return this.sameDate(new Date(pdate[pformat.indexOf('yyyy')], pdate[pformat.indexOf('MM')] - 1, pdate[pformat.indexOf('dd')])); + return this.sameDate( + new Date( + pdate[pformat.indexOf("yyyy")], + pdate[pformat.indexOf("MM")] - 1, + pdate[pformat.indexOf("dd")] + ) + ); } /** @@ -959,20 +1010,26 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { */ serializeDate(date: Date, format: string, type: string): string { if (date == null) { - return ''; + return ""; } - if (type === 'integer' || type === 'number') { - return '' + date.valueOf(); + if (type === "integer" || type === "number") { + return "" + date.valueOf(); } if (!format) { return date.toISOString(); } const pformat = format.split(this.getDelimiter(format)); const pdate = [null, null, null]; - pdate[pformat.indexOf('yyyy')] = date.getFullYear(); - pdate[pformat.indexOf('MM')] = date.getMonth() + 1; - pdate[pformat.indexOf('dd')] = date.getDate(); - return pdate[0] + this.getDelimiter(format) + pdate[1] + this.getDelimiter(format) + pdate[2]; + pdate[pformat.indexOf("yyyy")] = date.getFullYear(); + pdate[pformat.indexOf("MM")] = date.getMonth() + 1; + pdate[pformat.indexOf("dd")] = date.getDate(); + return ( + pdate[0] + + this.getDelimiter(format) + + pdate[1] + + this.getDelimiter(format) + + pdate[2] + ); } /** @@ -981,7 +1038,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { getDelimiter(format: string): string { const delim = format.match(/\W/g); if (!delim[0]) { - throw new Error('No delimiter found in date format: ' + format); + throw new Error("No delimiter found in date format: " + format); } return delim[0]; } @@ -994,15 +1051,17 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { const value = event.value; // Add our fruit - if ((value || '').trim()) { - if (!this.value) { this.value = []; } + if ((value || "").trim()) { + if (!this.value) { + this.value = []; + } this.value.push(value.trim()); this.emit(this.value); } // Reset the input value if (input) { - input.value = ''; + input.value = ""; } } @@ -1013,7 +1072,9 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { const index = this.value.indexOf(v); if (index >= 0) { this.value.splice(index, 1); - if (this.value.length === 0) { this.value = null; } + if (this.value.length === 0) { + this.value = null; + } this.emit(this.value); } } diff --git a/src/index.html b/src/index.html index 4165534..3411521 100644 --- a/src/index.html +++ b/src/index.html @@ -7,9 +7,12 @@ + + + - + Fork me on GitHub diff --git a/src/styles.css b/src/styles.css index 50fb4ce..eb6244c 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,3 +1,6 @@ /* You can add global styles to this file, and also import other style files */ @import "~@angular/material/prebuilt-themes/indigo-pink.css"; @import "https://fonts.googleapis.com/icon?family=Material+Icons"; + +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } From 2d5143eac9a875eb6e92fd898ce523193a409a2a Mon Sep 17 00:00:00 2001 From: imranaalam Date: Fri, 4 Jun 2021 15:54:45 +0500 Subject: [PATCH 2/3] hover over shows the remove icon only - bug removed. console log removed --- .../src/lib/json-schema-form.component.html | 592 +++++++++--------- .../src/lib/json-schema-form.component.ts | 2 +- 2 files changed, 293 insertions(+), 301 deletions(-) diff --git a/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.html b/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.html index cf0979e..6a781f3 100644 --- a/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.html +++ b/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.html @@ -1,327 +1,319 @@ - - {{label}} - {{schema.description}} - - - + [ngStyle]="schema.style" [ngClass]="schema.class" [expanded]="schema.expanded"> + + {{label}} + {{schema.description}} + + +
+ [matTooltip]="schema.description"> -
- - more_vert - +
+ + more_vert + - - - - - - - - + + + + + + + + - - - + + + - - - -
+ + + +
- - -
-
-
- - -
-
+ + +
+
+
+ +
-
- - -
- - {{x}} - -
-
-
- - - - -
- - {{getLabel()}} key - - -   - - - +
+
+
+ + +
+ + {{x}} +
- - +
+
+ - - - - - - - - {{x.key}} - - - - - - - - - - - + + +
+ + {{getLabel()}} key + + +   + + + +
+ +
- - -
- - - -
- + + + + -
+ + + - - - - - - {{v}} - cancel - - - - - + + +
+ + + +
+ +
- - - - - - - - - - - - - + + + + + + {{v}} + cancel + + + + + - - - - - - - - - - - -
- {{x.value.title ? x.value.title : x.key}}
- - - - -
- + + + + -
+ + + - -
- - {{label}} - - {{x}} - - -

{{error()}}

-
+ + + + + + + + + + + +
+ {{x.value.title ? x.value.title : x.key}}
+ + + + +
+ +
- -
- - {{label}} - - - {{choice.name}} - - - -

{{error()}}

-
+ +
+ + {{label}} + + {{x}} + + +

{{error()}}

+
- -
- - {{label}} - - - - -

{{error()}}

-
+ +
+ + {{label}} + + + {{choice.name}} + + + +

{{error()}}

+
- -
- - {{label}} -

{{error()}}

-
+ +
+ + {{label}} + + + + +

{{error()}}

+
- -
- - {{label}} - - - {{choice.name}} - - - - - {{label}} - - - - {{choice.name}} - - - -

{{error()}}

-
+ +
+ + {{label}} +

{{error()}}

+
- -
- - {{label}} - - - -

{{error()}}

-
+ +
+ + {{label}} + + + {{choice.name}} + + + + + {{label}} + + + + {{choice.name}} + + + +

{{error()}}

+
- -
- - {{label}} - - - -

{{error()}}

-
+ +
+ + {{label}} + + + +

{{error()}}

+
- -
- -

{{error()}}

-
+ +
+ + {{label}} + + + +

{{error()}}

+
+ + +
+ +

{{error()}}

+
- \ No newline at end of file + diff --git a/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts b/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts index 4b02dc6..6ecc30f 100644 --- a/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts +++ b/projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts @@ -850,7 +850,7 @@ export class JsonSchemaFormComponent implements OnInit, OnChanges { this.value = reader.result; this.emit(this.value); }; - console.log("read as url"); + reader.readAsDataURL(event.target.files.item(0)); } From 80ee1d276c4851d17fccdc4adad96ea57c5e5a5e Mon Sep 17 00:00:00 2001 From: imranaalam Date: Sat, 5 Jun 2021 12:36:38 +0500 Subject: [PATCH 3/3] aremoved /dist from .git ignore --- .gitignore | 2 +- dist/dashjoin/json-schema-form/README.md | 336 ++ .../bundles/dashjoin-json-schema-form.umd.js | 3515 +++++++++++++++++ .../dashjoin-json-schema-form.umd.js.map | 1 + .../dashjoin-json-schema-form.umd.min.js | 2 + .../dashjoin-json-schema-form.umd.min.js.map | 1 + .../dashjoin-json-schema-form.d.ts | 6 + .../dashjoin-json-schema-form.d.ts.map | 1 + .../esm2015/dashjoin-json-schema-form.js | 5 + .../json-schema-form/esm2015/lib/choice.js | 122 + .../lib/edit-element-dialog.component.js | 118 + .../json-schema-form/esm2015/lib/edit.js | 339 ++ .../esm2015/lib/json-pointer.js | 55 + .../esm2015/lib/json-schema-form.component.js | 1920 +++++++++ .../esm2015/lib/json-schema-form.module.js | 119 + .../esm2015/lib/json-schema-form.service.js | 56 + .../json-schema-form/esm2015/lib/schema.js | 2 + .../esm2015/lib/widget.component.js | 2 + .../esm2015/lib/widget.directive.js | 23 + .../json-schema-form/esm2015/public-api.js | 10 + .../fesm2015/dashjoin-json-schema-form.js | 2711 +++++++++++++ .../fesm2015/dashjoin-json-schema-form.js.map | 1 + .../dashjoin/json-schema-form/lib/choice.d.ts | 80 + .../json-schema-form/lib/choice.d.ts.map | 1 + .../lib/edit-element-dialog.component.d.ts | 22 + .../edit-element-dialog.component.d.ts.map | 1 + dist/dashjoin/json-schema-form/lib/edit.d.ts | 76 + .../json-schema-form/lib/edit.d.ts.map | 1 + .../json-schema-form/lib/json-pointer.d.ts | 18 + .../lib/json-pointer.d.ts.map | 1 + .../lib/json-schema-form.component.d.ts | 322 ++ .../lib/json-schema-form.component.d.ts.map | 1 + .../lib/json-schema-form.module.d.ts | 32 + .../lib/json-schema-form.module.d.ts.map | 1 + .../lib/json-schema-form.service.d.ts | 47 + .../lib/json-schema-form.service.d.ts.map | 1 + .../dashjoin/json-schema-form/lib/schema.d.ts | 261 ++ .../json-schema-form/lib/schema.d.ts.map | 1 + .../lib/widget.component.d.ts | 36 + .../lib/widget.component.d.ts.map | 1 + .../lib/widget.directive.d.ts | 16 + .../lib/widget.directive.d.ts.map | 1 + dist/dashjoin/json-schema-form/package.json | 38 + .../dashjoin/json-schema-form/public-api.d.ts | 7 + .../json-schema-form/public-api.d.ts.map | 1 + 45 files changed, 10312 insertions(+), 1 deletion(-) create mode 100644 dist/dashjoin/json-schema-form/README.md create mode 100644 dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js create mode 100644 dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js.map create mode 100644 dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js create mode 100644 dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js.map create mode 100644 dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts create mode 100644 dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/esm2015/dashjoin-json-schema-form.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/choice.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/edit-element-dialog.component.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/edit.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/json-pointer.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.component.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.module.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.service.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/schema.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/widget.component.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/lib/widget.directive.js create mode 100644 dist/dashjoin/json-schema-form/esm2015/public-api.js create mode 100644 dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js create mode 100644 dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js.map create mode 100644 dist/dashjoin/json-schema-form/lib/choice.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/choice.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/edit.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/edit.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/json-pointer.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/json-pointer.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/schema.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/schema.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/widget.component.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/widget.component.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/lib/widget.directive.d.ts create mode 100644 dist/dashjoin/json-schema-form/lib/widget.directive.d.ts.map create mode 100644 dist/dashjoin/json-schema-form/package.json create mode 100644 dist/dashjoin/json-schema-form/public-api.d.ts create mode 100644 dist/dashjoin/json-schema-form/public-api.d.ts.map diff --git a/.gitignore b/.gitignore index e7e5a01..5e146e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # See http://help.github.com/ignore-files/ for more about ignoring files. # compiled output -/dist +# /dist /tmp /out-tsc # Only exists if Bazel was run diff --git a/dist/dashjoin/json-schema-form/README.md b/dist/dashjoin/json-schema-form/README.md new file mode 100644 index 0000000..17265c4 --- /dev/null +++ b/dist/dashjoin/json-schema-form/README.md @@ -0,0 +1,336 @@ +# A Lightweight Angular JSON Schema Form Component + +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=dashjoin_json-schema-form&metric=alert_status)](https://sonarcloud.io/dashboard?id=dashjoin_json-schema-form) +[![npm version](https://img.shields.io/npm/v/@dashjoin/json-schema-form.svg?style=flat-square)](https://www.npmjs.com/package/@dashjoin/json-schema-form) + +![](https://raw.github.com/jdorn/json-editor/master/jsoneditor.png) + +## Goal + +* Implement any web form with flexible styling and validation in a completely declarative way +* Live demo: https://dashjoin.github.io/ +* Stackblitz: https://stackblitz.com/edit/dashjoin +* [Video Tutorial](https://www.youtube.com/watch?v=Xk9dxbbBFjo) + +## Features + +* Supports JSON Schema Draft 6 +* Can load referenced schemas from URLs +* Renders compact forms +* Supports 2-way databinding +* Autocomplete & typeahead based on REST services (complex responses can be processed via extended JSONata) +* CSS styling +* Built-in validation +* Flexible layout options (tab, table, vertical, horizontal, ...) +* Several input widgets (file upload, date / color picker, autocomplete, ...) +* Lightweight: < 1000 lines of code + +## Installation + +To use the library in your project, follow these steps: + +```shell +npm i @angular/material +npm i @angular/flex-layout +npm i @angular/cdk +npm i @dashjoin/json-schema-form +``` + +In your app module add: + +```typescript +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { JsonSchemaFormModule } from '@dashjoin/json-schema-form'; +... + +@NgModule({ + ... + imports: [ + BrowserModule, + BrowserAnimationsModule, + JsonSchemaFormModule, + ... + ], + ... +} +``` + +` +Note: You need import CommonModule for nested lazy loading modules +` +```typescript +import { CommonModule } from '@angular/common'; +import { JsonSchemaFormModule } from '@dashjoin/json-schema-form'; + +@NgModule({ + ... + imports: [ + CommonModule, + JsonSchemaFormModule, + ... + ], + ... +} +```` + +A small sample component: + +```typescript +import { Component } from '@angular/core'; +import { Schema } from '@dashjoin/json-schema-form/lib/schema'; + +@Component({ + selector: 'app-root', + template: ` + +
{{print()}}
+  `
+})
+export class AppComponent {
+
+  schema: Schema = {
+    type: 'array',
+    items: {
+      type: 'object',
+      properties: {
+        name: { type: 'string' },
+        bday: { type: 'string', widget: 'date' }
+      }
+    }
+  };
+  
+  value: any = [{
+    name: 'Joe',
+    bday: '2018-09-09T22:00:00.000Z'
+  }];
+
+  print(): string {
+    return JSON.stringify(this.value, null, 2);
+  }
+}
+```
+
+Finally, add the material style and icons to styles.css:
+
+```css
+@import "~@angular/material/prebuilt-themes/indigo-pink.css";
+@import "https://fonts.googleapis.com/icon?family=Material+Icons";
+```
+
+## JSON Schema Extensions
+
+We define a couple of extensions to JSON Schema in order to define the user interface and layout of the form. Please also see the [demo playground](https://dashjoin.github.io/) where examples of all configuration options are available.
+
+### Widget
+
+This option specifies a specific input widget to be used. The default is a simple text field. The following options are available:
+
+```
+{
+  "type": "string",
+  "widget": "date"
+}
+```
+
+* select: shows a select input field with options (No free text entry is possible. Options can be loaded via rest (see below))
+* upload: the JSON property is set to the contents of an uploaded file
+* date: uses the material date picker component
+* textarea: displays a multi line textarea
+* password: input is shown as *****
+* color: shows a color picker widget
+* datetime-local, email, month, tel, time, url, week: uses the browser native [input types](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)
+
+### Custom Widgets
+
+It is possible to create custom widgets using the following steps:
+
+* Create a component that implements [WidgetComponent](https://github.com/dashjoin/json-schema-form/blob/master/projects/dashjoin/json-schema-form/src/lib/widget.component.ts). All relevant data such as the applicable subschema and the current value are passed to the component. Make sure to emit value changes. An example can be found [here](https://github.com/dashjoin/json-schema-form/tree/master/src/app/custom.component.ts)
+* Include the component in your @NgModule declarations
+* In the parent component, add this service to your constructor: private service: JsonSchemaFormService
+* Register your widget in ngOnInit() using this service: this.service.registerComponent('rich-text-editor', CustomComponent);
+* Include the widget in your schema: { "widget": "custom", "widgetType": "rich-text-editor" }
+
+### Autocomplete choices
+
+The following fields control how select and autocomplete options are obtained from a REST backend:
+
+```
+{
+  "type": "string",
+  "choicesUrl": "/assets/autocomplete-simple.json",
+  "choicesVerb": "GET"
+}
+```
+
+* choices: string array that allows defining the choices statically
+* choicesUrl: defines the REST service URL
+* choicesVerb: defines the HTTP verb to use for the REST service URL, default is POST
+* choicesUrlArgs: defines the REST service parameter. The convention is to have a single parameter. Multiple fields need to be wrapped into a single object
+* jsonata: used to transform the REST result into a string array or an array of objects with name and value fields if it is not already in that form.
+  The transformation is expressed using [JSONata](https://jsonata.org/)
+
+### Autocomplete and Select Display Names and Values
+
+If you want the option's control value (what is saved in the form) to be different than the option's display value (what is displayed in the text field),
+the "displayWith" option allows you to do so. The value of "displayWith" is the name under which the implementation class to perform this job was registered.
+The class must implement the [ChoiceHandler](https://github.com/dashjoin/json-schema-form/blob/master/projects/dashjoin/json-schema-form/src/lib/choice.ts) interface. An example can be found at the end of the [playground component](https://github.com/dashjoin/json-schema-form/blob/master/src/app/app.component.ts).
+The registration can be done in ngOnInit() using this service: this.service.registerDisplayWith('states', new MyDisplayer()); Consider the following example:
+
+```
+{
+  "type": "string",
+  "displayWith": "localName",
+  "choices": [
+    "https://en.wikipedia.org/wiki/Indonesia",
+    "https://en.wikipedia.org/wiki/Peru",
+    "As is - no tooltip"
+  ]
+}
+```
+
+The autocomplete is configured with "localName" which is a built-in displayer.
+It treats options like URLs and displays the local name which is the text after the last slash, hash, colon or dot. This causes the dropdown to display "Peru" with the tooltip indicating the real value "https://en.wikipedia.org/wiki/Peru" which is written to the JSON value.
+
+The custom implementation also enables you to exercise tight control over filtering, typeahead loading of options, and determining the display value.
+For an example of a typeahead implementation, see the class MyTypeAhead at the bottom of the [playground component](https://github.com/dashjoin/json-schema-form/blob/master/src/app/app.component.ts).
+
+### Layout options
+
+Layout options determine how the input elements of arrays and objects are arranged. These options can be applied for each nesting layer (e.g. if you're entering an array of objects):
+
+```
+{
+  "type": "array",
+  "layout": "horizontal",
+  "items": {
+    "type": "object",
+    "layout": "vertical",
+    "properties": {
+      "name": {
+        "type": "string"
+      },
+      "version": {
+        "type": "number"
+      }
+    }
+  }
+}
+```
+
+* horizontal (default): input controls are arranged horizontally and flex-wrap if there is insufficient space
+* vertical: input controls are arranged vertically
+* tab: controls are shown in tabs (only applies to arrays and objects with additionalProperties)
+* table: controls are shown in a table with the property names being the column names (only applies to an array of objects)
+* select: array is shown as a multi-select (only applies to arrays of string)
+* Any element can be placed in an expansion panel by adding "expanded": true / false. The Boolean value indicates whether the panel is expanded by default or not
+
+The order field allows to control the inputs of objects:
+
+* The order field can be a list of field names. For example "order": ["firstname", "lastname"] defines the first name input to appear before the last name, regardless of their order in the properties
+* If a property is omitted, the form does not display an input. So in the example above, an age field is not in the form even if it is listed in properties.
+* Order can also specify a 2-level hierarchy like "order": [["firstname", "lastname"], "emails"]. If a vertical layout is chosen, this displays firstname and lastname in the first row and the array of emails in the second row. The first row automatically chooses the opposite layout direction internally.
+
+The style and class fields allow passing CSS styles and classes to the input fields. For instance, you could emphasize
+the input with a higher z elevation and accommodate for longer
+input values by increasing the default input element width:
+
+```
+{
+  "type": "string",
+  "class": [
+    "mat-elevation-z2"
+  ],
+  "style": {
+    "width": "400px"
+  }
+}
+```
+
+Please also see the definition of the [Schema](https://github.com/dashjoin/json-schema-form/blob/master/projects/dashjoin/json-schema-form/src/lib/schema.ts) object.
+
+### Application Logic
+
+In some situations, you would like to compute a field based on the contents of other fields.
+This can be achieved via the "compute" option. It can be placed within an object as follows:
+
+```
+{
+  "type": "object",
+  "properties": { "first": {"type": "string"}, "last": { "type": "string" }, "salutation": { "type": "string", "readOnly": true } },
+  "computed": {
+    "salutation": '"Dear " & first & " " & last & ","'
+  }
+}
+```
+
+In this example, any change to the first or last fields trigger a change in salutation which is displayed as a read only form field.
+The expression defining the salutation value is expressed in JSONata ().
+
+## Validation and Submitting
+
+Some JSON Schema constructs like "pattern" or "required" allow validating an object against the schema.
+The result of this validation is displayed on the UI but it is also propagated to the parent component
+via the "error" output variable. Error contains the first validation error message or null if the form is
+valid. The following example shows how this information can be used to deactivate form submission:
+
+```
+
+
+
+```
+
+Note that not all JSON schema validation constructs are supported. Also, arrays and
+additional property objects do not propagate the information and the invalid value is undefined.
+
+## Unsupported JSON Schema properties
+
+We support JSON Schema Draft 6 with these exceptions:
+
+* patternProperties: allows defining a property type depending on the property name. You can work around this using additionalProperties.
+* const: allows defining a value to be constant. Work around this using default and /or enum with a single option.
+* Combining schemas (oneOf, anyOf, not, allOf): this allows giving multiple options (schemas) for a property. These constructs make a lot of sense for validation but are hard to apply in the context of a form and therefore, they are not supported.
+* contains: specifies that an array must contain one instance of a given type. As with the schema combination constructs, this makes sense for validation for not for forms.
+
+## Referenced Schemas
+
+In order to foster reuse, schemas are often made available on the web. In this case, you can use JSON schema's $ref mechanism to have the browser load the schema as follows:
+
+```
+
+```
+
+The URL can also be relative to the form's URL:
+
+```
+
+```
+
+If you do not want the schema to be downloaded, you can also manually provide referenced schemas via the root schema:
+
+```
+{
+  ...
+  referenced: {
+    'http://example.org/': { $id: 'http://example.org/', ... },
+    'urn:myschema': { $id: 'urn:myschema', ... },
+  }
+}
+```
+
+## Structure of this repository
+
+The repository contains:
+
+* [The actual library code](https://github.com/dashjoin/json-schema-form/tree/master/projects/dashjoin/json-schema-form/src/lib)
+* [Sources of the online demo playground](https://github.com/dashjoin/json-schema-form/tree/master/src/app)
+
+## Contribute
+
+We welcome contributions. If you are interested in contributing to Dashjoin, let us know!
+You'll get to know an open-minded and motivated team working together to build the next generation platform.
+
+* [Join our Slack](https://join.slack.com/t/dashjoin/shared_invite/zt-qwz1zzdf-3YN3ryDws3Nmt3PzfgLheQ) and say hello
+* [Follow us](https://twitter.com/dashjoin) on Twitter
+* [Submit](https://github.com/dashjoin/json-schema-form/issues) your ideas by opening an issue with the enhancement label
+* [Help out](https://github.com/dashjoin/json-schema-form/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) by fixing "a good first issue"
diff --git a/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js
new file mode 100644
index 0000000..c8e7f1c
--- /dev/null
+++ b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js
@@ -0,0 +1,3515 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/material/select'), require('@angular/material/datepicker'), require('@angular/material/checkbox'), require('rxjs'), require('@angular/material/autocomplete'), require('@angular/common/http'), require('rxjs/operators'), require('jsonata'), require('@angular/forms'), require('@angular/material/dialog'), require('@angular/cdk/drag-drop'), require('@angular/cdk/keycodes'), require('@angular/common'), require('@angular/material/expansion'), require('@angular/flex-layout/extended'), require('@angular/material/tooltip'), require('@angular/material/icon'), require('@angular/material/menu'), require('@angular/flex-layout/flex'), require('@angular/material/button'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/tabs'), require('@angular/material/chips'), require('@angular/material/core'), require('@angular/material/card'), require('@angular/flex-layout'), require('@angular/material/table')) :
+    typeof define === 'function' && define.amd ? define('@dashjoin/json-schema-form', ['exports', '@angular/core', '@angular/material/select', '@angular/material/datepicker', '@angular/material/checkbox', 'rxjs', '@angular/material/autocomplete', '@angular/common/http', 'rxjs/operators', 'jsonata', '@angular/forms', '@angular/material/dialog', '@angular/cdk/drag-drop', '@angular/cdk/keycodes', '@angular/common', '@angular/material/expansion', '@angular/flex-layout/extended', '@angular/material/tooltip', '@angular/material/icon', '@angular/material/menu', '@angular/flex-layout/flex', '@angular/material/button', '@angular/material/form-field', '@angular/material/input', '@angular/material/tabs', '@angular/material/chips', '@angular/material/core', '@angular/material/card', '@angular/flex-layout', '@angular/material/table'], factory) :
+    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.dashjoin = global.dashjoin || {}, global.dashjoin['json-schema-form'] = {}), global.ng.core, global.ng.material.select, global.ng.material.datepicker, global.ng.material.checkbox, global.rxjs, global.ng.material.autocomplete, global.ng.common.http, global.rxjs.operators, global.jsonata, global.ng.forms, global.ng.material.dialog, global.ng.cdk.dragDrop, global.ng.cdk.keycodes, global.ng.common, global.ng.material.expansion, global.ng.flexLayout.extended, global.ng.material.tooltip, global.ng.material.icon, global.ng.material.menu, global.ng.flexLayout.flex, global.ng.material.button, global.ng.material.formField, global.ng.material.input, global.ng.material.tabs, global.ng.material.chips, global.ng.material.core, global.ng.material.card, global.ng.flexLayout, global.ng.material.table));
+}(this, (function (exports, i0, i19, i21, i13, rxjs, i23, i1, operators, jsonata, i22, i1$1, i18, keycodes, i4, i6, i7, i8, i9, i10, i11, i12, i14, i15, i16, i17, i20, card, flexLayout, table) { 'use strict';
+
+    function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
+
+    var jsonata__default = /*#__PURE__*/_interopDefaultLegacy(jsonata);
+
+    /**
+     * service for registering custom components
+     */
+    var JsonSchemaFormService = /** @class */ (function () {
+        function JsonSchemaFormService() {
+            /**
+             * layout editor mode
+             */
+            this.editMode = false;
+            /**
+             * built-in formats
+             */
+            this.formats = {
+                email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+                ipv4: /^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/,
+                url: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/,
+                uri: /^\w+:(\/?\/?)[^\s]+$/
+            };
+            /**
+             * registry of custom widgets. The keys are the values used in schema.widgetType, the values
+             * are the Type of the custom widget component implementing WidgetComponent
+             */
+            this.registry = {};
+            /**
+             * registry of displayWith objects
+             */
+            this.displayWithRegistry = {};
+        }
+        /**
+         * register custom component
+         * @param key     the name of the component which is used in schema extension: widget=custom, widgetType=key
+         * @param value   the implementation class
+         */
+        JsonSchemaFormService.prototype.registerComponent = function (key, value) {
+            this.registry[key] = value;
+        };
+        /**
+         * register displayWith implementations
+         * @param key     the name of the implementation which is used in schema extension: displayWith=key
+         * @param value   the implementation class
+         */
+        JsonSchemaFormService.prototype.registerDisplayWith = function (key, value) {
+            this.displayWithRegistry[key] = value;
+        };
+        return JsonSchemaFormService;
+    }());
+    JsonSchemaFormService.ɵfac = function JsonSchemaFormService_Factory(t) { return new (t || JsonSchemaFormService)(); };
+    JsonSchemaFormService.ɵprov = i0.ɵɵdefineInjectable({ token: JsonSchemaFormService, factory: JsonSchemaFormService.ɵfac, providedIn: 'root' });
+    (function () {
+        (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonSchemaFormService, [{
+                type: i0.Injectable,
+                args: [{
+                        providedIn: 'root'
+                    }]
+            }], null, null);
+    })();
+
+    /*! *****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    ***************************************************************************** */
+    /* global Reflect, Promise */
+    var extendStatics = function (d, b) {
+        extendStatics = Object.setPrototypeOf ||
+            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+            function (d, b) { for (var p in b)
+                if (Object.prototype.hasOwnProperty.call(b, p))
+                    d[p] = b[p]; };
+        return extendStatics(d, b);
+    };
+    function __extends(d, b) {
+        if (typeof b !== "function" && b !== null)
+            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    }
+    var __assign = function () {
+        __assign = Object.assign || function __assign(t) {
+            for (var s, i = 1, n = arguments.length; i < n; i++) {
+                s = arguments[i];
+                for (var p in s)
+                    if (Object.prototype.hasOwnProperty.call(s, p))
+                        t[p] = s[p];
+            }
+            return t;
+        };
+        return __assign.apply(this, arguments);
+    };
+    function __rest(s, e) {
+        var t = {};
+        for (var p in s)
+            if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+                t[p] = s[p];
+        if (s != null && typeof Object.getOwnPropertySymbols === "function")
+            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                    t[p[i]] = s[p[i]];
+            }
+        return t;
+    }
+    function __decorate(decorators, target, key, desc) {
+        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+        if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
+            r = Reflect.decorate(decorators, target, key, desc);
+        else
+            for (var i = decorators.length - 1; i >= 0; i--)
+                if (d = decorators[i])
+                    r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+        return c > 3 && r && Object.defineProperty(target, key, r), r;
+    }
+    function __param(paramIndex, decorator) {
+        return function (target, key) { decorator(target, key, paramIndex); };
+    }
+    function __metadata(metadataKey, metadataValue) {
+        if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
+            return Reflect.metadata(metadataKey, metadataValue);
+    }
+    function __awaiter(thisArg, _arguments, P, generator) {
+        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+        return new (P || (P = Promise))(function (resolve, reject) {
+            function fulfilled(value) { try {
+                step(generator.next(value));
+            }
+            catch (e) {
+                reject(e);
+            } }
+            function rejected(value) { try {
+                step(generator["throw"](value));
+            }
+            catch (e) {
+                reject(e);
+            } }
+            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+            step((generator = generator.apply(thisArg, _arguments || [])).next());
+        });
+    }
+    function __generator(thisArg, body) {
+        var _ = { label: 0, sent: function () { if (t[0] & 1)
+                throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
+        function verb(n) { return function (v) { return step([n, v]); }; }
+        function step(op) {
+            if (f)
+                throw new TypeError("Generator is already executing.");
+            while (_)
+                try {
+                    if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
+                        return t;
+                    if (y = 0, t)
+                        op = [op[0] & 2, t.value];
+                    switch (op[0]) {
+                        case 0:
+                        case 1:
+                            t = op;
+                            break;
+                        case 4:
+                            _.label++;
+                            return { value: op[1], done: false };
+                        case 5:
+                            _.label++;
+                            y = op[1];
+                            op = [0];
+                            continue;
+                        case 7:
+                            op = _.ops.pop();
+                            _.trys.pop();
+                            continue;
+                        default:
+                            if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
+                                _ = 0;
+                                continue;
+                            }
+                            if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
+                                _.label = op[1];
+                                break;
+                            }
+                            if (op[0] === 6 && _.label < t[1]) {
+                                _.label = t[1];
+                                t = op;
+                                break;
+                            }
+                            if (t && _.label < t[2]) {
+                                _.label = t[2];
+                                _.ops.push(op);
+                                break;
+                            }
+                            if (t[2])
+                                _.ops.pop();
+                            _.trys.pop();
+                            continue;
+                    }
+                    op = body.call(thisArg, _);
+                }
+                catch (e) {
+                    op = [6, e];
+                    y = 0;
+                }
+                finally {
+                    f = t = 0;
+                }
+            if (op[0] & 5)
+                throw op[1];
+            return { value: op[0] ? op[1] : void 0, done: true };
+        }
+    }
+    var __createBinding = Object.create ? (function (o, m, k, k2) {
+        if (k2 === undefined)
+            k2 = k;
+        Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } });
+    }) : (function (o, m, k, k2) {
+        if (k2 === undefined)
+            k2 = k;
+        o[k2] = m[k];
+    });
+    function __exportStar(m, o) {
+        for (var p in m)
+            if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
+                __createBinding(o, m, p);
+    }
+    function __values(o) {
+        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+        if (m)
+            return m.call(o);
+        if (o && typeof o.length === "number")
+            return {
+                next: function () {
+                    if (o && i >= o.length)
+                        o = void 0;
+                    return { value: o && o[i++], done: !o };
+                }
+            };
+        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+    }
+    function __read(o, n) {
+        var m = typeof Symbol === "function" && o[Symbol.iterator];
+        if (!m)
+            return o;
+        var i = m.call(o), r, ar = [], e;
+        try {
+            while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
+                ar.push(r.value);
+        }
+        catch (error) {
+            e = { error: error };
+        }
+        finally {
+            try {
+                if (r && !r.done && (m = i["return"]))
+                    m.call(i);
+            }
+            finally {
+                if (e)
+                    throw e.error;
+            }
+        }
+        return ar;
+    }
+    /** @deprecated */
+    function __spread() {
+        for (var ar = [], i = 0; i < arguments.length; i++)
+            ar = ar.concat(__read(arguments[i]));
+        return ar;
+    }
+    /** @deprecated */
+    function __spreadArrays() {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++)
+            s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
+    }
+    function __spreadArray(to, from) {
+        for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
+            to[j] = from[i];
+        return to;
+    }
+    function __await(v) {
+        return this instanceof __await ? (this.v = v, this) : new __await(v);
+    }
+    function __asyncGenerator(thisArg, _arguments, generator) {
+        if (!Symbol.asyncIterator)
+            throw new TypeError("Symbol.asyncIterator is not defined.");
+        var g = generator.apply(thisArg, _arguments || []), i, q = [];
+        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+        function verb(n) { if (g[n])
+            i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+        function resume(n, v) { try {
+            step(g[n](v));
+        }
+        catch (e) {
+            settle(q[0][3], e);
+        } }
+        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+        function fulfill(value) { resume("next", value); }
+        function reject(value) { resume("throw", value); }
+        function settle(f, v) { if (f(v), q.shift(), q.length)
+            resume(q[0][0], q[0][1]); }
+    }
+    function __asyncDelegator(o) {
+        var i, p;
+        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
+    }
+    function __asyncValues(o) {
+        if (!Symbol.asyncIterator)
+            throw new TypeError("Symbol.asyncIterator is not defined.");
+        var m = o[Symbol.asyncIterator], i;
+        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); }
+    }
+    function __makeTemplateObject(cooked, raw) {
+        if (Object.defineProperty) {
+            Object.defineProperty(cooked, "raw", { value: raw });
+        }
+        else {
+            cooked.raw = raw;
+        }
+        return cooked;
+    }
+    ;
+    var __setModuleDefault = Object.create ? (function (o, v) {
+        Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function (o, v) {
+        o["default"] = v;
+    };
+    function __importStar(mod) {
+        if (mod && mod.__esModule)
+            return mod;
+        var result = {};
+        if (mod != null)
+            for (var k in mod)
+                if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
+                    __createBinding(result, mod, k);
+        __setModuleDefault(result, mod);
+        return result;
+    }
+    function __importDefault(mod) {
+        return (mod && mod.__esModule) ? mod : { default: mod };
+    }
+    function __classPrivateFieldGet(receiver, state, kind, f) {
+        if (kind === "a" && !f)
+            throw new TypeError("Private accessor was defined without a getter");
+        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
+            throw new TypeError("Cannot read private member from an object whose class did not declare it");
+        return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
+    }
+    function __classPrivateFieldSet(receiver, state, value, kind, f) {
+        if (kind === "m")
+            throw new TypeError("Private method is not writable");
+        if (kind === "a" && !f)
+            throw new TypeError("Private accessor was defined without a setter");
+        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
+            throw new TypeError("Cannot write private member to an object whose class did not declare it");
+        return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
+    }
+
+    /**
+     * directive for dynamically loading custom widgets
+     */
+    var WidgetDirective = /** @class */ (function () {
+        /**
+         * allow caller to dynamically insert custom component
+         * @param viewContainerRef  dynamic component handle
+         */
+        function WidgetDirective(viewContainerRef) {
+            this.viewContainerRef = viewContainerRef;
+        }
+        return WidgetDirective;
+    }());
+    WidgetDirective.ɵfac = function WidgetDirective_Factory(t) { return new (t || WidgetDirective)(i0.ɵɵdirectiveInject(i0.ViewContainerRef)); };
+    WidgetDirective.ɵdir = i0.ɵɵdefineDirective({ type: WidgetDirective, selectors: [["", "libWidgetHost", ""]] });
+    (function () {
+        (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WidgetDirective, [{
+                type: i0.Directive,
+                args: [{
+                        selector: '[libWidgetHost]'
+                    }]
+            }], function () { return [{ type: i0.ViewContainerRef }]; }, null);
+    })();
+
+    /**
+     * static JsonPointer implementation
+     */
+    var JsonPointer = /** @class */ (function () {
+        function JsonPointer() {
+        }
+        /**
+         * evaluate the JSON pointer on o
+         */
+        JsonPointer.jsonPointer = function (o, pointer) {
+            return JsonPointer.jsonPointer2(o, JsonPointer.split(pointer));
+        };
+        /**
+         * evaluate the JSON pointer (parsed array of paths) on o
+         */
+        JsonPointer.jsonPointer2 = function (o, paths) {
+            var e_1, _a;
+            if (o === undefined) {
+                return undefined;
+            }
+            if (paths.length === 0) {
+                return o;
+            }
+            var path = paths[0];
+            var np = Object.assign([], paths);
+            np.splice(0, 1);
+            if (paths[0] === '*') {
+                var res = [];
+                try {
+                    for (var _b = __values((typeof (o) === 'object' ? Object.values(o) : o)), _c = _b.next(); !_c.done; _c = _b.next()) {
+                        var f = _c.value;
+                        res.push(this.jsonPointer2(f, np));
+                    }
+                }
+                catch (e_1_1) { e_1 = { error: e_1_1 }; }
+                finally {
+                    try {
+                        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
+                    }
+                    finally { if (e_1) throw e_1.error; }
+                }
+                return res;
+            }
+            else {
+                return this.jsonPointer2(o[path], np);
+            }
+        };
+        /**
+         * strip leading / and split the JSON pointer
+         */
+        JsonPointer.split = function (s) {
+            var e_2, _a;
+            if (s === '') {
+                return [];
+            }
+            if (s.startsWith('/')) {
+                s = s.substring(1);
+                var arr = s.split('/');
+                try {
+                    for (var arr_1 = __values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {
+                        var a = arr_1_1.value;
+                        if (a === '') {
+                            throw new Error('JSON Pointer must not contain an empty reference token');
+                        }
+                    }
+                }
+                catch (e_2_1) { e_2 = { error: e_2_1 }; }
+                finally {
+                    try {
+                        if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);
+                    }
+                    finally { if (e_2) throw e_2.error; }
+                }
+                return arr;
+            }
+            throw new Error('JSON Pointer must start with /');
+        };
+        return JsonPointer;
+    }());
+
+    /**
+     * default implementation that handles choices based on schema fields.
+     * can be overriden via schema.displayWith
+     */
+    var DefaultChoiceHandler = /** @class */ (function () {
+        /**
+         * create default choice handler
+         *
+         * @param http      http connection client
+         */
+        function DefaultChoiceHandler(http) {
+            this.http = http;
+        }
+        /**
+         * load choices
+         */
+        DefaultChoiceHandler.prototype.load = function (value, schema) {
+            var e_1, _b;
+            var _this = this;
+            if (!this.cache) {
+                if (schema.choices) {
+                    // static choices are given, convert them to Choice and merge the result
+                    var arr = [];
+                    try {
+                        for (var _c = __values(schema.choices), _d = _c.next(); !_d.done; _d = _c.next()) {
+                            var s = _d.value;
+                            arr.push(this.choice(s, schema));
+                        }
+                    }
+                    catch (e_1_1) { e_1 = { error: e_1_1 }; }
+                    finally {
+                        try {
+                            if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
+                        }
+                        finally { if (e_1) throw e_1.error; }
+                    }
+                    this.cache = rxjs.forkJoin(arr);
+                }
+                else {
+                    // load choices from URL
+                    this.cache = this.getChoices(schema.choicesUrl, schema.choicesUrlArgs, schema.choicesVerb).pipe(operators.switchMap(function (res) {
+                        var e_2, _b;
+                        if (schema.jsonata) {
+                            res = jsonata__default['default'](schema.jsonata).evaluate(res);
+                            if (!Array.isArray(res)) {
+                                res = [res];
+                                // introduce jsonName, jsonValue
+                            }
+                        }
+                        var obs = [];
+                        try {
+                            for (var res_1 = __values(res), res_1_1 = res_1.next(); !res_1_1.done; res_1_1 = res_1.next()) {
+                                var r = res_1_1.value;
+                                obs.push(_this.choice(r, schema));
+                            }
+                        }
+                        catch (e_2_1) { e_2 = { error: e_2_1 }; }
+                        finally {
+                            try {
+                                if (res_1_1 && !res_1_1.done && (_b = res_1.return)) _b.call(res_1);
+                            }
+                            finally { if (e_2) throw e_2.error; }
+                        }
+                        return rxjs.forkJoin(obs);
+                    }), 
+                    // setup caching
+                    operators.publishReplay(1), operators.refCount());
+                }
+            }
+            return this.cache;
+        };
+        /**
+         * filter after keystroke
+         */
+        DefaultChoiceHandler.prototype.filter = function (value, schema, current, choices) {
+            var _this = this;
+            return choices.pipe(operators.map(function (arr) {
+                if (!current) {
+                    return arr;
+                }
+                var res = arr.filter(function (i) { return _this.include(i, current); });
+                return res;
+            }));
+        };
+        /**
+         * called from filter, intended to allow subclasses to easily change filter algorithm
+         */
+        DefaultChoiceHandler.prototype.include = function (i, current) {
+            var _a;
+            return (_a = i.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(current.toLowerCase());
+        };
+        /**
+         * default choice implementation: just reuse value as name
+         * check for localName
+         */
+        DefaultChoiceHandler.prototype.choice = function (value, schema) {
+            var e_3, _b;
+            if (schema.displayWith === 'localName') {
+                try {
+                    for (var _c = __values(['/', '#', ':', '.']), _d = _c.next(); !_d.done; _d = _c.next()) {
+                        var delimiter = _d.value;
+                        var parts = value.split(delimiter);
+                        if (parts.length > 1) {
+                            return rxjs.of({ value: value, name: parts[parts.length - 1] });
+                        }
+                    }
+                }
+                catch (e_3_1) { e_3 = { error: e_3_1 }; }
+                finally {
+                    try {
+                        if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
+                    }
+                    finally { if (e_3) throw e_3.error; }
+                }
+                return rxjs.of({ value: value, name: value });
+            }
+            if (schema.jsonata) {
+                if (typeof value === 'object') {
+                    return rxjs.of(value);
+                }
+                else {
+                    // initially, value is a simple string
+                    return rxjs.of({ value: value, name: value });
+                }
+            }
+            if (schema.displayWithChoices) {
+                return rxjs.of({ value: value, name: schema.displayWithChoices[schema.choices.indexOf(value)] });
+            }
+            return rxjs.of({ value: value, name: value });
+        };
+        /**
+         * handle GET / POST
+         */
+        DefaultChoiceHandler.prototype.getChoices = function (url, args, verb) {
+            if (verb === 'GET') {
+                return this.http.get(url, args);
+            }
+            else {
+                return this.http.post(url, args, {
+                    headers: new i1.HttpHeaders({
+                        'Content-Type': 'application/json',
+                    })
+                });
+            }
+        };
+        /**
+         * default: no delay
+         */
+        DefaultChoiceHandler.prototype.debounceTime = function () {
+            return 0;
+        };
+        return DefaultChoiceHandler;
+    }());
+
+    /**
+     * dialog to edit a JSON node in a layout structure
+     */
+    var EditElementDialogComponent = /** @class */ (function () {
+        /**
+         * dialog constrcutor
+         * @param dialogRef   disloag ref
+         * @param data        data to edit
+         */
+        function EditElementDialogComponent(dialogRef, data) {
+            var _a;
+            this.dialogRef = dialogRef;
+            this.data = data;
+            this.schema = {
+                title: 'Edit form',
+                layout: 'vertical',
+                order: [
+                    ['widget', 'layout', 'itemlayout'],
+                    ['title', 'description'],
+                    ['example', 'readOnly'],
+                    ['required', 'format', 'errorMessage'],
+                    'choices', 'class', 'style'
+                ],
+                static: true,
+                type: 'object',
+                properties: {
+                    // description, class, style are always applicable
+                    description: { type: 'string', static: true, title: 'Description / tooltip' },
+                    class: { type: 'array', items: { type: 'string' }, layout: 'chips', style: { width: '365px' }, static: true, title: 'CSS classes' },
+                    style: { type: 'object', additionalProperties: { type: 'string' }, static: true, title: 'CSS styles' }
+                }
+            };
+            if (data.properties) {
+                // only show required and error message for objects
+                this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };
+                this.schema.properties.required = {
+                    choices: Object.keys(data.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,
+                    title: 'Required fields'
+                };
+                this.schema.properties.layout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Screen layout' };
+            }
+            else {
+                if (data.items) {
+                    this.schema.properties.layout = {
+                        type: 'string', enum: ['vertical', 'horizontal', 'select', 'tab', 'table', 'chips'],
+                        static: true, title: 'Screen Layout'
+                    };
+                    this.schema.properties.itemlayout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Item screen layout' };
+                }
+                if ((_a = data.items) === null || _a === void 0 ? void 0 : _a.properties) {
+                    // array of objects
+                    this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };
+                    this.schema.properties.required = {
+                        choices: Object.keys(data.items.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,
+                        title: 'Required fields'
+                    };
+                }
+                else {
+                    // array of simple types
+                    this.schema.properties.readOnly = {
+                        type: 'boolean', static: true, title: 'Read only value', style: { 'padding-top': '15px' }
+                    };
+                    this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };
+                    this.schema.properties.format = {
+                        type: 'string', static: true, title: 'Format',
+                        widget: 'select', choices: [null, 'email', 'ipv4', 'url', 'uri']
+                    };
+                    this.schema.properties.example = { type: 'string', static: true, title: 'Example data' };
+                    this.schema.properties.title = { type: 'string', static: true, title: 'Title' };
+                    this.schema.properties.widget = {
+                        type: 'string', enum: ['text', 'select', 'date', 'textarea', 'password'], static: true,
+                        title: 'Form widget'
+                    };
+                    this.schema.properties.choices = {
+                        type: 'array', items: { type: 'string' }, style: { width: '365px' },
+                        layout: 'chips', static: true, title: 'Input choices'
+                    };
+                }
+            }
+        }
+        return EditElementDialogComponent;
+    }());
+    EditElementDialogComponent.ɵfac = function EditElementDialogComponent_Factory(t) { return new (t || EditElementDialogComponent)(i0.ɵɵdirectiveInject(i1$1.MatDialogRef), i0.ɵɵdirectiveInject(i1$1.MAT_DIALOG_DATA)); };
+    EditElementDialogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: EditElementDialogComponent, selectors: [["lib-edit-element-dialog"]], decls: 7, vars: 4, consts: [[2, "padding-top", "10px"], [3, "value", "schema", "label", "valueChange"], ["align", "end"], ["mat-button", "", 3, "click"], ["mat-raised-button", "", "cdkFocusInitial", "", 3, "mat-dialog-close"]], template: function EditElementDialogComponent_Template(rf, ctx) {
+            if (rf & 1) {
+                i0.ɵɵelementStart(0, "mat-dialog-content", 0);
+                i0.ɵɵelementStart(1, "lib-json-schema-form", 1);
+                i0.ɵɵlistener("valueChange", function EditElementDialogComponent_Template_lib_json_schema_form_valueChange_1_listener($event) { return ctx.data = $event; });
+                i0.ɵɵelementEnd();
+                i0.ɵɵelementEnd();
+                i0.ɵɵelementStart(2, "mat-dialog-actions", 2);
+                i0.ɵɵelementStart(3, "button", 3);
+                i0.ɵɵlistener("click", function EditElementDialogComponent_Template_button_click_3_listener() { return ctx.dialogRef.close(); });
+                i0.ɵɵtext(4, "Cancel");
+                i0.ɵɵelementEnd();
+                i0.ɵɵelementStart(5, "button", 4);
+                i0.ɵɵtext(6, "Ok");
+                i0.ɵɵelementEnd();
+                i0.ɵɵelementEnd();
+            }
+            if (rf & 2) {
+                i0.ɵɵadvance(1);
+                i0.ɵɵproperty("value", ctx.data)("schema", ctx.schema)("label", ctx.schema.title);
+                i0.ɵɵadvance(4);
+                i0.ɵɵproperty("mat-dialog-close", ctx.data);
+            }
+        }, encapsulation: 2 });
+    (function () {
+        (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditElementDialogComponent, [{
+                type: i0.Component,
+                args: [{
+                        selector: 'lib-edit-element-dialog',
+                        templateUrl: './edit-element-dialog.component.html'
+                    }]
+            }], function () {
+            return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
+                            type: i0.Inject,
+                            args: [i1$1.MAT_DIALOG_DATA]
+                        }] }];
+        }, null);
+    })();
+
+    /**
+     * form editor - has a 1:1 relationship to form node
+     */
+    var Edit = /** @class */ (function () {
+        /**
+         * get access to parent object's fields
+         *
+         * @param schemaChange  signal a change
+         * @param name          the current property name (key)
+         * @param schema        the current schema
+         * @param parent        the parent's schema (required in order to change the order)
+         * @param dialog        dialog service
+         */
+        function Edit(schemaChange, name, schema, parent, dialog) {
+            this.schemaChange = schemaChange;
+            this.name = name;
+            this.schema = schema;
+            this.parent = parent;
+            this.dialog = dialog;
+        }
+        /**
+         * can add if addable is not empty
+         */
+        Edit.prototype.canAdd = function () {
+            return this.addable().length > 0;
+        };
+        /**
+         * get the entries in "properties" that are not in "order"
+         */
+        Edit.prototype.addable = function () {
+            var e_1, _d, e_2, _e;
+            var _a, _b;
+            var s;
+            if (this.schema.properties) {
+                s = this.schema;
+            }
+            else if ((_a = this.schema.items) === null || _a === void 0 ? void 0 : _a.properties) {
+                s = this.schema.items;
+            }
+            else if ((_b = this.schema.additionalProperties) === null || _b === void 0 ? void 0 : _b.properties) {
+                s = this.schema.additionalProperties;
+            }
+            else {
+                return [];
+            }
+            if (s.order) {
+                var set = new Set(Object.keys(s.properties));
+                try {
+                    for (var _f = __values(s.order), _g = _f.next(); !_g.done; _g = _f.next()) {
+                        var p = _g.value;
+                        if (Array.isArray(p)) {
+                            try {
+                                for (var p_1 = (e_2 = void 0, __values(p)), p_1_1 = p_1.next(); !p_1_1.done; p_1_1 = p_1.next()) {
+                                    var q = p_1_1.value;
+                                    set.delete(q);
+                                }
+                            }
+                            catch (e_2_1) { e_2 = { error: e_2_1 }; }
+                            finally {
+                                try {
+                                    if (p_1_1 && !p_1_1.done && (_e = p_1.return)) _e.call(p_1);
+                                }
+                                finally { if (e_2) throw e_2.error; }
+                            }
+                        }
+                        else {
+                            set.delete(p);
+                        }
+                    }
+                }
+                catch (e_1_1) { e_1 = { error: e_1_1 }; }
+                finally {
+                    try {
+                        if (_g && !_g.done && (_d = _f.return)) _d.call(_f);
+                    }
+                    finally { if (e_1) throw e_1.error; }
+                }
+                return Array.from(set);
+            }
+            else {
+                return [];
+            }
+        };
+        /**
+         * add a hidden prop to the end of the list
+         */
+        Edit.prototype.addSub = function (prop) {
+            var e_3, _d;
+            var index = this.parent.order.indexOf(this.name);
+            if (index >= 0) {
+                this.parent.order[index] = [this.parent.order[index], prop];
+            }
+            else {
+                try {
+                    for (var _e = __values(this.parent.order), _f = _e.next(); !_f.done; _f = _e.next()) {
+                        var p = _f.value;
+                        if (Array.isArray(p)) {
+                            if (p.indexOf(this.name) >= 0) {
+                                p.push(prop);
+                            }
+                        }
+                    }
+                }
+                catch (e_3_1) { e_3 = { error: e_3_1 }; }
+                finally {
+                    try {
+                        if (_f && !_f.done && (_d = _e.return)) _d.call(_e);
+                    }
+                    finally { if (e_3) throw e_3.error; }
+                }
+            }
+            this.schemaChange.emit();
+        };
+        /**
+         * can add if addable is not empty
+         */
+        Edit.prototype.canAddSub = function () {
+            return this.subaddable().length > 0;
+        };
+        /**
+         * get the entries in "properties" that are not in "order"
+         */
+        Edit.prototype.subaddable = function () {
+            var e_4, _d, e_5, _e;
+            var _a;
+            if ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.order) {
+                var set = new Set(Object.keys(this.parent.properties));
+                try {
+                    for (var _f = __values(this.parent.order), _g = _f.next(); !_g.done; _g = _f.next()) {
+                        var p = _g.value;
+                        if (Array.isArray(p)) {
+                            try {
+                                for (var p_2 = (e_5 = void 0, __values(p)), p_2_1 = p_2.next(); !p_2_1.done; p_2_1 = p_2.next()) {
+                                    var q = p_2_1.value;
+                                    set.delete(q);
+                                }
+                            }
+                            catch (e_5_1) { e_5 = { error: e_5_1 }; }
+                            finally {
+                                try {
+                                    if (p_2_1 && !p_2_1.done && (_e = p_2.return)) _e.call(p_2);
+                                }
+                                finally { if (e_5) throw e_5.error; }
+                            }
+                        }
+                        else {
+                            set.delete(p);
+                        }
+                    }
+                }
+                catch (e_4_1) { e_4 = { error: e_4_1 }; }
+                finally {
+                    try {
+                        if (_g && !_g.done && (_d = _f.return)) _d.call(_f);
+                    }
+                    finally { if (e_4) throw e_4.error; }
+                }
+                return Array.from(set);
+            }
+            else {
+                return [];
+            }
+        };
+        /**
+         * add a hidden prop to the end of the list
+         */
+        Edit.prototype.add = function (prop) {
+            var _a;
+            if (this.schema.properties) {
+                this.schema.order.push(prop);
+            }
+            else if ((_a = this.schema.items) === null || _a === void 0 ? void 0 : _a.properties) {
+                this.schema.items.order.push(prop);
+            }
+            else {
+                this.schema.additionalProperties.order.push(prop);
+            }
+            this.schemaChange.emit();
+        };
+        /**
+         * edit simple schema fields like title and description
+         */
+        Edit.prototype.edit = function () {
+            var _this = this;
+            var _a, _b, _c;
+            // deep clone object so we have the possibility to cancel editing
+            var clone = JSON.parse(JSON.stringify(this.schema));
+            // handle (array) example
+            if (((_b = (_a = clone.items) === null || _a === void 0 ? void 0 : _a.examples) === null || _b === void 0 ? void 0 : _b.length) > 0) {
+                clone.example = clone.items.examples[0];
+            }
+            if (((_c = clone.examples) === null || _c === void 0 ? void 0 : _c.length) > 0) {
+                clone.example = clone.examples[0];
+            }
+            // text is default
+            if (!clone.widget) {
+                clone.widget = 'text';
+            }
+            // horizontal is default
+            if (!clone.layout) {
+                clone.layout = 'horizontal';
+            }
+            // array: apply choices and widget to items
+            if (clone.items) {
+                clone.widget = clone.items.widget;
+                clone.choices = clone.items.choices;
+                clone.errorMessage = clone.items.errorMessage;
+                clone.format = clone.items.format;
+                clone.required = clone.items.required;
+                clone.itemlayout = clone.items.layout;
+            }
+            var dialogRef = this.dialog.open(EditElementDialogComponent, { minWidth: '50%', data: clone });
+            dialogRef.afterClosed().subscribe(function (data) {
+                var _a, _b;
+                if (data) {
+                    _this.schema.title = data.title;
+                    _this.schema.description = data.description;
+                    _this.schema.widget = data.widget;
+                    _this.schema.layout = data.layout;
+                    _this.schema.readOnly = data.readOnly;
+                    _this.schema.errorMessage = data.errorMessage;
+                    if (data.example) {
+                        if (data.items) {
+                            _this.schema.items.examples = [data.example];
+                        }
+                        else {
+                            _this.schema.examples = [data.example];
+                        }
+                    }
+                    if (data.style) {
+                        delete data.style[''];
+                    }
+                    if (data.style && Object.keys(data.style).length > 0) {
+                        _this.schema.style = data.style;
+                    }
+                    if (data.class) {
+                        data.class = data.class.filter(function (el) { return el != null; });
+                    }
+                    if (((_a = data.class) === null || _a === void 0 ? void 0 : _a.length) > 0) {
+                        _this.schema.class = data.class;
+                    }
+                    if (data.items) {
+                        if (((_b = data.choices) === null || _b === void 0 ? void 0 : _b.length) > 0) {
+                            _this.schema.items.choices = data.choices;
+                        }
+                        _this.schema.items.widget = data.widget;
+                        _this.schema.items.format = data.format;
+                        _this.schema.items.errorMessage = data.errorMessage;
+                        _this.schema.items.required = data.required;
+                        _this.schema.items.layout = data.itemlayout;
+                    }
+                    else {
+                        _this.schema.choices = data.choices;
+                        _this.schema.widget = data.widget;
+                        _this.schema.format = data.format;
+                        _this.schema.errorMessage = data.errorMessage;
+                        _this.schema.required = data.required;
+                    }
+                    _this.schemaChange.emit();
+                }
+            });
+        };
+        /**
+         * can hide if I my parent is an object
+         */
+        Edit.prototype.canHide = function () {
+            return this.parent ? true : false;
+        };
+        /**
+         * hide this prop
+         */
+        Edit.prototype.hide = function () {
+            var e_6, _d;
+            if (!this.parent.order) {
+                this.parent.order = Object.keys(this.parent.properties);
+            }
+            var index = 0;
+            try {
+                for (var _e = __values(this.parent.order), _f = _e.next(); !_f.done; _f = _e.next()) {
+                    var p = _f.value;
+                    if (Array.isArray(p)) {
+                        if (p.indexOf(this.name) >= 0) {
+                            p.splice(p.indexOf(this.name), 1);
+                            if (p.length === 1) {
+                                this.parent.order[index] = p[0];
+                            }
+                        }
+                    }
+                    index++;
+                }
+            }
+            catch (e_6_1) { e_6 = { error: e_6_1 }; }
+            finally {
+                try {
+                    if (_f && !_f.done && (_d = _e.return)) _d.call(_e);
+                }
+                finally { if (e_6) throw e_6.error; }
+            }
+            if (this.parent.order.indexOf(this.name) >= 0) {
+                this.parent.order.splice(this.parent.order.indexOf(this.name), 1);
+            }
+            this.schemaChange.emit();
+        };
+        /**
+         * can I go up
+         */
+        Edit.prototype.canUp = function () {
+            var e_7, _d;
+            if (!this.parent) {
+                return false;
+            }
+            var props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);
+            var index = props.indexOf(this.name);
+            if (index >= 0) {
+                return index > 0;
+            }
+            else {
+                try {
+                    for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {
+                        var p = props_1_1.value;
+                        if (Array.isArray(p)) {
+                            if (p.indexOf(this.name) >= 0) {
+                                return p.indexOf(this.name) > 0;
+                            }
+                        }
+                    }
+                }
+                catch (e_7_1) { e_7 = { error: e_7_1 }; }
+                finally {
+                    try {
+                        if (props_1_1 && !props_1_1.done && (_d = props_1.return)) _d.call(props_1);
+                    }
+                    finally { if (e_7) throw e_7.error; }
+                }
+            }
+        };
+        /**
+         * go up
+         */
+        Edit.prototype.up = function () {
+            var e_8, _d;
+            if (!this.parent.order) {
+                this.parent.order = Object.keys(this.parent.properties);
+            }
+            var index = this.parent.order.indexOf(this.name);
+            if (index >= 0) {
+                var tmp = this.parent.order[index - 1];
+                this.parent.order[index - 1] = this.parent.order[index];
+                this.parent.order[index] = tmp;
+            }
+            else {
+                try {
+                    for (var _e = __values(this.parent.order), _f = _e.next(); !_f.done; _f = _e.next()) {
+                        var p = _f.value;
+                        if (Array.isArray(p)) {
+                            index = p.indexOf(this.name);
+                            if (index >= 0) {
+                                var tmp = p[index - 1];
+                                p[index - 1] = p[index];
+                                p[index] = tmp;
+                            }
+                        }
+                    }
+                }
+                catch (e_8_1) { e_8 = { error: e_8_1 }; }
+                finally {
+                    try {
+                        if (_f && !_f.done && (_d = _e.return)) _d.call(_e);
+                    }
+                    finally { if (e_8) throw e_8.error; }
+                }
+            }
+            this.schemaChange.emit();
+        };
+        /**
+         * can I go down
+         */
+        Edit.prototype.canDown = function () {
+            var e_9, _d;
+            if (!this.parent) {
+                return false;
+            }
+            var props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);
+            var index = props.indexOf(this.name);
+            if (index >= 0) {
+                return index < props.length - 1;
+            }
+            else {
+                try {
+                    for (var props_2 = __values(props), props_2_1 = props_2.next(); !props_2_1.done; props_2_1 = props_2.next()) {
+                        var p = props_2_1.value;
+                        if (Array.isArray(p)) {
+                            if (p.indexOf(this.name) >= 0) {
+                                return p.indexOf(this.name) < p.length - 1;
+                            }
+                        }
+                    }
+                }
+                catch (e_9_1) { e_9 = { error: e_9_1 }; }
+                finally {
+                    try {
+                        if (props_2_1 && !props_2_1.done && (_d = props_2.return)) _d.call(props_2);
+                    }
+                    finally { if (e_9) throw e_9.error; }
+                }
+            }
+        };
+        /**
+         * go down
+         */
+        Edit.prototype.down = function () {
+            var e_10, _d;
+            if (!this.parent.order) {
+                this.parent.order = Object.keys(this.parent.properties);
+            }
+            var index = this.parent.order.indexOf(this.name);
+            if (index >= 0) {
+                var tmp = this.parent.order[index + 1];
+                this.parent.order[index + 1] = this.parent.order[index];
+                this.parent.order[index] = tmp;
+            }
+            else {
+                try {
+                    for (var _e = __values(this.parent.order), _f = _e.next(); !_f.done; _f = _e.next()) {
+                        var p = _f.value;
+                        if (Array.isArray(p)) {
+                            index = p.indexOf(this.name);
+                            if (index >= 0) {
+                                var tmp = p[index + 1];
+                                p[index + 1] = p[index];
+                                p[index] = tmp;
+                            }
+                        }
+                    }
+                }
+                catch (e_10_1) { e_10 = { error: e_10_1 }; }
+                finally {
+                    try {
+                        if (_f && !_f.done && (_d = _e.return)) _d.call(_e);
+                    }
+                    finally { if (e_10) throw e_10.error; }
+                }
+            }
+            this.schemaChange.emit();
+        };
+        return Edit;
+    }());
+
+    var _c0 = ["child"];
+    var _c1 = ["children"];
+    function JsonSchemaFormComponent_mat_expansion_panel_0_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r5_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "mat-expansion-panel", 3);
+            i0.ɵɵelementStart(1, "mat-expansion-panel-header");
+            i0.ɵɵelementStart(2, "mat-panel-title");
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(4, "mat-panel-description");
+            i0.ɵɵtext(5);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(6, "lib-json-schema-form", 4, 5);
+            i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_mat_expansion_panel_0_Template_lib_json_schema_form_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r5_1); var ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.setAndEmit($event); })("schemaChange", function JsonSchemaFormComponent_mat_expansion_panel_0_Template_lib_json_schema_form_schemaChange_6_listener() { i0.ɵɵrestoreView(_r5_1); var ctx_r6 = i0.ɵɵnextContext(); return ctx_r6.schemaChange.emit(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r0 = i0.ɵɵnextContext();
+            i0.ɵɵproperty("ngStyle", ctx_r0.schema.style)("ngClass", ctx_r0.schema.class)("expanded", ctx_r0.schema.expanded);
+            i0.ɵɵadvance(3);
+            i0.ɵɵtextInterpolate(ctx_r0.label);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r0.schema.description);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("label", ctx_r0.label)("name", ctx_r0.name)("value", ctx_r0.value)("switch", ctx_r0.switch)("rootValue", ctx_r0.rootValue)("rootSchema", ctx_r0.rootSchema)("schema", ctx_r0.schema)("inExpansion", true)("base", ctx_r0.base);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_1_button_31_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r30_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 14);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_button_31_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r30_1); var x_r28 = ctx.$implicit; var ctx_r29 = i0.ɵɵnextContext(3); return ctx_r29.edit.add(x_r28); });
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r28 = ctx.$implicit;
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate(x_r28);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_1_button_34_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r33_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 14);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_button_34_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r33_1); var x_r31 = ctx.$implicit; var ctx_r32 = i0.ɵɵnextContext(3); return ctx_r32.edit.addSub(x_r31); });
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r31 = ctx.$implicit;
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate(x_r31);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r35_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "mat-icon", 12);
+            i0.ɵɵtext(2, " more_vert ");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(3, "mat-menu", null, 13);
+            i0.ɵɵelementStart(5, "button", 14);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r35_1); var ctx_r34 = i0.ɵɵnextContext(2); return ctx_r34.edit.edit(); });
+            i0.ɵɵelementStart(6, "mat-icon");
+            i0.ɵɵtext(7, "edit");
+            i0.ɵɵelementEnd();
+            i0.ɵɵtext(8, "Edit ");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(9, "button", 15);
+            i0.ɵɵelementStart(10, "mat-icon");
+            i0.ɵɵtext(11, "add");
+            i0.ɵɵelementEnd();
+            i0.ɵɵtext(12, "Show ");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(13, "button", 15);
+            i0.ɵɵelementStart(14, "mat-icon");
+            i0.ɵɵtext(15, "playlist_add");
+            i0.ɵɵelementEnd();
+            i0.ɵɵtext(16, "Show inline ");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(17, "button", 16);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r35_1); var ctx_r36 = i0.ɵɵnextContext(2); return ctx_r36.edit.hide(); });
+            i0.ɵɵelementStart(18, "mat-icon");
+            i0.ɵɵtext(19, "remove");
+            i0.ɵɵelementEnd();
+            i0.ɵɵtext(20, "Hide ");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(21, "button", 16);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r35_1); var ctx_r37 = i0.ɵɵnextContext(2); return ctx_r37.edit.up(); });
+            i0.ɵɵelementStart(22, "mat-icon");
+            i0.ɵɵtext(23, "north_west");
+            i0.ɵɵelementEnd();
+            i0.ɵɵtext(24, "Up / Left ");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(25, "button", 16);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r35_1); var ctx_r38 = i0.ɵɵnextContext(2); return ctx_r38.edit.down(); });
+            i0.ɵɵelementStart(26, "mat-icon");
+            i0.ɵɵtext(27, "south_east");
+            i0.ɵɵelementEnd();
+            i0.ɵɵtext(28, "Down / Right ");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(29, "mat-menu", null, 17);
+            i0.ɵɵtemplate(31, JsonSchemaFormComponent_div_1_div_1_button_31_Template, 2, 1, "button", 18);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(32, "mat-menu", null, 19);
+            i0.ɵɵtemplate(34, JsonSchemaFormComponent_div_1_div_1_button_34_Template, 2, 1, "button", 18);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var _r23 = i0.ɵɵreference(4);
+            var _r24 = i0.ɵɵreference(30);
+            var _r26 = i0.ɵɵreference(33);
+            var ctx_r7 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("matMenuTriggerFor", _r23)("matTooltip", ctx_r7.name ? "Form element " + ctx_r7.name : ctx_r7.isRoot ? "Form root" : "");
+            i0.ɵɵadvance(8);
+            i0.ɵɵproperty("disabled", !ctx_r7.edit.canAdd())("matMenuTriggerFor", _r24);
+            i0.ɵɵadvance(4);
+            i0.ɵɵproperty("disabled", !ctx_r7.edit.canAddSub())("matMenuTriggerFor", _r26);
+            i0.ɵɵadvance(4);
+            i0.ɵɵproperty("disabled", !ctx_r7.edit.canHide());
+            i0.ɵɵadvance(4);
+            i0.ɵɵproperty("disabled", !ctx_r7.edit.canUp());
+            i0.ɵɵadvance(4);
+            i0.ɵɵproperty("disabled", !ctx_r7.edit.canDown());
+            i0.ɵɵadvance(6);
+            i0.ɵɵproperty("ngForOf", ctx_r7.edit.addable());
+            i0.ɵɵadvance(3);
+            i0.ɵɵproperty("ngForOf", ctx_r7.edit.subaddable());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r48_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "lib-json-schema-form", 26, 27);
+            i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r48_1); var x_r43 = i0.ɵɵnextContext().$implicit; var ctx_r46 = i0.ɵɵnextContext(4); return ctx_r46.onValueChange(x_r43.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r48_1); var ctx_r49 = i0.ɵɵnextContext(5); return ctx_r49.schemaChange.emit(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r43 = i0.ɵɵnextContext().$implicit;
+            var ctx_r44 = i0.ɵɵnextContext(4);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("name", x_r43.key)("label", x_r43.value.title ? x_r43.value.title : x_r43.key)("value", ctx_r44.value ? ctx_r44.value[x_r43.key] : undefined)("switch", ctx_r44.value ? ctx_r44.value[ctx_r44.schema.switch] : undefined)("rootValue", ctx_r44.rootValue)("rootSchema", ctx_r44.rootSchema)("schema", x_r43.value)("parentSchema", ctx_r44.schema)("required", ctx_r44.schema.required ? ctx_r44.schema.required.includes(x_r43.key) : false)("hideUndefined", ctx_r44.schema.hideUndefined)("base", ctx_r44.base);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "div", 25);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template, 3, 11, "div", 7);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r43 = ctx.$implicit;
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", x_r43.value && (x_r43.value.type || x_r43.value.$ref));
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_2_div_1_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "div", 23);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_div_1_Template, 2, 1, "div", 24);
+            i0.ɵɵpipe(2, "keyvalue");
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var op_r41 = ctx.$implicit;
+            var ctx_r39 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("fxLayout", ctx_r39.schema.layout !== "vertical" ? "column" : "row wrap");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 2, op_r41, ctx_r39.originalOrder));
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r55_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "mat-checkbox", 31);
+            i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template_mat_checkbox_change_1_listener() { i0.ɵɵrestoreView(_r55_1); var x_r53 = ctx.$implicit; var ctx_r54 = i0.ɵɵnextContext(4); return ctx_r54.showProperty(x_r53); });
+            i0.ɵɵtext(2);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r53 = ctx.$implicit;
+            var ctx_r52 = i0.ɵɵnextContext(4);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("disabled", ctx_r52.value ? ctx_r52.value[x_r53] : false)("checked", ctx_r52.value && ctx_r52.value[x_r53] !== undefined);
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate1(" ", x_r53, " ");
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_2_div_2_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "div", 28);
+            i0.ɵɵelementStart(1, "button", 29);
+            i0.ɵɵelementStart(2, "mat-icon");
+            i0.ɵɵtext(3, "more_vert");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(4, "mat-menu", null, 13);
+            i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template, 3, 3, "div", 30);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var _r51 = i0.ɵɵreference(5);
+            var ctx_r40 = i0.ɵɵnextContext(3);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("matMenuTriggerFor", _r51);
+            i0.ɵɵadvance(5);
+            i0.ɵɵproperty("ngForOf", ctx_r40.showPropertyList());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_2_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "span", 20);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_Template, 3, 5, "div", 21);
+            i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_2_div_2_Template, 7, 2, "div", 22);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r8 = i0.ɵɵnextContext(2);
+            i0.ɵɵproperty("fxLayout", ctx_r8.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r8.schema.style)("ngClass", ctx_r8.schema.class);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", ctx_r8.orderedProperties);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r8.schema.hideUndefined);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r64_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 38);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r64_1); var x_r58 = i0.ɵɵnextContext().$implicit; var ctx_r62 = i0.ɵɵnextContext(3); return ctx_r62.removeField(x_r58.key); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "remove_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r61 = i0.ɵɵnextContext(4);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r61.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_3_div_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r66_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div", 34);
+            i0.ɵɵlistener("mouseenter", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_div_mouseenter_0_listener() { i0.ɵɵrestoreView(_r66_1); var i_r59 = ctx.index; var ctx_r65 = i0.ɵɵnextContext(3); return ctx_r65.hover = i_r59; })("mouseleave", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_div_mouseleave_0_listener() { i0.ɵɵrestoreView(_r66_1); var ctx_r67 = i0.ɵɵnextContext(3); return ctx_r67.hover = null; });
+            i0.ɵɵelementStart(1, "mat-form-field");
+            i0.ɵɵelementStart(2, "mat-label");
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(4, "input", 35);
+            i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r66_1); var x_r58 = ctx.$implicit; var ctx_r68 = i0.ɵɵnextContext(3); return ctx_r68.fieldNameChange(x_r58.key, $event.target.value); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵtext(5, " \u00A0 ");
+            i0.ɵɵelementStart(6, "lib-json-schema-form", 36, 27);
+            i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_lib_json_schema_form_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r66_1); var x_r58 = ctx.$implicit; var ctx_r69 = i0.ɵɵnextContext(3); return ctx_r69.onValueChange(x_r58.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_lib_json_schema_form_schemaChange_6_listener() { i0.ɵɵrestoreView(_r66_1); var ctx_r70 = i0.ɵɵnextContext(3); return ctx_r70.schemaChange.emit(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(8, JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template, 3, 1, "button", 37);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r58 = ctx.$implicit;
+            var ctx_r56 = i0.ɵɵnextContext(3);
+            i0.ɵɵadvance(3);
+            i0.ɵɵtextInterpolate1("", ctx_r56.getLabel(), " key");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("disabled", ctx_r56.readOnly)("value", x_r58.key);
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("label", ctx_r56.getLabel() + " value")("value", ctx_r56.value[x_r58.key])("rootValue", ctx_r56.rootValue)("rootSchema", ctx_r56.rootSchema)("schema", ctx_r56.schema.additionalProperties)("base", ctx_r56.base);
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("ngIf", !ctx_r56.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_3_button_3_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r72_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 39);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_3_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r72_1); var ctx_r71 = i0.ɵɵnextContext(3); return ctx_r71.addField(); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "add_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r57 = i0.ɵɵnextContext(3);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r57.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_3_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "span", 20);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_3_div_1_Template, 9, 10, "div", 32);
+            i0.ɵɵpipe(2, "keyvalue");
+            i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_3_button_3_Template, 3, 1, "button", 33);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r9 = i0.ɵɵnextContext(2);
+            i0.ɵɵproperty("fxLayout", ctx_r9.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r9.schema.style)("ngClass", ctx_r9.schema.class);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 5, ctx_r9.value, ctx_r9.originalOrder));
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("ngIf", !ctx_r9.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r84_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "mat-form-field");
+            i0.ɵɵelementStart(1, "input", 45);
+            i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r84_1); var x_r75 = i0.ɵɵnextContext(2).$implicit; var ctx_r82 = i0.ɵɵnextContext(3); return ctx_r82.fieldNameChange(x_r75.key, $event.target.value); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r75 = i0.ɵɵnextContext(2).$implicit;
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("value", x_r75.key);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_span_1_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "span");
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r75 = i0.ɵɵnextContext(2).$implicit;
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate(x_r75.key);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵtemplate(0, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template, 2, 1, "mat-form-field", 7);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_span_1_Template, 2, 1, "span", 7);
+        }
+        if (rf & 2) {
+            var ctx_r77 = i0.ɵɵnextContext(4);
+            i0.ɵɵproperty("ngIf", !ctx_r77.readOnly);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r77.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r89_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 38);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r89_1); var x_r75 = i0.ɵɵnextContext().$implicit; var ctx_r87 = i0.ɵɵnextContext(3); return ctx_r87.removeField(x_r75.key); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "remove_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r79 = i0.ɵɵnextContext(4);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r79.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r91_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "mat-tab", 42);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_Template, 2, 2, "ng-template", 43);
+            i0.ɵɵelementStart(2, "lib-json-schema-form", 44, 27);
+            i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template_lib_json_schema_form_valueChange_2_listener($event) { i0.ɵɵrestoreView(_r91_1); var x_r75 = ctx.$implicit; var ctx_r90 = i0.ɵɵnextContext(3); return ctx_r90.onValueChange(x_r75.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template_lib_json_schema_form_schemaChange_2_listener() { i0.ɵɵrestoreView(_r91_1); var ctx_r92 = i0.ɵɵnextContext(3); return ctx_r92.schemaChange.emit(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template, 3, 1, "button", 37);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r75 = ctx.$implicit;
+            var ctx_r73 = i0.ɵɵnextContext(3);
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("value", ctx_r73.value[x_r75.key])("rootValue", ctx_r73.rootValue)("rootSchema", ctx_r73.rootSchema)("schema", ctx_r73.schema.additionalProperties)("base", ctx_r73.base);
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("ngIf", !ctx_r73.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r95_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 39);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r95_1); var ctx_r94 = i0.ɵɵnextContext(4); return ctx_r94.addField(); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "add_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r93 = i0.ɵɵnextContext(4);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r93.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-tab");
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template, 3, 1, "ng-template", 43);
+            i0.ɵɵelementEnd();
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_4_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-tab-group", 40);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template, 5, 6, "mat-tab", 41);
+            i0.ɵɵpipe(2, "keyvalue");
+            i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_Template, 2, 0, "mat-tab", 7);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r10 = i0.ɵɵnextContext(2);
+            i0.ɵɵproperty("ngStyle", ctx_r10.schema.style)("ngClass", ctx_r10.schema.class);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 4, ctx_r10.value, ctx_r10.originalOrder));
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("ngIf", !ctx_r10.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r104_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 38);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r104_1); var i_r99 = i0.ɵɵnextContext().index; var ctx_r102 = i0.ɵɵnextContext(3); return ctx_r102.remove(i_r99); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "remove_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r101 = i0.ɵɵnextContext(4);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r101.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_5_div_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r106_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div", 34);
+            i0.ɵɵlistener("mouseenter", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_div_mouseenter_0_listener() { i0.ɵɵrestoreView(_r106_1); var i_r99 = ctx.index; var ctx_r105 = i0.ɵɵnextContext(3); return ctx_r105.hover = i_r99; })("mouseleave", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_div_mouseleave_0_listener() { i0.ɵɵrestoreView(_r106_1); var ctx_r107 = i0.ɵɵnextContext(3); return ctx_r107.hover = null; });
+            i0.ɵɵelementStart(1, "lib-json-schema-form", 36, 27);
+            i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r106_1); var i_r99 = ctx.index; var ctx_r108 = i0.ɵɵnextContext(3); return ctx_r108.setIndexAndEmit(i_r99, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r106_1); var ctx_r109 = i0.ɵɵnextContext(3); return ctx_r109.schemaChange.emit(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template, 3, 1, "button", 37);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var i_r99 = ctx.index;
+            var ctx_r96 = i0.ɵɵnextContext(3);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("label", ctx_r96.getLabel())("value", ctx_r96.value[i_r99])("rootValue", ctx_r96.rootValue)("rootSchema", ctx_r96.rootSchema)("schema", ctx_r96.schema.items)("base", ctx_r96.base);
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("ngIf", !ctx_r96.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_5_button_2_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r111_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 39);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_5_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r111_1); var ctx_r110 = i0.ɵɵnextContext(3); return ctx_r110.add(); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "add_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r97 = i0.ɵɵnextContext(3);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r97.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_5_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "span", 20);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_5_div_1_Template, 4, 7, "div", 32);
+            i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_5_button_2_Template, 3, 1, "button", 33);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r11 = i0.ɵɵnextContext(2);
+            i0.ɵɵproperty("fxLayout", ctx_r11.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r11.schema.style)("ngClass", ctx_r11.schema.class);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", ctx_r11.value);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", !ctx_r11.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r116_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "mat-chip", 51);
+            i0.ɵɵlistener("removed", function JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template_mat_chip_removed_0_listener() { i0.ɵɵrestoreView(_r116_1); var v_r114 = ctx.$implicit; var ctx_r115 = i0.ɵɵnextContext(3); return ctx_r115.removeChip(v_r114); });
+            i0.ɵɵtext(1);
+            i0.ɵɵelementStart(2, "mat-icon", 52);
+            i0.ɵɵtext(3, "cancel");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var v_r114 = ctx.$implicit;
+            var ctx_r113 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("removable", !ctx_r113.readOnly);
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate1(" ", v_r114, " ");
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_6_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r118_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "span");
+            i0.ɵɵelementStart(1, "mat-form-field", 46);
+            i0.ɵɵelementStart(2, "mat-chip-list", 47, 48);
+            i0.ɵɵlistener("cdkDropListDropped", function JsonSchemaFormComponent_div_1_span_6_Template_mat_chip_list_cdkDropListDropped_2_listener($event) { i0.ɵɵrestoreView(_r118_1); var ctx_r117 = i0.ɵɵnextContext(2); return ctx_r117.dropChip($event); });
+            i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template, 4, 2, "mat-chip", 49);
+            i0.ɵɵelementStart(5, "input", 50);
+            i0.ɵɵlistener("matChipInputTokenEnd", function JsonSchemaFormComponent_div_1_span_6_Template_input_matChipInputTokenEnd_5_listener($event) { i0.ɵɵrestoreView(_r118_1); var ctx_r119 = i0.ɵɵnextContext(2); return ctx_r119.addChip($event); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var _r112 = i0.ɵɵreference(3);
+            var ctx_r12 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngStyle", ctx_r12.schema.style)("ngClass", ctx_r12.schema.class);
+            i0.ɵɵadvance(3);
+            i0.ɵɵproperty("ngForOf", ctx_r12.value);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("placeholder", ctx_r12.schema.title)("matChipInputFor", _r112)("matChipInputSeparatorKeyCodes", ctx_r12.separatorKeysCodes)("disabled", ctx_r12.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r128_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 38);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r128_1); var i_r123 = i0.ɵɵnextContext().index; var ctx_r126 = i0.ɵɵnextContext(3); return ctx_r126.remove(i_r123); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "remove_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r125 = i0.ɵɵnextContext(4);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r125.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r130_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "mat-tab", 54);
+            i0.ɵɵelementStart(1, "lib-json-schema-form", 44, 27);
+            i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r130_1); var i_r123 = ctx.index; var ctx_r129 = i0.ɵɵnextContext(3); return ctx_r129.setIndexAndEmit(i_r123, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r130_1); var ctx_r131 = i0.ɵɵnextContext(3); return ctx_r131.schemaChange.emit(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template, 3, 1, "button", 37);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var i_r123 = ctx.index;
+            var ctx_r120 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("label", ctx_r120.getLabel() + " " + i_r123);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("value", ctx_r120.value[i_r123])("rootValue", ctx_r120.rootValue)("rootSchema", ctx_r120.rootSchema)("schema", ctx_r120.schema.items)("base", ctx_r120.base);
+            i0.ɵɵadvance(2);
+            i0.ɵɵproperty("ngIf", !ctx_r120.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r134_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 39);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r134_1); var ctx_r133 = i0.ɵɵnextContext(4); return ctx_r133.add(); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "add_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r132 = i0.ɵɵnextContext(4);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r132.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-tab");
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template, 3, 1, "ng-template", 43);
+            i0.ɵɵelementEnd();
+        }
+    }
+    function JsonSchemaFormComponent_div_1_mat_tab_group_7_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-tab-group", 40);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template, 4, 7, "mat-tab", 53);
+            i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_Template, 2, 0, "mat-tab", 7);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r13 = i0.ɵɵnextContext(2);
+            i0.ɵɵproperty("ngStyle", ctx_r13.schema.style)("ngClass", ctx_r13.schema.class);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", ctx_r13.value);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", !ctx_r13.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_8_th_3_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "th", 58);
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r138 = ctx.$implicit;
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate1(" ", x_r138.value.title ? x_r138.value.title : x_r138.key, "");
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r147_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "td");
+            i0.ɵɵelementStart(1, "lib-json-schema-form", 59, 27);
+            i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r147_1); var x_r143 = ctx.$implicit; var i_r140 = i0.ɵɵnextContext().index; var ctx_r145 = i0.ɵɵnextContext(3); return ctx_r145.setIndexAndEmitTable(i_r140, x_r143.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r147_1); var ctx_r148 = i0.ɵɵnextContext(4); return ctx_r148.schemaChange.emit(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r143 = ctx.$implicit;
+            var row_r139 = i0.ɵɵnextContext().$implicit;
+            var ctx_r141 = i0.ɵɵnextContext(3);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("value", row_r139[x_r143.key])("rootValue", ctx_r141.rootValue)("rootSchema", ctx_r141.rootSchema)("schema", ctx_r141.schema.items.properties[x_r143.key])("base", ctx_r141.base);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r152_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 39);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r152_1); var i_r140 = i0.ɵɵnextContext().index; var ctx_r150 = i0.ɵɵnextContext(3); return ctx_r150.remove(i_r140); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "remove_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r142 = i0.ɵɵnextContext(4);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r142.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_8_tr_6_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "tr");
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template, 3, 5, "td", 30);
+            i0.ɵɵpipe(2, "keyvalue");
+            i0.ɵɵelementStart(3, "td");
+            i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template, 3, 1, "button", 33);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r136 = i0.ɵɵnextContext(3);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 2, ctx_r136.schema.items.properties, ctx_r136.originalOrder));
+            i0.ɵɵadvance(3);
+            i0.ɵɵproperty("ngIf", !ctx_r136.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_8_button_7_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r154_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "button", 39);
+            i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_8_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r154_1); var ctx_r153 = i0.ɵɵnextContext(3); return ctx_r153.add(); });
+            i0.ɵɵelementStart(1, "mat-icon");
+            i0.ɵɵtext(2, "add_circle_outline");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r137 = i0.ɵɵnextContext(3);
+            i0.ɵɵpropertyInterpolate("matTooltip", ctx_r137.getLabel());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_span_8_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "span", 46);
+            i0.ɵɵelementStart(1, "table", 55);
+            i0.ɵɵelementStart(2, "tr");
+            i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_8_th_3_Template, 2, 1, "th", 56);
+            i0.ɵɵpipe(4, "keyvalue");
+            i0.ɵɵelement(5, "th", 57);
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_8_tr_6_Template, 5, 5, "tr", 30);
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(7, JsonSchemaFormComponent_div_1_span_8_button_7_Template, 3, 1, "button", 33);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r14 = i0.ɵɵnextContext(2);
+            i0.ɵɵproperty("ngStyle", ctx_r14.schema.style)("ngClass", ctx_r14.schema.class);
+            i0.ɵɵadvance(3);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(4, 5, ctx_r14.schema.items.properties, ctx_r14.originalOrder));
+            i0.ɵɵadvance(3);
+            i0.ɵɵproperty("ngForOf", ctx_r14.value);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", !ctx_r14.readOnly);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_9_mat_option_5_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-option", 63);
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var x_r156 = ctx.$implicit;
+            i0.ɵɵproperty("value", x_r156);
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate(x_r156);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_9_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r158_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "mat-form-field", 46);
+            i0.ɵɵelementStart(2, "mat-label");
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(4, "mat-select", 60);
+            i0.ɵɵlistener("selectionChange", function JsonSchemaFormComponent_div_1_div_9_Template_mat_select_selectionChange_4_listener($event) { i0.ɵɵrestoreView(_r158_1); var ctx_r157 = i0.ɵɵnextContext(2); return ctx_r157.change($event); });
+            i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_9_mat_option_5_Template, 2, 2, "mat-option", 61);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(6, "p", 62);
+            i0.ɵɵtext(7);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r15 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngStyle", ctx_r15.schema.style)("ngClass", ctx_r15.schema.class);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r15.label);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("value", ctx_r15.value)("disabled", ctx_r15.readOnly);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", ctx_r15.schema.enum);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r15.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_10_mat_option_5_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-option", 67);
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var choice_r160 = ctx.$implicit;
+            i0.ɵɵproperty("value", choice_r160.value)("matTooltip", choice_r160.name !== choice_r160.value ? choice_r160.value : null);
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate1(" ", choice_r160.name, " ");
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_10_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r162_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "mat-form-field", 64);
+            i0.ɵɵelementStart(2, "mat-label");
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(4, "mat-select", 65);
+            i0.ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_10_Template_mat_select_focus_4_listener() { i0.ɵɵrestoreView(_r162_1); var ctx_r161 = i0.ɵɵnextContext(2); return ctx_r161.focus(); })("selectionChange", function JsonSchemaFormComponent_div_1_div_10_Template_mat_select_selectionChange_4_listener($event) { i0.ɵɵrestoreView(_r162_1); var ctx_r163 = i0.ɵɵnextContext(2); return ctx_r163.change($event); });
+            i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_10_mat_option_5_Template, 2, 3, "mat-option", 66);
+            i0.ɵɵpipe(6, "async");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(7, "p", 62);
+            i0.ɵɵtext(8);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r16 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("matTooltip", ctx_r16.schema.description)("ngStyle", ctx_r16.schema.style)("ngClass", ctx_r16.schema.class);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r16.label);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("value", ctx_r16.value)("disabled", ctx_r16.readOnly);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(6, 8, ctx_r16.choices));
+            i0.ɵɵadvance(3);
+            i0.ɵɵtextInterpolate(ctx_r16.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_11_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r166_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "mat-form-field", 46);
+            i0.ɵɵelementStart(2, "mat-label");
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(4, "input", 68);
+            i0.ɵɵlistener("dateChange", function JsonSchemaFormComponent_div_1_div_11_Template_input_dateChange_4_listener($event) { i0.ɵɵrestoreView(_r166_1); var ctx_r165 = i0.ɵɵnextContext(2); return ctx_r165.change($event); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelement(5, "mat-datepicker-toggle", 69);
+            i0.ɵɵelement(6, "mat-datepicker", null, 70);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(8, "p", 62);
+            i0.ɵɵtext(9);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var _r164 = i0.ɵɵreference(7);
+            var ctx_r17 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngStyle", ctx_r17.schema.style)("ngClass", ctx_r17.schema.class);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r17.label);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("value", ctx_r17.parseDate(ctx_r17.value, ctx_r17.schema.dateFormat))("matDatepicker", _r164)("disabled", ctx_r17.readOnly);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("for", _r164);
+            i0.ɵɵadvance(4);
+            i0.ɵɵtextInterpolate(ctx_r17.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_12_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r168_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div", 71);
+            i0.ɵɵelementStart(1, "mat-checkbox", 72);
+            i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_12_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r168_1); var ctx_r167 = i0.ɵɵnextContext(2); return ctx_r167.change($event); });
+            i0.ɵɵtext(2);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(3, "p", 62);
+            i0.ɵɵtext(4);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r18 = i0.ɵɵnextContext(2);
+            i0.ɵɵproperty("ngStyle", ctx_r18.schema.style)("ngClass", ctx_r18.schema.class);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("checked", ctx_r18.value)("disabled", ctx_r18.readOnly);
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate1(" ", ctx_r18.label, "");
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r18.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_mat_option_4_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-option", 67);
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var choice_r172 = ctx.$implicit;
+            i0.ɵɵproperty("value", choice_r172.value)("matTooltip", choice_r172.name !== choice_r172.value ? choice_r172.value : null);
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate1(" ", choice_r172.name, " ");
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r174_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "mat-form-field", 46);
+            i0.ɵɵelementStart(1, "mat-label");
+            i0.ɵɵtext(2);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(3, "mat-select", 73);
+            i0.ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template_mat_select_focus_3_listener() { i0.ɵɵrestoreView(_r174_1); var ctx_r173 = i0.ɵɵnextContext(3); return ctx_r173.focus(); })("selectionChange", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template_mat_select_selectionChange_3_listener($event) { i0.ɵɵrestoreView(_r174_1); var ctx_r175 = i0.ɵɵnextContext(3); return ctx_r175.change($event); });
+            i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_mat_option_4_Template, 2, 3, "mat-option", 66);
+            i0.ɵɵpipe(5, "async");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r169 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("ngStyle", ctx_r169.schema.style)("ngClass", ctx_r169.schema.class);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r169.label);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("value", ctx_r169.value)("disabled", ctx_r169.readOnly);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(5, 6, ctx_r169.choices));
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_mat_option_6_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "mat-option", 67);
+            i0.ɵɵtext(1);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var choice_r178 = ctx.$implicit;
+            i0.ɵɵproperty("value", choice_r178.value)("matTooltip", choice_r178.name !== choice_r178.value ? choice_r178.value : null);
+            i0.ɵɵadvance(1);
+            i0.ɵɵtextInterpolate1(" ", choice_r178.name, " ");
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r180_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "mat-form-field", 46);
+            i0.ɵɵelementStart(1, "mat-label");
+            i0.ɵɵtext(2);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(3, "input", 74);
+            i0.ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template_input_focus_3_listener() { i0.ɵɵrestoreView(_r180_1); var ctx_r179 = i0.ɵɵnextContext(3); return ctx_r179.focus(); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(4, "mat-autocomplete", null, 75);
+            i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_mat_option_6_Template, 2, 3, "mat-option", 66);
+            i0.ɵɵpipe(7, "async");
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var _r176 = i0.ɵɵreference(5);
+            var ctx_r170 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("ngStyle", ctx_r170.schema.style)("ngClass", ctx_r170.schema.class);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r170.label);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("formControl", ctx_r170.control)("matAutocomplete", _r176);
+            i0.ɵɵadvance(3);
+            i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(7, 6, ctx_r170.filteredOptions));
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_13_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template, 6, 8, "mat-form-field", 10);
+            i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template, 8, 8, "mat-form-field", 10);
+            i0.ɵɵelementStart(3, "p", 62);
+            i0.ɵɵtext(4);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r19 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r19.schema.widget === "select");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r19.schema.widget !== "select");
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r19.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_14_input_4_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r184_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "input", 78);
+            i0.ɵɵlistener("input", function JsonSchemaFormComponent_div_1_div_14_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r184_1); var ctx_r183 = i0.ɵɵnextContext(3); return ctx_r183.change($event); })("focus", function JsonSchemaFormComponent_div_1_div_14_input_4_Template_input_focus_0_listener() { i0.ɵɵrestoreView(_r184_1); var ctx_r185 = i0.ɵɵnextContext(3); return ctx_r185.getInputType(ctx_r185.schema) == "password" ? ctx_r185.value = "" : ""; });
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r181 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("disabled", ctx_r181.readOnly)("placeholder", ctx_r181.example())("type", ctx_r181.getInputType(ctx_r181.schema))("value", ctx_r181.value);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_14_input_5_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r187_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "input", 79);
+            i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_14_input_5_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r187_1); var ctx_r186 = i0.ɵɵnextContext(3); return ctx_r186.change($event); });
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r182 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("disabled", ctx_r182.readOnly)("placeholder", ctx_r182.example())("type", ctx_r182.getInputType(ctx_r182.schema))("value", ctx_r182.value);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_14_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "mat-form-field", 46);
+            i0.ɵɵelementStart(2, "mat-label");
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_14_input_4_Template, 1, 4, "input", 76);
+            i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_14_input_5_Template, 1, 4, "input", 77);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(6, "p", 62);
+            i0.ɵɵtext(7);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r20 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngStyle", ctx_r20.schema.style)("ngClass", ctx_r20.schema.class);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r20.label);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", !ctx_r20.inArray);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r20.inArray);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r20.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_15_textarea_4_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r191_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "textarea", 82);
+            i0.ɵɵlistener("input", function JsonSchemaFormComponent_div_1_div_15_textarea_4_Template_textarea_input_0_listener($event) { i0.ɵɵrestoreView(_r191_1); var ctx_r190 = i0.ɵɵnextContext(3); return ctx_r190.change($event); });
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r188 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("disabled", ctx_r188.readOnly)("placeholder", ctx_r188.example())("value", ctx_r188.value)("ngStyle", ctx_r188.schema.style)("ngClass", ctx_r188.schema.class);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_15_textarea_5_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r193_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "textarea", 83);
+            i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_15_textarea_5_Template_textarea_change_0_listener($event) { i0.ɵɵrestoreView(_r193_1); var ctx_r192 = i0.ɵɵnextContext(3); return ctx_r192.change($event); });
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r189 = i0.ɵɵnextContext(3);
+            i0.ɵɵproperty("disabled", ctx_r189.readOnly)("placeholder", ctx_r189.example())("value", ctx_r189.value)("ngStyle", ctx_r189.schema.style)("ngClass", ctx_r189.schema.class);
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_15_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "mat-form-field", 46);
+            i0.ɵɵelementStart(2, "mat-label");
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_15_textarea_4_Template, 1, 5, "textarea", 80);
+            i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_15_textarea_5_Template, 1, 5, "textarea", 81);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(6, "p", 62);
+            i0.ɵɵtext(7);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r21 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngStyle", ctx_r21.schema.style)("ngClass", ctx_r21.schema.class);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r21.label);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", !ctx_r21.inArray);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r21.inArray);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r21.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_div_16_Template(rf, ctx) {
+        if (rf & 1) {
+            var _r195_1 = i0.ɵɵgetCurrentView();
+            i0.ɵɵelementStart(0, "div");
+            i0.ɵɵelementStart(1, "input", 84);
+            i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_16_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r195_1); var ctx_r194 = i0.ɵɵnextContext(2); return ctx_r194.handleFileInput($event); });
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementStart(2, "p", 62);
+            i0.ɵɵtext(3);
+            i0.ɵɵelementEnd();
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r22 = i0.ɵɵnextContext(2);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngStyle", ctx_r22.schema.style)("ngClass", ctx_r22.schema.class)("disabled", ctx_r22.readOnly);
+            i0.ɵɵadvance(2);
+            i0.ɵɵtextInterpolate(ctx_r22.error());
+        }
+    }
+    function JsonSchemaFormComponent_div_1_Template(rf, ctx) {
+        if (rf & 1) {
+            i0.ɵɵelementStart(0, "div", 6);
+            i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_div_1_Template, 35, 11, "div", 7);
+            i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_2_Template, 3, 5, "span", 8);
+            i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_3_Template, 4, 8, "span", 8);
+            i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_mat_tab_group_4_Template, 4, 7, "mat-tab-group", 9);
+            i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_span_5_Template, 3, 5, "span", 8);
+            i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_6_Template, 6, 7, "span", 7);
+            i0.ɵɵtemplate(7, JsonSchemaFormComponent_div_1_mat_tab_group_7_Template, 3, 4, "mat-tab-group", 9);
+            i0.ɵɵtemplate(8, JsonSchemaFormComponent_div_1_span_8_Template, 8, 8, "span", 10);
+            i0.ɵɵtemplate(9, JsonSchemaFormComponent_div_1_div_9_Template, 8, 7, "div", 7);
+            i0.ɵɵtemplate(10, JsonSchemaFormComponent_div_1_div_10_Template, 9, 10, "div", 7);
+            i0.ɵɵtemplate(11, JsonSchemaFormComponent_div_1_div_11_Template, 10, 8, "div", 7);
+            i0.ɵɵtemplate(12, JsonSchemaFormComponent_div_1_div_12_Template, 5, 6, "div", 11);
+            i0.ɵɵtemplate(13, JsonSchemaFormComponent_div_1_div_13_Template, 5, 3, "div", 7);
+            i0.ɵɵtemplate(14, JsonSchemaFormComponent_div_1_div_14_Template, 8, 6, "div", 7);
+            i0.ɵɵtemplate(15, JsonSchemaFormComponent_div_1_div_15_Template, 8, 6, "div", 7);
+            i0.ɵɵtemplate(16, JsonSchemaFormComponent_div_1_div_16_Template, 4, 4, "div", 7);
+            i0.ɵɵelementEnd();
+        }
+        if (rf & 2) {
+            var ctx_r1 = i0.ɵɵnextContext();
+            i0.ɵɵproperty("matTooltip", ctx_r1.schema.description);
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.service.editMode && !ctx_r1.schema.static && !ctx_r1.inArray && ctx_r1.getLayout() !== "none");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "object");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "additionalProperties");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "additionalPropertiesTab");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "array");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "chips");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "tab");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "table");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "enum");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "array-select");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "date");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "checkbox");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "autocomplete");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "single");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "textarea");
+            i0.ɵɵadvance(1);
+            i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "upload");
+        }
+    }
+    function JsonSchemaFormComponent_ng_template_2_Template(rf, ctx) { }
+    /**
+     * generates an input form base on JSON schema and JSON object.
+     * The component is used recursively.
+     */
+    var JsonSchemaFormComponent = /** @class */ (function () {
+        /**
+         * component constructor
+         * @param http                        http client
+         * @param componentFactoryResolver    allows dynamic components
+         * @param service                     application service for registering components etc.
+         * @param dialog                      dialog service
+         */
+        function JsonSchemaFormComponent(http, componentFactoryResolver, service, dialog) {
+            this.http = http;
+            this.componentFactoryResolver = componentFactoryResolver;
+            this.service = service;
+            this.dialog = dialog;
+            /**
+             * emit changes done by the user in the component
+             */
+            this.valueChange = new i0.EventEmitter();
+            /**
+             * emit whether this part of the form is valid
+             */
+            this.errorChange = new i0.EventEmitter();
+            /**
+             * indicate schema changes done via the layout editor
+             */
+            this.schemaChange = new i0.EventEmitter();
+            /**
+             * indicates whether this is the root of the component tree
+             */
+            this.isRoot = false;
+            /**
+             * complete chip entry with enter or comma
+             */
+            this.separatorKeysCodes = [keycodes.ENTER, keycodes.COMMA, keycodes.TAB];
+            /**
+             * angular pipe sorting function for keyValue - keep the JSON order and do not
+             * order alphabetically
+             */
+            this.originalOrder = function (a, b) {
+                return 0;
+            };
+        }
+        /**
+         * apply order, called anytime properties are set
+         */
+        JsonSchemaFormComponent.prototype.setOrderedProperties = function () {
+            var e_1, _b, e_2, _c, e_3, _d;
+            if (this.schema.order) {
+                this.orderedProperties = [];
+                try {
+                    for (var _e = __values(this.schema.order), _f = _e.next(); !_f.done; _f = _e.next()) {
+                        var p = _f.value;
+                        var arr = Array.isArray(p) ? p : [p];
+                        var o = {};
+                        try {
+                            for (var arr_1 = (e_2 = void 0, __values(arr)), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {
+                                var q = arr_1_1.value;
+                                o[q] = this.schema.properties[q];
+                            }
+                        }
+                        catch (e_2_1) { e_2 = { error: e_2_1 }; }
+                        finally {
+                            try {
+                                if (arr_1_1 && !arr_1_1.done && (_c = arr_1.return)) _c.call(arr_1);
+                            }
+                            finally { if (e_2) throw e_2.error; }
+                        }
+                        this.orderedProperties.push(o);
+                    }
+                }
+                catch (e_1_1) { e_1 = { error: e_1_1 }; }
+                finally {
+                    try {
+                        if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
+                    }
+                    finally { if (e_1) throw e_1.error; }
+                }
+            }
+            else if (this.schema.properties) {
+                this.orderedProperties = [];
+                try {
+                    for (var _g = __values(Object.entries(this.schema.properties)), _h = _g.next(); !_h.done; _h = _g.next()) {
+                        var _j = __read(_h.value, 2), key = _j[0], value = _j[1];
+                        var o = {};
+                        o[key] = value;
+                        this.orderedProperties.push(o);
+                    }
+                }
+                catch (e_3_1) { e_3 = { error: e_3_1 }; }
+                finally {
+                    try {
+                        if (_h && !_h.done && (_d = _g.return)) _d.call(_g);
+                    }
+                    finally { if (e_3) throw e_3.error; }
+                }
+            }
+        };
+        /**
+         * initialize the comonent.
+         * replace undefined with null and init autocomplete choices
+         */
+        JsonSchemaFormComponent.prototype.ngOnInit = function () {
+            var e_4, _b, e_5, _c;
+            var _this = this;
+            this.readOnly =
+                this.schema.readOnly || (this.schema.createOnly && this.value);
+            if (!this.rootSchema) {
+                this.rootSchema = this.schema;
+                this.rootValue = this.value;
+                this.isRoot = true;
+            }
+            if (!this.schema.type) {
+                var p = this.schema.$ref;
+                var parts = p.split("#");
+                if (parts.length === 1) {
+                    // URL only
+                    this.url(parts[0], null);
+                }
+                else {
+                    if (parts[0]) {
+                        // URL + anchor
+                        this.url(parts[0], parts[1]);
+                    }
+                    else {
+                        // local ref
+                        this.schema = JsonPointer.jsonPointer(this.rootSchema, parts[1]);
+                        this.setOrderedProperties();
+                    }
+                }
+            }
+            else {
+                this.setOrderedProperties();
+            }
+            if (typeof this.value === "undefined") {
+                if (this.schema.default) {
+                    this.value = this.schema.default;
+                    setTimeout(function () { return _this.emit(_this.value); }, 500);
+                }
+                else {
+                    if (!this.hideUndefined) {
+                        this.value = null;
+                    }
+                }
+            }
+            if (this.getLayout() === "custom") {
+                this.loadComponent();
+            }
+            if (this.isRoot) {
+                setTimeout(function () {
+                    _this.errorChange.emit(_this.recursiveError());
+                }, 10);
+            }
+            this.ch = this.service.displayWithRegistry[this.schema.displayWith];
+            if (!this.ch) {
+                this.ch = new DefaultChoiceHandler(this.http);
+            }
+            this.control = new i22.FormControl(this.value);
+            this.choices = new rxjs.ReplaySubject();
+            if (Array.isArray(this.value)) {
+                var arr = [];
+                try {
+                    for (var _d = __values(this.value), _e = _d.next(); !_e.done; _e = _d.next()) {
+                        var i = _e.value;
+                        arr.push({ name: i, value: i });
+                    }
+                }
+                catch (e_4_1) { e_4 = { error: e_4_1 }; }
+                finally {
+                    try {
+                        if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
+                    }
+                    finally { if (e_4) throw e_4.error; }
+                }
+                this.choices.next(arr);
+            }
+            else {
+                this.choices.next([{ name: this.value, value: this.value }]);
+            }
+            if (this.value || this.value === 0) {
+                if (Array.isArray(this.value)) {
+                    var arr = [];
+                    try {
+                        for (var _f = __values(this.value), _g = _f.next(); !_g.done; _g = _f.next()) {
+                            var i = _g.value;
+                            arr.push(this.ch.choice(i, this.schema));
+                        }
+                    }
+                    catch (e_5_1) { e_5 = { error: e_5_1 }; }
+                    finally {
+                        try {
+                            if (_g && !_g.done && (_c = _f.return)) _c.call(_f);
+                        }
+                        finally { if (e_5) throw e_5.error; }
+                    }
+                    rxjs.forkJoin(arr).subscribe(function (res) { return _this.choices.next(res); });
+                }
+                else {
+                    this.ch
+                        .choice(this.value, this.schema)
+                        .subscribe(function (res) { return _this.choices.next([res]); });
+                }
+            }
+            this.filteredOptions = this.control.valueChanges.pipe(operators.startWith(this.value), operators.debounceTime(this.ch.debounceTime()), operators.switchMap(function (x) {
+                _this.change({ target: { value: x } });
+                return _this.ch.filter(_this.value, _this.schema, x, _this.choices);
+            }));
+            this.edit = new Edit(this.schemaChange, this.name, this.schema, this.parentSchema, this.dialog);
+        };
+        /**
+         * choice element activated - load values
+         */
+        JsonSchemaFormComponent.prototype.focus = function () {
+            var _this = this;
+            this.ch.load(this.value, this.schema).subscribe(function (res) {
+                _this.choices.next(res);
+            });
+        };
+        /**
+         * load schema from ref, apply pointer if needed
+         */
+        JsonSchemaFormComponent.prototype.url = function (ref, pointer) {
+            var _this = this;
+            // URL + anchor
+            this.base = this.base ? new URL(ref, this.base).href : ref;
+            // check root schema referenced map
+            if (this.rootSchema.referenced && this.rootSchema.referenced[this.base]) {
+                var res = this.rootSchema.referenced[this.base];
+                this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;
+                this.setOrderedProperties();
+                return;
+            }
+            this.http.get(this.base).subscribe(function (res) {
+                _this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;
+                _this.setOrderedProperties();
+            }, function (error) { return console.log(error); });
+            // set temporary pseudo schema
+            this.schema = { type: "string" };
+            this.setOrderedProperties();
+        };
+        /**
+         * emit valueChange event and also any validation error
+         */
+        JsonSchemaFormComponent.prototype.emit = function (event) {
+            var _this = this;
+            this.valueChange.emit(event);
+            if (this.isRoot) {
+                setTimeout(function () {
+                    _this.errorChange.emit(_this.recursiveError());
+                }, 10);
+            }
+        };
+        /**
+         * if the schema changes from the outside,
+         * reset the component state wrt. errors and the choices cache
+         */
+        JsonSchemaFormComponent.prototype.ngOnChanges = function (changes) {
+            if (changes.schema) {
+                if (changes.schema.previousValue) {
+                    this.rootSchema = null;
+                    if (this.widgetHost.viewContainerRef) {
+                        this.widgetHost.viewContainerRef.clear();
+                    }
+                    this.ngOnInit();
+                }
+            }
+            if (changes.switch && !changes.switch.isFirstChange()) {
+                if (this.getLayout() === "custom") {
+                    this.loadComponent();
+                }
+                else {
+                    if (this.widgetHost.viewContainerRef) {
+                        this.widgetHost.viewContainerRef.clear();
+                    }
+                }
+            }
+        };
+        /**
+         * key method to instruct the display which HTML block to activate.
+         */
+        JsonSchemaFormComponent.prototype.getLayout = function () {
+            if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {
+                return "none";
+            }
+            if (this.schema.widget === "custom") {
+                return "custom";
+            }
+            if (this.hideUndefined && this.value === undefined) {
+                return "none";
+            }
+            if (this.schema.type === "object") {
+                if (this.schema.additionalProperties) {
+                    if (this.schema.layout === "tab") {
+                        return "additionalPropertiesTab";
+                    }
+                    return "additionalProperties";
+                }
+                return "object";
+            }
+            if (this.schema.type === "array") {
+                if (this.schema.layout === "tab") {
+                    return "tab";
+                }
+                if (this.schema.layout === "table") {
+                    return "table";
+                }
+                if (this.schema.layout === "select") {
+                    return "array-select";
+                }
+                if (this.schema.layout === "chips") {
+                    return "chips";
+                }
+                return "array";
+            }
+            if (this.schema.enum) {
+                return "enum";
+            }
+            if (this.schema.widget === "date") {
+                return "date";
+            }
+            if (this.schema.widget === "upload") {
+                return "upload";
+            }
+            if (this.schema.widget === "textarea") {
+                return "textarea";
+            }
+            if (this.schema.type === "boolean") {
+                return "checkbox";
+            }
+            if (this.schema.choicesUrl) {
+                return "autocomplete";
+            }
+            if (this.schema.choices) {
+                return "autocomplete";
+            }
+            if (this.schema.displayWith) {
+                return "autocomplete";
+            }
+            return "single";
+        };
+        /**
+         * called from template in the "simple" type. If "type" is "number" or "integer",
+         * the HTML input type is "number" which avoids normal string input
+         */
+        JsonSchemaFormComponent.prototype.getInputType = function (schema) {
+            if (schema.type === "number") {
+                return "number";
+            }
+            if (schema.type === "integer") {
+                return "number";
+            }
+            return schema.widget;
+        };
+        /**
+         * event handler for object display. Catches the child component event and
+         * handle it by setting the value[key].
+         * Also init null objects with {}
+         */
+        JsonSchemaFormComponent.prototype.onValueChange = function (key, value) {
+            var e_6, _b;
+            if (!this.value) {
+                this.value = {};
+            }
+            this.value[key] = value;
+            if (this.schema.computed) {
+                try {
+                    for (var _c = __values(Object.keys(this.schema.computed)), _d = _c.next(); !_d.done; _d = _c.next()) {
+                        var field = _d.value;
+                        var expression = this.schema.computed[field];
+                        this.value[field] = jsonata__default['default'](expression).evaluate(this.value);
+                    }
+                }
+                catch (e_6_1) { e_6 = { error: e_6_1 }; }
+                finally {
+                    try {
+                        if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
+                    }
+                    finally { if (e_6) throw e_6.error; }
+                }
+            }
+            this.emit(this.value);
+        };
+        /**
+         * add an element to an array.
+         * null arrays are initialized with []
+         */
+        JsonSchemaFormComponent.prototype.add = function () {
+            if (!(this.value instanceof Array)) {
+                this.value = [];
+            }
+            if (this.schema.items.type === "array") {
+                this.value.push([]);
+            }
+            else if (this.schema.items.type === "object") {
+                this.value.push({});
+            }
+            else {
+                this.value.push(null);
+            }
+            this.emit(this.value);
+        };
+        /**
+         * event handler for adding a field
+         */
+        JsonSchemaFormComponent.prototype.addField = function () {
+            if (!this.value) {
+                this.value = {};
+            }
+            if (this.value[""]) {
+                return;
+            }
+            this.value[""] = null;
+            this.emit(this.value);
+        };
+        /**
+         * remove an element from an array
+         */
+        JsonSchemaFormComponent.prototype.remove = function (i) {
+            this.value.splice(i, 1);
+            this.emit(this.value);
+        };
+        /**
+         * remove a field
+         */
+        JsonSchemaFormComponent.prototype.removeField = function (key) {
+            delete this.value[key];
+            this.emit(this.value);
+        };
+        /**
+         * event handler for changed field names with "additionalProperties"
+         */
+        JsonSchemaFormComponent.prototype.fieldNameChange = function (key, newvalue) {
+            this.value[newvalue] = this.value[key];
+            delete this.value[key];
+            this.emit(this.value);
+        };
+        /**
+         * returns the validation error on this level and call recursively for all children.
+         * returns null if the form contents is valid
+         */
+        JsonSchemaFormComponent.prototype.recursiveError = function () {
+            var e_7, _b;
+            var e = this.error();
+            if (e) {
+                return e;
+            }
+            if (this.child) {
+                return this.child.recursiveError();
+            }
+            if (this.children) {
+                try {
+                    for (var _c = __values(this.children), _d = _c.next(); !_d.done; _d = _c.next()) {
+                        var c = _d.value;
+                        var r = c.recursiveError();
+                        if (r) {
+                            return r;
+                        }
+                    }
+                }
+                catch (e_7_1) { e_7 = { error: e_7_1 }; }
+                finally {
+                    try {
+                        if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
+                    }
+                    finally { if (e_7) throw e_7.error; }
+                }
+            }
+            return null;
+        };
+        /**
+         * return the error message provided in the schema or the generic error message
+         * returned from the validation code
+         */
+        JsonSchemaFormComponent.prototype.e = function (error) {
+            if (this.schema.errorMessage) {
+                return this.schema.errorMessage;
+            }
+            return error;
+        };
+        /**
+         * return error string
+         */
+        JsonSchemaFormComponent.prototype.error = function () {
+            var e_8, _b, e_9, _c, e_10, _d, e_11, _e;
+            var _a;
+            if (this.schema.widget === "custom") {
+                return this.customError;
+            }
+            if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {
+                return null;
+            }
+            if (this.value) {
+                if (this.schema.maxItems) {
+                    if (!(this.value.length <= this.schema.maxItems)) {
+                        return this.e("Only " + this.schema.maxItems + " array entries allowed");
+                    }
+                }
+                if (this.schema.uniqueItems) {
+                    if (!(new Set(this.value).size === this.value.length)) {
+                        return this.e("Array entries must be unique");
+                    }
+                }
+                if (this.schema.minItems) {
+                    if (!(this.value.length >= this.schema.minItems)) {
+                        return this.e("At least " + this.schema.minItems + " array entries required");
+                    }
+                }
+                if (this.schema.maxProperties) {
+                    if (!(Object.keys(this.value).length <= this.schema.maxProperties)) {
+                        return this.e("Only " + this.schema.maxProperties + " fields allowed");
+                    }
+                }
+                if (this.schema.propertyNames) {
+                    try {
+                        for (var _f = __values(Object.keys(this.value)), _g = _f.next(); !_g.done; _g = _f.next()) {
+                            var key = _g.value;
+                            var re = new RegExp(this.schema.propertyNames);
+                            if (!re.test(key)) {
+                                return this.e("illegal field name: " + key);
+                            }
+                        }
+                    }
+                    catch (e_8_1) { e_8 = { error: e_8_1 }; }
+                    finally {
+                        try {
+                            if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
+                        }
+                        finally { if (e_8) throw e_8.error; }
+                    }
+                }
+                if (this.schema.dependencies) {
+                    try {
+                        for (var _h = __values(Object.keys(this.schema.dependencies)), _j = _h.next(); !_j.done; _j = _h.next()) {
+                            var dep = _j.value;
+                            if (this.value[dep]) {
+                                try {
+                                    for (var _k = (e_10 = void 0, __values(this.schema.dependencies[dep])), _l = _k.next(); !_l.done; _l = _k.next()) {
+                                        var l = _l.value;
+                                        if (!this.value[l]) {
+                                            return this.e(dep + " depends on " + l);
+                                        }
+                                    }
+                                }
+                                catch (e_10_1) { e_10 = { error: e_10_1 }; }
+                                finally {
+                                    try {
+                                        if (_l && !_l.done && (_d = _k.return)) _d.call(_k);
+                                    }
+                                    finally { if (e_10) throw e_10.error; }
+                                }
+                            }
+                        }
+                    }
+                    catch (e_9_1) { e_9 = { error: e_9_1 }; }
+                    finally {
+                        try {
+                            if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
+                        }
+                        finally { if (e_9) throw e_9.error; }
+                    }
+                }
+                if (this.schema.minProperties) {
+                    if (!(Object.keys(this.value).length >= this.schema.minProperties)) {
+                        return this.e("At least " + this.schema.minProperties + " fields required");
+                    }
+                }
+                if (this.schema.maxLength) {
+                    if (!(("" + this.value).length <= this.schema.maxLength)) {
+                        return this.e("Input is longer than " + this.schema.maxLength);
+                    }
+                }
+                if (this.schema.minLength) {
+                    if (!(("" + this.value).length >= this.schema.minLength)) {
+                        return this.e("Input is shorter than " + this.schema.minLength);
+                    }
+                }
+                if (this.schema.multipleOf) {
+                    if (!Number.isInteger(Number(this.value) / this.schema.multipleOf)) {
+                        return this.e("Must be multiple of " + this.schema.multipleOf);
+                    }
+                }
+                if (this.schema.exclusiveMaximum) {
+                    if (!(Number(this.value) < this.schema.exclusiveMaximum)) {
+                        return this.e("Must be less than " + this.schema.exclusiveMaximum);
+                    }
+                }
+                if (this.schema.maximum) {
+                    if (!(Number(this.value) <= this.schema.maximum)) {
+                        return this.e("Must be less than or equal " + this.schema.maximum);
+                    }
+                }
+                if (this.schema.exclusiveMinimum) {
+                    if (!(Number(this.value) > this.schema.exclusiveMinimum)) {
+                        return this.e("Must greater than " + this.schema.exclusiveMinimum);
+                    }
+                }
+                if (this.schema.minimum) {
+                    if (!(Number(this.value) >= this.schema.minimum)) {
+                        return this.e("Must greater than or equal " + this.schema.minimum);
+                    }
+                }
+            }
+            if (this.required) {
+                if (this.value == null || Object.is(this.value, NaN)) {
+                    return this.e("required");
+                }
+            }
+            if (this.schema.required) {
+                try {
+                    for (var _m = __values(this.schema.required), _o = _m.next(); !_o.done; _o = _m.next()) {
+                        var dep = _o.value;
+                        if (!this.value[dep] &&
+                            this.value[dep] !== false &&
+                            this.value[dep] !== 0) {
+                            // ignore 'required' if dep is inactive due to switch / case
+                            var inactive = false;
+                            if (this.schema.switch) {
+                                var switc = this.value[this.schema.switch];
+                                if (switc && ((_a = this.schema.properties[dep].case) === null || _a === void 0 ? void 0 : _a.indexOf(switc)) < 0) {
+                                    inactive = true;
+                                }
+                            }
+                            if (!inactive) {
+                                return this.e(dep + " is required");
+                            }
+                        }
+                    }
+                }
+                catch (e_11_1) { e_11 = { error: e_11_1 }; }
+                finally {
+                    try {
+                        if (_o && !_o.done && (_e = _m.return)) _e.call(_m);
+                    }
+                    finally { if (e_11) throw e_11.error; }
+                }
+            }
+            if (this.schema.pattern) {
+                var re = new RegExp(this.schema.pattern);
+                if (!this.value) {
+                    return this.e("illegal string");
+                }
+                if (!re.test(this.value)) {
+                    return this.e("illegal string");
+                }
+            }
+            if (this.schema.format && this.service.formats[this.schema.format]) {
+                var re = new RegExp(this.service.formats[this.schema.format]);
+                if (!this.value) {
+                    return this.e("illegal string");
+                }
+                if (!re.test(this.value)) {
+                    return this.e("illegal string");
+                }
+            }
+            return null;
+        };
+        /**
+         * use the element title if present, defaults to the label input or "" is both are null
+         */
+        JsonSchemaFormComponent.prototype.getLabel = function () {
+            if (this.schema.title) {
+                return this.schema.title;
+            }
+            if (this.label) {
+                return this.label;
+            }
+            return "";
+        };
+        /**
+         * input element change handler.
+         * normalize the different kind of events, handle the datatypes, set the value and emit the change
+         */
+        JsonSchemaFormComponent.prototype.change = function (event) {
+            var eventTarget;
+            if (event instanceof i19.MatSelectChange) {
+                event = event.value;
+            }
+            else if (event instanceof i21.MatDatepickerInputEvent) {
+                event = this.serializeDate(event.value, this.schema.dateFormat, this.schema.type);
+            }
+            else if (event instanceof i23.MatAutocompleteSelectedEvent) {
+                event = event.option.value;
+            }
+            else if (event instanceof i13.MatCheckboxChange) {
+                event = event.checked;
+            }
+            else {
+                // save the event target in case the parsing changes the value
+                // (e.g. integer input 5.3 becomes 5, this is reflected on the UI via this handle)
+                eventTarget = event.target;
+                event = event.target.value;
+            }
+            if (event === "") {
+                event = null;
+            }
+            if (event == null) {
+                this.value = null;
+            }
+            if (this.schema.type === "number") {
+                this.value = parseFloat(event);
+            }
+            else if (this.schema.type === "integer") {
+                this.value = parseInt(event, 10);
+            }
+            else if (this.schema.type === "boolean") {
+                if (typeof event === "string") {
+                    if (event === "true") {
+                        this.value = true;
+                    }
+                    else if (event === "false") {
+                        this.value = false;
+                    }
+                    else {
+                        this.value = null;
+                    }
+                }
+                else {
+                    this.value = event;
+                }
+            }
+            else if (this.schema.type === "string") {
+                this.value = event;
+            }
+            else if (this.schema.type === "array") {
+                this.value = event;
+            }
+            else {
+                throw new Error("unknown type: " + this.schema.type);
+            }
+            this.emit(this.value);
+        };
+        /**
+         * allows for the result of a file upload to be written into a text form element
+         */
+        JsonSchemaFormComponent.prototype.handleFileInput = function (event) {
+            var _this = this;
+            if (1024 * 1024 <= event.target.files.item(0).size) {
+                console.log("The file size is limited to 1MB");
+                return;
+            }
+            var reader = new FileReader();
+            reader.onload = function () {
+                _this.value = reader.result;
+                _this.emit(_this.value);
+            };
+            reader.readAsDataURL(event.target.files.item(0));
+        };
+        /**
+         * get example values from example array and default
+         */
+        JsonSchemaFormComponent.prototype.example = function () {
+            if (this.schema.examples && this.schema.examples[0]) {
+                return this.schema.examples[0];
+            }
+            if (this.schema.default) {
+                return this.schema.default;
+            }
+            return null;
+        };
+        /**
+         * load the dynamic custom widget
+         */
+        JsonSchemaFormComponent.prototype.loadComponent = function () {
+            var _this = this;
+            var componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.service.registry[this.schema.widgetType]);
+            var viewContainerRef = this.widgetHost.viewContainerRef;
+            viewContainerRef.clear();
+            var componentRef = viewContainerRef.createComponent(componentFactory);
+            // input values
+            componentRef.instance.label = this.label;
+            componentRef.instance.value = this.value;
+            componentRef.instance.schema = this.schema;
+            componentRef.instance.rootSchema = this.rootSchema;
+            componentRef.instance.rootValue = this.rootValue;
+            // subscribe to value changes and forward them
+            componentRef.instance.valueChange.subscribe(function (data) {
+                _this.value = data;
+                _this.emit(_this.value);
+            });
+            // subscribe to error changes and forward them
+            componentRef.instance.errorChange.subscribe(function (error) {
+                _this.customError = error;
+                _this.errorChange.emit(error);
+            });
+        };
+        /**
+         * used for expansion panels - set value and forward event
+         */
+        JsonSchemaFormComponent.prototype.setAndEmit = function (event) {
+            this.value = event;
+            this.emit(this.value);
+        };
+        /**
+         * set an array element and emit value change event
+         */
+        JsonSchemaFormComponent.prototype.setIndexAndEmit = function (i, event) {
+            this.value[i] = event;
+            this.emit(this.value);
+        };
+        /**
+         * set an array element's field and emit value change event (applies to table layout)
+         */
+        JsonSchemaFormComponent.prototype.setIndexAndEmitTable = function (i, field, event) {
+            this.value[i][field] = event;
+            this.emit(this.value);
+        };
+        /**
+         * used when hideUndefined is active. Called from the UI to
+         * show a property with undefined value (in order to be able to set if in the form)
+         */
+        JsonSchemaFormComponent.prototype.showProperty = function (prop) {
+            if (!this.value) {
+                this.value = {};
+            }
+            if (this.value[prop] === undefined) {
+                this.value[prop] = null;
+            }
+            else if (this.value[prop] === null) {
+                this.value[prop] = undefined;
+            }
+        };
+        /**
+         * used when hideUndefined is active. Called from the UI
+         * to determine which properties are included in the "to add" list
+         */
+        JsonSchemaFormComponent.prototype.showPropertyList = function () {
+            var e_12, _b;
+            if (this.schema.switch && this.value) {
+                var sw = this.value[this.schema.switch];
+                var props = [];
+                try {
+                    for (var _c = __values(Object.entries(this.schema.properties)), _d = _c.next(); !_d.done; _d = _c.next()) {
+                        var _e = __read(_d.value, 2), k = _e[0], v = _e[1];
+                        if (v.case) {
+                            if (v.case.includes(sw)) {
+                                props.push(k);
+                            }
+                        }
+                        else {
+                            props.push(k);
+                        }
+                    }
+                }
+                catch (e_12_1) { e_12 = { error: e_12_1 }; }
+                finally {
+                    try {
+                        if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
+                    }
+                    finally { if (e_12) throw e_12.error; }
+                }
+                return props.sort();
+            }
+            else {
+                return Object.keys(this.schema.properties).sort();
+            }
+        };
+        /**
+         * string to date
+         * @param date    date string / number (millisecs since 1970)
+         * @param format  date format
+         */
+        JsonSchemaFormComponent.prototype.parseDate = function (date, format) {
+            if (!date && date !== 0) {
+                return date;
+            }
+            if (typeof date === "number") {
+                return this.sameDate(new Date(date));
+            }
+            if (!format) {
+                return date;
+            }
+            var pdate = date.split(this.getDelimiter(format));
+            var pformat = format.split(this.getDelimiter(format));
+            return this.sameDate(new Date(pdate[pformat.indexOf("yyyy")], pdate[pformat.indexOf("MM")] - 1, pdate[pformat.indexOf("dd")]));
+        };
+        /**
+         * make sure to return the same date object instance (cannot delete date #83)
+         */
+        JsonSchemaFormComponent.prototype.sameDate = function (nd) {
+            if (!this.date) {
+                this.date = nd;
+            }
+            if (this.date.getTime() !== nd.getTime()) {
+                this.date = nd;
+            }
+            return this.date;
+        };
+        /**
+         * date to string
+         * @param date    the date to serialize
+         * @param format  the date format (e.g. dd-MM-yyyy)
+         * @param type    target datatype (allows serializing to millisecs since 1970)
+         */
+        JsonSchemaFormComponent.prototype.serializeDate = function (date, format, type) {
+            if (date == null) {
+                return "";
+            }
+            if (type === "integer" || type === "number") {
+                return "" + date.valueOf();
+            }
+            if (!format) {
+                return date.toISOString();
+            }
+            var pformat = format.split(this.getDelimiter(format));
+            var pdate = [null, null, null];
+            pdate[pformat.indexOf("yyyy")] = date.getFullYear();
+            pdate[pformat.indexOf("MM")] = date.getMonth() + 1;
+            pdate[pformat.indexOf("dd")] = date.getDate();
+            return (pdate[0] +
+                this.getDelimiter(format) +
+                pdate[1] +
+                this.getDelimiter(format) +
+                pdate[2]);
+        };
+        /**
+         * find the first non letter character in a date format such as dd/MM/yyyy (returns /)
+         */
+        JsonSchemaFormComponent.prototype.getDelimiter = function (format) {
+            var delim = format.match(/\W/g);
+            if (!delim[0]) {
+                throw new Error("No delimiter found in date format: " + format);
+            }
+            return delim[0];
+        };
+        /**
+         * new chip entered
+         */
+        JsonSchemaFormComponent.prototype.addChip = function (event) {
+            var input = event.input;
+            var value = event.value;
+            // Add our fruit
+            if ((value || "").trim()) {
+                if (!this.value) {
+                    this.value = [];
+                }
+                this.value.push(value.trim());
+                this.emit(this.value);
+            }
+            // Reset the input value
+            if (input) {
+                input.value = "";
+            }
+        };
+        /**
+         * remove a chip
+         */
+        JsonSchemaFormComponent.prototype.removeChip = function (v) {
+            var index = this.value.indexOf(v);
+            if (index >= 0) {
+                this.value.splice(index, 1);
+                if (this.value.length === 0) {
+                    this.value = null;
+                }
+                this.emit(this.value);
+            }
+        };
+        /**
+         * chips d&d handler
+         */
+        JsonSchemaFormComponent.prototype.dropChip = function (event) {
+            i18.moveItemInArray(this.value, event.previousIndex, event.currentIndex);
+            this.emit(this.value);
+        };
+        return JsonSchemaFormComponent;
+    }());
+    JsonSchemaFormComponent.ɵfac = function JsonSchemaFormComponent_Factory(t) { return new (t || JsonSchemaFormComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(JsonSchemaFormService), i0.ɵɵdirectiveInject(i1$1.MatDialog)); };
+    JsonSchemaFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: JsonSchemaFormComponent, selectors: [["lib-json-schema-form"]], viewQuery: function JsonSchemaFormComponent_Query(rf, ctx) {
+            if (rf & 1) {
+                i0.ɵɵviewQuery(_c0, 1);
+                i0.ɵɵviewQuery(WidgetDirective, 3);
+                i0.ɵɵviewQuery(_c1, 1);
+            }
+            if (rf & 2) {
+                var _t = void 0;
+                i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.child = _t.first);
+                i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.widgetHost = _t.first);
+                i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t);
+            }
+        }, inputs: { name: "name", label: "label", value: "value", rootValue: "rootValue", schema: "schema", parentSchema: "parentSchema", rootSchema: "rootSchema", base: "base", switch: "switch", hideUndefined: "hideUndefined", inExpansion: "inExpansion", inArray: "inArray", required: "required" }, outputs: { valueChange: "valueChange", errorChange: "errorChange", schemaChange: "schemaChange" }, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 2, consts: [[3, "ngStyle", "ngClass", "expanded", 4, "ngIf"], [3, "matTooltip", 4, "ngIf"], ["libWidgetHost", ""], [3, "ngStyle", "ngClass", "expanded"], [3, "label", "name", "value", "switch", "rootValue", "rootSchema", "schema", "inExpansion", "base", "valueChange", "schemaChange"], ["child", ""], [3, "matTooltip"], [4, "ngIf"], [3, "fxLayout", "ngStyle", "ngClass", 4, "ngIf"], ["animationDuration", "0ms", "style", "max-width: 96vw", 3, "ngStyle", "ngClass", 4, "ngIf"], [3, "ngStyle", "ngClass", 4, "ngIf"], ["style", "margin: 6px; margin-top: 12px;", 3, "ngStyle", "ngClass", 4, "ngIf"], [2, "cursor", "pointer", 3, "matMenuTriggerFor", "matTooltip"], ["menu", "matMenu"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", 3, "disabled", "matMenuTriggerFor"], ["mat-menu-item", "", 3, "disabled", "click"], ["madd", "matMenu"], ["mat-menu-item", "", 3, "click", 4, "ngFor", "ngForOf"], ["madd2", "matMenu"], [3, "fxLayout", "ngStyle", "ngClass"], [3, "fxLayout", 4, "ngFor", "ngForOf"], ["style", "margin-right: 20px;", 4, "ngIf"], [3, "fxLayout"], ["style", "display: flex; margin: 2px", 4, "ngFor", "ngForOf"], [2, "display", "flex", "margin", "2px"], [3, "name", "label", "value", "switch", "rootValue", "rootSchema", "schema", "parentSchema", "required", "hideUndefined", "base", "valueChange", "schemaChange"], ["children", ""], [2, "margin-right", "20px"], ["mat-icon-button", "", 3, "matMenuTriggerFor"], [4, "ngFor", "ngForOf"], [3, "disabled", "checked", "change"], ["style", "display: flex; margin: 2px; position: relative", 3, "mouseenter", "mouseleave", 4, "ngFor", "ngForOf"], ["mat-icon-button", "", 3, "matTooltip", "click", 4, "ngIf"], [2, "display", "flex", "margin", "2px", "position", "relative", 3, "mouseenter", "mouseleave"], ["autocomplete", "off", "matInput", "", 3, "disabled", "value", "change"], ["inArray", "true", 3, "label", "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], ["mat-icon-button", "", "class", "example-handle", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", 1, "example-handle", 3, "matTooltip", "click"], ["mat-icon-button", "", 3, "matTooltip", "click"], ["animationDuration", "0ms", 2, "max-width", "96vw", 3, "ngStyle", "ngClass"], ["style", "margin: 2px; position: relative", 4, "ngFor", "ngForOf"], [2, "margin", "2px", "position", "relative"], ["mat-tab-label", ""], ["inArray", "true", 3, "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], ["autocomplete", "off", "matInput", "", 3, "value", "change"], [3, "ngStyle", "ngClass"], ["aria-label", "Fruit selection", "cdkDropList", "", "cdkDropListOrientation", "horizontal", 3, "cdkDropListDropped"], ["chipList", ""], ["cdkDrag", "", 3, "removable", "removed", 4, "ngFor", "ngForOf"], ["autocomplete", "off", 3, "placeholder", "matChipInputFor", "matChipInputSeparatorKeyCodes", "disabled", "matChipInputTokenEnd"], ["cdkDrag", "", 3, "removable", "removed"], ["matChipRemove", ""], ["style", "margin: 2px; position: relative", 3, "label", 4, "ngFor", "ngForOf"], [2, "margin", "2px", "position", "relative", 3, "label"], ["summary", "Properties table"], ["scope", "col", 4, "ngFor", "ngForOf"], ["id", "remove_row"], ["scope", "col"], [3, "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], [3, "value", "disabled", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [1, "error", "mat-typography"], [3, "value"], [3, "matTooltip", "ngStyle", "ngClass"], ["multiple", "", 3, "value", "disabled", "focus", "selectionChange"], [3, "value", "matTooltip", 4, "ngFor", "ngForOf"], [3, "value", "matTooltip"], ["autocomplete", "off", "matInput", "", 2, "width", "100%", 3, "value", "matDatepicker", "disabled", "dateChange"], ["matSuffix", "", 3, "for"], ["picker", ""], [2, "margin", "6px", "margin-top", "12px", 3, "ngStyle", "ngClass"], [3, "checked", "disabled", "change"], [3, "value", "disabled", "focus", "selectionChange"], ["type", "text", "matInput", "", 3, "formControl", "matAutocomplete", "focus"], ["auto", "matAutocomplete"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "input", "focus", 4, "ngIf"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "change", 4, "ngIf"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "input", "focus"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "change"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "input", 4, "ngIf"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "change", 4, "ngIf"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "input"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "change"], ["type", "file", "id", "file", 3, "ngStyle", "ngClass", "disabled", "change"]], template: function JsonSchemaFormComponent_Template(rf, ctx) {
+            if (rf & 1) {
+                i0.ɵɵtemplate(0, JsonSchemaFormComponent_mat_expansion_panel_0_Template, 8, 14, "mat-expansion-panel", 0);
+                i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_Template, 17, 17, "div", 1);
+                i0.ɵɵtemplate(2, JsonSchemaFormComponent_ng_template_2_Template, 0, 0, "ng-template", 2);
+            }
+            if (rf & 2) {
+                i0.ɵɵproperty("ngIf", (ctx.schema.expanded === true || ctx.schema.expanded === false) && !ctx.inExpansion);
+                i0.ɵɵadvance(1);
+                i0.ɵɵproperty("ngIf", ctx.schema.expanded === null || ctx.schema.expanded === undefined || ctx.inExpansion);
+            }
+        }, directives: [i4.NgIf, WidgetDirective, i6.MatExpansionPanel, i7.DefaultStyleDirective, i4.NgStyle, i7.DefaultClassDirective, i4.NgClass, i6.MatExpansionPanelHeader, i6.MatExpansionPanelTitle, i6.MatExpansionPanelDescription, JsonSchemaFormComponent, i8.MatTooltip, i9.MatIcon, i10.MatMenuTrigger, i10.MatMenu, i10.MatMenuItem, i4.NgForOf, i11.DefaultLayoutDirective, i12.MatButton, i13.MatCheckbox, i14.MatFormField, i14.MatLabel, i15.MatInput, i16.MatTabGroup, i16.MatTab, i16.MatTabLabel, i17.MatChipList, i18.CdkDropList, i17.MatChipInput, i17.MatChip, i18.CdkDrag, i17.MatChipRemove, i19.MatSelect, i20.MatOption, i21.MatDatepickerInput, i21.MatDatepickerToggle, i14.MatSuffix, i21.MatDatepicker, i22.DefaultValueAccessor, i23.MatAutocompleteTrigger, i22.NgControlStatus, i22.FormControlDirective, i23.MatAutocomplete], pipes: [i4.KeyValuePipe, i4.AsyncPipe], styles: [".example-handle[_ngcontent-%COMP%]{position:absolute;z-index:9;top:0;right:0}.error[_ngcontent-%COMP%]{font-size:small;color:red;position:relative;top:-18px}"] });
+    (function () {
+        (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonSchemaFormComponent, [{
+                type: i0.Component,
+                args: [{
+                        selector: "lib-json-schema-form",
+                        templateUrl: "./json-schema-form.component.html",
+                        styleUrls: ["./json-schema-form.component.css"],
+                    }]
+            }], function () { return [{ type: i1.HttpClient }, { type: i0.ComponentFactoryResolver }, { type: JsonSchemaFormService }, { type: i1$1.MatDialog }]; }, { children: [{
+                    type: i0.ViewChildren,
+                    args: ["children"]
+                }], child: [{
+                    type: i0.ViewChild,
+                    args: ["child"]
+                }], name: [{
+                    type: i0.Input
+                }], label: [{
+                    type: i0.Input
+                }], value: [{
+                    type: i0.Input
+                }], rootValue: [{
+                    type: i0.Input
+                }], valueChange: [{
+                    type: i0.Output
+                }], errorChange: [{
+                    type: i0.Output
+                }], schemaChange: [{
+                    type: i0.Output
+                }], schema: [{
+                    type: i0.Input
+                }], parentSchema: [{
+                    type: i0.Input
+                }], rootSchema: [{
+                    type: i0.Input
+                }], base: [{
+                    type: i0.Input
+                }], switch: [{
+                    type: i0.Input
+                }], hideUndefined: [{
+                    type: i0.Input
+                }], inExpansion: [{
+                    type: i0.Input
+                }], inArray: [{
+                    type: i0.Input
+                }], required: [{
+                    type: i0.Input
+                }], widgetHost: [{
+                    type: i0.ViewChild,
+                    args: [WidgetDirective, { static: true }]
+                }] });
+    })();
+
+    var JsonSchemaFormModule = /** @class */ (function () {
+        function JsonSchemaFormModule() {
+        }
+        return JsonSchemaFormModule;
+    }());
+    JsonSchemaFormModule.ɵfac = function JsonSchemaFormModule_Factory(t) { return new (t || JsonSchemaFormModule)(); };
+    JsonSchemaFormModule.ɵmod = i0.ɵɵdefineNgModule({ type: JsonSchemaFormModule });
+    JsonSchemaFormModule.ɵinj = i0.ɵɵdefineInjector({ providers: [
+            // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892
+            { provide: i8.MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } }
+        ], imports: [[
+                card.MatCardModule,
+                flexLayout.FlexLayoutModule,
+                i9.MatIconModule,
+                i8.MatTooltipModule,
+                table.MatTableModule,
+                i16.MatTabsModule,
+                i14.MatFormFieldModule,
+                i19.MatSelectModule,
+                i21.MatDatepickerModule,
+                i13.MatCheckboxModule,
+                i23.MatAutocompleteModule,
+                i1.HttpClientModule,
+                i4.CommonModule,
+                i15.MatInputModule,
+                i20.MatNativeDateModule,
+                i12.MatButtonModule,
+                i6.MatExpansionModule,
+                i10.MatMenuModule,
+                i22.ReactiveFormsModule,
+                i1$1.MatDialogModule,
+                i17.MatChipsModule,
+                i18.DragDropModule
+            ]] });
+    (function () {
+        (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(JsonSchemaFormModule, { declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective], imports: [card.MatCardModule,
+                flexLayout.FlexLayoutModule,
+                i9.MatIconModule,
+                i8.MatTooltipModule,
+                table.MatTableModule,
+                i16.MatTabsModule,
+                i14.MatFormFieldModule,
+                i19.MatSelectModule,
+                i21.MatDatepickerModule,
+                i13.MatCheckboxModule,
+                i23.MatAutocompleteModule,
+                i1.HttpClientModule,
+                i4.CommonModule,
+                i15.MatInputModule,
+                i20.MatNativeDateModule,
+                i12.MatButtonModule,
+                i6.MatExpansionModule,
+                i10.MatMenuModule,
+                i22.ReactiveFormsModule,
+                i1$1.MatDialogModule,
+                i17.MatChipsModule,
+                i18.DragDropModule], exports: [JsonSchemaFormComponent] });
+    })();
+    (function () {
+        (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonSchemaFormModule, [{
+                type: i0.NgModule,
+                args: [{
+                        declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective],
+                        imports: [
+                            card.MatCardModule,
+                            flexLayout.FlexLayoutModule,
+                            i9.MatIconModule,
+                            i8.MatTooltipModule,
+                            table.MatTableModule,
+                            i16.MatTabsModule,
+                            i14.MatFormFieldModule,
+                            i19.MatSelectModule,
+                            i21.MatDatepickerModule,
+                            i13.MatCheckboxModule,
+                            i23.MatAutocompleteModule,
+                            i1.HttpClientModule,
+                            i4.CommonModule,
+                            i15.MatInputModule,
+                            i20.MatNativeDateModule,
+                            i12.MatButtonModule,
+                            i6.MatExpansionModule,
+                            i10.MatMenuModule,
+                            i22.ReactiveFormsModule,
+                            i1$1.MatDialogModule,
+                            i17.MatChipsModule,
+                            i18.DragDropModule
+                        ],
+                        exports: [JsonSchemaFormComponent],
+                        providers: [
+                            // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892
+                            { provide: i8.MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } }
+                        ]
+                    }]
+            }], null, null);
+    })();
+    i0.ɵɵsetComponentScope(EditElementDialogComponent, [i1$1.MatDialogContent, JsonSchemaFormComponent, i1$1.MatDialogActions, i12.MatButton, i1$1.MatDialogClose], []);
+
+    /*
+     * Public API Surface of json-schema-form
+     */
+
+    /**
+     * Generated bundle index. Do not edit.
+     */
+
+    exports.DefaultChoiceHandler = DefaultChoiceHandler;
+    exports.JsonSchemaFormComponent = JsonSchemaFormComponent;
+    exports.JsonSchemaFormModule = JsonSchemaFormModule;
+    exports.JsonSchemaFormService = JsonSchemaFormService;
+
+    Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=dashjoin-json-schema-form.umd.js.map
diff --git a/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js.map b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js.map
new file mode 100644
index 0000000..e2d4824
--- /dev/null
+++ b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dashjoin-json-schema-form.umd.js","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.service.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../projects/dashjoin/json-schema-form/src/lib/widget.directive.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-pointer.ts","../../../../projects/dashjoin/json-schema-form/src/lib/choice.ts","../../../../projects/dashjoin/json-schema-form/src/lib/edit-element-dialog.component.ts","../../../../projects/dashjoin/json-schema-form/src/lib/edit-element-dialog.component.html","../../../../projects/dashjoin/json-schema-form/src/lib/edit.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.html","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.module.ts","../../../../projects/dashjoin/json-schema-form/src/public-api.ts","../../../../projects/dashjoin/json-schema-form/src/dashjoin-json-schema-form.ts"],"sourcesContent":["import { Injectable, Type } from '@angular/core';\r\nimport { ChoiceHandler } from './choice';\r\n\r\n/**\r\n * service for registering custom components\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class JsonSchemaFormService {\r\n\r\n  /**\r\n   * layout editor mode\r\n   */\r\n  public editMode = false;\r\n\r\n  /**\r\n   * built-in formats\r\n   */\r\n  formats = {\r\n    email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\r\n    ipv4: /^(?!0)(?!.*\\.$)((1?\\d?\\d|25[0-5]|2[0-4]\\d)(\\.|$)){4}$/,\r\n    url: /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$/,\r\n    uri: /^\\w+:(\\/?\\/?)[^\\s]+$/\r\n  };\r\n\r\n  /**\r\n   * registry of custom widgets. The keys are the values used in schema.widgetType, the values\r\n   * are the Type of the custom widget component implementing WidgetComponent\r\n   */\r\n  registry = {};\r\n\r\n  /**\r\n   * registry of displayWith objects\r\n   */\r\n  displayWithRegistry: { [key: string]: ChoiceHandler } = {};\r\n\r\n  /**\r\n   * register custom component\r\n   * @param key     the name of the component which is used in schema extension: widget=custom, widgetType=key\r\n   * @param value   the implementation class\r\n   */\r\n  registerComponent(key: string, value: Type) {\r\n    this.registry[key] = value;\r\n  }\r\n\r\n  /**\r\n   * register displayWith implementations\r\n   * @param key     the name of the implementation which is used in schema extension: displayWith=key\r\n   * @param value   the implementation class\r\n   */\r\n  registerDisplayWith(key: string, value: ChoiceHandler) {\r\n    this.displayWithRegistry[key] = value;\r\n  }\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n        to[j] = from[i];\r\n    return to;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n/**\r\n * directive for dynamically loading custom widgets\r\n */\r\n@Directive({\r\n    selector: '[libWidgetHost]'\r\n})\r\nexport class WidgetDirective {\r\n\r\n    /**\r\n     * allow caller to dynamically insert custom component\r\n     * @param viewContainerRef  dynamic component handle\r\n     */\r\n    constructor(public viewContainerRef: ViewContainerRef) { }\r\n}\r\n","/**\r\n * static JsonPointer implementation\r\n */\r\nexport class JsonPointer {\r\n\r\n    /**\r\n     * evaluate the JSON pointer on o\r\n     */\r\n    static jsonPointer(o: any, pointer: string): any {\r\n        return JsonPointer.jsonPointer2(o, JsonPointer.split(pointer));\r\n    }\r\n\r\n    /**\r\n     * evaluate the JSON pointer (parsed array of paths) on o\r\n     */\r\n    static jsonPointer2(o: any, paths: string[]): any {\r\n\r\n        if (o === undefined) {\r\n            return undefined;\r\n        }\r\n\r\n        if (paths.length === 0) {\r\n            return o;\r\n        }\r\n\r\n        const path = paths[0];\r\n        const np = Object.assign([], paths);\r\n        np.splice(0, 1);\r\n\r\n        if (paths[0] === '*') {\r\n            const res = [];\r\n            for (const f of (typeof (o) === 'object' ? Object.values(o) : o)) {\r\n                res.push(this.jsonPointer2(f, np));\r\n            }\r\n            return res;\r\n        } else {\r\n            return this.jsonPointer2(o[path], np);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * strip leading / and split the JSON pointer\r\n     */\r\n    static split(s: string): string[] {\r\n        if (s === '') {\r\n            return [];\r\n        }\r\n        if (s.startsWith('/')) {\r\n            s = s.substring(1);\r\n            const arr = s.split('/');\r\n            for (const a of arr) {\r\n                if (a === '') {\r\n                    throw new Error('JSON Pointer must not contain an empty reference token');\r\n                }\r\n            }\r\n            return arr;\r\n        }\r\n        throw new Error('JSON Pointer must start with /');\r\n    }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { Schema } from './schema';\r\nimport { map, publishReplay, refCount, switchMap } from 'rxjs/operators';\r\nimport jsonata from 'jsonata';\r\n\r\n/**\r\n * class backing a select / autocomplete option\r\n */\r\nexport interface Choice {\r\n\r\n    /**\r\n     * select value\r\n     */\r\n    value: any;\r\n\r\n    /**\r\n     * display name\r\n     */\r\n    name: string;\r\n}\r\n\r\n/**\r\n * interface for choice handlers for select / autocomplete choices\r\n */\r\nexport interface ChoiceHandler {\r\n\r\n    /**\r\n     * loads the choices\r\n     */\r\n    load(value: any, schema: Schema): Observable;\r\n\r\n    /**\r\n     * user typed in autocomplete field\r\n     */\r\n    filter(value: any, schema: Schema, current: string, choices: Observable): Observable;\r\n\r\n    /**\r\n     * return a single choice (i.e. convert value to Choice)\r\n     */\r\n    choice(value: any, schema: Schema): Observable;\r\n\r\n    /**\r\n     * delay between keystrokes before new data is loaded\r\n     */\r\n    debounceTime(): number;\r\n}\r\n\r\n/**\r\n * default implementation that handles choices based on schema fields.\r\n * can be overriden via schema.displayWith\r\n */\r\nexport class DefaultChoiceHandler implements ChoiceHandler {\r\n\r\n    /**\r\n     * create default choice handler\r\n     *\r\n     * @param http      http connection client\r\n     */\r\n    constructor(private http: HttpClient) { }\r\n\r\n    /**\r\n     * http cache for REST request on config/Table (i.e. schema requests)\r\n     */\r\n    cache: Observable;\r\n\r\n    /**\r\n     * load choices\r\n     */\r\n    load(value: any, schema: Schema): Observable {\r\n\r\n        if (!this.cache) {\r\n            if (schema.choices) {\r\n                // static choices are given, convert them to Choice and merge the result\r\n                const arr: Observable[] = [];\r\n                for (const s of schema.choices) {\r\n                    arr.push(this.choice(s, schema));\r\n                }\r\n                this.cache = forkJoin(arr);\r\n            } else {\r\n                // load choices from URL\r\n                this.cache = this.getChoices(schema.choicesUrl, schema.choicesUrlArgs, schema.choicesVerb).pipe(\r\n                    switchMap(res => {\r\n                        if (schema.jsonata) {\r\n                            res = jsonata(schema.jsonata).evaluate(res);\r\n                            if (!Array.isArray(res)) {\r\n                                res = [res];\r\n\r\n                                // introduce jsonName, jsonValue\r\n                            }\r\n                        }\r\n                        const obs: Observable[] = [];\r\n                        for (const r of res) {\r\n                            obs.push(this.choice(r, schema));\r\n                        }\r\n                        return forkJoin(obs);\r\n                    }),\r\n\r\n                    // setup caching\r\n                    publishReplay(1),\r\n                    refCount()\r\n                );\r\n            }\r\n        }\r\n        return this.cache;\r\n    }\r\n\r\n    /**\r\n     * filter after keystroke\r\n     */\r\n    filter(value: any, schema: Schema, current: string, choices: Observable): Observable {\r\n        return choices.pipe(map(arr => {\r\n            if (!current) {\r\n                return arr;\r\n            }\r\n            const res = arr.filter(i => this.include(i, current));\r\n            return res;\r\n        }));\r\n    }\r\n\r\n    /**\r\n     * called from filter, intended to allow subclasses to easily change filter algorithm\r\n     */\r\n    include(i: Choice, current: string): boolean {\r\n        return i.name?.toLowerCase().includes(current.toLowerCase());\r\n    }\r\n\r\n    /**\r\n     * default choice implementation: just reuse value as name\r\n     * check for localName\r\n     */\r\n    choice(value: any, schema: Schema): Observable {\r\n        if (schema.displayWith === 'localName') {\r\n            for (const delimiter of ['/', '#', ':', '.']) {\r\n                const parts = value.split(delimiter);\r\n                if (parts.length > 1) {\r\n                    return of({ value, name: parts[parts.length - 1] });\r\n                }\r\n            }\r\n            return of({ value, name: value });\r\n        }\r\n        if (schema.jsonata) {\r\n            if (typeof value === 'object') {\r\n                return of(value);\r\n            } else {\r\n                // initially, value is a simple string\r\n                return of({ value, name: value });\r\n            }\r\n        }\r\n        if (schema.displayWithChoices) {\r\n            return of({ value, name: schema.displayWithChoices[schema.choices.indexOf(value)] });\r\n        }\r\n        return of({ value, name: value });\r\n    }\r\n\r\n    /**\r\n     * handle GET / POST\r\n     */\r\n    getChoices(url: string, args: any, verb: string): Observable {\r\n        if (verb === 'GET') {\r\n            return this.http.get(url, args);\r\n        } else {\r\n            return this.http.post(url, args, {\r\n                headers: new HttpHeaders({\r\n                    'Content-Type': 'application/json',\r\n                })\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * default: no delay\r\n     */\r\n    debounceTime() {\r\n        return 0;\r\n    }\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n/**\r\n * dialog to edit a JSON node in a layout structure\r\n */\r\n@Component({\r\n  selector: 'lib-edit-element-dialog',\r\n  templateUrl: './edit-element-dialog.component.html'\r\n})\r\nexport class EditElementDialogComponent {\r\n\r\n  /**\r\n   * dialog constrcutor\r\n   * @param dialogRef   disloag ref\r\n   * @param data        data to edit\r\n   */\r\n  constructor(\r\n    public dialogRef: MatDialogRef,\r\n    @Inject(MAT_DIALOG_DATA) public data: any) {\r\n    this.schema = {\r\n      title: 'Edit form',\r\n      layout: 'vertical',\r\n      order: [\r\n        ['widget', 'layout', 'itemlayout'],\r\n        ['title', 'description'],\r\n        ['example', 'readOnly'],\r\n        ['required', 'format', 'errorMessage'],\r\n        'choices', 'class', 'style'\r\n      ],\r\n      static: true,\r\n      type: 'object',\r\n      properties: {\r\n        // description, class, style are always applicable\r\n        description: { type: 'string', static: true, title: 'Description / tooltip' },\r\n        class: { type: 'array', items: { type: 'string' }, layout: 'chips', style: { width: '365px' }, static: true, title: 'CSS classes' },\r\n        style: { type: 'object', additionalProperties: { type: 'string' }, static: true, title: 'CSS styles' }\r\n      }\r\n    };\r\n\r\n    if (data.properties) {\r\n      // only show required and error message for objects\r\n      this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n      this.schema.properties.required = {\r\n        choices: Object.keys(data.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,\r\n        title: 'Required fields'\r\n      };\r\n      this.schema.properties.layout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Screen layout' };\r\n    } else {\r\n      if (data.items) {\r\n        this.schema.properties.layout = {\r\n          type: 'string', enum: ['vertical', 'horizontal', 'select', 'tab', 'table', 'chips'],\r\n          static: true, title: 'Screen Layout'\r\n        };\r\n        this.schema.properties.itemlayout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Item screen layout' };\r\n      }\r\n      if (data.items?.properties) {\r\n        // array of objects\r\n        this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n        this.schema.properties.required = {\r\n          choices: Object.keys(data.items.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,\r\n          title: 'Required fields'\r\n        };\r\n      } else {\r\n        // array of simple types\r\n        this.schema.properties.readOnly = {\r\n          type: 'boolean', static: true, title: 'Read only value', style: { 'padding-top': '15px' }\r\n        };\r\n        this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n        this.schema.properties.format = {\r\n          type: 'string', static: true, title: 'Format',\r\n          widget: 'select', choices: [null, 'email', 'ipv4', 'url', 'uri']\r\n        };\r\n        this.schema.properties.example = { type: 'string', static: true, title: 'Example data' };\r\n        this.schema.properties.title = { type: 'string', static: true, title: 'Title' };\r\n        this.schema.properties.widget = {\r\n          type: 'string', enum: ['text', 'select', 'date', 'textarea', 'password'], static: true,\r\n          title: 'Form widget'\r\n        };\r\n        this.schema.properties.choices = {\r\n          type: 'array', items: { type: 'string' }, style: { width: '365px' },\r\n          layout: 'chips', static: true, title: 'Input choices'\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * schema to edit input form fields\r\n   */\r\n  schema: any;\r\n}\r\n","\r\n    \r\n\r\n\r\n    \r\n    \r\n","import { EventEmitter } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EditElementDialogComponent } from './edit-element-dialog.component';\r\nimport { Schema } from './schema';\r\n\r\n/**\r\n * form editor - has a 1:1 relationship to form node\r\n */\r\nexport class Edit {\r\n\r\n    /**\r\n     * get access to parent object's fields\r\n     *\r\n     * @param schemaChange  signal a change\r\n     * @param name          the current property name (key)\r\n     * @param schema        the current schema\r\n     * @param parent        the parent's schema (required in order to change the order)\r\n     * @param dialog        dialog service\r\n     */\r\n    constructor(\r\n        private schemaChange: EventEmitter, private name: string, private schema: Schema, private parent: Schema,\r\n        private dialog: MatDialog) {\r\n    }\r\n\r\n    /**\r\n     * can add if addable is not empty\r\n     */\r\n    canAdd(): boolean {\r\n        return this.addable().length > 0;\r\n    }\r\n\r\n    /**\r\n     * get the entries in \"properties\" that are not in \"order\"\r\n     */\r\n    addable(): string[] {\r\n        let s: Schema;\r\n        if (this.schema.properties) {\r\n            s = this.schema;\r\n        } else if (this.schema.items?.properties) {\r\n            s = this.schema.items;\r\n        } else if (this.schema.additionalProperties?.properties) {\r\n            s = this.schema.additionalProperties;\r\n        } else {\r\n            return [];\r\n        }\r\n        if (s.order) {\r\n            const set = new Set(Object.keys(s.properties));\r\n            for (const p of s.order) {\r\n                if (Array.isArray(p)) {\r\n                    for (const q of p) {\r\n                        set.delete(q);\r\n                    }\r\n                } else {\r\n                    set.delete(p);\r\n                }\r\n            }\r\n            return Array.from(set);\r\n        } else {\r\n            return [];\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add a hidden prop to the end of the list\r\n     */\r\n    addSub(prop: string) {\r\n        const index = this.parent.order.indexOf(this.name);\r\n        if (index >= 0) {\r\n            this.parent.order[index] = [(this.parent.order[index] as string), prop];\r\n        } else {\r\n            for (const p of this.parent.order) {\r\n                if (Array.isArray(p)) {\r\n                    if (p.indexOf(this.name) >= 0) {\r\n                        p.push(prop);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.schemaChange.emit();\r\n    }\r\n\r\n    /**\r\n     * can add if addable is not empty\r\n     */\r\n    canAddSub(): boolean {\r\n        return this.subaddable().length > 0;\r\n    }\r\n\r\n    /**\r\n     * get the entries in \"properties\" that are not in \"order\"\r\n     */\r\n    subaddable(): string[] {\r\n        if (this.parent?.order) {\r\n            const set = new Set(Object.keys(this.parent.properties));\r\n            for (const p of this.parent.order) {\r\n                if (Array.isArray(p)) {\r\n                    for (const q of p) {\r\n                        set.delete(q);\r\n                    }\r\n                } else {\r\n                    set.delete(p);\r\n                }\r\n            }\r\n            return Array.from(set);\r\n        } else {\r\n            return [];\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add a hidden prop to the end of the list\r\n     */\r\n    add(prop: string) {\r\n        if (this.schema.properties) {\r\n            this.schema.order.push(prop);\r\n        } else if (this.schema.items?.properties) {\r\n            this.schema.items.order.push(prop);\r\n        } else {\r\n            this.schema.additionalProperties.order.push(prop);\r\n        }\r\n        this.schemaChange.emit();\r\n    }\r\n\r\n    /**\r\n     * edit simple schema fields like title and description\r\n     */\r\n    edit() {\r\n        // deep clone object so we have the possibility to cancel editing\r\n        const clone = JSON.parse(JSON.stringify(this.schema));\r\n\r\n        // handle (array) example\r\n        if (clone.items?.examples?.length > 0) {\r\n            clone.example = clone.items.examples[0];\r\n        }\r\n        if (clone.examples?.length > 0) {\r\n            clone.example = clone.examples[0];\r\n        }\r\n\r\n        // text is default\r\n        if (!clone.widget) {\r\n            clone.widget = 'text';\r\n        }\r\n\r\n        // horizontal is default\r\n        if (!clone.layout) {\r\n            clone.layout = 'horizontal';\r\n        }\r\n\r\n        // array: apply choices and widget to items\r\n        if (clone.items) {\r\n            clone.widget = clone.items.widget;\r\n            clone.choices = clone.items.choices;\r\n            clone.errorMessage = clone.items.errorMessage;\r\n            clone.format = clone.items.format;\r\n            clone.required = clone.items.required;\r\n            clone.itemlayout = clone.items.layout;\r\n        }\r\n\r\n        const dialogRef = this.dialog.open(EditElementDialogComponent, { minWidth: '50%', data: clone });\r\n        dialogRef.afterClosed().subscribe(data => {\r\n            if (data) {\r\n                this.schema.title = data.title;\r\n                this.schema.description = data.description;\r\n                this.schema.widget = data.widget;\r\n                this.schema.layout = data.layout;\r\n                this.schema.readOnly = data.readOnly;\r\n                this.schema.errorMessage = data.errorMessage;\r\n                if (data.example) {\r\n                    if (data.items) {\r\n                        this.schema.items.examples = [data.example];\r\n                    } else {\r\n                        this.schema.examples = [data.example];\r\n                    }\r\n                }\r\n                if (data.style) {\r\n                    delete data.style[''];\r\n                }\r\n                if (data.style && Object.keys(data.style).length > 0) {\r\n                    this.schema.style = data.style;\r\n                }\r\n                if (data.class) {\r\n                    data.class = data.class.filter(el => el != null);\r\n                }\r\n                if (data.class?.length > 0) {\r\n                    this.schema.class = data.class;\r\n                }\r\n                if (data.items) {\r\n                    if (data.choices?.length > 0) {\r\n                        this.schema.items.choices = data.choices;\r\n                    }\r\n                    this.schema.items.widget = data.widget;\r\n                    this.schema.items.format = data.format;\r\n                    this.schema.items.errorMessage = data.errorMessage;\r\n                    this.schema.items.required = data.required;\r\n                    this.schema.items.layout = data.itemlayout;\r\n                } else {\r\n                    this.schema.choices = data.choices;\r\n                    this.schema.widget = data.widget;\r\n                    this.schema.format = data.format;\r\n                    this.schema.errorMessage = data.errorMessage;\r\n                    this.schema.required = data.required;\r\n                }\r\n                this.schemaChange.emit();\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * can hide if I my parent is an object\r\n     */\r\n    canHide(): boolean {\r\n        return this.parent ? true : false;\r\n    }\r\n\r\n    /**\r\n     * hide this prop\r\n     */\r\n    hide() {\r\n        if (!this.parent.order) {\r\n            this.parent.order = Object.keys(this.parent.properties);\r\n        }\r\n        let index = 0;\r\n        for (const p of this.parent.order) {\r\n            if (Array.isArray(p)) {\r\n                if (p.indexOf(this.name) >= 0) {\r\n                    p.splice(p.indexOf(this.name), 1);\r\n                    if (p.length === 1) {\r\n                        this.parent.order[index] = p[0];\r\n                    }\r\n                }\r\n            }\r\n            index++;\r\n        }\r\n        if (this.parent.order.indexOf(this.name) >= 0) {\r\n            this.parent.order.splice(this.parent.order.indexOf(this.name), 1);\r\n        }\r\n        this.schemaChange.emit();\r\n    }\r\n\r\n    /**\r\n     * can I go up\r\n     */\r\n    canUp(): boolean {\r\n        if (!this.parent) {\r\n            return false;\r\n        }\r\n        const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);\r\n        const index = props.indexOf(this.name);\r\n        if (index >= 0) {\r\n            return index > 0;\r\n        } else {\r\n            for (const p of props) {\r\n                if (Array.isArray(p)) {\r\n                    if (p.indexOf(this.name) >= 0) {\r\n                        return p.indexOf(this.name) > 0;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * go up\r\n     */\r\n    up() {\r\n        if (!this.parent.order) {\r\n            this.parent.order = Object.keys(this.parent.properties);\r\n        }\r\n        let index = this.parent.order.indexOf(this.name);\r\n        if (index >= 0) {\r\n            const tmp = this.parent.order[index - 1];\r\n            this.parent.order[index - 1] = this.parent.order[index];\r\n            this.parent.order[index] = tmp;\r\n        } else {\r\n            for (const p of this.parent.order) {\r\n                if (Array.isArray(p)) {\r\n                    index = p.indexOf(this.name);\r\n                    if (index >= 0) {\r\n                        const tmp = p[index - 1];\r\n                        p[index - 1] = p[index];\r\n                        p[index] = tmp;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.schemaChange.emit();\r\n    }\r\n\r\n    /**\r\n     * can I go down\r\n     */\r\n    canDown(): boolean {\r\n        if (!this.parent) {\r\n            return false;\r\n        }\r\n        const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);\r\n        const index = props.indexOf(this.name);\r\n        if (index >= 0) {\r\n            return index < props.length - 1;\r\n        } else {\r\n            for (const p of props) {\r\n                if (Array.isArray(p)) {\r\n                    if (p.indexOf(this.name) >= 0) {\r\n                        return p.indexOf(this.name) < p.length - 1;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * go down\r\n     */\r\n    down() {\r\n        if (!this.parent.order) {\r\n            this.parent.order = Object.keys(this.parent.properties);\r\n        }\r\n        let index = this.parent.order.indexOf(this.name);\r\n        if (index >= 0) {\r\n            const tmp = this.parent.order[index + 1];\r\n            this.parent.order[index + 1] = this.parent.order[index];\r\n            this.parent.order[index] = tmp;\r\n        } else {\r\n            for (const p of this.parent.order) {\r\n                if (Array.isArray(p)) {\r\n                    index = p.indexOf(this.name);\r\n                    if (index >= 0) {\r\n                        const tmp = p[index + 1];\r\n                        p[index + 1] = p[index];\r\n                        p[index] = tmp;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.schemaChange.emit();\r\n    }\r\n}\r\n","\r\n  \r\n    {{label}}\r\n    {{schema.description}}\r\n  \r\n  \r\n  \r\n\r\n\r\n
\r\n\r\n
\r\n \r\n more_vert\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n {{x}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n {{getLabel()}} key\r\n \r\n \r\n  \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{x.key}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n {{v}}\r\n cancel\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{x.value.title ? x.value.title : x.key}}
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n {{x}}\r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n \r\n {{label}}\r\n \r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n

{{error()}}

\r\n
\r\n
\r\n\r\n","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n SimpleChanges,\r\n OnChanges,\r\n ComponentFactoryResolver,\r\n ViewChild,\r\n ViewChildren,\r\n QueryList,\r\n} from \"@angular/core\";\r\nimport { MatSelectChange } from \"@angular/material/select\";\r\nimport { MatDatepickerInputEvent } from \"@angular/material/datepicker\";\r\nimport { MatCheckboxChange } from \"@angular/material/checkbox\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { forkJoin, Observable, ReplaySubject } from \"rxjs\";\r\nimport { KeyValue } from \"@angular/common\";\r\nimport { Schema } from \"./schema\";\r\nimport { WidgetComponent } from \"./widget.component\";\r\nimport { WidgetDirective } from \"./widget.directive\";\r\nimport { JsonSchemaFormService } from \"./json-schema-form.service\";\r\nimport { MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\r\nimport { JsonPointer } from \"./json-pointer\";\r\nimport { Choice, ChoiceHandler, DefaultChoiceHandler } from \"./choice\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport { debounceTime, startWith, switchMap } from \"rxjs/operators\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { Edit } from \"./edit\";\r\nimport { MatChipInputEvent } from \"@angular/material/chips\";\r\nimport { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\nimport { COMMA, ENTER, TAB } from \"@angular/cdk/keycodes\";\r\nimport jsonata from \"jsonata\";\r\n\r\n/**\r\n * generates an input form base on JSON schema and JSON object.\r\n * The component is used recursively.\r\n */\r\n@Component({\r\n selector: \"lib-json-schema-form\",\r\n templateUrl: \"./json-schema-form.component.html\",\r\n styleUrls: [\"./json-schema-form.component.css\"],\r\n})\r\nexport class JsonSchemaFormComponent implements OnInit, OnChanges {\r\n /**\r\n * component constructor\r\n * @param http http client\r\n * @param componentFactoryResolver allows dynamic components\r\n * @param service application service for registering components etc.\r\n * @param dialog dialog service\r\n */\r\n constructor(\r\n private http: HttpClient,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n public service: JsonSchemaFormService,\r\n private dialog: MatDialog\r\n ) {}\r\n\r\n /**\r\n * container children for event propagation\r\n */\r\n @ViewChildren(\"children\") children: QueryList;\r\n\r\n /**\r\n * container children for event propagation\r\n */\r\n @ViewChild(\"child\") child: JsonSchemaFormComponent;\r\n\r\n /**\r\n * if an array is displayed, indicates which array index is being hovered over in order to\r\n * display the \"-\" remove button\r\n */\r\n hover: number;\r\n\r\n /**\r\n * the name of the input field (only set if inside type: object)\r\n */\r\n @Input() name: string;\r\n\r\n /**\r\n * the label of the input field\r\n */\r\n @Input() label: string;\r\n\r\n /**\r\n * the input value\r\n */\r\n @Input() value: any;\r\n\r\n /**\r\n * root form value (can be used in custom components)\r\n */\r\n @Input() rootValue: any;\r\n\r\n /**\r\n * emit changes done by the user in the component\r\n */\r\n @Output() valueChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * emit whether this part of the form is valid\r\n */\r\n @Output() errorChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * indicate schema changes done via the layout editor\r\n */\r\n @Output() schemaChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * JSON schema to use\r\n */\r\n @Input() schema: Schema;\r\n\r\n /**\r\n * parent schema to edit required\r\n */\r\n @Input() parentSchema: Schema;\r\n\r\n /**\r\n * form editor\r\n */\r\n edit: Edit;\r\n\r\n /**\r\n * root JSON schema to use when looking up $ref (simply passed along the tree)\r\n */\r\n @Input() rootSchema: Schema;\r\n\r\n /**\r\n * base URL for resolving $ref\r\n */\r\n @Input() base: string;\r\n\r\n /**\r\n * indicates whether this is the root of the component tree\r\n */\r\n isRoot = false;\r\n\r\n /**\r\n * if present: value of the switch property that determines whether this component renders itself\r\n * (schema.case not present or schema.case === switch)\r\n */\r\n @Input() switch: string;\r\n\r\n /**\r\n * indicates to child components whether the parent object has hideUndefined set (i.e. do not render yourself\r\n * if your value is undefined)\r\n */\r\n @Input() hideUndefined: boolean;\r\n\r\n /**\r\n * are we already in the expansion panel?\r\n */\r\n @Input() inExpansion: boolean;\r\n\r\n /**\r\n * are we already in an array?\r\n */\r\n @Input() inArray: boolean;\r\n\r\n /**\r\n * required imported from parent\r\n */\r\n @Input() required: boolean;\r\n\r\n /**\r\n * hook for custom widgets\r\n */\r\n @ViewChild(WidgetDirective, { static: true }) widgetHost: WidgetDirective;\r\n\r\n /**\r\n * order field transforms properties into this structure.\r\n * allows omission, ordering and hierarchy\r\n */\r\n orderedProperties: { [key: string]: Schema }[];\r\n\r\n /**\r\n * make sure to return the same date object instance (cannot delete date #83)\r\n */\r\n date: Date;\r\n\r\n /**\r\n * choices that might be loaded async, initialized with current value and its potentially delayed toString value\r\n */\r\n choices: ReplaySubject;\r\n\r\n /**\r\n * autocomplete filtered choices\r\n */\r\n filteredOptions: Observable;\r\n\r\n /**\r\n * autocomplete form control for simpler change detection\r\n */\r\n control: FormControl;\r\n\r\n /**\r\n * implementation specified in displayWith\r\n */\r\n ch: ChoiceHandler;\r\n\r\n /**\r\n * complete chip entry with enter or comma\r\n */\r\n readonly separatorKeysCodes: number[] = [ENTER, COMMA, TAB];\r\n\r\n /**\r\n * readOnly if schema.readOnly or schema.createOnly and value set\r\n */\r\n readOnly: boolean;\r\n\r\n /**\r\n * error from a custom component\r\n */\r\n customError: string;\r\n\r\n /**\r\n * apply order, called anytime properties are set\r\n */\r\n setOrderedProperties() {\r\n if (this.schema.order) {\r\n this.orderedProperties = [];\r\n for (const p of this.schema.order) {\r\n const arr = Array.isArray(p) ? p : [p];\r\n const o = {};\r\n for (const q of arr) {\r\n o[q] = this.schema.properties[q];\r\n }\r\n this.orderedProperties.push(o);\r\n }\r\n } else if (this.schema.properties) {\r\n this.orderedProperties = [];\r\n for (const [key, value] of Object.entries(this.schema.properties)) {\r\n const o = {};\r\n o[key] = value;\r\n this.orderedProperties.push(o);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * initialize the comonent.\r\n * replace undefined with null and init autocomplete choices\r\n */\r\n ngOnInit(): void {\r\n this.readOnly =\r\n this.schema.readOnly || (this.schema.createOnly && this.value);\r\n\r\n if (!this.rootSchema) {\r\n this.rootSchema = this.schema;\r\n this.rootValue = this.value;\r\n this.isRoot = true;\r\n }\r\n\r\n if (!this.schema.type) {\r\n const p = this.schema.$ref;\r\n const parts = p.split(\"#\");\r\n if (parts.length === 1) {\r\n // URL only\r\n this.url(parts[0], null);\r\n } else {\r\n if (parts[0]) {\r\n // URL + anchor\r\n this.url(parts[0], parts[1]);\r\n } else {\r\n // local ref\r\n this.schema = JsonPointer.jsonPointer(this.rootSchema, parts[1]);\r\n this.setOrderedProperties();\r\n }\r\n }\r\n } else {\r\n this.setOrderedProperties();\r\n }\r\n\r\n if (typeof this.value === \"undefined\") {\r\n if (this.schema.default) {\r\n this.value = this.schema.default;\r\n setTimeout(() => this.emit(this.value), 500);\r\n } else {\r\n if (!this.hideUndefined) {\r\n this.value = null;\r\n }\r\n }\r\n }\r\n\r\n if (this.getLayout() === \"custom\") {\r\n this.loadComponent();\r\n }\r\n\r\n if (this.isRoot) {\r\n setTimeout(() => {\r\n this.errorChange.emit(this.recursiveError());\r\n }, 10);\r\n }\r\n\r\n this.ch = this.service.displayWithRegistry[this.schema.displayWith];\r\n if (!this.ch) {\r\n this.ch = new DefaultChoiceHandler(this.http);\r\n }\r\n this.control = new FormControl(this.value);\r\n this.choices = new ReplaySubject();\r\n if (Array.isArray(this.value)) {\r\n const arr = [];\r\n for (const i of this.value) {\r\n arr.push({ name: i, value: i });\r\n }\r\n this.choices.next(arr);\r\n } else {\r\n this.choices.next([{ name: this.value, value: this.value }]);\r\n }\r\n if (this.value || this.value === 0) {\r\n if (Array.isArray(this.value)) {\r\n const arr: Observable[] = [];\r\n for (const i of this.value) {\r\n arr.push(this.ch.choice(i, this.schema));\r\n }\r\n forkJoin(arr).subscribe((res) => this.choices.next(res));\r\n } else {\r\n this.ch\r\n .choice(this.value, this.schema)\r\n .subscribe((res) => this.choices.next([res]));\r\n }\r\n }\r\n this.filteredOptions = this.control.valueChanges.pipe(\r\n startWith(this.value),\r\n debounceTime(this.ch.debounceTime()),\r\n switchMap((x) => {\r\n this.change({ target: { value: x } });\r\n return this.ch.filter(this.value, this.schema, x, this.choices);\r\n })\r\n );\r\n\r\n this.edit = new Edit(\r\n this.schemaChange,\r\n this.name,\r\n this.schema,\r\n this.parentSchema,\r\n this.dialog\r\n );\r\n }\r\n\r\n /**\r\n * choice element activated - load values\r\n */\r\n focus() {\r\n this.ch.load(this.value, this.schema).subscribe((res) => {\r\n this.choices.next(res);\r\n });\r\n }\r\n\r\n /**\r\n * load schema from ref, apply pointer if needed\r\n */\r\n url(ref: string, pointer: string) {\r\n // URL + anchor\r\n this.base = this.base ? new URL(ref, this.base).href : ref;\r\n\r\n // check root schema referenced map\r\n if (this.rootSchema.referenced && this.rootSchema.referenced[this.base]) {\r\n const res = this.rootSchema.referenced[this.base];\r\n this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;\r\n this.setOrderedProperties();\r\n return;\r\n }\r\n\r\n this.http.get(this.base).subscribe(\r\n (res) => {\r\n this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;\r\n this.setOrderedProperties();\r\n },\r\n (error) => console.log(error)\r\n );\r\n\r\n // set temporary pseudo schema\r\n this.schema = { type: \"string\" };\r\n this.setOrderedProperties();\r\n }\r\n\r\n /**\r\n * emit valueChange event and also any validation error\r\n */\r\n emit(event: any) {\r\n this.valueChange.emit(event);\r\n if (this.isRoot) {\r\n setTimeout(() => {\r\n this.errorChange.emit(this.recursiveError());\r\n }, 10);\r\n }\r\n }\r\n\r\n /**\r\n * if the schema changes from the outside,\r\n * reset the component state wrt. errors and the choices cache\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.schema) {\r\n if (changes.schema.previousValue) {\r\n this.rootSchema = null;\r\n if (this.widgetHost.viewContainerRef) {\r\n this.widgetHost.viewContainerRef.clear();\r\n }\r\n this.ngOnInit();\r\n }\r\n }\r\n\r\n if (changes.switch && !changes.switch.isFirstChange()) {\r\n if (this.getLayout() === \"custom\") {\r\n this.loadComponent();\r\n } else {\r\n if (this.widgetHost.viewContainerRef) {\r\n this.widgetHost.viewContainerRef.clear();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * angular pipe sorting function for keyValue - keep the JSON order and do not\r\n * order alphabetically\r\n */\r\n originalOrder = (\r\n a: KeyValue,\r\n b: KeyValue\r\n ): number => {\r\n return 0;\r\n };\r\n\r\n /**\r\n * key method to instruct the display which HTML block to activate.\r\n */\r\n getLayout(): string {\r\n if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {\r\n return \"none\";\r\n }\r\n if (this.schema.widget === \"custom\") {\r\n return \"custom\";\r\n }\r\n if (this.hideUndefined && this.value === undefined) {\r\n return \"none\";\r\n }\r\n if (this.schema.type === \"object\") {\r\n if (this.schema.additionalProperties) {\r\n if (this.schema.layout === \"tab\") {\r\n return \"additionalPropertiesTab\";\r\n }\r\n return \"additionalProperties\";\r\n }\r\n return \"object\";\r\n }\r\n if (this.schema.type === \"array\") {\r\n if (this.schema.layout === \"tab\") {\r\n return \"tab\";\r\n }\r\n if (this.schema.layout === \"table\") {\r\n return \"table\";\r\n }\r\n if (this.schema.layout === \"select\") {\r\n return \"array-select\";\r\n }\r\n if (this.schema.layout === \"chips\") {\r\n return \"chips\";\r\n }\r\n return \"array\";\r\n }\r\n if (this.schema.enum) {\r\n return \"enum\";\r\n }\r\n if (this.schema.widget === \"date\") {\r\n return \"date\";\r\n }\r\n if (this.schema.widget === \"upload\") {\r\n return \"upload\";\r\n }\r\n if (this.schema.widget === \"textarea\") {\r\n return \"textarea\";\r\n }\r\n if (this.schema.type === \"boolean\") {\r\n return \"checkbox\";\r\n }\r\n if (this.schema.choicesUrl) {\r\n return \"autocomplete\";\r\n }\r\n if (this.schema.choices) {\r\n return \"autocomplete\";\r\n }\r\n if (this.schema.displayWith) {\r\n return \"autocomplete\";\r\n }\r\n return \"single\";\r\n }\r\n\r\n /**\r\n * called from template in the \"simple\" type. If \"type\" is \"number\" or \"integer\",\r\n * the HTML input type is \"number\" which avoids normal string input\r\n */\r\n getInputType(schema: Schema): string {\r\n if (schema.type === \"number\") {\r\n return \"number\";\r\n }\r\n if (schema.type === \"integer\") {\r\n return \"number\";\r\n }\r\n return schema.widget;\r\n }\r\n\r\n /**\r\n * event handler for object display. Catches the child component event and\r\n * handle it by setting the value[key].\r\n * Also init null objects with {}\r\n */\r\n onValueChange(key: string, value: any) {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n this.value[key] = value;\r\n\r\n if (this.schema.computed) {\r\n for (const field of Object.keys(this.schema.computed)) {\r\n const expression = this.schema.computed[field];\r\n this.value[field] = jsonata(expression).evaluate(this.value);\r\n }\r\n }\r\n\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * add an element to an array.\r\n * null arrays are initialized with []\r\n */\r\n add() {\r\n if (!(this.value instanceof Array)) {\r\n this.value = [];\r\n }\r\n if (this.schema.items.type === \"array\") {\r\n this.value.push([]);\r\n } else if (this.schema.items.type === \"object\") {\r\n this.value.push({});\r\n } else {\r\n this.value.push(null);\r\n }\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * event handler for adding a field\r\n */\r\n addField() {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n if (this.value[\"\"]) {\r\n return;\r\n }\r\n this.value[\"\"] = null;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * remove an element from an array\r\n */\r\n remove(i: number) {\r\n this.value.splice(i, 1);\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * remove a field\r\n */\r\n removeField(key: string) {\r\n delete this.value[key];\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * event handler for changed field names with \"additionalProperties\"\r\n */\r\n fieldNameChange(key: string, newvalue: any) {\r\n this.value[newvalue] = this.value[key];\r\n delete this.value[key];\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * returns the validation error on this level and call recursively for all children.\r\n * returns null if the form contents is valid\r\n */\r\n recursiveError(): string {\r\n const e = this.error();\r\n if (e) {\r\n return e;\r\n }\r\n if (this.child) {\r\n return this.child.recursiveError();\r\n }\r\n if (this.children) {\r\n for (const c of this.children) {\r\n const r = c.recursiveError();\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * return the error message provided in the schema or the generic error message\r\n * returned from the validation code\r\n */\r\n e(error: string): string {\r\n if (this.schema.errorMessage) {\r\n return this.schema.errorMessage;\r\n }\r\n return error;\r\n }\r\n\r\n /**\r\n * return error string\r\n */\r\n error(): string {\r\n if (this.schema.widget === \"custom\") {\r\n return this.customError;\r\n }\r\n if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {\r\n return null;\r\n }\r\n if (this.value) {\r\n if (this.schema.maxItems) {\r\n if (!(this.value.length <= this.schema.maxItems)) {\r\n return this.e(\r\n \"Only \" + this.schema.maxItems + \" array entries allowed\"\r\n );\r\n }\r\n }\r\n if (this.schema.uniqueItems) {\r\n if (!(new Set(this.value).size === this.value.length)) {\r\n return this.e(\"Array entries must be unique\");\r\n }\r\n }\r\n if (this.schema.minItems) {\r\n if (!(this.value.length >= this.schema.minItems)) {\r\n return this.e(\r\n \"At least \" + this.schema.minItems + \" array entries required\"\r\n );\r\n }\r\n }\r\n if (this.schema.maxProperties) {\r\n if (!(Object.keys(this.value).length <= this.schema.maxProperties)) {\r\n return this.e(\r\n \"Only \" + this.schema.maxProperties + \" fields allowed\"\r\n );\r\n }\r\n }\r\n if (this.schema.propertyNames) {\r\n for (const key of Object.keys(this.value)) {\r\n const re = new RegExp(this.schema.propertyNames);\r\n if (!re.test(key)) {\r\n return this.e(\"illegal field name: \" + key);\r\n }\r\n }\r\n }\r\n if (this.schema.dependencies) {\r\n for (const dep of Object.keys(this.schema.dependencies)) {\r\n if (this.value[dep]) {\r\n for (const l of this.schema.dependencies[dep]) {\r\n if (!this.value[l]) {\r\n return this.e(dep + \" depends on \" + l);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.schema.minProperties) {\r\n if (!(Object.keys(this.value).length >= this.schema.minProperties)) {\r\n return this.e(\r\n \"At least \" + this.schema.minProperties + \" fields required\"\r\n );\r\n }\r\n }\r\n if (this.schema.maxLength) {\r\n if (!((\"\" + this.value).length <= this.schema.maxLength)) {\r\n return this.e(\"Input is longer than \" + this.schema.maxLength);\r\n }\r\n }\r\n if (this.schema.minLength) {\r\n if (!((\"\" + this.value).length >= this.schema.minLength)) {\r\n return this.e(\"Input is shorter than \" + this.schema.minLength);\r\n }\r\n }\r\n if (this.schema.multipleOf) {\r\n if (!Number.isInteger(Number(this.value) / this.schema.multipleOf)) {\r\n return this.e(\"Must be multiple of \" + this.schema.multipleOf);\r\n }\r\n }\r\n if (this.schema.exclusiveMaximum) {\r\n if (!(Number(this.value) < this.schema.exclusiveMaximum)) {\r\n return this.e(\"Must be less than \" + this.schema.exclusiveMaximum);\r\n }\r\n }\r\n if (this.schema.maximum) {\r\n if (!(Number(this.value) <= this.schema.maximum)) {\r\n return this.e(\"Must be less than or equal \" + this.schema.maximum);\r\n }\r\n }\r\n if (this.schema.exclusiveMinimum) {\r\n if (!(Number(this.value) > this.schema.exclusiveMinimum)) {\r\n return this.e(\"Must greater than \" + this.schema.exclusiveMinimum);\r\n }\r\n }\r\n if (this.schema.minimum) {\r\n if (!(Number(this.value) >= this.schema.minimum)) {\r\n return this.e(\"Must greater than or equal \" + this.schema.minimum);\r\n }\r\n }\r\n }\r\n if (this.required) {\r\n if (this.value == null || Object.is(this.value, NaN)) {\r\n return this.e(\"required\");\r\n }\r\n }\r\n if (this.schema.required) {\r\n for (const dep of this.schema.required) {\r\n if (\r\n !this.value[dep] &&\r\n this.value[dep] !== false &&\r\n this.value[dep] !== 0\r\n ) {\r\n // ignore 'required' if dep is inactive due to switch / case\r\n let inactive = false;\r\n if (this.schema.switch) {\r\n const switc = this.value[this.schema.switch];\r\n if (switc && this.schema.properties[dep].case?.indexOf(switc) < 0) {\r\n inactive = true;\r\n }\r\n }\r\n if (!inactive) {\r\n return this.e(dep + \" is required\");\r\n }\r\n }\r\n }\r\n }\r\n if (this.schema.pattern) {\r\n const re = new RegExp(this.schema.pattern);\r\n if (!this.value) {\r\n return this.e(\"illegal string\");\r\n }\r\n if (!re.test(this.value)) {\r\n return this.e(\"illegal string\");\r\n }\r\n }\r\n if (this.schema.format && this.service.formats[this.schema.format]) {\r\n const re = new RegExp(this.service.formats[this.schema.format]);\r\n if (!this.value) {\r\n return this.e(\"illegal string\");\r\n }\r\n if (!re.test(this.value)) {\r\n return this.e(\"illegal string\");\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * use the element title if present, defaults to the label input or \"\" is both are null\r\n */\r\n getLabel(): string {\r\n if (this.schema.title) {\r\n return this.schema.title;\r\n }\r\n if (this.label) {\r\n return this.label;\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * input element change handler.\r\n * normalize the different kind of events, handle the datatypes, set the value and emit the change\r\n */\r\n change(event: any) {\r\n let eventTarget: any;\r\n\r\n if (event instanceof MatSelectChange) {\r\n event = event.value;\r\n } else if (event instanceof MatDatepickerInputEvent) {\r\n event = this.serializeDate(\r\n event.value,\r\n this.schema.dateFormat,\r\n this.schema.type\r\n );\r\n } else if (event instanceof MatAutocompleteSelectedEvent) {\r\n event = event.option.value;\r\n } else if (event instanceof MatCheckboxChange) {\r\n event = event.checked;\r\n } else {\r\n // save the event target in case the parsing changes the value\r\n // (e.g. integer input 5.3 becomes 5, this is reflected on the UI via this handle)\r\n eventTarget = event.target;\r\n event = event.target.value;\r\n }\r\n\r\n if (event === \"\") {\r\n event = null;\r\n }\r\n\r\n if (event == null) {\r\n this.value = null;\r\n }\r\n\r\n if (this.schema.type === \"number\") {\r\n this.value = parseFloat(event);\r\n } else if (this.schema.type === \"integer\") {\r\n this.value = parseInt(event, 10);\r\n } else if (this.schema.type === \"boolean\") {\r\n if (typeof event === \"string\") {\r\n if (event === \"true\") {\r\n this.value = true;\r\n } else if (event === \"false\") {\r\n this.value = false;\r\n } else {\r\n this.value = null;\r\n }\r\n } else {\r\n this.value = event;\r\n }\r\n } else if (this.schema.type === \"string\") {\r\n this.value = event;\r\n } else if (this.schema.type === \"array\") {\r\n this.value = event;\r\n } else {\r\n throw new Error(\"unknown type: \" + this.schema.type);\r\n }\r\n\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * allows for the result of a file upload to be written into a text form element\r\n */\r\n handleFileInput(event: any) {\r\n if (1024 * 1024 <= event.target.files.item(0).size) {\r\n console.log(\"The file size is limited to 1MB\");\r\n return;\r\n }\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.value = reader.result;\r\n this.emit(this.value);\r\n };\r\n \r\n reader.readAsDataURL(event.target.files.item(0));\r\n }\r\n\r\n /**\r\n * get example values from example array and default\r\n */\r\n example(): string {\r\n if (this.schema.examples && this.schema.examples[0]) {\r\n return this.schema.examples[0];\r\n }\r\n if (this.schema.default) {\r\n return this.schema.default;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * load the dynamic custom widget\r\n */\r\n loadComponent() {\r\n const componentFactory =\r\n this.componentFactoryResolver.resolveComponentFactory(\r\n this.service.registry[this.schema.widgetType]\r\n );\r\n const viewContainerRef = this.widgetHost.viewContainerRef;\r\n viewContainerRef.clear();\r\n const componentRef = viewContainerRef.createComponent(componentFactory);\r\n\r\n // input values\r\n (componentRef.instance as WidgetComponent).label = this.label;\r\n (componentRef.instance as WidgetComponent).value = this.value;\r\n (componentRef.instance as WidgetComponent).schema = this.schema;\r\n (componentRef.instance as WidgetComponent).rootSchema = this.rootSchema;\r\n (componentRef.instance as WidgetComponent).rootValue = this.rootValue;\r\n\r\n // subscribe to value changes and forward them\r\n (componentRef.instance as WidgetComponent).valueChange.subscribe((data) => {\r\n this.value = data;\r\n this.emit(this.value);\r\n });\r\n\r\n // subscribe to error changes and forward them\r\n (componentRef.instance as WidgetComponent).errorChange.subscribe(\r\n (error) => {\r\n this.customError = error;\r\n this.errorChange.emit(error);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * used for expansion panels - set value and forward event\r\n */\r\n setAndEmit(event: any) {\r\n this.value = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * set an array element and emit value change event\r\n */\r\n setIndexAndEmit(i: number, event: any) {\r\n this.value[i] = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * set an array element's field and emit value change event (applies to table layout)\r\n */\r\n setIndexAndEmitTable(i: number, field: string, event: any) {\r\n this.value[i][field] = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * used when hideUndefined is active. Called from the UI to\r\n * show a property with undefined value (in order to be able to set if in the form)\r\n */\r\n showProperty(prop: string) {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n if (this.value[prop] === undefined) {\r\n this.value[prop] = null;\r\n } else if (this.value[prop] === null) {\r\n this.value[prop] = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * used when hideUndefined is active. Called from the UI\r\n * to determine which properties are included in the \"to add\" list\r\n */\r\n showPropertyList(): string[] {\r\n if (this.schema.switch && this.value) {\r\n const sw = this.value[this.schema.switch];\r\n const props = [];\r\n for (const [k, v] of Object.entries(this.schema.properties)) {\r\n if (v.case) {\r\n if (v.case.includes(sw)) {\r\n props.push(k);\r\n }\r\n } else {\r\n props.push(k);\r\n }\r\n }\r\n return props.sort();\r\n } else {\r\n return Object.keys(this.schema.properties).sort();\r\n }\r\n }\r\n\r\n /**\r\n * string to date\r\n * @param date date string / number (millisecs since 1970)\r\n * @param format date format\r\n */\r\n parseDate(date: any, format: string): Date {\r\n if (!date && date !== 0) {\r\n return date;\r\n }\r\n if (typeof date === \"number\") {\r\n return this.sameDate(new Date(date));\r\n }\r\n if (!format) {\r\n return date;\r\n }\r\n const pdate = date.split(this.getDelimiter(format));\r\n const pformat = format.split(this.getDelimiter(format));\r\n return this.sameDate(\r\n new Date(\r\n pdate[pformat.indexOf(\"yyyy\")],\r\n pdate[pformat.indexOf(\"MM\")] - 1,\r\n pdate[pformat.indexOf(\"dd\")]\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * make sure to return the same date object instance (cannot delete date #83)\r\n */\r\n sameDate(nd: Date): Date {\r\n if (!this.date) {\r\n this.date = nd;\r\n }\r\n if (this.date.getTime() !== nd.getTime()) {\r\n this.date = nd;\r\n }\r\n return this.date;\r\n }\r\n\r\n /**\r\n * date to string\r\n * @param date the date to serialize\r\n * @param format the date format (e.g. dd-MM-yyyy)\r\n * @param type target datatype (allows serializing to millisecs since 1970)\r\n */\r\n serializeDate(date: Date, format: string, type: string): string {\r\n if (date == null) {\r\n return \"\";\r\n }\r\n if (type === \"integer\" || type === \"number\") {\r\n return \"\" + date.valueOf();\r\n }\r\n if (!format) {\r\n return date.toISOString();\r\n }\r\n const pformat = format.split(this.getDelimiter(format));\r\n const pdate = [null, null, null];\r\n pdate[pformat.indexOf(\"yyyy\")] = date.getFullYear();\r\n pdate[pformat.indexOf(\"MM\")] = date.getMonth() + 1;\r\n pdate[pformat.indexOf(\"dd\")] = date.getDate();\r\n return (\r\n pdate[0] +\r\n this.getDelimiter(format) +\r\n pdate[1] +\r\n this.getDelimiter(format) +\r\n pdate[2]\r\n );\r\n }\r\n\r\n /**\r\n * find the first non letter character in a date format such as dd/MM/yyyy (returns /)\r\n */\r\n getDelimiter(format: string): string {\r\n const delim = format.match(/\\W/g);\r\n if (!delim[0]) {\r\n throw new Error(\"No delimiter found in date format: \" + format);\r\n }\r\n return delim[0];\r\n }\r\n\r\n /**\r\n * new chip entered\r\n */\r\n addChip(event: MatChipInputEvent): void {\r\n const input = event.input;\r\n const value = event.value;\r\n\r\n // Add our fruit\r\n if ((value || \"\").trim()) {\r\n if (!this.value) {\r\n this.value = [];\r\n }\r\n this.value.push(value.trim());\r\n this.emit(this.value);\r\n }\r\n\r\n // Reset the input value\r\n if (input) {\r\n input.value = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * remove a chip\r\n */\r\n removeChip(v: string): void {\r\n const index = this.value.indexOf(v);\r\n if (index >= 0) {\r\n this.value.splice(index, 1);\r\n if (this.value.length === 0) {\r\n this.value = null;\r\n }\r\n this.emit(this.value);\r\n }\r\n }\r\n\r\n /**\r\n * chips d&d handler\r\n */\r\n dropChip(event: CdkDragDrop) {\r\n moveItemInArray(this.value, event.previousIndex, event.currentIndex);\r\n this.emit(this.value);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\r\n\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule, MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { WidgetDirective } from './widget.directive';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { EditElementDialogComponent } from './edit-element-dialog.component';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\n@NgModule({\r\n declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective],\r\n imports: [\r\n MatCardModule,\r\n FlexLayoutModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatTabsModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatDatepickerModule,\r\n MatCheckboxModule,\r\n MatAutocompleteModule,\r\n HttpClientModule,\r\n CommonModule,\r\n MatInputModule,\r\n MatNativeDateModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatMenuModule,\r\n ReactiveFormsModule,\r\n MatDialogModule,\r\n MatChipsModule,\r\n DragDropModule\r\n ],\r\n exports: [JsonSchemaFormComponent],\r\n providers: [\r\n // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892\r\n { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } }\r\n ]\r\n\r\n})\r\nexport class JsonSchemaFormModule { }\r\n","/*\r\n * Public API Surface of json-schema-form\r\n */\r\nexport * from './lib/json-schema-form.service';\r\nexport * from './lib/json-schema-form.component';\r\nexport * from './lib/json-schema-form.module';\r\nexport * from './lib/schema';\r\nexport * from './lib/widget.component';\r\nexport * from './lib/choice';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Injectable","Directive","forkJoin","switchMap","jsonata","publishReplay","refCount","map","of","HttpHeaders","MAT_DIALOG_DATA","i0.ɵɵelementStart","i0.ɵɵlistener","i0.ɵɵelementEnd","i0.ɵɵtext","i0.ɵɵadvance","i0.ɵɵproperty","Component","Inject","i0.ɵɵtextInterpolate","i0.ɵɵtemplate","i0.ɵɵtextInterpolate1","i0.ɵɵpropertyInterpolate","i0.ɵɵelement","EventEmitter","ENTER","COMMA","TAB","FormControl","ReplaySubject","startWith","debounceTime","MatSelectChange","MatDatepickerInputEvent","MatAutocompleteSelectedEvent","MatCheckboxChange","moveItemInArray","ViewChildren","ViewChild","Input","Output","MAT_TOOLTIP_DEFAULT_OPTIONS","MatCardModule","FlexLayoutModule","MatIconModule","MatTooltipModule","MatTableModule","MatTabsModule","MatFormFieldModule","MatSelectModule","MatDatepickerModule","MatCheckboxModule","MatAutocompleteModule","HttpClientModule","CommonModule","MatInputModule","MatNativeDateModule","MatButtonModule","MatExpansionModule","MatMenuModule","ReactiveFormsModule","MatDialogModule","MatChipsModule","DragDropModule","NgModule"],"mappings":";;;;;;;;;;IAGA;;;;QAGA;;;;YAQS,aAAQ,GAAG,KAAK,CAAC;;;;YAKxB,YAAO,GAAG;gBACR,KAAK,EAAE,yJAAyJ;gBAChK,IAAI,EAAE,uDAAuD;gBAC7D,GAAG,EAAE,yGAAyG;gBAC9G,GAAG,EAAE,sBAAsB;aAC5B,CAAC;;;;;YAMF,aAAQ,GAAG,EAAE,CAAC;;;;YAKd,wBAAmB,GAAqC,EAAE,CAAC;SAmB5D;;;;;;QAZC,iDAAiB,GAAjB,UAAkB,GAAW,EAAE,KAAgB;YAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SAC5B;;;;;;QAOD,mDAAmB,GAAnB,UAAoB,GAAW,EAAE,KAAoB;YACnD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACvC;;;8FA5CU,qBAAqB;iEAArB,qBAAqB,WAArB,qBAAqB,mBAFpB,MAAM;;gFAEP,qBAAqB;sBAHjCA,aAAU;uBAAC;wBACV,UAAU,EAAE,MAAM;qBACnB;;;;ICRD;;;;;;;;;;;;;;IAcA;IAEA,IAAI,aAAa,GAAG,UAAS,CAAC,EAAE,CAAC;QAC7B,aAAa,GAAG,MAAM,CAAC,cAAc;aAChC,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5E,UAAU,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC;aAEc,SAAS,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,IAAI;YACrC,MAAM,IAAI,SAAS,CAAC,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC;QAC9F,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,SAAS,EAAE,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;QACvC,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;IAEM,IAAI,QAAQ,GAAG;QAClB,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACjD,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjB,KAAK,IAAI,CAAC,IAAI,CAAC;oBAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAChF;YACD,OAAO,CAAC,CAAC;SACZ,CAAA;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAA;aAEe,MAAM,CAAC,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,KAAK,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC/E,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;YAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1E,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzB;QACL,OAAO,CAAC,CAAC;IACb,CAAC;aAEe,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;QACpD,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAC7H,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;YAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;;YAC1H,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;oBAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAClJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;aAEe,OAAO,CAAC,UAAU,EAAE,SAAS;QACzC,OAAO,UAAU,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAA;IACzE,CAAC;aAEe,UAAU,CAAC,WAAW,EAAE,aAAa;QACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACnI,CAAC;aAEe,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS;QACvD,SAAS,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAC5G,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM;YACrD,SAAS,SAAS,CAAC,KAAK,IAAI,IAAI;gBAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAAE;YAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAAE,EAAE;YAC3F,SAAS,QAAQ,CAAC,KAAK,IAAI,IAAI;gBAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aAAE;YAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAAE,EAAE;YAC9F,SAAS,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;YAC9G,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACzE,CAAC,CAAC;IACP,CAAC;aAEe,WAAW,CAAC,OAAO,EAAE,IAAI;QACrC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAa,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,cAAa,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzJ,SAAS,IAAI,CAAC,CAAC,IAAI,OAAO,UAAU,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAClE,SAAS,IAAI,CAAC,EAAE;YACZ,IAAI,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;YAC9D,OAAO,CAAC;gBAAE,IAAI;oBACV,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;wBAAE,OAAO,CAAC,CAAC;oBAC7J,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACxC,QAAQ,EAAE,CAAC,CAAC,CAAC;wBACT,KAAK,CAAC,CAAC;wBAAC,KAAK,CAAC;4BAAE,CAAC,GAAG,EAAE,CAAC;4BAAC,MAAM;wBAC9B,KAAK,CAAC;4BAAE,CAAC,CAAC,KAAK,EAAE,CAAC;4BAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;wBACxD,KAAK,CAAC;4BAAE,CAAC,CAAC,KAAK,EAAE,CAAC;4BAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;4BAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BAAC,SAAS;wBACjD,KAAK,CAAC;4BAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BAAC,SAAS;wBACjD;4BACI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gCAAE,CAAC,GAAG,CAAC,CAAC;gCAAC,SAAS;6BAAE;4BAC5G,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gCAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gCAAC,MAAM;6BAAE;4BACtF,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gCAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAC,CAAC,GAAG,EAAE,CAAC;gCAAC,MAAM;6BAAE;4BACrE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gCAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCAAC,MAAM;6BAAE;4BACnE,IAAI,CAAC,CAAC,CAAC,CAAC;gCAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BACtB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BAAC,SAAS;qBAC9B;oBACD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;iBAC9B;gBAAC,OAAO,CAAC,EAAE;oBAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC,GAAG,CAAC,CAAC;iBAAE;wBAAS;oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAAE;YAC1D,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACpF;IACL,CAAC;IAEM,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,IAAI,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9D,IAAI,EAAE,KAAK,SAAS;YAAE,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,cAAa,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC,KAAK,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,EAAE,KAAK,SAAS;YAAE,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;aAEa,YAAY,CAAC,CAAC,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClH,CAAC;aAEe,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9E,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;gBAC1C,IAAI,EAAE;oBACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;wBAAE,CAAC,GAAG,KAAK,CAAC,CAAC;oBACnC,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBAC3C;aACJ,CAAC;QACF,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,yBAAyB,GAAG,iCAAiC,CAAC,CAAC;IAC3F,CAAC;aAEe,MAAM,CAAC,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI;YACA,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI;gBAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SAC9E;QACD,OAAO,KAAK,EAAE;YAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SAAE;gBAC/B;YACJ,IAAI;gBACA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACpD;oBACO;gBAAE,IAAI,CAAC;oBAAE,MAAM,CAAC,CAAC,KAAK,CAAC;aAAE;SACpC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED;aACgB,QAAQ;QACpB,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;YAC9C,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,EAAE,CAAC;IACd,CAAC;IAED;aACgB,cAAc;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACpF,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAC5C,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC7D,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC;IACb,CAAC;aAEe,aAAa,CAAC,EAAE,EAAE,IAAI;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7D,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;aAEe,OAAO,CAAC,CAAC;QACrB,OAAO,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;aAEe,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS;QAC3D,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACvF,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,cAAc,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtH,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;QAC1I,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAAE;QAAC,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAAE,EAAE;QAClF,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACxH,SAAS,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE;QAClD,SAAS,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE;QAClD,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACtF,CAAC;aAEe,gBAAgB,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,CAAC;QACT,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,cAAc,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5I,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;IACnJ,CAAC;aAEe,aAAa,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACvF,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,cAAc,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjN,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;QAChK,SAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE;IAChI,CAAC;aAEe,oBAAoB,CAAC,MAAM,EAAE,GAAG;QAC5C,IAAI,MAAM,CAAC,cAAc,EAAE;YAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SAAE;aAAM;YAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;SAAE;QAC/G,OAAO,MAAM,CAAC;IAClB,CAAC;IAAA,CAAC;IAEF,IAAI,kBAAkB,GAAG,MAAM,CAAC,MAAM,IAAI,UAAS,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC,IAAI,UAAS,CAAC,EAAE,CAAC;QACd,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC;aAEc,YAAY,CAAC,GAAG;QAC5B,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU;YAAE,OAAO,GAAG,CAAC;QACtC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,GAAG,IAAI,IAAI;YAAE,KAAK,IAAI,CAAC,IAAI,GAAG;gBAAE,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzI,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAClB,CAAC;aAEe,eAAe,CAAC,GAAG;QAC/B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC5D,CAAC;aAEe,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC3D,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;QAC7F,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;QACnL,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClG,CAAC;aAEe,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClE,IAAI,IAAI,KAAK,GAAG;YAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACxE,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;QAC7F,IAAI,OAAO,KAAK,KAAK,UAAU,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAC;QAClL,OAAO,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAC9G;;ICxOA;;;IAMA;;;;;QAMI,yBAAmB,gBAAkC;YAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;SAAK;;;kFANjD,eAAe;wDAAf,eAAe;;gFAAf,eAAe;sBAH3BC,YAAS;uBAAC;wBACP,QAAQ,EAAE,iBAAiB;qBAC9B;;;;ICPD;;;IAGA;QAAA;SAwDC;;;;QAnDU,uBAAW,GAAlB,UAAmB,CAAM,EAAE,OAAe;YACtC,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;SAClE;;;;QAKM,wBAAY,GAAnB,UAAoB,CAAM,EAAE,KAAe;;YAEvC,IAAI,CAAC,KAAK,SAAS,EAAE;gBACjB,OAAO,SAAS,CAAC;aACpB;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,OAAO,CAAC,CAAC;aACZ;YAED,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACpC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEhB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAClB,IAAM,GAAG,GAAG,EAAE,CAAC;;oBACf,KAAgB,IAAA,KAAA,UAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAC,gBAAA,4BAAE;wBAA7D,IAAM,CAAC,WAAA;wBACR,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;qBACtC;;;;;;;;;gBACD,OAAO,GAAG,CAAC;aACd;iBAAM;gBACH,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;aACzC;SACJ;;;;QAKM,iBAAK,GAAZ,UAAa,CAAS;;YAClB,IAAI,CAAC,KAAK,EAAE,EAAE;gBACV,OAAO,EAAE,CAAC;aACb;YACD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACnB,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;oBACzB,KAAgB,IAAA,QAAA,SAAA,GAAG,CAAA,wBAAA,yCAAE;wBAAhB,IAAM,CAAC,gBAAA;wBACR,IAAI,CAAC,KAAK,EAAE,EAAE;4BACV,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;yBAC7E;qBACJ;;;;;;;;;gBACD,OAAO,GAAG,CAAC;aACd;YACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACrD;0BACJ;KAAA;;ICXD;;;;;;;;;;QAWI,8BAAoB,IAAgB;YAAhB,SAAI,GAAJ,IAAI,CAAY;SAAK;;;;QAUzC,mCAAI,GAAJ,UAAK,KAAU,EAAE,MAAc;;YAA/B,iBAoCC;YAlCG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACb,IAAI,MAAM,CAAC,OAAO,EAAE;;oBAEhB,IAAM,GAAG,GAAyB,EAAE,CAAC;;wBACrC,KAAgB,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAA,gBAAA,4BAAE;4BAA3B,IAAM,CAAC,WAAA;4BACR,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;yBACpC;;;;;;;;;oBACD,IAAI,CAAC,KAAK,GAAGC,aAAQ,CAAC,GAAG,CAAC,CAAC;iBAC9B;qBAAM;;oBAEH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAC3FC,mBAAS,CAAC,UAAA,GAAG;;wBACT,IAAI,MAAM,CAAC,OAAO,EAAE;4BAChB,GAAG,GAAGC,2BAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;4BAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gCACrB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;;6BAGf;yBACJ;wBACD,IAAM,GAAG,GAAyB,EAAE,CAAC;;4BACrC,KAAgB,IAAA,QAAA,SAAA,GAAG,CAAA,wBAAA,yCAAE;gCAAhB,IAAM,CAAC,gBAAA;gCACR,GAAG,CAAC,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;6BACpC;;;;;;;;;wBACD,OAAOF,aAAQ,CAAC,GAAG,CAAC,CAAC;qBACxB,CAAC;;oBAGFG,uBAAa,CAAC,CAAC,CAAC,EAChBC,kBAAQ,EAAE,CACb,CAAC;iBACL;aACJ;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;;;;QAKD,qCAAM,GAAN,UAAO,KAAU,EAAE,MAAc,EAAE,OAAe,EAAE,OAA6B;YAAjF,iBAQC;YAPG,OAAO,OAAO,CAAC,IAAI,CAACC,aAAG,CAAC,UAAA,GAAG;gBACvB,IAAI,CAAC,OAAO,EAAE;oBACV,OAAO,GAAG,CAAC;iBACd;gBACD,IAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAA,CAAC,CAAC;gBACtD,OAAO,GAAG,CAAC;aACd,CAAC,CAAC,CAAC;SACP;;;;QAKD,sCAAO,GAAP,UAAQ,CAAS,EAAE,OAAe;;YAC9B,aAAO,CAAC,CAAC,IAAI,0CAAE,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;SAChE;;;;;QAMD,qCAAM,GAAN,UAAO,KAAU,EAAE,MAAc;;YAC7B,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW,EAAE;;oBACpC,KAAwB,IAAA,KAAA,SAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA,gBAAA,4BAAE;wBAAzC,IAAM,SAAS,WAAA;wBAChB,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;wBACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;4BAClB,OAAOC,OAAE,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;yBACvD;qBACJ;;;;;;;;;gBACD,OAAOA,OAAE,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;aACrC;YACD,IAAI,MAAM,CAAC,OAAO,EAAE;gBAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC3B,OAAOA,OAAE,CAAC,KAAK,CAAC,CAAC;iBACpB;qBAAM;;oBAEH,OAAOA,OAAE,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;iBACrC;aACJ;YACD,IAAI,MAAM,CAAC,kBAAkB,EAAE;gBAC3B,OAAOA,OAAE,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACxF;YACD,OAAOA,OAAE,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACrC;;;;QAKD,yCAAU,GAAV,UAAW,GAAW,EAAE,IAAS,EAAE,IAAY;YAC3C,IAAI,IAAI,KAAK,KAAK,EAAE;gBAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,GAAG,EAAE,IAAI,CAAC,CAAC;aAC1C;iBAAM;gBACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAQ,GAAG,EAAE,IAAI,EAAE;oBACpC,OAAO,EAAE,IAAIC,cAAW,CAAC;wBACrB,cAAc,EAAE,kBAAkB;qBACrC,CAAC;iBACL,CAAC,CAAC;aACN;SACJ;;;;QAKD,2CAAY,GAAZ;YACI,OAAO,CAAC,CAAC;SACZ;mCACJ;KAAA;;IC7KD;;;IAOA;;;;;;QAOE,oCACS,SAAmD,EAC1B,IAAS;;YADlC,cAAS,GAAT,SAAS,CAA0C;YAC1B,SAAI,GAAJ,IAAI,CAAK;YACzC,IAAI,CAAC,MAAM,GAAG;gBACZ,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE;oBACL,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC;oBAClC,CAAC,OAAO,EAAE,aAAa,CAAC;oBACxB,CAAC,SAAS,EAAE,UAAU,CAAC;oBACvB,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC;oBACtC,SAAS,EAAE,OAAO,EAAE,OAAO;iBAC5B;gBACD,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;;oBAEV,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE;oBAC7E,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE;oBACnI,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;iBACvG;aACF,CAAC;YAEF,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAEnB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;gBAC1G,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG;oBAChC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI;oBAC/G,KAAK,EAAE,iBAAiB;iBACzB,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;aAC5H;iBAAM;gBACL,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG;wBAC9B,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;wBACnF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe;qBACrC,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;iBACrI;gBACD,UAAI,IAAI,CAAC,KAAK,0CAAE,UAAU,EAAE;;oBAE1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;oBAC1G,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG;wBAChC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI;wBACrH,KAAK,EAAE,iBAAiB;qBACzB,CAAC;iBACH;qBAAM;;oBAEL,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG;wBAChC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE;qBAC1F,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;oBAC1G,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG;wBAC9B,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ;wBAC7C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;qBACjE,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;oBACzF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;oBAChF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG;wBAC9B,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI;wBACtF,KAAK,EAAE,aAAa;qBACrB,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,GAAG;wBAC/B,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;wBACnE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe;qBACtD,CAAC;iBACH;aACF;SACF;;;wGA3EU,0BAA0B,gEAS3BC,oBAAe;mEATd,0BAA0B;;gBCVvCC,6CAA+C;gBAC3CA,+CAAgF;gBAA1DC,4JAAgB;gBAA0CC,iBAAuB;gBAC3GA,iBAAqB;gBACrBF,6CAAgC;gBAC5BA,iCAA+C;gBAA5BC,uGAAS,qBAAiB,IAAC;gBAACE,sBAAM;gBAAAD,iBAAS;gBAC9DF,iCAAoE;gBAAAG,kBAAE;gBAAAD,iBAAS;gBACnFA,iBAAqB;;;gBALKE,eAAgB;gBAAhBC,gCAAgB,sBAAA,2BAAA;gBAIZD,eAAyB;gBAAzBC,2CAAyB;;;;gFDK1C,0BAA0B;sBAJtCC,YAAS;uBAAC;wBACT,QAAQ,EAAE,yBAAyB;wBACnC,WAAW,EAAE,sCAAsC;qBACpD;;;kCAUIC,SAAM;mCAACR,oBAAe;;;;;IEd3B;;;IAGA;;;;;;;;;;QAWI,cACY,YAAgC,EAAU,IAAY,EAAU,MAAc,EAAU,MAAc,EACtG,MAAiB;YADjB,iBAAY,GAAZ,YAAY,CAAoB;YAAU,SAAI,GAAJ,IAAI,CAAQ;YAAU,WAAM,GAAN,MAAM,CAAQ;YAAU,WAAM,GAAN,MAAM,CAAQ;YACtG,WAAM,GAAN,MAAM,CAAW;SAC5B;;;;QAKD,qBAAM,GAAN;YACI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SACpC;;;;QAKD,sBAAO,GAAP;;;YACI,IAAI,CAAS,CAAC;YACd,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACxB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;aACnB;iBAAM,UAAI,IAAI,CAAC,MAAM,CAAC,KAAK,0CAAE,UAAU,EAAE;gBACtC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;aACzB;iBAAM,UAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,0CAAE,UAAU,EAAE;gBACrD,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;aACxC;iBAAM;gBACH,OAAO,EAAE,CAAC;aACb;YACD,IAAI,CAAC,CAAC,KAAK,EAAE;gBACT,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;;oBAC/C,KAAgB,IAAA,KAAA,SAAA,CAAC,CAAC,KAAK,CAAA,gBAAA,4BAAE;wBAApB,IAAM,CAAC,WAAA;wBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;gCAClB,KAAgB,IAAA,qBAAA,SAAA,CAAC,CAAA,CAAA,oBAAA,mCAAE;oCAAd,IAAM,CAAC,cAAA;oCACR,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iCACjB;;;;;;;;;yBACJ;6BAAM;4BACH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBACjB;qBACJ;;;;;;;;;gBACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC1B;iBAAM;gBACH,OAAO,EAAE,CAAC;aACb;SACJ;;;;QAKD,qBAAM,GAAN,UAAO,IAAY;;YACf,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,KAAK,IAAI,CAAC,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAY,EAAE,IAAI,CAAC,CAAC;aAC3E;iBAAM;;oBACH,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,gBAAA,4BAAE;wBAA9B,IAAM,CAAC,WAAA;wBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BAClB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCAC3B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;6BAChB;yBACJ;qBACJ;;;;;;;;;aACJ;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B;;;;QAKD,wBAAS,GAAT;YACI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC;;;;QAKD,yBAAU,GAAV;;;YACI,UAAI,IAAI,CAAC,MAAM,0CAAE,KAAK,EAAE;gBACpB,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;;oBACzD,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,gBAAA,4BAAE;wBAA9B,IAAM,CAAC,WAAA;wBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;gCAClB,KAAgB,IAAA,qBAAA,SAAA,CAAC,CAAA,CAAA,oBAAA,mCAAE;oCAAd,IAAM,CAAC,cAAA;oCACR,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iCACjB;;;;;;;;;yBACJ;6BAAM;4BACH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;yBACjB;qBACJ;;;;;;;;;gBACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC1B;iBAAM;gBACH,OAAO,EAAE,CAAC;aACb;SACJ;;;;QAKD,kBAAG,GAAH,UAAI,IAAY;;YACZ,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChC;iBAAM,UAAI,IAAI,CAAC,MAAM,CAAC,KAAK,0CAAE,UAAU,EAAE;gBACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtC;iBAAM;gBACH,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrD;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B;;;;QAKD,mBAAI,GAAJ;YAAA,iBA+EC;;;YA7EG,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;YAGtD,IAAI,aAAA,KAAK,CAAC,KAAK,0CAAE,QAAQ,0CAAE,MAAM,IAAG,CAAC,EAAE;gBACnC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,IAAI,OAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,EAAE;gBAC5B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACrC;;YAGD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACf,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;aACzB;;YAGD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACf,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;aAC/B;;YAGD,IAAI,KAAK,CAAC,KAAK,EAAE;gBACb,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAClC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;gBACpC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC9C,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBAClC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACtC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;aACzC;YAED,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACjG,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,UAAA,IAAI;;gBAClC,IAAI,IAAI,EAAE;oBACN,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC/B,KAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC3C,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACjC,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACjC,KAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACrC,KAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;oBAC7C,IAAI,IAAI,CAAC,OAAO,EAAE;wBACd,IAAI,IAAI,CAAC,KAAK,EAAE;4BACZ,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBAC/C;6BAAM;4BACH,KAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBACzC;qBACJ;oBACD,IAAI,IAAI,CAAC,KAAK,EAAE;wBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;qBACzB;oBACD,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClD,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;qBAClC;oBACD,IAAI,IAAI,CAAC,KAAK,EAAE;wBACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,IAAI,IAAI,GAAA,CAAC,CAAC;qBACpD;oBACD,IAAI,OAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,IAAG,CAAC,EAAE;wBACxB,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;qBAClC;oBACD,IAAI,IAAI,CAAC,KAAK,EAAE;wBACZ,IAAI,OAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,IAAG,CAAC,EAAE;4BAC1B,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;yBAC5C;wBACD,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBACvC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBACvC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;wBACnD,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;wBAC3C,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;qBAC9C;yBAAM;wBACH,KAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;wBACnC,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBACjC,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBACjC,KAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;wBAC7C,KAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;qBACxC;oBACD,KAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;iBAC5B;aACJ,CAAC,CAAC;SACN;;;;QAKD,sBAAO,GAAP;YACI,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;SACrC;;;;QAKD,mBAAI,GAAJ;;YACI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;aAC3D;YACD,IAAI,KAAK,GAAG,CAAC,CAAC;;gBACd,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,gBAAA,4BAAE;oBAA9B,IAAM,CAAC,WAAA;oBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBAClB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;4BAC3B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;4BAClC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gCAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;6BACnC;yBACJ;qBACJ;oBACD,KAAK,EAAE,CAAC;iBACX;;;;;;;;;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aACrE;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B;;;;QAKD,oBAAK,GAAL;;YACI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,OAAO,KAAK,CAAC;aAChB;YACD,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1F,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,IAAI,CAAC,EAAE;gBACZ,OAAO,KAAK,GAAG,CAAC,CAAC;aACpB;iBAAM;;oBACH,KAAgB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;wBAAlB,IAAM,CAAC,kBAAA;wBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BAClB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;6BACnC;yBACJ;qBACJ;;;;;;;;;aACJ;SACJ;;;;QAKD,iBAAE,GAAF;;YACI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;aAC3D;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,KAAK,IAAI,CAAC,EAAE;gBACZ,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aAClC;iBAAM;;oBACH,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,gBAAA,4BAAE;wBAA9B,IAAM,CAAC,WAAA;wBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BAClB,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAC7B,IAAI,KAAK,IAAI,CAAC,EAAE;gCACZ,IAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gCACzB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gCACxB,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;6BAClB;yBACJ;qBACJ;;;;;;;;;aACJ;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B;;;;QAKD,sBAAO,GAAP;;YACI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,OAAO,KAAK,CAAC;aAChB;YACD,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1F,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,IAAI,CAAC,EAAE;gBACZ,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aACnC;iBAAM;;oBACH,KAAgB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;wBAAlB,IAAM,CAAC,kBAAA;wBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BAClB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;6BAC9C;yBACJ;qBACJ;;;;;;;;;aACJ;SACJ;;;;QAKD,mBAAI,GAAJ;;YACI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;aAC3D;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,KAAK,IAAI,CAAC,EAAE;gBACZ,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aAClC;iBAAM;;oBACH,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,gBAAA,4BAAE;wBAA9B,IAAM,CAAC,WAAA;wBACR,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BAClB,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAC7B,IAAI,KAAK,IAAI,CAAC,EAAE;gCACZ,IAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gCACzB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gCACxB,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;6BAClB;yBACJ;qBACJ;;;;;;;;;aACJ;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B;mBACJ;KAAA;;;;;;;YChVDC,8CACiF;YAC/EA,kDAA4B;YAC1BA,uCAAiB;YAAAG,YAAS;YAAAD,iBAAkB;YAC5CF,6CAAuB;YAAAG,YAAsB;YAAAD,iBAAwB;YACvEA,iBAA6B;YAC7BF,kDAEqD;YAFsBC,iPAAkC,mMAE7E,0BAAmB,IAF0D;YAG7GC,iBAAuB;YACzBA,iBAAsB;;;;YATpBG,6CAAwB,gCAAA,oCAAA;YAELD,eAAS;YAATI,kCAAS;YACHJ,eAAsB;YAAtBI,+CAAsB;YAElBJ,eAAe;YAAfC,oCAAe,qBAAA,uBAAA,yBAAA,+BAAA,iCAAA,yBAAA,qBAAA,qBAAA;;;;;;YAqCxCL,kCAA6E;YAAtBC,kNAAS,uBAAW,IAAC;YAACE,YAAK;YAAAD,iBAAS;;;;YAAdE,eAAK;YAALI,2BAAK;;;;;;YAIlFR,kCAAmF;YAAzBC,kNAAS,0BAAc,IAAC;YAACE,YAAK;YAAAD,iBAAS;;;;YAAdE,eAAK;YAALI,2BAAK;;;;;;YAhC5FR,2BAAsF;YACpFA,oCAC2E;YACzEG,2BACF;YAAAD,iBAAW;YAEXF,0CAA0B;YACxBA,kCAA4C;YAAtBC,6KAAS,mBAAW,IAAC;YACzCD,gCAAU;YAAAG,oBAAI;YAAAD,iBAAW;YAAAC,qBAC3B;YAAAD,iBAAS;YACTF,kCAA6E;YAC3EA,iCAAU;YAAAG,oBAAG;YAAAD,iBAAW;YAAAC,sBAC1B;YAAAD,iBAAS;YACTF,mCAAiF;YAC/EA,iCAAU;YAAAG,6BAAY;YAAAD,iBAAW;YAAAC,6BACnC;YAAAD,iBAAS;YACTF,mCAA0E;YAAtBC,8KAAS,mBAAW,IAAC;YACvED,iCAAU;YAAAG,uBAAM;YAAAD,iBAAW;YAAAC,sBAC7B;YAAAD,iBAAS;YACTF,mCAAqE;YAApBC,8KAAS,iBAAS,IAAC;YAClED,iCAAU;YAAAG,2BAAU;YAAAD,iBAAW;YAAAC,2BACjC;YAAAD,iBAAS;YACTF,mCAAyE;YAAtBC,8KAAS,mBAAW,IAAC;YACtED,iCAAU;YAAAG,2BAAU;YAAAD,iBAAW;YAAAC,8BACjC;YAAAD,iBAAS;YACXA,iBAAW;YAEXF,2CAA0B;YACxBS,6FAA2F;YAC7FP,iBAAW;YAEXF,2CAA2B;YACzBS,6FAAiG;YACnGP,iBAAW;YACbA,iBAAM;;;;;;;YAjC8BE,eAA0B;YAA1BC,wCAA0B,8FAAA;YASlDD,eAA2B;YAA3BC,gDAA2B,2BAAA;YAG3BD,eAA8B;YAA9BC,mDAA8B,2BAAA;YAG9BD,eAA6B;YAA7BC,iDAA6B;YAG7BD,eAA0B;YAA1BC,+CAA0B;YAG1BD,eAA4B;YAA5BC,iDAA4B;YAMdD,eAAiB;YAAjBC,+CAAiB;YAIjBD,eAAoB;YAApBC,kDAAoB;;;;;;YASxCL,2BAAuD;YACrDA,oDAK4F;YAJ/CC,sTAA4C,+MAIlB,2BAAmB,IAJD;YAKzFC,iBAAuB;YACzBA,iBAAM;;;;;YAP4BE,eAAc;YAAdC,gCAAc,4DAAA,+DAAA,4EAAA,gCAAA,kCAAA,uBAAA,gCAAA,2FAAA,+CAAA,sBAAA;;;;;YAFlDL,+BAAuF;YACrFS,kGAQM;YACRP,iBAAM;;;;YATEE,eAA+C;YAA/CC,4EAA+C;;;;;YAFzDL,+BAA4G;YAC1GS,4FAUM;;YACRP,iBAAM;;;;;YAZoCG,uFAAiE;YACpFD,eAA8B;YAA9BC,6EAA8B;;;;;;YAiBjDL,2BAA0C;YACxCA,wCAC6B;YAA3BC,4PAA0B;YAC1BE,YACF;YAAAD,iBAAe;YACjBA,iBAAM;;;;;YAJUE,eAAqC;YAArCC,uEAAqC,gEAAA;YAEjDD,eACF;YADEM,sCACF;;;;;YATNV,+BAA8D;YAC5DA,kCAAmD;YACjDA,gCAAU;YAAAG,yBAAS;YAAAD,iBAAW;YAChCA,iBAAS;YACTF,0CAA0B;YACxBS,4FAKM;YACRP,iBAAW;YACbA,iBAAM;;;;;YAXoBE,eAA0B;YAA1BC,wCAA0B;YAI7BD,eAAqB;YAArBC,oDAAqB;;;;;YApB9CL,gCACoD;YAClDS,sFAYM;YACNA,sFAYM;YACRP,iBAAO;;;;YA5BgCG,sFAAiE,gCAAA,gCAAA;YAElFD,eAAoB;YAApBC,kDAAoB;YAalCD,eAA0B;YAA1BC,kDAA0B;;;;;;YA8B9BL,kCAC8B;YADYC,yQAA4B;YAEpED,gCAAU;YAAAG,qCAAqB;YAAAD,iBAAW;YAC5CA,iBAAS;;;;YAFPS,0DAA2B;;;;;;YAb/BX,+BAC0G;YAAjDC,2OAAsB,8LAAqB,IAAI,IAAzB;YAC7ED,sCAAgB;YACdA,iCAAW;YAAAG,YAAkB;YAAAD,iBAAY;YACzCF,iCACyD;YAAvDC,iRAAsD;YADxDC,iBACyD;YAC3DA,iBAAiB;YACjBC,wBACA;YAAAH,oDAE2G;YADzGC,2RAA4C,mMACwC,2BAAmB,IAD3D;YAE9CC,iBAAuB;YACvBO,kGAGS;YACXP,iBAAM;;;;;YAbSE,eAAkB;YAAlBM,qDAAkB;YACtBN,eAAqB;YAArBC,2CAAqB,oBAAA;YAIED,eAA+B;YAA/BC,qDAA+B,mCAAA,gCAAA,kCAAA,+CAAA,sBAAA;YAItDD,eAAe;YAAfC,wCAAe;;;;;;YAK1BL,kCAA4F;YAAlDC,6MAAqB;YAC7DD,gCAAU;YAAAG,kCAAkB;YAAAD,iBAAW;YACzCA,iBAAS;;;;YAFuDS,0DAA2B;;;;;YAnB7FX,gCACoD;YAClDS,uFAgBM;;YACNA,4FAES;YACXP,iBAAO;;;;YAtB8CG,sFAAiE,gCAAA,gCAAA;YAEjGD,eAAmC;YAAnCC,kFAAmC;YAiB7CD,eAAe;YAAfC,uCAAe;;;;;;YAUpBL,sCAAkC;YAChCA,iCAA0G;YAAvDC,6UAAsD;YAAzGC,iBAA0G;YAC5GA,iBAAiB;;;;YADoBE,eAAe;YAAfC,iCAAe;;;;;YAEpDL,4BAAuB;YAAAG,YAAS;YAAAD,iBAAO;;;;YAAhBE,eAAS;YAATI,+BAAS;;;;;YAHhCC,4IAEiB;YACjBA,wHAAuC;;;;YAHtBJ,wCAAe;YAGzBD,eAAc;YAAdC,uCAAc;;;;;;YAMvBL,kCAC8B;YADYC,sRAA4B;YAEpED,gCAAU;YAAAG,qCAAqB;YAAAD,iBAAW;YAC5CA,iBAAS;;;;YAFPS,0DAA2B;;;;;;YAZ/BX,mCAA+G;YAC7GS,yHAKc;YACdT,oDAEqD;YAFEC,wSAA4C,gNAEnE,2BAAmB,IAFgD;YAGnGC,iBAAuB;YACvBO,+GAGS;YACXP,iBAAU;;;;;YARwBE,eAAsB;YAAtBC,gDAAsB,gCAAA,kCAAA,+CAAA,sBAAA;YAI7CD,eAAe;YAAfC,wCAAe;;;;;;YAOtBL,kCAAyE;YAAjDC,qOAAoB;YAC1CD,gCAAU;YAAAG,kCAAkB;YAAAD,iBAAW;YACzCA,iBAAS;;;;YAFoCS,0DAA2B;;;;;YAF5EX,+BAA2B;YACzBS,yHAIc;YAChBP,iBAAU;;;;;YAxBZF,yCACoD;YAClDS,uGAeU;;YACVA,sGAMU;YACZP,iBAAgB;;;;YAxBdG,8CAAwB,iCAAA;YACDD,eAAmC;YAAnCC,oFAAmC;YAgBhDD,eAAe;YAAfC,wCAAe;;;;;;YAkBvBL,kCAAiH;YAAvEC,+PAAmB;YAC3DD,gCAAU;YAAAG,qCAAqB;YAAAD,iBAAW;YAC5CA,iBAAS;;;;YAF4ES,2DAA2B;;;;;;YANlHX,+BACmD;YAAjDC,8OAAsB,iMAAqB,IAAI,IAAzB;YACtBD,oDAEuC;YAFiCC,wRAA0C,qMAEhG,4BAAmB,IAF6E;YAGlHC,iBAAuB;YACvBO,kGAES;YACXP,iBAAM;;;;;YAP4BE,eAAoB;YAApBC,0CAAoB,+BAAA,gCAAA,kCAAA,gCAAA,sBAAA;YAI3CD,eAAe;YAAfC,wCAAe;;;;;;YAI1BL,kCAAuF;YAA7CC,2MAAgB;YACxDD,gCAAU;YAAAG,kCAAkB;YAAAD,iBAAW;YACzCA,iBAAS;;;;YAFkDS,0DAA2B;;;;;YAZxFX,gCACoD;YAClDS,sFASM;YACNA,4FAES;YACXP,iBAAO;;;;YAf+BG,uFAAiE,iCAAA,iCAAA;YAElFD,eAAU;YAAVC,uCAAU;YAUpBD,eAAe;YAAfC,wCAAe;;;;;;YAUpBL,oCAA4F;YAAlCC,4PAAyB;YACjFE,YACA;YAAAH,oCAAwB;YAAAG,sBAAM;YAAAD,iBAAW;YAC3CA,iBAAW;;;;;YAHuBG,8CAAuB;YACvDD,eACA;YADAM,uCACA;;;;;;YANRV,4BAAsC;YACpCA,0CAAkE;YAChEA,6CAC0C;YAAxCC,oPAAuC;YACvCQ,gGAGW;YACXT,iCAEwB;YAD+BC,+OAAwC;YAD/FC,iBAEwB;YAC1BA,iBAAgB;YAClBA,iBAAiB;YACnBA,iBAAO;;;;;YAZWE,eAAwB;YAAxBC,8CAAwB,iCAAA;YAGZD,eAAQ;YAARC,uCAAQ;YAIzBD,eAA4B;YAA5BC,kDAA4B,0BAAA,6DAAA,8BAAA;;;;;;YAerCL,kCAAiH;YAAvEC,8QAAmB;YAC3DD,gCAAU;YAAAG,qCAAqB;YAAAD,iBAAW;YAC5CA,iBAAS;;;;YAF4ES,2DAA2B;;;;;;YALlHX,mCAAiH;YAC/GA,oDAEuC;YAFYC,uSAA0C,kNAE3E,4BAAmB,IAFwD;YAG7FC,iBAAuB;YACvBO,+GAES;YACXP,iBAAU;;;;;YAR4EG,0DAA0B;YAC9ED,eAAkB;YAAlBC,8CAAkB,iCAAA,mCAAA,iCAAA,uBAAA;YAIzCD,eAAe;YAAfC,yCAAe;;;;;;YAMtBL,kCAAqE;YAA7CC,mOAAgB;YACtCD,gCAAU;YAAAG,kCAAkB;YAAAD,iBAAW;YACzCA,iBAAS;;;;YAFgCS,2DAA2B;;;;;YAFxEX,+BAA2B;YACzBS,yHAIc;YAChBP,iBAAU;;;;;YAjBZF,yCAC2B;YACzBS,uGAQU;YACVA,sGAMU;YACZP,iBAAgB;;;;YAlB6EG,8CAAwB,iCAAA;YAE5FD,eAAU;YAAVC,uCAAU;YASvBD,eAAe;YAAfC,wCAAe;;;;;YAarBL,8BAAmF;YACjFG,YAAyC;YAAAD,iBAAK;;;;YAA9CE,eAAyC;YAAzCM,oFAAyC;;;;;;YAI3CV,0BAAuE;YACrEA,oDAEuC;YAFcC,0VAAsD,yMAEzF,4BAAmB,IAFsE;YAG3GC,iBAAuB;YACzBA,iBAAK;;;;;;YAJ6BE,eAAoB;YAApBC,4CAAoB,iCAAA,mCAAA,wDAAA,uBAAA;;;;;;YAMpDL,kCAA0F;YAAhDC,gQAAmB;YAC3DD,gCAAU;YAAAG,qCAAqB;YAAAD,iBAAW;YAC5CA,iBAAS;;;;YAFqDS,2DAA2B;;;;;YAR7FX,0BAA2C;YACzCS,yFAKK;;YACLT,0BAAI;YACFS,iGAES;YACXP,iBAAK;YACPA,iBAAK;;;;YAXeE,eAAmD;YAAnDC,wGAAmD;YAO1DD,eAAe;YAAfC,yCAAe;;;;;;YAM9BL,kCAAuF;YAA7CC,2MAAgB;YACxDD,gCAAU;YAAAG,kCAAkB;YAAAD,iBAAW;YACzCA,iBAAS;;;;YAFkDS,2DAA2B;;;;;YArBxFX,gCAAwF;YACtFA,iCAAkC;YAChCA,0BAAI;YACFS,oFACgD;;YAChDG,yBAAyB;YAC3BV,iBAAK;YACLO,oFAYK;YACPP,iBAAQ;YACRO,4FAES;YACXP,iBAAO;;;;YAxB+BG,8CAAwB,iCAAA;YAGtCD,eAAmD;YAAnDC,sGAAmD;YAInDD,eAAU;YAAVC,uCAAU;YAcvBD,eAAe;YAAfC,wCAAe;;;;;YAUpBL,sCAAsD;YAAAG,YAAK;YAAAD,iBAAa;;;;YAA9BG,8BAAW;YAACD,eAAK;YAALI,4BAAK;;;;;;YAJjER,2BAAoC;YAClCA,0CAAkE;YAChEA,iCAAW;YAAAG,YAAS;YAAAD,iBAAY;YAChCF,sCAAqF;YAAzDC,wOAAkC;YAC5DQ,mGAAwE;YAC1EP,iBAAa;YACfA,iBAAiB;YACjBF,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;YAPYE,eAAwB;YAAxBC,8CAAwB,iCAAA;YAC3BD,eAAS;YAATI,mCAAS;YACRJ,eAAe;YAAfC,qCAAe,8BAAA;YACCD,eAAc;YAAdC,6CAAc;YAGZD,eAAW;YAAXI,qCAAW;;;;;YAQvCR,sCACoE;YAClEG,YACF;YAAAD,iBAAa;;;;YAHsCG,yCAAsB,iFAAA;YAEvED,eACF;YADEM,iDACF;;;;;;YAPNV,2BAA4C;YAC1CA,0CAAoG;YAClGA,iCAAW;YAAAG,YAAS;YAAAD,iBAAY;YAChCF,sCAAgH;YAA3EC,wMAAiB,4NAAA;YACpDQ,oGAGa;;YACfP,iBAAa;YACfA,iBAAiB;YACjBF,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;YAVYE,eAAiC;YAAjCC,uDAAiC,iCAAA,iCAAA;YACpCD,eAAS;YAATI,mCAAS;YACCJ,eAAe;YAAfC,qCAAe,8BAAA;YACHD,eAAkB;YAAlBC,+DAAkB;YAMrBD,eAAW;YAAXI,qCAAW;;;;;;YAI7CR,2BAAoC;YAClCA,0CAAkE;YAChEA,iCAAW;YAAAG,YAAS;YAAAD,iBAAY;YAChCF,iCACqE;YADYC,0NAA6B;YAA9GC,iBACqE;YACrEU,4CAAwE;YACxEA,2CAAyC;YAC3CV,iBAAiB;YACjBF,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;;YARYE,eAAwB;YAAxBC,8CAAwB,iCAAA;YAC3BD,eAAS;YAATI,mCAAS;YACeJ,eAA6C;YAA7CC,mFAA6C,wBAAA,8BAAA;YAE/CD,eAAc;YAAdC,2BAAc;YAGjBD,eAAW;YAAXI,qCAAW;;;;;;YAI7CR,+BACyC;YACvCA,wCAAgF;YAAhDC,yNAAyB;YACvDE,YAAS;YAAAD,iBAAe;YAC1BF,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;YALkCG,8CAAwB,iCAAA;YAEhDD,eAAiB;YAAjBC,uCAAiB,8BAAA;YAC7BD,eAAS;YAATM,6CAAS;YACqBN,eAAW;YAAXI,qCAAW;;;;;YAQvCR,sCACoE;YAClEG,YACF;YAAAD,iBAAa;;;;YAHsCG,yCAAsB,iFAAA;YAEvED,eACF;YADEM,iDACF;;;;;;YANJV,0CAAqG;YACnGA,iCAAW;YAAAG,YAAS;YAAAD,iBAAY;YAChCF,sCAAuG;YAA3EC,yNAAiB,6OAAA;YAC3CQ,qHAGa;;YACfP,iBAAa;YACfA,iBAAiB;;;;YARkCG,+CAAwB,kCAAA;YAC9DD,eAAS;YAATI,oCAAS;YACRJ,eAAe;YAAfC,sCAAe,+BAAA;YACMD,eAAkB;YAAlBC,gEAAkB;;;;;YAUjDL,sCACoE;YAClEG,YACF;YAAAD,iBAAa;;;;YAH8CG,yCAAsB,iFAAA;YAE/ED,eACF;YADEM,iDACF;;;;;;YAPJV,0CAAqG;YACnGA,iCAAW;YAAAG,YAAS;YAAAD,iBAAY;YAChCF,iCAA+F;YAAlBC,oNAAiB;YAA9FC,iBAA+F;YAC/FF,kDAA0C;YACxCS,qHAGa;;YACfP,iBAAmB;YACrBA,iBAAiB;;;;;YATkCG,+CAAwB,kCAAA;YAC9DD,eAAS;YAATI,oCAAS;YACQJ,eAAuB;YAAvBC,8CAAuB,0BAAA;YAElBD,eAA0B;YAA1BC,wEAA0B;;;;;YAd/DL,2BAA4C;YAC1CS,4GAQiB;YACjBA,4GASiB;YACjBT,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;YApBaE,eAAgC;YAAhCC,yDAAgC;YAShCD,eAAgC;YAAhCC,yDAAgC;YAUjBD,eAAW;YAAXI,qCAAW;;;;;;YAOzCR,iCAE+D;YADfC,wNAAwB,oNACrC,UAAU,oBAAW,EAAE,GAAC,EAAE,IADW;YADxEC,iBAE+D;;;;YAFvCG,4CAAqB,mCAAA,gDAAA,yBAAA;;;;;;YAG7CL,iCAC0E;YAA1BC,0NAAyB;YADzEC,iBAC0E;;;;YADnDG,4CAAqB,mCAAA,gDAAA,yBAAA;;;;;YANhDL,2BAAsC;YACpCA,0CAAkE;YAChEA,iCAAW;YAAAG,YAAS;YAAAD,iBAAY;YAChCO,0FAE+D;YAC/DA,0FAC0E;YAC5EP,iBAAiB;YACjBF,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;YATYE,eAAwB;YAAxBC,8CAAwB,iCAAA;YAC3BD,eAAS;YAATI,mCAAS;YACZJ,eAAc;YAAdC,uCAAc;YAGdD,eAAa;YAAbC,sCAAa;YAGSD,eAAW;YAAXI,qCAAW;;;;;;YAOzCR,oCAC6E;YAA3EC,8NAAwB;YAAmDC,iBAAW;;;;YAD7DG,4CAAqB,mCAAA,yBAAA,kCAAA,kCAAA;;;;;;YAEhDL,oCAC8E;YAA5EC,gOAAyB;YAAmDC,iBAAW;;;;YAD/DG,4CAAqB,mCAAA,yBAAA,kCAAA,kCAAA;;;;;YALnDL,2BAAwC;YACtCA,0CAAkE;YAChEA,iCAAW;YAAAG,YAAS;YAAAD,iBAAY;YAChCO,gGACwF;YACxFA,gGACyF;YAC3FP,iBAAiB;YACjBF,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;YARYE,eAAwB;YAAxBC,8CAAwB,iCAAA;YAC3BD,eAAS;YAATI,mCAAS;YACTJ,eAAc;YAAdC,uCAAc;YAEdD,eAAa;YAAbC,sCAAa;YAGMD,eAAW;YAAXI,qCAAW;;;;;;YAI7CR,2BAAsC;YACpCA,iCACwB;YADKC,2NAAkC;YAA/DC,iBACwB;YACxBF,6BAAgC;YAAAG,YAAW;YAAAD,iBAAI;YACjDA,iBAAM;;;;YAH4DE,eAAwB;YAAxBC,8CAAwB,iCAAA,8BAAA;YAExDD,eAAW;YAAXI,qCAAW;;;;;YA/S/CR,8BACoC;YAElCS,gFAkCM;YAGNA,gFA4BO;YAGPA,gFAsBO;YAGPA,kGAyBgB;YAGhBA,gFAeO;YAGPA,gFAaO;YAGPA,kGAkBgB;YAGhBA,iFAwBO;YAGPA,8EAQM;YAGNA,iFAWM;YAGNA,iFASM;YAGNA,iFAKM;YAGNA,gFAqBM;YAGNA,gFAUM;YAGNA,gFASM;YAGNA,gFAIM;YACRP,iBAAM;;;;YAhTJG,sDAAiC;YAE3BD,eAA8E;YAA9EC,2HAA8E;YAqC7ED,eAA8B;YAA9BC,sDAA8B;YA+B9BD,eAA4C;YAA5CC,oEAA4C;YAyBXD,eAA+C;YAA/CC,uEAA+C;YA4BhFD,eAA6B;YAA7BC,qDAA6B;YAkB7BD,eAA6B;YAA7BC,qDAA6B;YAgBID,eAA2B;YAA3BC,mDAA2B;YAqB5DD,eAA6B;YAA7BC,qDAA6B;YA2B9BD,eAA4B;YAA5BC,oDAA4B;YAW5BD,eAAoC;YAApCC,4DAAoC;YAcpCD,eAA4B;YAA5BC,oDAA4B;YAY5BD,eAAgC;YAAhCC,wDAAgC;YAQhCD,eAAoC;YAApCC,4DAAoC;YAwBpCD,eAA8B;YAA9BC,sDAA8B;YAa9BD,eAAgC;YAAhCC,wDAAgC;YAYhCD,eAA8B;YAA9BC,sDAA8B;;;;ICrRtC;;;;;;;;;;;;QAiBE,iCACU,IAAgB,EAChB,wBAAkD,EACnD,OAA8B,EAC7B,MAAiB;YAHjB,SAAI,GAAJ,IAAI,CAAY;YAChB,6BAAwB,GAAxB,wBAAwB,CAA0B;YACnD,YAAO,GAAP,OAAO,CAAuB;YAC7B,WAAM,GAAN,MAAM,CAAW;;;;YA0CjB,gBAAW,GAAsB,IAAIQ,eAAY,EAAE,CAAC;;;;YAKpD,gBAAW,GAAyB,IAAIA,eAAY,EAAE,CAAC;;;;YAKvD,iBAAY,GAAuB,IAAIA,eAAY,EAAE,CAAC;;;;YA8BhE,WAAM,GAAG,KAAK,CAAC;;;;YAoEN,uBAAkB,GAAa,CAACC,cAAK,EAAEC,cAAK,EAAEC,YAAG,CAAC,CAAC;;;;;YAwN5D,kBAAa,GAAG,UACd,CAA2B,EAC3B,CAA2B;gBAE3B,OAAO,CAAC,CAAC;aACV,CAAC;SAlXE;;;;QAoKJ,sDAAoB,GAApB;;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACrB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;;oBAC5B,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA,gBAAA,4BAAE;wBAA9B,IAAM,CAAC,WAAA;wBACV,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACvC,IAAM,CAAC,GAAG,EAAE,CAAC;;4BACb,KAAgB,IAAA,uBAAA,SAAA,GAAG,CAAA,CAAA,wBAAA,yCAAE;gCAAhB,IAAM,CAAC,gBAAA;gCACV,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;6BAClC;;;;;;;;;wBACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAChC;;;;;;;;;aACF;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACjC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;;oBAC5B,KAA2B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA,gBAAA,4BAAE;wBAAxD,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;wBACpB,IAAM,CAAC,GAAG,EAAE,CAAC;wBACb,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;wBACf,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAChC;;;;;;;;;aACF;SACF;;;;;QAMD,0CAAQ,GAAR;;YAAA,iBA+FC;YA9FC,IAAI,CAAC,QAAQ;gBACX,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YAEjE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACpB;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACrB,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC3B,IAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;oBAEtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC1B;qBAAM;oBACL,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;;wBAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9B;yBAAM;;wBAEL,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjE,IAAI,CAAC,oBAAoB,EAAE,CAAC;qBAC7B;iBACF;aACF;iBAAM;gBACL,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;YAED,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;gBACrC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;oBACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;oBACjC,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,GAAA,EAAE,GAAG,CAAC,CAAC;iBAC9C;qBAAM;oBACL,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;wBACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;qBACnB;iBACF;aACF;YAED,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ,EAAE;gBACjC,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;YAED,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,UAAU,CAAC;oBACT,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,cAAc,EAAE,CAAC,CAAC;iBAC9C,EAAE,EAAE,CAAC,CAAC;aACR;YAED,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;gBACZ,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC/C;YACD,IAAI,CAAC,OAAO,GAAG,IAAIC,eAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,GAAG,IAAIC,kBAAa,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC7B,IAAM,GAAG,GAAG,EAAE,CAAC;;oBACf,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,KAAK,CAAA,gBAAA,4BAAE;wBAAvB,IAAM,CAAC,WAAA;wBACV,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;qBACjC;;;;;;;;;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACxB;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC9D;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;gBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAC7B,IAAM,GAAG,GAAyB,EAAE,CAAC;;wBACrC,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,KAAK,CAAA,gBAAA,4BAAE;4BAAvB,IAAM,CAAC,WAAA;4BACV,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;yBAC1C;;;;;;;;;oBACD3B,aAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAC,GAAG,IAAK,OAAA,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;iBAC1D;qBAAM;oBACL,IAAI,CAAC,EAAE;yBACJ,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;yBAC/B,SAAS,CAAC,UAAC,GAAG,IAAK,OAAA,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC,CAAC;iBACjD;aACF;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CACnD4B,mBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EACrBC,sBAAY,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EACpC5B,mBAAS,CAAC,UAAC,CAAC;gBACV,KAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,OAAO,KAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAI,CAAC,KAAK,EAAE,KAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAI,CAAC,OAAO,CAAC,CAAC;aACjE,CAAC,CACH,CAAC;YAEF,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAClB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,CACZ,CAAC;SACH;;;;QAKD,uCAAK,GAAL;YAAA,iBAIC;YAHC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAC,GAAG;gBAClD,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACxB,CAAC,CAAC;SACJ;;;;QAKD,qCAAG,GAAH,UAAI,GAAW,EAAE,OAAe;YAAhC,iBAuBC;;YArBC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;;YAG3D,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvE,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;gBACpE,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,OAAO;aACR;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAChC,UAAC,GAAG;gBACF,KAAI,CAAC,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;gBACpE,KAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B,EACD,UAAC,KAAK,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAA,CAC9B,CAAC;;YAGF,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;;;;QAKD,sCAAI,GAAJ,UAAK,KAAU;YAAf,iBAOC;YANC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,UAAU,CAAC;oBACT,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,cAAc,EAAE,CAAC,CAAC;iBAC9C,EAAE,EAAE,CAAC,CAAC;aACR;SACF;;;;;QAMD,6CAAW,GAAX,UAAY,OAAsB;YAChC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;oBAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBACvB,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;wBACpC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;qBAC1C;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;iBACjB;aACF;YAED,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;gBACrD,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ,EAAE;oBACjC,IAAI,CAAC,aAAa,EAAE,CAAC;iBACtB;qBAAM;oBACL,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;wBACpC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;qBAC1C;iBACF;aACF;SACF;;;;QAgBD,2CAAS,GAAT;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACjE,OAAO,MAAM,CAAC;aACf;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACnC,OAAO,QAAQ,CAAC;aACjB;YACD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAClD,OAAO,MAAM,CAAC;aACf;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACjC,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;oBACpC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;wBAChC,OAAO,yBAAyB,CAAC;qBAClC;oBACD,OAAO,sBAAsB,CAAC;iBAC/B;gBACD,OAAO,QAAQ,CAAC;aACjB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;gBAChC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;oBAChC,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE;oBAClC,OAAO,OAAO,CAAC;iBAChB;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;oBACnC,OAAO,cAAc,CAAC;iBACvB;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE;oBAClC,OAAO,OAAO,CAAC;iBAChB;gBACD,OAAO,OAAO,CAAC;aAChB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACpB,OAAO,MAAM,CAAC;aACf;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE;gBACjC,OAAO,MAAM,CAAC;aACf;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACnC,OAAO,QAAQ,CAAC;aACjB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;gBACrC,OAAO,UAAU,CAAC;aACnB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBAClC,OAAO,UAAU,CAAC;aACnB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBAC1B,OAAO,cAAc,CAAC;aACvB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBACvB,OAAO,cAAc,CAAC;aACvB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBAC3B,OAAO,cAAc,CAAC;aACvB;YACD,OAAO,QAAQ,CAAC;SACjB;;;;;QAMD,8CAAY,GAAZ,UAAa,MAAc;YACzB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC5B,OAAO,QAAQ,CAAC;aACjB;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC7B,OAAO,QAAQ,CAAC;aACjB;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;SACtB;;;;;;QAOD,+CAAa,GAAb,UAAc,GAAW,EAAE,KAAU;;YACnC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;aACjB;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAExB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;oBACxB,KAAoB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,gBAAA,4BAAE;wBAAlD,IAAM,KAAK,WAAA;wBACd,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAC/C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAGC,2BAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC9D;;;;;;;;;aACF;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;;QAMD,qCAAG,GAAH;YACE,IAAI,EAAE,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE;gBAClC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;aACjB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACrB;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACrB;iBAAM;gBACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;QAKD,0CAAQ,GAAR;YACE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;aACjB;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;gBAClB,OAAO;aACR;YACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;QAKD,wCAAM,GAAN,UAAO,CAAS;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;QAKD,6CAAW,GAAX,UAAY,GAAW;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;QAKD,iDAAe,GAAf,UAAgB,GAAW,EAAE,QAAa;YACxC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;;QAMD,gDAAc,GAAd;;YACE,IAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,EAAE;gBACL,OAAO,CAAC,CAAC;aACV;YACD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;aACpC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;;oBACjB,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,QAAQ,CAAA,gBAAA,4BAAE;wBAA1B,IAAM,CAAC,WAAA;wBACV,IAAM,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;wBAC7B,IAAI,CAAC,EAAE;4BACL,OAAO,CAAC,CAAC;yBACV;qBACF;;;;;;;;;aACF;YACD,OAAO,IAAI,CAAC;SACb;;;;;QAMD,mCAAC,GAAD,UAAE,KAAa;YACb,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;aACjC;YACD,OAAO,KAAK,CAAC;SACd;;;;QAKD,uCAAK,GAAL;;;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACnC,OAAO,IAAI,CAAC,WAAW,CAAC;aACzB;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACjE,OAAO,IAAI,CAAC;aACb;YACD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBACxB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;wBAChD,OAAO,IAAI,CAAC,CAAC,CACX,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,wBAAwB,CAC1D,CAAC;qBACH;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;oBAC3B,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;wBACrD,OAAO,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;qBAC/C;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBACxB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;wBAChD,OAAO,IAAI,CAAC,CAAC,CACX,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,yBAAyB,CAC/D,CAAC;qBACH;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;wBAClE,OAAO,IAAI,CAAC,CAAC,CACX,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,iBAAiB,CACxD,CAAC;qBACH;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;;wBAC7B,KAAkB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,gBAAA,4BAAE;4BAAtC,IAAM,GAAG,WAAA;4BACZ,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;4BACjD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gCACjB,OAAO,IAAI,CAAC,CAAC,CAAC,sBAAsB,GAAG,GAAG,CAAC,CAAC;6BAC7C;yBACF;;;;;;;;;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;;wBAC5B,KAAkB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA,gBAAA,4BAAE;4BAApD,IAAM,GAAG,WAAA;4BACZ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;;oCACnB,KAAgB,IAAA,qBAAA,SAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,CAAA,gBAAA,4BAAE;wCAA1C,IAAM,CAAC,WAAA;wCACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;4CAClB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;yCACzC;qCACF;;;;;;;;;6BACF;yBACF;;;;;;;;;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;oBAC7B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;wBAClE,OAAO,IAAI,CAAC,CAAC,CACX,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,kBAAkB,CAC7D,CAAC;qBACH;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;oBACzB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;wBACxD,OAAO,IAAI,CAAC,CAAC,CAAC,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;qBAChE;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;oBACzB,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;wBACxD,OAAO,IAAI,CAAC,CAAC,CAAC,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;qBACjE;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;oBAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;wBAClE,OAAO,IAAI,CAAC,CAAC,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;qBAChE;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;oBAChC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;wBACxD,OAAO,IAAI,CAAC,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;qBACpE;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;wBAChD,OAAO,IAAI,CAAC,CAAC,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;qBACpE;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;oBAChC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;wBACxD,OAAO,IAAI,CAAC,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;qBACpE;iBACF;gBACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;wBAChD,OAAO,IAAI,CAAC,CAAC,CAAC,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;qBACpE;iBACF;aACF;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;oBACpD,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;iBAC3B;aACF;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;oBACxB,KAAkB,IAAA,KAAA,SAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA,gBAAA,4BAAE;wBAAnC,IAAM,GAAG,WAAA;wBACZ,IACE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;4BAChB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;4BACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EACrB;;4BAEA,IAAI,QAAQ,GAAG,KAAK,CAAC;4BACrB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gCACtB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gCAC7C,IAAI,KAAK,IAAI,OAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,0CAAE,OAAO,CAAC,KAAK,KAAI,CAAC,EAAE;oCACjE,QAAQ,GAAG,IAAI,CAAC;iCACjB;6BACF;4BACD,IAAI,CAAC,QAAQ,EAAE;gCACb,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC;6BACrC;yBACF;qBACF;;;;;;;;;aACF;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBACvB,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;iBACjC;gBACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACxB,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;iBACjC;aACF;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAClE,IAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;iBACjC;gBACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACxB,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;iBACjC;aACF;YACD,OAAO,IAAI,CAAC;SACb;;;;QAKD,0CAAQ,GAAR;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACrB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC,KAAK,CAAC;aACnB;YACD,OAAO,EAAE,CAAC;SACX;;;;;QAMD,wCAAM,GAAN,UAAO,KAAU;YACf,IAAI,WAAgB,CAAC;YAErB,IAAI,KAAK,YAAY4B,mBAAe,EAAE;gBACpC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aACrB;iBAAM,IAAI,KAAK,YAAYC,2BAAuB,EAAE;gBACnD,KAAK,GAAG,IAAI,CAAC,aAAa,CACxB,KAAK,CAAC,KAAK,EACX,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CACjB,CAAC;aACH;iBAAM,IAAI,KAAK,YAAYC,gCAA4B,EAAE;gBACxD,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;aAC5B;iBAAM,IAAI,KAAK,YAAYC,qBAAiB,EAAE;gBAC7C,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;aACvB;iBAAM;;;gBAGL,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC3B,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;aAC5B;YAED,IAAI,KAAK,KAAK,EAAE,EAAE;gBAChB,KAAK,GAAG,IAAI,CAAC;aACd;YAED,IAAI,KAAK,IAAI,IAAI,EAAE;gBACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACnB;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACjC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;aAChC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBACzC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aAClC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC7B,IAAI,KAAK,KAAK,MAAM,EAAE;wBACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;qBACnB;yBAAM,IAAI,KAAK,KAAK,OAAO,EAAE;wBAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;qBACpB;yBAAM;wBACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;qBACnB;iBACF;qBAAM;oBACL,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;iBACpB;aACF;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aACpB;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;gBACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aACpB;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACtD;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;QAKD,iDAAe,GAAf,UAAgB,KAAU;YAA1B,iBAYC;YAXC,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,OAAO;aACR;YACD,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,GAAG;gBACd,KAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC3B,KAAI,CAAC,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;aACvB,CAAC;YAEF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;;;;QAKD,yCAAO,GAAP;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBACnD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBACvB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;aAC5B;YACD,OAAO,IAAI,CAAC;SACb;;;;QAKD,+CAAa,GAAb;YAAA,iBA6BC;YA5BC,IAAM,gBAAgB,GACpB,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAC9C,CAAC;YACJ,IAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAC1D,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,IAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;;YAGvE,YAAY,CAAC,QAA4B,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC7D,YAAY,CAAC,QAA4B,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC7D,YAAY,CAAC,QAA4B,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC/D,YAAY,CAAC,QAA4B,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACvE,YAAY,CAAC,QAA4B,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;;YAGrE,YAAY,CAAC,QAA4B,CAAC,WAAW,CAAC,SAAS,CAAC,UAAC,IAAI;gBACpE,KAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,KAAI,CAAC,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;aACvB,CAAC,CAAC;;YAGF,YAAY,CAAC,QAA4B,CAAC,WAAW,CAAC,SAAS,CAC9D,UAAC,KAAK;gBACJ,KAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9B,CACF,CAAC;SACH;;;;QAKD,4CAAU,GAAV,UAAW,KAAU;YACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;QAKD,iDAAe,GAAf,UAAgB,CAAS,EAAE,KAAU;YACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;QAKD,sDAAoB,GAApB,UAAqB,CAAS,EAAE,KAAa,EAAE,KAAU;YACvD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;;;QAMD,8CAAY,GAAZ,UAAa,IAAY;YACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;aACjB;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;aACzB;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;aAC9B;SACF;;;;;QAMD,kDAAgB,GAAhB;;YACE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;gBACpC,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAM,KAAK,GAAG,EAAE,CAAC;;oBACjB,KAAqB,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA,gBAAA,4BAAE;wBAAlD,IAAA,KAAA,mBAAM,EAAL,CAAC,QAAA,EAAE,CAAC,QAAA;wBACd,IAAI,CAAC,CAAC,IAAI,EAAE;4BACV,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gCACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;6BACf;yBACF;6BAAM;4BACL,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACf;qBACF;;;;;;;;;gBACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;aACrB;iBAAM;gBACL,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;aACnD;SACF;;;;;;QAOD,2CAAS,GAAT,UAAU,IAAS,EAAE,MAAc;YACjC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE;gBACvB,OAAO,IAAI,CAAC;aACb;YACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACtC;YACD,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO,IAAI,CAAC;aACb;YACD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACpD,IAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,QAAQ,CAClB,IAAI,IAAI,CACN,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAChC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAC7B,CACF,CAAC;SACH;;;;QAKD,0CAAQ,GAAR,UAAS,EAAQ;YACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;aAChB;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;aAChB;YACD,OAAO,IAAI,CAAC,IAAI,CAAC;SAClB;;;;;;;QAQD,+CAAa,GAAb,UAAc,IAAU,EAAE,MAAc,EAAE,IAAY;YACpD,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,OAAO,EAAE,CAAC;aACX;YACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE;gBAC3C,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;aAC5B;YACD,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;aAC3B;YACD,IAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACxD,IAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACjC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACnD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,QACE,KAAK,CAAC,CAAC,CAAC;gBACR,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB,KAAK,CAAC,CAAC,CAAC;gBACR,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB,KAAK,CAAC,CAAC,CAAC,EACR;SACH;;;;QAKD,8CAAY,GAAZ,UAAa,MAAc;YACzB,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,MAAM,CAAC,CAAC;aACjE;YACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;SACjB;;;;QAKD,yCAAO,GAAP,UAAQ,KAAwB;YAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;YAG1B,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;iBACjB;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvB;;YAGD,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;aAClB;SACF;;;;QAKD,4CAAU,GAAV,UAAW,CAAS;YAClB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,KAAK,IAAI,CAAC,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;iBACnB;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvB;SACF;;;;QAKD,0CAAQ,GAAR,UAAS,KAA4B;YACnCC,mBAAe,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvB;;;kGAnhCU,uBAAuB;gEAAvB,uBAAuB;;;+BA8HvB,eAAe;;;;;;;;;;;gBD1K5BhB,yGAUsB;gBAEtBA,0EAiTM;gBACNA,wFAAyC;;;gBA9TnBJ,0GAA6E;gBAY7FD,eAAgF;gBAAhFC,2GAAgF;;4OCgCzE,uBAAuB;;gFAAvB,uBAAuB;sBALnCC,YAAS;uBAAC;wBACT,QAAQ,EAAE,sBAAsB;wBAChC,WAAW,EAAE,mCAAmC;wBAChD,SAAS,EAAE,CAAC,kCAAkC,CAAC;qBAChD;uKAmB2B,QAAQ;0BAAjCoB,eAAY;2BAAC,UAAU;oBAKJ,KAAK;0BAAxBC,YAAS;2BAAC,OAAO;oBAWT,IAAI;0BAAZC,QAAK;oBAKG,KAAK;0BAAbA,QAAK;oBAKG,KAAK;0BAAbA,QAAK;oBAKG,SAAS;0BAAjBA,QAAK;oBAKI,WAAW;0BAApBC,SAAM;oBAKG,WAAW;0BAApBA,SAAM;oBAKG,YAAY;0BAArBA,SAAM;oBAKE,MAAM;0BAAdD,QAAK;oBAKG,YAAY;0BAApBA,QAAK;oBAUG,UAAU;0BAAlBA,QAAK;oBAKG,IAAI;0BAAZA,QAAK;oBAWG,MAAM;0BAAdA,QAAK;oBAMG,aAAa;0BAArBA,QAAK;oBAKG,WAAW;0BAAnBA,QAAK;oBAKG,OAAO;0BAAfA,QAAK;oBAKG,QAAQ;0BAAhBA,QAAK;oBAKwC,UAAU;0BAAvDD,YAAS;2BAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;;;QC7G9C;;;;4FAAa,oBAAoB;4DAApB,oBAAoB;iEANpB;;YAET,EAAE,OAAO,EAAEG,8BAA2B,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;SAC7E,YA5BQ;gBACPC,kBAAa;gBACbC,2BAAgB;gBAChBC,gBAAa;gBACbC,mBAAgB;gBAChBC,oBAAc;gBACdC,iBAAa;gBACbC,sBAAkB;gBAClBC,mBAAe;gBACfC,uBAAmB;gBACnBC,qBAAiB;gBACjBC,yBAAqB;gBACrBC,mBAAgB;gBAChBC,eAAY;gBACZC,kBAAc;gBACdC,uBAAmB;gBACnBC,mBAAe;gBACfC,qBAAkB;gBAClBC,iBAAa;gBACbC,uBAAmB;gBACnBC,oBAAe;gBACfC,kBAAc;gBACdC,kBAAc;aACf;;iFAQU,oBAAoB,mBAhChB,uBAAuB,EAAE,0BAA0B,EAAE,eAAe,aAEjFrB,kBAAa;gBACbC,2BAAgB;gBAChBC,gBAAa;gBACbC,mBAAgB;gBAChBC,oBAAc;gBACdC,iBAAa;gBACbC,sBAAkB;gBAClBC,mBAAe;gBACfC,uBAAmB;gBACnBC,qBAAiB;gBACjBC,yBAAqB;gBACrBC,mBAAgB;gBAChBC,eAAY;gBACZC,kBAAc;gBACdC,uBAAmB;gBACnBC,mBAAe;gBACfC,qBAAkB;gBAClBC,iBAAa;gBACbC,uBAAmB;gBACnBC,oBAAe;gBACfC,kBAAc;gBACdC,kBAAc,aAEN,uBAAuB;;;gFAOtB,oBAAoB;sBAjChCC,WAAQ;uBAAC;wBACR,YAAY,EAAE,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,eAAe,CAAC;wBACpF,OAAO,EAAE;4BACPtB,kBAAa;4BACbC,2BAAgB;4BAChBC,gBAAa;4BACbC,mBAAgB;4BAChBC,oBAAc;4BACdC,iBAAa;4BACbC,sBAAkB;4BAClBC,mBAAe;4BACfC,uBAAmB;4BACnBC,qBAAiB;4BACjBC,yBAAqB;4BACrBC,mBAAgB;4BAChBC,eAAY;4BACZC,kBAAc;4BACdC,uBAAmB;4BACnBC,mBAAe;4BACfC,qBAAkB;4BAClBC,iBAAa;4BACbC,uBAAmB;4BACnBC,oBAAe;4BACfC,kBAAc;4BACdC,kBAAc;yBACf;wBACD,OAAO,EAAE,CAAC,uBAAuB,CAAC;wBAClC,SAAS,EAAE;;4BAET,EAAE,OAAO,EAAEtB,8BAA2B,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE;yBAC7E;qBAEF;;;2BA/ByC,0BAA0B,0BAAnD,uBAAuB;;IC7BxC;;;;ICAA;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js new file mode 100644 index 0000000..be01b8e --- /dev/null +++ b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/material/select"),require("@angular/material/datepicker"),require("@angular/material/checkbox"),require("rxjs"),require("@angular/material/autocomplete"),require("@angular/common/http"),require("rxjs/operators"),require("jsonata"),require("@angular/forms"),require("@angular/material/dialog"),require("@angular/cdk/drag-drop"),require("@angular/cdk/keycodes"),require("@angular/common"),require("@angular/material/expansion"),require("@angular/flex-layout/extended"),require("@angular/material/tooltip"),require("@angular/material/icon"),require("@angular/material/menu"),require("@angular/flex-layout/flex"),require("@angular/material/button"),require("@angular/material/form-field"),require("@angular/material/input"),require("@angular/material/tabs"),require("@angular/material/chips"),require("@angular/material/core"),require("@angular/material/card"),require("@angular/flex-layout"),require("@angular/material/table")):"function"==typeof define&&define.amd?define("@dashjoin/json-schema-form",["exports","@angular/core","@angular/material/select","@angular/material/datepicker","@angular/material/checkbox","rxjs","@angular/material/autocomplete","@angular/common/http","rxjs/operators","jsonata","@angular/forms","@angular/material/dialog","@angular/cdk/drag-drop","@angular/cdk/keycodes","@angular/common","@angular/material/expansion","@angular/flex-layout/extended","@angular/material/tooltip","@angular/material/icon","@angular/material/menu","@angular/flex-layout/flex","@angular/material/button","@angular/material/form-field","@angular/material/input","@angular/material/tabs","@angular/material/chips","@angular/material/core","@angular/material/card","@angular/flex-layout","@angular/material/table"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).dashjoin=e.dashjoin||{},e.dashjoin["json-schema-form"]={}),e.ng.core,e.ng.material.select,e.ng.material.datepicker,e.ng.material.checkbox,e.rxjs,e.ng.material.autocomplete,e.ng.common.http,e.rxjs.operators,e.jsonata,e.ng.forms,e.ng.material.dialog,e.ng.cdk.dragDrop,e.ng.cdk.keycodes,e.ng.common,e.ng.material.expansion,e.ng.flexLayout.extended,e.ng.material.tooltip,e.ng.material.icon,e.ng.material.menu,e.ng.flexLayout.flex,e.ng.material.button,e.ng.material.formField,e.ng.material.input,e.ng.material.tabs,e.ng.material.chips,e.ng.material.core,e.ng.material.card,e.ng.flexLayout,e.ng.material.table)}(this,(function(e,t,a,n,r,i,o,l,s,c,u,m,p,h,d,f,v,y,g,x,C,b,S,w,M,E,I,O,V,k){"use strict";function F(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var T=F(c),D=function(){function e(){this.editMode=!1,this.formats={email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,ipv4:/^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/,url:/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/,uri:/^\w+:(\/?\/?)[^\s]+$/},this.registry={},this.displayWithRegistry={}}return e.prototype.registerComponent=function(e,t){this.registry[e]=t},e.prototype.registerDisplayWith=function(e,t){this.displayWithRegistry[e]=t},e}();D.ɵfac=function(e){return new(e||D)},D.ɵprov=t.ɵɵdefineInjectable({token:D,factory:D.ɵfac,providedIn:"root"}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(D,[{type:t.Injectable,args:[{providedIn:"root"}]}],null,null);Object.create;function j(e){var t="function"==typeof Symbol&&Symbol.iterator,a=t&&e[t],n=0;if(a)return a.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function A(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var n,r,i=a.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(e){r={error:e}}finally{try{n&&!n.done&&(a=i.return)&&a.call(i)}finally{if(r)throw r.error}}return o}Object.create;var L=function(e){this.viewContainerRef=e};L.ɵfac=function(e){return new(e||L)(t.ɵɵdirectiveInject(t.ViewContainerRef))},L.ɵdir=t.ɵɵdefineDirective({type:L,selectors:[["","libWidgetHost",""]]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(L,[{type:t.Directive,args:[{selector:"[libWidgetHost]"}]}],(function(){return[{type:t.ViewContainerRef}]}),null);var q=function(){function e(){}return e.jsonPointer=function(t,a){return e.jsonPointer2(t,e.split(a))},e.jsonPointer2=function(e,t){var a,n;if(void 0!==e){if(0===t.length)return e;var r=t[0],i=Object.assign([],t);if(i.splice(0,1),"*"===t[0]){var o=[];try{for(var l=j("object"==typeof e?Object.values(e):e),s=l.next();!s.done;s=l.next()){var c=s.value;o.push(this.jsonPointer2(c,i))}}catch(e){a={error:e}}finally{try{s&&!s.done&&(n=l.return)&&n.call(l)}finally{if(a)throw a.error}}return o}return this.jsonPointer2(e[r],i)}},e.split=function(e){var t,a;if(""===e)return[];if(e.startsWith("/")){var n=(e=e.substring(1)).split("/");try{for(var r=j(n),i=r.next();!i.done;i=r.next()){if(""===i.value)throw new Error("JSON Pointer must not contain an empty reference token")}}catch(e){t={error:e}}finally{try{i&&!i.done&&(a=r.return)&&a.call(r)}finally{if(t)throw t.error}}return n}throw new Error("JSON Pointer must start with /")},e}(),P=function(){function e(e){this.http=e}return e.prototype.load=function(e,t){var a,n,r=this;if(!this.cache)if(t.choices){var o=[];try{for(var l=j(t.choices),c=l.next();!c.done;c=l.next()){var u=c.value;o.push(this.choice(u,t))}}catch(e){a={error:e}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(a)throw a.error}}this.cache=i.forkJoin(o)}else this.cache=this.getChoices(t.choicesUrl,t.choicesUrlArgs,t.choicesVerb).pipe(s.switchMap((function(e){var a,n;t.jsonata&&(e=T.default(t.jsonata).evaluate(e),Array.isArray(e)||(e=[e]));var o=[];try{for(var l=j(e),s=l.next();!s.done;s=l.next()){var c=s.value;o.push(r.choice(c,t))}}catch(e){a={error:e}}finally{try{s&&!s.done&&(n=l.return)&&n.call(l)}finally{if(a)throw a.error}}return i.forkJoin(o)})),s.publishReplay(1),s.refCount());return this.cache},e.prototype.filter=function(e,t,a,n){var r=this;return n.pipe(s.map((function(e){return a?e.filter((function(e){return r.include(e,a)})):e})))},e.prototype.include=function(e,t){var a;return null===(a=e.name)||void 0===a?void 0:a.toLowerCase().includes(t.toLowerCase())},e.prototype.choice=function(e,t){var a,n;if("localName"===t.displayWith){try{for(var r=j(["/","#",":","."]),o=r.next();!o.done;o=r.next()){var l=o.value,s=e.split(l);if(s.length>1)return i.of({value:e,name:s[s.length-1]})}}catch(e){a={error:e}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}return i.of({value:e,name:e})}return t.jsonata?"object"==typeof e?i.of(e):i.of({value:e,name:e}):t.displayWithChoices?i.of({value:e,name:t.displayWithChoices[t.choices.indexOf(e)]}):i.of({value:e,name:e})},e.prototype.getChoices=function(e,t,a){return"GET"===a?this.http.get(e,t):this.http.post(e,t,{headers:new l.HttpHeaders({"Content-Type":"application/json"})})},e.prototype.debounceTime=function(){return 0},e}(),R=function(e,t){var a;this.dialogRef=e,this.data=t,this.schema={title:"Edit form",layout:"vertical",order:[["widget","layout","itemlayout"],["title","description"],["example","readOnly"],["required","format","errorMessage"],"choices","class","style"],static:!0,type:"object",properties:{description:{type:"string",static:!0,title:"Description / tooltip"},class:{type:"array",items:{type:"string"},layout:"chips",style:{width:"365px"},static:!0,title:"CSS classes"},style:{type:"object",additionalProperties:{type:"string"},static:!0,title:"CSS styles"}}},t.properties?(this.schema.properties.errorMessage={type:"string",static:!0,title:"Validation error message"},this.schema.properties.required={choices:Object.keys(t.properties),type:"array",layout:"select",items:{type:"string"},static:!0,title:"Required fields"},this.schema.properties.layout={type:"string",enum:["vertical","horizontal"],static:!0,title:"Screen layout"}):(t.items&&(this.schema.properties.layout={type:"string",enum:["vertical","horizontal","select","tab","table","chips"],static:!0,title:"Screen Layout"},this.schema.properties.itemlayout={type:"string",enum:["vertical","horizontal"],static:!0,title:"Item screen layout"}),(null===(a=t.items)||void 0===a?void 0:a.properties)?(this.schema.properties.errorMessage={type:"string",static:!0,title:"Validation error message"},this.schema.properties.required={choices:Object.keys(t.items.properties),type:"array",layout:"select",items:{type:"string"},static:!0,title:"Required fields"}):(this.schema.properties.readOnly={type:"boolean",static:!0,title:"Read only value",style:{"padding-top":"15px"}},this.schema.properties.errorMessage={type:"string",static:!0,title:"Validation error message"},this.schema.properties.format={type:"string",static:!0,title:"Format",widget:"select",choices:[null,"email","ipv4","url","uri"]},this.schema.properties.example={type:"string",static:!0,title:"Example data"},this.schema.properties.title={type:"string",static:!0,title:"Title"},this.schema.properties.widget={type:"string",enum:["text","select","date","textarea","password"],static:!0,title:"Form widget"},this.schema.properties.choices={type:"array",items:{type:"string"},style:{width:"365px"},layout:"chips",static:!0,title:"Input choices"}))};R.ɵfac=function(e){return new(e||R)(t.ɵɵdirectiveInject(m.MatDialogRef),t.ɵɵdirectiveInject(m.MAT_DIALOG_DATA))},R.ɵcmp=t.ɵɵdefineComponent({type:R,selectors:[["lib-edit-element-dialog"]],decls:7,vars:4,consts:[[2,"padding-top","10px"],[3,"value","schema","label","valueChange"],["align","end"],["mat-button","",3,"click"],["mat-raised-button","","cdkFocusInitial","",3,"mat-dialog-close"]],template:function(e,a){1&e&&(t.ɵɵelementStart(0,"mat-dialog-content",0),t.ɵɵelementStart(1,"lib-json-schema-form",1),t.ɵɵlistener("valueChange",(function(e){return a.data=e})),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(2,"mat-dialog-actions",2),t.ɵɵelementStart(3,"button",3),t.ɵɵlistener("click",(function(){return a.dialogRef.close()})),t.ɵɵtext(4,"Cancel"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"button",4),t.ɵɵtext(6,"Ok"),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(1),t.ɵɵproperty("value",a.data)("schema",a.schema)("label",a.schema.title),t.ɵɵadvance(4),t.ɵɵproperty("mat-dialog-close",a.data))},encapsulation:2}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(R,[{type:t.Component,args:[{selector:"lib-edit-element-dialog",templateUrl:"./edit-element-dialog.component.html"}]}],(function(){return[{type:m.MatDialogRef},{type:void 0,decorators:[{type:t.Inject,args:[m.MAT_DIALOG_DATA]}]}]}),null);var _=function(){function e(e,t,a,n,r){this.schemaChange=e,this.name=t,this.schema=a,this.parent=n,this.dialog=r}return e.prototype.canAdd=function(){return this.addable().length>0},e.prototype.addable=function(){var e,t,a,n,r,i,o;if(this.schema.properties)o=this.schema;else if(null===(r=this.schema.items)||void 0===r?void 0:r.properties)o=this.schema.items;else{if(!(null===(i=this.schema.additionalProperties)||void 0===i?void 0:i.properties))return[];o=this.schema.additionalProperties}if(o.order){var l=new Set(Object.keys(o.properties));try{for(var s=j(o.order),c=s.next();!c.done;c=s.next()){var u=c.value;if(Array.isArray(u))try{for(var m=(a=void 0,j(u)),p=m.next();!p.done;p=m.next()){var h=p.value;l.delete(h)}}catch(e){a={error:e}}finally{try{p&&!p.done&&(n=m.return)&&n.call(m)}finally{if(a)throw a.error}}else l.delete(u)}}catch(t){e={error:t}}finally{try{c&&!c.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}return Array.from(l)}return[]},e.prototype.addSub=function(e){var t,a,n=this.parent.order.indexOf(this.name);if(n>=0)this.parent.order[n]=[this.parent.order[n],e];else try{for(var r=j(this.parent.order),i=r.next();!i.done;i=r.next()){var o=i.value;Array.isArray(o)&&o.indexOf(this.name)>=0&&o.push(e)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(a=r.return)&&a.call(r)}finally{if(t)throw t.error}}this.schemaChange.emit()},e.prototype.canAddSub=function(){return this.subaddable().length>0},e.prototype.subaddable=function(){var e,t,a,n,r;if(null===(r=this.parent)||void 0===r?void 0:r.order){var i=new Set(Object.keys(this.parent.properties));try{for(var o=j(this.parent.order),l=o.next();!l.done;l=o.next()){var s=l.value;if(Array.isArray(s))try{for(var c=(a=void 0,j(s)),u=c.next();!u.done;u=c.next()){var m=u.value;i.delete(m)}}catch(e){a={error:e}}finally{try{u&&!u.done&&(n=c.return)&&n.call(c)}finally{if(a)throw a.error}}else i.delete(s)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return Array.from(i)}return[]},e.prototype.add=function(e){var t;this.schema.properties?this.schema.order.push(e):(null===(t=this.schema.items)||void 0===t?void 0:t.properties)?this.schema.items.order.push(e):this.schema.additionalProperties.order.push(e),this.schemaChange.emit()},e.prototype.edit=function(){var e,t,a,n=this,r=JSON.parse(JSON.stringify(this.schema));(null===(t=null===(e=r.items)||void 0===e?void 0:e.examples)||void 0===t?void 0:t.length)>0&&(r.example=r.items.examples[0]),(null===(a=r.examples)||void 0===a?void 0:a.length)>0&&(r.example=r.examples[0]),r.widget||(r.widget="text"),r.layout||(r.layout="horizontal"),r.items&&(r.widget=r.items.widget,r.choices=r.items.choices,r.errorMessage=r.items.errorMessage,r.format=r.items.format,r.required=r.items.required,r.itemlayout=r.items.layout),this.dialog.open(R,{minWidth:"50%",data:r}).afterClosed().subscribe((function(e){var t,a;e&&(n.schema.title=e.title,n.schema.description=e.description,n.schema.widget=e.widget,n.schema.layout=e.layout,n.schema.readOnly=e.readOnly,n.schema.errorMessage=e.errorMessage,e.example&&(e.items?n.schema.items.examples=[e.example]:n.schema.examples=[e.example]),e.style&&delete e.style[""],e.style&&Object.keys(e.style).length>0&&(n.schema.style=e.style),e.class&&(e.class=e.class.filter((function(e){return null!=e}))),(null===(t=e.class)||void 0===t?void 0:t.length)>0&&(n.schema.class=e.class),e.items?((null===(a=e.choices)||void 0===a?void 0:a.length)>0&&(n.schema.items.choices=e.choices),n.schema.items.widget=e.widget,n.schema.items.format=e.format,n.schema.items.errorMessage=e.errorMessage,n.schema.items.required=e.required,n.schema.items.layout=e.itemlayout):(n.schema.choices=e.choices,n.schema.widget=e.widget,n.schema.format=e.format,n.schema.errorMessage=e.errorMessage,n.schema.required=e.required),n.schemaChange.emit())}))},e.prototype.canHide=function(){return!!this.parent},e.prototype.hide=function(){var e,t;this.parent.order||(this.parent.order=Object.keys(this.parent.properties));var a=0;try{for(var n=j(this.parent.order),r=n.next();!r.done;r=n.next()){var i=r.value;Array.isArray(i)&&i.indexOf(this.name)>=0&&(i.splice(i.indexOf(this.name),1),1===i.length&&(this.parent.order[a]=i[0])),a++}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}this.parent.order.indexOf(this.name)>=0&&this.parent.order.splice(this.parent.order.indexOf(this.name),1),this.schemaChange.emit()},e.prototype.canUp=function(){var e,t;if(!this.parent)return!1;var a=this.parent.order?this.parent.order:Object.keys(this.parent.properties),n=a.indexOf(this.name);if(n>=0)return n>0;try{for(var r=j(a),i=r.next();!i.done;i=r.next()){var o=i.value;if(Array.isArray(o)&&o.indexOf(this.name)>=0)return o.indexOf(this.name)>0}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},e.prototype.up=function(){var e,t;this.parent.order||(this.parent.order=Object.keys(this.parent.properties));var a=this.parent.order.indexOf(this.name);if(a>=0){var n=this.parent.order[a-1];this.parent.order[a-1]=this.parent.order[a],this.parent.order[a]=n}else try{for(var r=j(this.parent.order),i=r.next();!i.done;i=r.next()){var o=i.value;if(Array.isArray(o)&&(a=o.indexOf(this.name))>=0){n=o[a-1];o[a-1]=o[a],o[a]=n}}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.schemaChange.emit()},e.prototype.canDown=function(){var e,t;if(!this.parent)return!1;var a=this.parent.order?this.parent.order:Object.keys(this.parent.properties),n=a.indexOf(this.name);if(n>=0)return n=0)return o.indexOf(this.name)=0){var n=this.parent.order[a+1];this.parent.order[a+1]=this.parent.order[a],this.parent.order[a]=n}else try{for(var r=j(this.parent.order),i=r.next();!i.done;i=r.next()){var o=i.value;if(Array.isArray(o)&&(a=o.indexOf(this.name))>=0){n=o[a+1];o[a+1]=o[a],o[a]=n}}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.schemaChange.emit()},e}(),$=["child"],N=["children"];function H(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-expansion-panel",3),t.ɵɵelementStart(1,"mat-expansion-panel-header"),t.ɵɵelementStart(2,"mat-panel-title"),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-panel-description"),t.ɵɵtext(5),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"lib-json-schema-form",4,5),t.ɵɵlistener("valueChange",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext().setAndEmit(e)}))("schemaChange",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext().schemaChange.emit()})),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext();t.ɵɵproperty("ngStyle",r.schema.style)("ngClass",r.schema.class)("expanded",r.schema.expanded),t.ɵɵadvance(3),t.ɵɵtextInterpolate(r.label),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.schema.description),t.ɵɵadvance(1),t.ɵɵproperty("label",r.label)("name",r.name)("value",r.value)("switch",r.switch)("rootValue",r.rootValue)("rootSchema",r.rootSchema)("schema",r.schema)("inExpansion",!0)("base",r.base)}}function U(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(n);var e=a.$implicit;return t.ɵɵnextContext(3).edit.add(e)})),t.ɵɵtext(1),t.ɵɵelementEnd()}if(2&e){var r=a.$implicit;t.ɵɵadvance(1),t.ɵɵtextInterpolate(r)}}function z(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(n);var e=a.$implicit;return t.ɵɵnextContext(3).edit.addSub(e)})),t.ɵɵtext(1),t.ɵɵelementEnd()}if(2&e){var r=a.$implicit;t.ɵɵadvance(1),t.ɵɵtextInterpolate(r)}}function W(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"mat-icon",12),t.ɵɵtext(2," more_vert "),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-menu",null,13),t.ɵɵelementStart(5,"button",14),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).edit.edit()})),t.ɵɵelementStart(6,"mat-icon"),t.ɵɵtext(7,"edit"),t.ɵɵelementEnd(),t.ɵɵtext(8,"Edit "),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",15),t.ɵɵelementStart(10,"mat-icon"),t.ɵɵtext(11,"add"),t.ɵɵelementEnd(),t.ɵɵtext(12,"Show "),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"button",15),t.ɵɵelementStart(14,"mat-icon"),t.ɵɵtext(15,"playlist_add"),t.ɵɵelementEnd(),t.ɵɵtext(16,"Show inline "),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",16),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).edit.hide()})),t.ɵɵelementStart(18,"mat-icon"),t.ɵɵtext(19,"remove"),t.ɵɵelementEnd(),t.ɵɵtext(20,"Hide "),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"button",16),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).edit.up()})),t.ɵɵelementStart(22,"mat-icon"),t.ɵɵtext(23,"north_west"),t.ɵɵelementEnd(),t.ɵɵtext(24,"Up / Left "),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"button",16),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).edit.down()})),t.ɵɵelementStart(26,"mat-icon"),t.ɵɵtext(27,"south_east"),t.ɵɵelementEnd(),t.ɵɵtext(28,"Down / Right "),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-menu",null,17),t.ɵɵtemplate(31,U,2,1,"button",18),t.ɵɵelementEnd(),t.ɵɵelementStart(32,"mat-menu",null,19),t.ɵɵtemplate(34,z,2,1,"button",18),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵreference(4),i=t.ɵɵreference(30),o=t.ɵɵreference(33),l=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("matMenuTriggerFor",r)("matTooltip",l.name?"Form element "+l.name:l.isRoot?"Form root":""),t.ɵɵadvance(8),t.ɵɵproperty("disabled",!l.edit.canAdd())("matMenuTriggerFor",i),t.ɵɵadvance(4),t.ɵɵproperty("disabled",!l.edit.canAddSub())("matMenuTriggerFor",o),t.ɵɵadvance(4),t.ɵɵproperty("disabled",!l.edit.canHide()),t.ɵɵadvance(4),t.ɵɵproperty("disabled",!l.edit.canUp()),t.ɵɵadvance(4),t.ɵɵproperty("disabled",!l.edit.canDown()),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",l.edit.addable()),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",l.edit.subaddable())}}function B(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"lib-json-schema-form",26,27),t.ɵɵlistener("valueChange",(function(e){t.ɵɵrestoreView(n);var a=t.ɵɵnextContext().$implicit;return t.ɵɵnextContext(4).onValueChange(a.key,e)}))("schemaChange",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(5).schemaChange.emit()})),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext().$implicit,i=t.ɵɵnextContext(4);t.ɵɵadvance(1),t.ɵɵproperty("name",r.key)("label",r.value.title?r.value.title:r.key)("value",i.value?i.value[r.key]:void 0)("switch",i.value?i.value[i.schema.switch]:void 0)("rootValue",i.rootValue)("rootSchema",i.rootSchema)("schema",r.value)("parentSchema",i.schema)("required",!!i.schema.required&&i.schema.required.includes(r.key))("hideUndefined",i.schema.hideUndefined)("base",i.base)}}function J(e,a){if(1&e&&(t.ɵɵelementStart(0,"div",25),t.ɵɵtemplate(1,B,3,11,"div",7),t.ɵɵelementEnd()),2&e){var n=a.$implicit;t.ɵɵadvance(1),t.ɵɵproperty("ngIf",n.value&&(n.value.type||n.value.$ref))}}function Q(e,a){if(1&e&&(t.ɵɵelementStart(0,"div",23),t.ɵɵtemplate(1,J,2,1,"div",24),t.ɵɵpipe(2,"keyvalue"),t.ɵɵelementEnd()),2&e){var n=a.$implicit,r=t.ɵɵnextContext(3);t.ɵɵproperty("fxLayout","vertical"!==r.schema.layout?"column":"row wrap"),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind2(2,2,n,r.originalOrder))}}function G(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"mat-checkbox",31),t.ɵɵlistener("change",(function(){t.ɵɵrestoreView(n);var e=a.$implicit;return t.ɵɵnextContext(4).showProperty(e)})),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=a.$implicit,i=t.ɵɵnextContext(4);t.ɵɵadvance(1),t.ɵɵproperty("disabled",!!i.value&&i.value[r])("checked",i.value&&void 0!==i.value[r]),t.ɵɵadvance(1),t.ɵɵtextInterpolate1(" ",r," ")}}function K(e,a){if(1&e&&(t.ɵɵelementStart(0,"div",28),t.ɵɵelementStart(1,"button",29),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"more_vert"),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-menu",null,13),t.ɵɵtemplate(6,G,3,3,"div",30),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e){var n=t.ɵɵreference(5),r=t.ɵɵnextContext(3);t.ɵɵadvance(1),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",r.showPropertyList())}}function Z(e,a){if(1&e&&(t.ɵɵelementStart(0,"span",20),t.ɵɵtemplate(1,Q,3,5,"div",21),t.ɵɵtemplate(2,K,7,2,"div",22),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵproperty("fxLayout","vertical"===n.schema.layout?"column":"row wrap")("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",n.orderedProperties),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",n.schema.hideUndefined)}}function Y(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",38),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(n);var e=t.ɵɵnextContext().$implicit;return t.ɵɵnextContext(3).removeField(e.key)})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"remove_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function X(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",34),t.ɵɵlistener("mouseenter",(function(){t.ɵɵrestoreView(n);var e=a.index;return t.ɵɵnextContext(3).hover=e}))("mouseleave",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).hover=null})),t.ɵɵelementStart(1,"mat-form-field"),t.ɵɵelementStart(2,"mat-label"),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"input",35),t.ɵɵlistener("change",(function(e){t.ɵɵrestoreView(n);var r=a.$implicit;return t.ɵɵnextContext(3).fieldNameChange(r.key,e.target.value)})),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵtext(5,"   "),t.ɵɵelementStart(6,"lib-json-schema-form",36,27),t.ɵɵlistener("valueChange",(function(e){t.ɵɵrestoreView(n);var r=a.$implicit;return t.ɵɵnextContext(3).onValueChange(r.key,e)}))("schemaChange",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).schemaChange.emit()})),t.ɵɵelementEnd(),t.ɵɵtemplate(8,Y,3,1,"button",37),t.ɵɵelementEnd()}if(2&e){var r=a.$implicit,i=t.ɵɵnextContext(3);t.ɵɵadvance(3),t.ɵɵtextInterpolate1("",i.getLabel()," key"),t.ɵɵadvance(1),t.ɵɵproperty("disabled",i.readOnly)("value",r.key),t.ɵɵadvance(2),t.ɵɵproperty("label",i.getLabel()+" value")("value",i.value[r.key])("rootValue",i.rootValue)("rootSchema",i.rootSchema)("schema",i.schema.additionalProperties)("base",i.base),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!i.readOnly)}}function ee(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",39),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).addField()})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"add_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function te(e,a){if(1&e&&(t.ɵɵelementStart(0,"span",20),t.ɵɵtemplate(1,X,9,10,"div",32),t.ɵɵpipe(2,"keyvalue"),t.ɵɵtemplate(3,ee,3,1,"button",33),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵproperty("fxLayout","vertical"===n.schema.layout?"column":"row wrap")("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind2(2,5,n.value,n.originalOrder)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.readOnly)}}function ae(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field"),t.ɵɵelementStart(1,"input",45),t.ɵɵlistener("change",(function(e){t.ɵɵrestoreView(n);var a=t.ɵɵnextContext(2).$implicit;return t.ɵɵnextContext(3).fieldNameChange(a.key,e.target.value)})),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(1),t.ɵɵproperty("value",r.key)}}function ne(e,a){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(1),t.ɵɵtextInterpolate(n.key)}}function re(e,a){if(1&e&&(t.ɵɵtemplate(0,ae,2,1,"mat-form-field",7),t.ɵɵtemplate(1,ne,2,1,"span",7)),2&e){var n=t.ɵɵnextContext(4);t.ɵɵproperty("ngIf",!n.readOnly),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",n.readOnly)}}function ie(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",38),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(n);var e=t.ɵɵnextContext().$implicit;return t.ɵɵnextContext(3).removeField(e.key)})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"remove_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function oe(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-tab",42),t.ɵɵtemplate(1,re,2,2,"ng-template",43),t.ɵɵelementStart(2,"lib-json-schema-form",44,27),t.ɵɵlistener("valueChange",(function(e){t.ɵɵrestoreView(n);var r=a.$implicit;return t.ɵɵnextContext(3).onValueChange(r.key,e)}))("schemaChange",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).schemaChange.emit()})),t.ɵɵelementEnd(),t.ɵɵtemplate(4,ie,3,1,"button",37),t.ɵɵelementEnd()}if(2&e){var r=a.$implicit,i=t.ɵɵnextContext(3);t.ɵɵadvance(2),t.ɵɵproperty("value",i.value[r.key])("rootValue",i.rootValue)("rootSchema",i.rootSchema)("schema",i.schema.additionalProperties)("base",i.base),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!i.readOnly)}}function le(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",39),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(4).addField()})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"add_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function se(e,a){1&e&&(t.ɵɵelementStart(0,"mat-tab"),t.ɵɵtemplate(1,le,3,1,"ng-template",43),t.ɵɵelementEnd())}function ce(e,a){if(1&e&&(t.ɵɵelementStart(0,"mat-tab-group",40),t.ɵɵtemplate(1,oe,5,6,"mat-tab",41),t.ɵɵpipe(2,"keyvalue"),t.ɵɵtemplate(3,se,2,0,"mat-tab",7),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵproperty("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind2(2,4,n.value,n.originalOrder)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.readOnly)}}function ue(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",38),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(n);var e=t.ɵɵnextContext().index;return t.ɵɵnextContext(3).remove(e)})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"remove_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function me(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",34),t.ɵɵlistener("mouseenter",(function(){t.ɵɵrestoreView(n);var e=a.index;return t.ɵɵnextContext(3).hover=e}))("mouseleave",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).hover=null})),t.ɵɵelementStart(1,"lib-json-schema-form",36,27),t.ɵɵlistener("valueChange",(function(e){t.ɵɵrestoreView(n);var r=a.index;return t.ɵɵnextContext(3).setIndexAndEmit(r,e)}))("schemaChange",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).schemaChange.emit()})),t.ɵɵelementEnd(),t.ɵɵtemplate(3,ue,3,1,"button",37),t.ɵɵelementEnd()}if(2&e){var r=a.index,i=t.ɵɵnextContext(3);t.ɵɵadvance(1),t.ɵɵproperty("label",i.getLabel())("value",i.value[r])("rootValue",i.rootValue)("rootSchema",i.rootSchema)("schema",i.schema.items)("base",i.base),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!i.readOnly)}}function pe(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",39),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).add()})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"add_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function he(e,a){if(1&e&&(t.ɵɵelementStart(0,"span",20),t.ɵɵtemplate(1,me,4,7,"div",32),t.ɵɵtemplate(2,pe,3,1,"button",33),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵproperty("fxLayout","vertical"===n.schema.layout?"column":"row wrap")("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",n.value),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!n.readOnly)}}function de(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-chip",51),t.ɵɵlistener("removed",(function(){t.ɵɵrestoreView(n);var e=a.$implicit;return t.ɵɵnextContext(3).removeChip(e)})),t.ɵɵtext(1),t.ɵɵelementStart(2,"mat-icon",52),t.ɵɵtext(3,"cancel"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=a.$implicit,i=t.ɵɵnextContext(3);t.ɵɵproperty("removable",!i.readOnly),t.ɵɵadvance(1),t.ɵɵtextInterpolate1(" ",r," ")}}function fe(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"span"),t.ɵɵelementStart(1,"mat-form-field",46),t.ɵɵelementStart(2,"mat-chip-list",47,48),t.ɵɵlistener("cdkDropListDropped",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).dropChip(e)})),t.ɵɵtemplate(4,de,4,2,"mat-chip",49),t.ɵɵelementStart(5,"input",50),t.ɵɵlistener("matChipInputTokenEnd",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).addChip(e)})),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵreference(3),i=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("ngStyle",i.schema.style)("ngClass",i.schema.class),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",i.value),t.ɵɵadvance(1),t.ɵɵproperty("placeholder",i.schema.title)("matChipInputFor",r)("matChipInputSeparatorKeyCodes",i.separatorKeysCodes)("disabled",i.readOnly)}}function ve(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",38),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(n);var e=t.ɵɵnextContext().index;return t.ɵɵnextContext(3).remove(e)})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"remove_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function ye(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-tab",54),t.ɵɵelementStart(1,"lib-json-schema-form",44,27),t.ɵɵlistener("valueChange",(function(e){t.ɵɵrestoreView(n);var r=a.index;return t.ɵɵnextContext(3).setIndexAndEmit(r,e)}))("schemaChange",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).schemaChange.emit()})),t.ɵɵelementEnd(),t.ɵɵtemplate(3,ve,3,1,"button",37),t.ɵɵelementEnd()}if(2&e){var r=a.index,i=t.ɵɵnextContext(3);t.ɵɵproperty("label",i.getLabel()+" "+r),t.ɵɵadvance(1),t.ɵɵproperty("value",i.value[r])("rootValue",i.rootValue)("rootSchema",i.rootSchema)("schema",i.schema.items)("base",i.base),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!i.readOnly)}}function ge(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",39),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(4).add()})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"add_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function xe(e,a){1&e&&(t.ɵɵelementStart(0,"mat-tab"),t.ɵɵtemplate(1,ge,3,1,"ng-template",43),t.ɵɵelementEnd())}function Ce(e,a){if(1&e&&(t.ɵɵelementStart(0,"mat-tab-group",40),t.ɵɵtemplate(1,ye,4,7,"mat-tab",53),t.ɵɵtemplate(2,xe,2,0,"mat-tab",7),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵproperty("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",n.value),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!n.readOnly)}}function be(e,a){if(1&e&&(t.ɵɵelementStart(0,"th",58),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){var n=a.$implicit;t.ɵɵadvance(1),t.ɵɵtextInterpolate1(" ",n.value.title?n.value.title:n.key,"")}}function Se(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"td"),t.ɵɵelementStart(1,"lib-json-schema-form",59,27),t.ɵɵlistener("valueChange",(function(e){t.ɵɵrestoreView(n);var r=a.$implicit,i=t.ɵɵnextContext().index;return t.ɵɵnextContext(3).setIndexAndEmitTable(i,r.key,e)}))("schemaChange",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(4).schemaChange.emit()})),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=a.$implicit,i=t.ɵɵnextContext().$implicit,o=t.ɵɵnextContext(3);t.ɵɵadvance(1),t.ɵɵproperty("value",i[r.key])("rootValue",o.rootValue)("rootSchema",o.rootSchema)("schema",o.schema.items.properties[r.key])("base",o.base)}}function we(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",39),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(n);var e=t.ɵɵnextContext().index;return t.ɵɵnextContext(3).remove(e)})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"remove_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function Me(e,a){if(1&e&&(t.ɵɵelementStart(0,"tr"),t.ɵɵtemplate(1,Se,3,5,"td",30),t.ɵɵpipe(2,"keyvalue"),t.ɵɵelementStart(3,"td"),t.ɵɵtemplate(4,we,3,1,"button",33),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(3);t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind2(2,2,n.schema.items.properties,n.originalOrder)),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",!n.readOnly)}}function Ee(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",39),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).add()})),t.ɵɵelementStart(1,"mat-icon"),t.ɵɵtext(2,"add_circle_outline"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵpropertyInterpolate("matTooltip",r.getLabel())}}function Ie(e,a){if(1&e&&(t.ɵɵelementStart(0,"span",46),t.ɵɵelementStart(1,"table",55),t.ɵɵelementStart(2,"tr"),t.ɵɵtemplate(3,be,2,1,"th",56),t.ɵɵpipe(4,"keyvalue"),t.ɵɵelement(5,"th",57),t.ɵɵelementEnd(),t.ɵɵtemplate(6,Me,5,5,"tr",30),t.ɵɵelementEnd(),t.ɵɵtemplate(7,Ee,3,1,"button",33),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵproperty("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind2(4,5,n.schema.items.properties,n.originalOrder)),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.value),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!n.readOnly)}}function Oe(e,a){if(1&e&&(t.ɵɵelementStart(0,"mat-option",63),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){var n=a.$implicit;t.ɵɵproperty("value",n),t.ɵɵadvance(1),t.ɵɵtextInterpolate(n)}}function Ve(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"mat-form-field",46),t.ɵɵelementStart(2,"mat-label"),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",60),t.ɵɵlistener("selectionChange",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).change(e)})),t.ɵɵtemplate(5,Oe,2,2,"mat-option",61),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"p",62),t.ɵɵtext(7),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("ngStyle",r.schema.style)("ngClass",r.schema.class),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.label),t.ɵɵadvance(1),t.ɵɵproperty("value",r.value)("disabled",r.readOnly),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",r.schema.enum),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.error())}}function ke(e,a){if(1&e&&(t.ɵɵelementStart(0,"mat-option",67),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){var n=a.$implicit;t.ɵɵproperty("value",n.value)("matTooltip",n.name!==n.value?n.value:null),t.ɵɵadvance(1),t.ɵɵtextInterpolate1(" ",n.name," ")}}function Fe(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"mat-form-field",64),t.ɵɵelementStart(2,"mat-label"),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",65),t.ɵɵlistener("focus",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).focus()}))("selectionChange",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).change(e)})),t.ɵɵtemplate(5,ke,2,3,"mat-option",66),t.ɵɵpipe(6,"async"),t.ɵɵelementEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"p",62),t.ɵɵtext(8),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("matTooltip",r.schema.description)("ngStyle",r.schema.style)("ngClass",r.schema.class),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.label),t.ɵɵadvance(1),t.ɵɵproperty("value",r.value)("disabled",r.readOnly),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(6,8,r.choices)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(r.error())}}function Te(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"mat-form-field",46),t.ɵɵelementStart(2,"mat-label"),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"input",68),t.ɵɵlistener("dateChange",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).change(e)})),t.ɵɵelementEnd(),t.ɵɵelement(5,"mat-datepicker-toggle",69),t.ɵɵelement(6,"mat-datepicker",null,70),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"p",62),t.ɵɵtext(9),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵreference(7),i=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("ngStyle",i.schema.style)("ngClass",i.schema.class),t.ɵɵadvance(2),t.ɵɵtextInterpolate(i.label),t.ɵɵadvance(1),t.ɵɵproperty("value",i.parseDate(i.value,i.schema.dateFormat))("matDatepicker",r)("disabled",i.readOnly),t.ɵɵadvance(1),t.ɵɵproperty("for",r),t.ɵɵadvance(4),t.ɵɵtextInterpolate(i.error())}}function De(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",71),t.ɵɵelementStart(1,"mat-checkbox",72),t.ɵɵlistener("change",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).change(e)})),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"p",62),t.ɵɵtext(4),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(2);t.ɵɵproperty("ngStyle",r.schema.style)("ngClass",r.schema.class),t.ɵɵadvance(1),t.ɵɵproperty("checked",r.value)("disabled",r.readOnly),t.ɵɵadvance(1),t.ɵɵtextInterpolate1(" ",r.label,""),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.error())}}function je(e,a){if(1&e&&(t.ɵɵelementStart(0,"mat-option",67),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){var n=a.$implicit;t.ɵɵproperty("value",n.value)("matTooltip",n.name!==n.value?n.value:null),t.ɵɵadvance(1),t.ɵɵtextInterpolate1(" ",n.name," ")}}function Ae(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",46),t.ɵɵelementStart(1,"mat-label"),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",73),t.ɵɵlistener("focus",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).focus()}))("selectionChange",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).change(e)})),t.ɵɵtemplate(4,je,2,3,"mat-option",66),t.ɵɵpipe(5,"async"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵproperty("ngStyle",r.schema.style)("ngClass",r.schema.class),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.label),t.ɵɵadvance(1),t.ɵɵproperty("value",r.value)("disabled",r.readOnly),t.ɵɵadvance(1),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(5,6,r.choices))}}function Le(e,a){if(1&e&&(t.ɵɵelementStart(0,"mat-option",67),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){var n=a.$implicit;t.ɵɵproperty("value",n.value)("matTooltip",n.name!==n.value?n.value:null),t.ɵɵadvance(1),t.ɵɵtextInterpolate1(" ",n.name," ")}}function qe(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",46),t.ɵɵelementStart(1,"mat-label"),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"input",74),t.ɵɵlistener("focus",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).focus()})),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-autocomplete",null,75),t.ɵɵtemplate(6,Le,2,3,"mat-option",66),t.ɵɵpipe(7,"async"),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵreference(5),i=t.ɵɵnextContext(3);t.ɵɵproperty("ngStyle",i.schema.style)("ngClass",i.schema.class),t.ɵɵadvance(2),t.ɵɵtextInterpolate(i.label),t.ɵɵadvance(1),t.ɵɵproperty("formControl",i.control)("matAutocomplete",r),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(7,6,i.filteredOptions))}}function Pe(e,a){if(1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,Ae,6,8,"mat-form-field",10),t.ɵɵtemplate(2,qe,8,8,"mat-form-field",10),t.ɵɵelementStart(3,"p",62),t.ɵɵtext(4),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("ngIf","select"===n.schema.widget),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","select"!==n.schema.widget),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.error())}}function Re(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"input",78),t.ɵɵlistener("input",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).change(e)}))("focus",(function(){t.ɵɵrestoreView(n);var e=t.ɵɵnextContext(3);return"password"==e.getInputType(e.schema)?e.value="":""})),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵproperty("disabled",r.readOnly)("placeholder",r.example())("type",r.getInputType(r.schema))("value",r.value)}}function _e(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"input",79),t.ɵɵlistener("change",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).change(e)})),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵproperty("disabled",r.readOnly)("placeholder",r.example())("type",r.getInputType(r.schema))("value",r.value)}}function $e(e,a){if(1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"mat-form-field",46),t.ɵɵelementStart(2,"mat-label"),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Re,1,4,"input",76),t.ɵɵtemplate(5,_e,1,4,"input",77),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"p",62),t.ɵɵtext(7),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.label),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!n.inArray),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",n.inArray),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.error())}}function Ne(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"textarea",82),t.ɵɵlistener("input",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).change(e)})),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵproperty("disabled",r.readOnly)("placeholder",r.example())("value",r.value)("ngStyle",r.schema.style)("ngClass",r.schema.class)}}function He(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"textarea",83),t.ɵɵlistener("change",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(3).change(e)})),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(3);t.ɵɵproperty("disabled",r.readOnly)("placeholder",r.example())("value",r.value)("ngStyle",r.schema.style)("ngClass",r.schema.class)}}function Ue(e,a){if(1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"mat-form-field",46),t.ɵɵelementStart(2,"mat-label"),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Ne,1,5,"textarea",80),t.ɵɵtemplate(5,He,1,5,"textarea",81),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"p",62),t.ɵɵtext(7),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("ngStyle",n.schema.style)("ngClass",n.schema.class),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.label),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!n.inArray),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",n.inArray),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.error())}}function ze(e,a){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div"),t.ɵɵelementStart(1,"input",84),t.ɵɵlistener("change",(function(e){return t.ɵɵrestoreView(n),t.ɵɵnextContext(2).handleFileInput(e)})),t.ɵɵelementEnd(),t.ɵɵelementStart(2,"p",62),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵelementEnd()}if(2&e){var r=t.ɵɵnextContext(2);t.ɵɵadvance(1),t.ɵɵproperty("ngStyle",r.schema.style)("ngClass",r.schema.class)("disabled",r.readOnly),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.error())}}function We(e,a){if(1&e&&(t.ɵɵelementStart(0,"div",6),t.ɵɵtemplate(1,W,35,11,"div",7),t.ɵɵtemplate(2,Z,3,5,"span",8),t.ɵɵtemplate(3,te,4,8,"span",8),t.ɵɵtemplate(4,ce,4,7,"mat-tab-group",9),t.ɵɵtemplate(5,he,3,5,"span",8),t.ɵɵtemplate(6,fe,6,7,"span",7),t.ɵɵtemplate(7,Ce,3,4,"mat-tab-group",9),t.ɵɵtemplate(8,Ie,8,8,"span",10),t.ɵɵtemplate(9,Ve,8,7,"div",7),t.ɵɵtemplate(10,Fe,9,10,"div",7),t.ɵɵtemplate(11,Te,10,8,"div",7),t.ɵɵtemplate(12,De,5,6,"div",11),t.ɵɵtemplate(13,Pe,5,3,"div",7),t.ɵɵtemplate(14,$e,8,6,"div",7),t.ɵɵtemplate(15,Ue,8,6,"div",7),t.ɵɵtemplate(16,ze,4,4,"div",7),t.ɵɵelementEnd()),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",n.schema.description),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",n.service.editMode&&!n.schema.static&&!n.inArray&&"none"!==n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","object"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","additionalProperties"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","additionalPropertiesTab"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","array"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","chips"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","tab"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","table"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","enum"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","array-select"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","date"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","checkbox"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","autocomplete"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","single"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","textarea"===n.getLayout()),t.ɵɵadvance(1),t.ɵɵproperty("ngIf","upload"===n.getLayout())}}function Be(e,t){}var Je=function(){function e(e,a,n,r){this.http=e,this.componentFactoryResolver=a,this.service=n,this.dialog=r,this.valueChange=new t.EventEmitter,this.errorChange=new t.EventEmitter,this.schemaChange=new t.EventEmitter,this.isRoot=!1,this.separatorKeysCodes=[h.ENTER,h.COMMA,h.TAB],this.originalOrder=function(e,t){return 0}}return e.prototype.setOrderedProperties=function(){var e,t,a,n,r,i;if(this.schema.order){this.orderedProperties=[];try{for(var o=j(this.schema.order),l=o.next();!l.done;l=o.next()){var s=l.value,c=Array.isArray(s)?s:[s],u={};try{for(var m=(a=void 0,j(c)),p=m.next();!p.done;p=m.next()){var h=p.value;u[h]=this.schema.properties[h]}}catch(e){a={error:e}}finally{try{p&&!p.done&&(n=m.return)&&n.call(m)}finally{if(a)throw a.error}}this.orderedProperties.push(u)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}}else if(this.schema.properties){this.orderedProperties=[];try{for(var d=j(Object.entries(this.schema.properties)),f=d.next();!f.done;f=d.next()){var v=A(f.value,2),y=v[0],g=v[1];(u={})[y]=g,this.orderedProperties.push(u)}}catch(e){r={error:e}}finally{try{f&&!f.done&&(i=d.return)&&i.call(d)}finally{if(r)throw r.error}}}},e.prototype.ngOnInit=function(){var e,t,a,n,r=this;if(this.readOnly=this.schema.readOnly||this.schema.createOnly&&this.value,this.rootSchema||(this.rootSchema=this.schema,this.rootValue=this.value,this.isRoot=!0),this.schema.type)this.setOrderedProperties();else{var o=this.schema.$ref.split("#");1===o.length?this.url(o[0],null):o[0]?this.url(o[0],o[1]):(this.schema=q.jsonPointer(this.rootSchema,o[1]),this.setOrderedProperties())}if(void 0===this.value&&(this.schema.default?(this.value=this.schema.default,setTimeout((function(){return r.emit(r.value)}),500)):this.hideUndefined||(this.value=null)),"custom"===this.getLayout()&&this.loadComponent(),this.isRoot&&setTimeout((function(){r.errorChange.emit(r.recursiveError())}),10),this.ch=this.service.displayWithRegistry[this.schema.displayWith],this.ch||(this.ch=new P(this.http)),this.control=new u.FormControl(this.value),this.choices=new i.ReplaySubject,Array.isArray(this.value)){var l=[];try{for(var c=j(this.value),m=c.next();!m.done;m=c.next()){var p=m.value;l.push({name:p,value:p})}}catch(t){e={error:t}}finally{try{m&&!m.done&&(t=c.return)&&t.call(c)}finally{if(e)throw e.error}}this.choices.next(l)}else this.choices.next([{name:this.value,value:this.value}]);if(this.value||0===this.value)if(Array.isArray(this.value)){l=[];try{for(var h=j(this.value),d=h.next();!d.done;d=h.next()){p=d.value;l.push(this.ch.choice(p,this.schema))}}catch(e){a={error:e}}finally{try{d&&!d.done&&(n=h.return)&&n.call(h)}finally{if(a)throw a.error}}i.forkJoin(l).subscribe((function(e){return r.choices.next(e)}))}else this.ch.choice(this.value,this.schema).subscribe((function(e){return r.choices.next([e])}));this.filteredOptions=this.control.valueChanges.pipe(s.startWith(this.value),s.debounceTime(this.ch.debounceTime()),s.switchMap((function(e){return r.change({target:{value:e}}),r.ch.filter(r.value,r.schema,e,r.choices)}))),this.edit=new _(this.schemaChange,this.name,this.schema,this.parentSchema,this.dialog)},e.prototype.focus=function(){var e=this;this.ch.load(this.value,this.schema).subscribe((function(t){e.choices.next(t)}))},e.prototype.url=function(e,t){var a=this;if(this.base=this.base?new URL(e,this.base).href:e,this.rootSchema.referenced&&this.rootSchema.referenced[this.base]){var n=this.rootSchema.referenced[this.base];return this.schema=t?q.jsonPointer(n,t):n,void this.setOrderedProperties()}this.http.get(this.base).subscribe((function(e){a.schema=t?q.jsonPointer(e,t):e,a.setOrderedProperties()}),(function(e){return console.log(e)})),this.schema={type:"string"},this.setOrderedProperties()},e.prototype.emit=function(e){var t=this;this.valueChange.emit(e),this.isRoot&&setTimeout((function(){t.errorChange.emit(t.recursiveError())}),10)},e.prototype.ngOnChanges=function(e){e.schema&&e.schema.previousValue&&(this.rootSchema=null,this.widgetHost.viewContainerRef&&this.widgetHost.viewContainerRef.clear(),this.ngOnInit()),e.switch&&!e.switch.isFirstChange()&&("custom"===this.getLayout()?this.loadComponent():this.widgetHost.viewContainerRef&&this.widgetHost.viewContainerRef.clear())},e.prototype.getLayout=function(){return this.schema.case&&this.schema.case.indexOf(this.switch)<0?"none":"custom"===this.schema.widget?"custom":this.hideUndefined&&void 0===this.value?"none":"object"===this.schema.type?this.schema.additionalProperties?"tab"===this.schema.layout?"additionalPropertiesTab":"additionalProperties":"object":"array"===this.schema.type?"tab"===this.schema.layout?"tab":"table"===this.schema.layout?"table":"select"===this.schema.layout?"array-select":"chips"===this.schema.layout?"chips":"array":this.schema.enum?"enum":"date"===this.schema.widget?"date":"upload"===this.schema.widget?"upload":"textarea"===this.schema.widget?"textarea":"boolean"===this.schema.type?"checkbox":this.schema.choicesUrl||this.schema.choices||this.schema.displayWith?"autocomplete":"single"},e.prototype.getInputType=function(e){return"number"===e.type||"integer"===e.type?"number":e.widget},e.prototype.onValueChange=function(e,t){var a,n;if(this.value||(this.value={}),this.value[e]=t,this.schema.computed)try{for(var r=j(Object.keys(this.schema.computed)),i=r.next();!i.done;i=r.next()){var o=i.value,l=this.schema.computed[o];this.value[o]=T.default(l).evaluate(this.value)}}catch(e){a={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}this.emit(this.value)},e.prototype.add=function(){this.value instanceof Array||(this.value=[]),"array"===this.schema.items.type?this.value.push([]):"object"===this.schema.items.type?this.value.push({}):this.value.push(null),this.emit(this.value)},e.prototype.addField=function(){this.value||(this.value={}),this.value[""]||(this.value[""]=null,this.emit(this.value))},e.prototype.remove=function(e){this.value.splice(e,1),this.emit(this.value)},e.prototype.removeField=function(e){delete this.value[e],this.emit(this.value)},e.prototype.fieldNameChange=function(e,t){this.value[t]=this.value[e],delete this.value[e],this.emit(this.value)},e.prototype.recursiveError=function(){var e,t,a=this.error();if(a)return a;if(this.child)return this.child.recursiveError();if(this.children)try{for(var n=j(this.children),r=n.next();!r.done;r=n.next()){var i=r.value.recursiveError();if(i)return i}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return null},e.prototype.e=function(e){return this.schema.errorMessage?this.schema.errorMessage:e},e.prototype.error=function(){var e,t,a,n,r,i,o,l,s;if("custom"===this.schema.widget)return this.customError;if(this.schema.case&&this.schema.case.indexOf(this.switch)<0)return null;if(this.value){if(this.schema.maxItems&&!(this.value.length<=this.schema.maxItems))return this.e("Only "+this.schema.maxItems+" array entries allowed");if(this.schema.uniqueItems&&new Set(this.value).size!==this.value.length)return this.e("Array entries must be unique");if(this.schema.minItems&&!(this.value.length>=this.schema.minItems))return this.e("At least "+this.schema.minItems+" array entries required");if(this.schema.maxProperties&&!(Object.keys(this.value).length<=this.schema.maxProperties))return this.e("Only "+this.schema.maxProperties+" fields allowed");if(this.schema.propertyNames)try{for(var c=j(Object.keys(this.value)),u=c.next();!u.done;u=c.next()){var m=u.value;if(!(S=new RegExp(this.schema.propertyNames)).test(m))return this.e("illegal field name: "+m)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(t=c.return)&&t.call(c)}finally{if(e)throw e.error}}if(this.schema.dependencies)try{for(var p=j(Object.keys(this.schema.dependencies)),h=p.next();!h.done;h=p.next()){var d=h.value;if(this.value[d])try{for(var f=(r=void 0,j(this.schema.dependencies[d])),v=f.next();!v.done;v=f.next()){var y=v.value;if(!this.value[y])return this.e(d+" depends on "+y)}}catch(e){r={error:e}}finally{try{v&&!v.done&&(i=f.return)&&i.call(f)}finally{if(r)throw r.error}}}}catch(e){a={error:e}}finally{try{h&&!h.done&&(n=p.return)&&n.call(p)}finally{if(a)throw a.error}}if(this.schema.minProperties&&!(Object.keys(this.value).length>=this.schema.minProperties))return this.e("At least "+this.schema.minProperties+" fields required");if(this.schema.maxLength&&!((""+this.value).length<=this.schema.maxLength))return this.e("Input is longer than "+this.schema.maxLength);if(this.schema.minLength&&!((""+this.value).length>=this.schema.minLength))return this.e("Input is shorter than "+this.schema.minLength);if(this.schema.multipleOf&&!Number.isInteger(Number(this.value)/this.schema.multipleOf))return this.e("Must be multiple of "+this.schema.multipleOf);if(this.schema.exclusiveMaximum&&!(Number(this.value)this.schema.exclusiveMinimum))return this.e("Must greater than "+this.schema.exclusiveMinimum);if(this.schema.minimum&&!(Number(this.value)>=this.schema.minimum))return this.e("Must greater than or equal "+this.schema.minimum)}if(this.required&&(null==this.value||Object.is(this.value,NaN)))return this.e("required");if(this.schema.required)try{for(var g=j(this.schema.required),x=g.next();!x.done;x=g.next()){d=x.value;if(!this.value[d]&&!1!==this.value[d]&&0!==this.value[d]){var C=!1;if(this.schema.switch){var b=this.value[this.schema.switch];b&&(null===(s=this.schema.properties[d].case)||void 0===s?void 0:s.indexOf(b))<0&&(C=!0)}if(!C)return this.e(d+" is required")}}}catch(e){o={error:e}}finally{try{x&&!x.done&&(l=g.return)&&l.call(g)}finally{if(o)throw o.error}}if(this.schema.pattern){var S=new RegExp(this.schema.pattern);if(!this.value)return this.e("illegal string");if(!S.test(this.value))return this.e("illegal string")}if(this.schema.format&&this.service.formats[this.schema.format]){S=new RegExp(this.service.formats[this.schema.format]);if(!this.value)return this.e("illegal string");if(!S.test(this.value))return this.e("illegal string")}return null},e.prototype.getLabel=function(){return this.schema.title?this.schema.title:this.label?this.label:""},e.prototype.change=function(e){if(e instanceof a.MatSelectChange?e=e.value:e instanceof n.MatDatepickerInputEvent?e=this.serializeDate(e.value,this.schema.dateFormat,this.schema.type):e instanceof o.MatAutocompleteSelectedEvent?e=e.option.value:e instanceof r.MatCheckboxChange?e=e.checked:(e.target,e=e.target.value),""===e&&(e=null),null==e&&(this.value=null),"number"===this.schema.type)this.value=parseFloat(e);else if("integer"===this.schema.type)this.value=parseInt(e,10);else if("boolean"===this.schema.type)this.value="string"==typeof e?"true"===e||"false"!==e&&null:e;else if("string"===this.schema.type)this.value=e;else{if("array"!==this.schema.type)throw new Error("unknown type: "+this.schema.type);this.value=e}this.emit(this.value)},e.prototype.handleFileInput=function(e){var t=this;if(1048576<=e.target.files.item(0).size)console.log("The file size is limited to 1MB");else{var a=new FileReader;a.onload=function(){t.value=a.result,t.emit(t.value)},a.readAsDataURL(e.target.files.item(0))}},e.prototype.example=function(){return this.schema.examples&&this.schema.examples[0]?this.schema.examples[0]:this.schema.default?this.schema.default:null},e.prototype.loadComponent=function(){var e=this,t=this.componentFactoryResolver.resolveComponentFactory(this.service.registry[this.schema.widgetType]),a=this.widgetHost.viewContainerRef;a.clear();var n=a.createComponent(t);n.instance.label=this.label,n.instance.value=this.value,n.instance.schema=this.schema,n.instance.rootSchema=this.rootSchema,n.instance.rootValue=this.rootValue,n.instance.valueChange.subscribe((function(t){e.value=t,e.emit(e.value)})),n.instance.errorChange.subscribe((function(t){e.customError=t,e.errorChange.emit(t)}))},e.prototype.setAndEmit=function(e){this.value=e,this.emit(this.value)},e.prototype.setIndexAndEmit=function(e,t){this.value[e]=t,this.emit(this.value)},e.prototype.setIndexAndEmitTable=function(e,t,a){this.value[e][t]=a,this.emit(this.value)},e.prototype.showProperty=function(e){this.value||(this.value={}),void 0===this.value[e]?this.value[e]=null:null===this.value[e]&&(this.value[e]=void 0)},e.prototype.showPropertyList=function(){var e,t;if(this.schema.switch&&this.value){var a=this.value[this.schema.switch],n=[];try{for(var r=j(Object.entries(this.schema.properties)),i=r.next();!i.done;i=r.next()){var o=A(i.value,2),l=o[0],s=o[1];s.case?s.case.includes(a)&&n.push(l):n.push(l)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return n.sort()}return Object.keys(this.schema.properties).sort()},e.prototype.parseDate=function(e,t){if(!e&&0!==e)return e;if("number"==typeof e)return this.sameDate(new Date(e));if(!t)return e;var a=e.split(this.getDelimiter(t)),n=t.split(this.getDelimiter(t));return this.sameDate(new Date(a[n.indexOf("yyyy")],a[n.indexOf("MM")]-1,a[n.indexOf("dd")]))},e.prototype.sameDate=function(e){return this.date||(this.date=e),this.date.getTime()!==e.getTime()&&(this.date=e),this.date},e.prototype.serializeDate=function(e,t,a){if(null==e)return"";if("integer"===a||"number"===a)return""+e.valueOf();if(!t)return e.toISOString();var n=t.split(this.getDelimiter(t)),r=[null,null,null];return r[n.indexOf("yyyy")]=e.getFullYear(),r[n.indexOf("MM")]=e.getMonth()+1,r[n.indexOf("dd")]=e.getDate(),r[0]+this.getDelimiter(t)+r[1]+this.getDelimiter(t)+r[2]},e.prototype.getDelimiter=function(e){var t=e.match(/\W/g);if(!t[0])throw new Error("No delimiter found in date format: "+e);return t[0]},e.prototype.addChip=function(e){var t=e.input,a=e.value;(a||"").trim()&&(this.value||(this.value=[]),this.value.push(a.trim()),this.emit(this.value)),t&&(t.value="")},e.prototype.removeChip=function(e){var t=this.value.indexOf(e);t>=0&&(this.value.splice(t,1),0===this.value.length&&(this.value=null),this.emit(this.value))},e.prototype.dropChip=function(e){p.moveItemInArray(this.value,e.previousIndex,e.currentIndex),this.emit(this.value)},e}();Je.ɵfac=function(e){return new(e||Je)(t.ɵɵdirectiveInject(l.HttpClient),t.ɵɵdirectiveInject(t.ComponentFactoryResolver),t.ɵɵdirectiveInject(D),t.ɵɵdirectiveInject(m.MatDialog))},Je.ɵcmp=t.ɵɵdefineComponent({type:Je,selectors:[["lib-json-schema-form"]],viewQuery:function(e,a){if(1&e&&(t.ɵɵviewQuery($,1),t.ɵɵviewQuery(L,3),t.ɵɵviewQuery(N,1)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(a.child=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(a.widgetHost=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(a.children=n)}},inputs:{name:"name",label:"label",value:"value",rootValue:"rootValue",schema:"schema",parentSchema:"parentSchema",rootSchema:"rootSchema",base:"base",switch:"switch",hideUndefined:"hideUndefined",inExpansion:"inExpansion",inArray:"inArray",required:"required"},outputs:{valueChange:"valueChange",errorChange:"errorChange",schemaChange:"schemaChange"},features:[t.ɵɵNgOnChangesFeature],decls:3,vars:2,consts:[[3,"ngStyle","ngClass","expanded",4,"ngIf"],[3,"matTooltip",4,"ngIf"],["libWidgetHost",""],[3,"ngStyle","ngClass","expanded"],[3,"label","name","value","switch","rootValue","rootSchema","schema","inExpansion","base","valueChange","schemaChange"],["child",""],[3,"matTooltip"],[4,"ngIf"],[3,"fxLayout","ngStyle","ngClass",4,"ngIf"],["animationDuration","0ms","style","max-width: 96vw",3,"ngStyle","ngClass",4,"ngIf"],[3,"ngStyle","ngClass",4,"ngIf"],["style","margin: 6px; margin-top: 12px;",3,"ngStyle","ngClass",4,"ngIf"],[2,"cursor","pointer",3,"matMenuTriggerFor","matTooltip"],["menu","matMenu"],["mat-menu-item","",3,"click"],["mat-menu-item","",3,"disabled","matMenuTriggerFor"],["mat-menu-item","",3,"disabled","click"],["madd","matMenu"],["mat-menu-item","",3,"click",4,"ngFor","ngForOf"],["madd2","matMenu"],[3,"fxLayout","ngStyle","ngClass"],[3,"fxLayout",4,"ngFor","ngForOf"],["style","margin-right: 20px;",4,"ngIf"],[3,"fxLayout"],["style","display: flex; margin: 2px",4,"ngFor","ngForOf"],[2,"display","flex","margin","2px"],[3,"name","label","value","switch","rootValue","rootSchema","schema","parentSchema","required","hideUndefined","base","valueChange","schemaChange"],["children",""],[2,"margin-right","20px"],["mat-icon-button","",3,"matMenuTriggerFor"],[4,"ngFor","ngForOf"],[3,"disabled","checked","change"],["style","display: flex; margin: 2px; position: relative",3,"mouseenter","mouseleave",4,"ngFor","ngForOf"],["mat-icon-button","",3,"matTooltip","click",4,"ngIf"],[2,"display","flex","margin","2px","position","relative",3,"mouseenter","mouseleave"],["autocomplete","off","matInput","",3,"disabled","value","change"],["inArray","true",3,"label","value","rootValue","rootSchema","schema","base","valueChange","schemaChange"],["mat-icon-button","","class","example-handle",3,"matTooltip","click",4,"ngIf"],["mat-icon-button","",1,"example-handle",3,"matTooltip","click"],["mat-icon-button","",3,"matTooltip","click"],["animationDuration","0ms",2,"max-width","96vw",3,"ngStyle","ngClass"],["style","margin: 2px; position: relative",4,"ngFor","ngForOf"],[2,"margin","2px","position","relative"],["mat-tab-label",""],["inArray","true",3,"value","rootValue","rootSchema","schema","base","valueChange","schemaChange"],["autocomplete","off","matInput","",3,"value","change"],[3,"ngStyle","ngClass"],["aria-label","Fruit selection","cdkDropList","","cdkDropListOrientation","horizontal",3,"cdkDropListDropped"],["chipList",""],["cdkDrag","",3,"removable","removed",4,"ngFor","ngForOf"],["autocomplete","off",3,"placeholder","matChipInputFor","matChipInputSeparatorKeyCodes","disabled","matChipInputTokenEnd"],["cdkDrag","",3,"removable","removed"],["matChipRemove",""],["style","margin: 2px; position: relative",3,"label",4,"ngFor","ngForOf"],[2,"margin","2px","position","relative",3,"label"],["summary","Properties table"],["scope","col",4,"ngFor","ngForOf"],["id","remove_row"],["scope","col"],[3,"value","rootValue","rootSchema","schema","base","valueChange","schemaChange"],[3,"value","disabled","selectionChange"],[3,"value",4,"ngFor","ngForOf"],[1,"error","mat-typography"],[3,"value"],[3,"matTooltip","ngStyle","ngClass"],["multiple","",3,"value","disabled","focus","selectionChange"],[3,"value","matTooltip",4,"ngFor","ngForOf"],[3,"value","matTooltip"],["autocomplete","off","matInput","",2,"width","100%",3,"value","matDatepicker","disabled","dateChange"],["matSuffix","",3,"for"],["picker",""],[2,"margin","6px","margin-top","12px",3,"ngStyle","ngClass"],[3,"checked","disabled","change"],[3,"value","disabled","focus","selectionChange"],["type","text","matInput","",3,"formControl","matAutocomplete","focus"],["auto","matAutocomplete"],["autocomplete","off","matInput","",3,"disabled","placeholder","type","value","input","focus",4,"ngIf"],["autocomplete","off","matInput","",3,"disabled","placeholder","type","value","change",4,"ngIf"],["autocomplete","off","matInput","",3,"disabled","placeholder","type","value","input","focus"],["autocomplete","off","matInput","",3,"disabled","placeholder","type","value","change"],["matInput","",3,"disabled","placeholder","value","ngStyle","ngClass","input",4,"ngIf"],["matInput","",3,"disabled","placeholder","value","ngStyle","ngClass","change",4,"ngIf"],["matInput","",3,"disabled","placeholder","value","ngStyle","ngClass","input"],["matInput","",3,"disabled","placeholder","value","ngStyle","ngClass","change"],["type","file","id","file",3,"ngStyle","ngClass","disabled","change"]],template:function(e,a){1&e&&(t.ɵɵtemplate(0,H,8,14,"mat-expansion-panel",0),t.ɵɵtemplate(1,We,17,17,"div",1),t.ɵɵtemplate(2,Be,0,0,"ng-template",2)),2&e&&(t.ɵɵproperty("ngIf",(!0===a.schema.expanded||!1===a.schema.expanded)&&!a.inExpansion),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",null===a.schema.expanded||void 0===a.schema.expanded||a.inExpansion))},directives:[d.NgIf,L,f.MatExpansionPanel,v.DefaultStyleDirective,d.NgStyle,v.DefaultClassDirective,d.NgClass,f.MatExpansionPanelHeader,f.MatExpansionPanelTitle,f.MatExpansionPanelDescription,Je,y.MatTooltip,g.MatIcon,x.MatMenuTrigger,x.MatMenu,x.MatMenuItem,d.NgForOf,C.DefaultLayoutDirective,b.MatButton,r.MatCheckbox,S.MatFormField,S.MatLabel,w.MatInput,M.MatTabGroup,M.MatTab,M.MatTabLabel,E.MatChipList,p.CdkDropList,E.MatChipInput,E.MatChip,p.CdkDrag,E.MatChipRemove,a.MatSelect,I.MatOption,n.MatDatepickerInput,n.MatDatepickerToggle,S.MatSuffix,n.MatDatepicker,u.DefaultValueAccessor,o.MatAutocompleteTrigger,u.NgControlStatus,u.FormControlDirective,o.MatAutocomplete],pipes:[d.KeyValuePipe,d.AsyncPipe],styles:[".example-handle[_ngcontent-%COMP%]{position:absolute;z-index:9;top:0;right:0}.error[_ngcontent-%COMP%]{font-size:small;color:red;position:relative;top:-18px}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(Je,[{type:t.Component,args:[{selector:"lib-json-schema-form",templateUrl:"./json-schema-form.component.html",styleUrls:["./json-schema-form.component.css"]}]}],(function(){return[{type:l.HttpClient},{type:t.ComponentFactoryResolver},{type:D},{type:m.MatDialog}]}),{children:[{type:t.ViewChildren,args:["children"]}],child:[{type:t.ViewChild,args:["child"]}],name:[{type:t.Input}],label:[{type:t.Input}],value:[{type:t.Input}],rootValue:[{type:t.Input}],valueChange:[{type:t.Output}],errorChange:[{type:t.Output}],schemaChange:[{type:t.Output}],schema:[{type:t.Input}],parentSchema:[{type:t.Input}],rootSchema:[{type:t.Input}],base:[{type:t.Input}],switch:[{type:t.Input}],hideUndefined:[{type:t.Input}],inExpansion:[{type:t.Input}],inArray:[{type:t.Input}],required:[{type:t.Input}],widgetHost:[{type:t.ViewChild,args:[L,{static:!0}]}]});var Qe=function(){};Qe.ɵfac=function(e){return new(e||Qe)},Qe.ɵmod=t.ɵɵdefineNgModule({type:Qe}),Qe.ɵinj=t.ɵɵdefineInjector({providers:[{provide:y.MAT_TOOLTIP_DEFAULT_OPTIONS,useValue:{touchGestures:"off"}}],imports:[[O.MatCardModule,V.FlexLayoutModule,g.MatIconModule,y.MatTooltipModule,k.MatTableModule,M.MatTabsModule,S.MatFormFieldModule,a.MatSelectModule,n.MatDatepickerModule,r.MatCheckboxModule,o.MatAutocompleteModule,l.HttpClientModule,d.CommonModule,w.MatInputModule,I.MatNativeDateModule,b.MatButtonModule,f.MatExpansionModule,x.MatMenuModule,u.ReactiveFormsModule,m.MatDialogModule,E.MatChipsModule,p.DragDropModule]]}),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Qe,{declarations:[Je,R,L],imports:[O.MatCardModule,V.FlexLayoutModule,g.MatIconModule,y.MatTooltipModule,k.MatTableModule,M.MatTabsModule,S.MatFormFieldModule,a.MatSelectModule,n.MatDatepickerModule,r.MatCheckboxModule,o.MatAutocompleteModule,l.HttpClientModule,d.CommonModule,w.MatInputModule,I.MatNativeDateModule,b.MatButtonModule,f.MatExpansionModule,x.MatMenuModule,u.ReactiveFormsModule,m.MatDialogModule,E.MatChipsModule,p.DragDropModule],exports:[Je]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(Qe,[{type:t.NgModule,args:[{declarations:[Je,R,L],imports:[O.MatCardModule,V.FlexLayoutModule,g.MatIconModule,y.MatTooltipModule,k.MatTableModule,M.MatTabsModule,S.MatFormFieldModule,a.MatSelectModule,n.MatDatepickerModule,r.MatCheckboxModule,o.MatAutocompleteModule,l.HttpClientModule,d.CommonModule,w.MatInputModule,I.MatNativeDateModule,b.MatButtonModule,f.MatExpansionModule,x.MatMenuModule,u.ReactiveFormsModule,m.MatDialogModule,E.MatChipsModule,p.DragDropModule],exports:[Je],providers:[{provide:y.MAT_TOOLTIP_DEFAULT_OPTIONS,useValue:{touchGestures:"off"}}]}]}],null,null),t.ɵɵsetComponentScope(R,[m.MatDialogContent,Je,m.MatDialogActions,b.MatButton,m.MatDialogClose],[]),e.DefaultChoiceHandler=P,e.JsonSchemaFormComponent=Je,e.JsonSchemaFormModule=Qe,e.JsonSchemaFormService=D,Object.defineProperty(e,"__esModule",{value:!0})})); +//# sourceMappingURL=dashjoin-json-schema-form.umd.min.js.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js.map b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js.map new file mode 100644 index 0000000..9fbfcf5 --- /dev/null +++ b/dist/dashjoin/json-schema-form/bundles/dashjoin-json-schema-form.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.service.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../projects/dashjoin/json-schema-form/src/lib/widget.directive.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-pointer.ts","../../../../projects/dashjoin/json-schema-form/src/lib/choice.ts","../../../../projects/dashjoin/json-schema-form/src/lib/edit-element-dialog.component.ts","../../../../projects/dashjoin/json-schema-form/src/lib/edit-element-dialog.component.html","../../../../projects/dashjoin/json-schema-form/src/lib/edit.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.html","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.module.ts"],"names":["JsonSchemaFormService","this","editMode","formats","email","ipv4","url","uri","registry","displayWithRegistry","prototype","registerComponent","key","value","registerDisplayWith","factory","ɵfac","providedIn","Injectable","Object","create","__values","o","s","Symbol","iterator","m","i","call","length","next","done","TypeError","__read","n","r","e","ar","push","error","WidgetDirective","viewContainerRef","i0","ɵɵdirectiveInject","ViewContainerRef","selectors","Directive","selector","JsonPointer","jsonPointer","pointer","jsonPointer2","split","paths","undefined","path","np","assign","splice","res","_b","values","_c","f","startsWith","arr","substring","arr_1","arr_1_1","Error","DefaultChoiceHandler","http","load","schema","_this","cache","choices","_d","choice","forkJoin","getChoices","choicesUrl","choicesUrlArgs","choicesVerb","pipe","switchMap","jsonata","evaluate","Array","isArray","obs","res_1","res_1_1","publishReplay","refCount","filter","current","map","include","_a","name","toLowerCase","includes","displayWith","delimiter","parts","of","displayWithChoices","indexOf","args","verb","get","post","headers","HttpHeaders","Content-Type","debounceTime","EditElementDialogComponent","dialogRef","data","title","layout","order","static","type","properties","description","class","items","style","width","additionalProperties","errorMessage","required","keys","enum","itemlayout","readOnly","padding-top","format","widget","example","i1$1","MatDialogRef","MAT_DIALOG_DATA","decls","vars","consts","template","rf","ctx","i0.ɵɵelementStart","i0.ɵɵlistener","i0.ɵɵelementEnd","close","i0.ɵɵtext","i0.ɵɵadvance","i0.ɵɵproperty","Component","templateUrl","Inject","Edit","schemaChange","parent","dialog","canAdd","addable","set","Set","_f","_g","p","p_1","e_2","p_1_1","q","delete","from","addSub","prop","index","_e","emit","canAddSub","subaddable","p_2","e_5","p_2_1","add","edit","clone","JSON","parse","stringify","examples","open","minWidth","afterClosed","subscribe","el","canHide","hide","canUp","props","props_1","props_1_1","up","tmp","canDown","props_2","props_2_1","down","ɵɵrestoreView","_r5_1","ɵɵnextContext","ctx_r0","expanded","i0.ɵɵtextInterpolate","switch","rootValue","rootSchema","base","x_r28","x_r31","i0.ɵɵtemplate","ctx_r7","isRoot","_r24","_r26","_r48_1","x_r43","ctx_r44","hideUndefined","ctx_r52","x_r53","i0.ɵɵtextInterpolate1","ctx_r8","i0.ɵɵpropertyInterpolate","_r66_1","hover","x_r58","ctx_r56","ctx_r9","_r91_1","ctx_r73","ctx_r10","_r106_1","ctx_r96","i_r99","ctx_r11","ctx_r12","_r112","separatorKeysCodes","_r130_1","ctx_r120","ctx_r13","_r147_1","ctx_r141","x_r143","i0.ɵɵelement","ctx_r14","ctx_r15","choice_r160","$event","_r162_1","change","ctx_r16","ctx_r17","_r164","ctx_r18","choice_r172","_r174_1","ctx_r169","choice_r178","ctx_r170","_r176","_r184_1","ctx_r185","getInputType","ctx_r181","ctx_r182","ctx_r20","ctx_r188","ctx_r189","ctx_r21","ctx_r22","JsonSchemaFormComponent","componentFactoryResolver","service","valueChange","EventEmitter","errorChange","ENTER","COMMA","TAB","originalOrder","a","b","setOrderedProperties","orderedProperties","entries","_h","_j","ngOnInit","createOnly","$ref","default","setTimeout","getLayout","loadComponent","recursiveError","ch","control","FormControl","ReplaySubject","filteredOptions","valueChanges","startWith","x","target","parentSchema","focus","ref","URL","href","referenced","console","log","event","ngOnChanges","changes","previousValue","widgetHost","clear","isFirstChange","case","onValueChange","computed","field","expression","addField","remove","removeField","fieldNameChange","newvalue","child","children","customError","maxItems","uniqueItems","size","minItems","maxProperties","propertyNames","re","RegExp","test","dependencies","dep","_k","e_10","_l","l","minProperties","maxLength","minLength","multipleOf","Number","isInteger","exclusiveMaximum","maximum","exclusiveMinimum","minimum","is","NaN","_m","_o","inactive","switc","pattern","getLabel","label","MatSelectChange","MatDatepickerInputEvent","serializeDate","dateFormat","MatAutocompleteSelectedEvent","option","MatCheckboxChange","checked","parseFloat","parseInt","handleFileInput","files","item","reader","FileReader","onload","result","readAsDataURL","componentFactory","resolveComponentFactory","widgetType","componentRef","createComponent","instance","setAndEmit","setIndexAndEmit","setIndexAndEmitTable","showProperty","showPropertyList","sw","k","v","sort","parseDate","date","sameDate","Date","pdate","getDelimiter","pformat","nd","getTime","valueOf","toISOString","getFullYear","getMonth","getDate","delim","match","addChip","input","trim","removeChip","dropChip","moveItemInArray","previousIndex","currentIndex","i1","HttpClient","ComponentFactoryResolver","MatDialog","viewQuery","i8","MatTooltip","i9","MatIcon","i10","MatMenuTrigger","MatMenu","MatMenuItem","i4","NgForOf","i11","DefaultLayoutDirective","i12","MatButton","i13","MatCheckbox","i14","MatFormField","MatLabel","i15","MatInput","i16","MatTabGroup","MatTab","MatTabLabel","i17","MatChipList","i18","CdkDropList","MatChipInput","MatChip","CdkDrag","MatChipRemove","i19","MatSelect","i20","MatOption","i21","MatDatepickerInput","MatDatepickerToggle","MatSuffix","MatDatepicker","i22","DefaultValueAccessor","i23","MatAutocompleteTrigger","NgControlStatus","FormControlDirective","MatAutocomplete","pipes","KeyValuePipe","AsyncPipe","styles","styleUrls","ViewChildren","ViewChild","Input","Output","inExpansion","inArray","JsonSchemaFormModule","provide","MAT_TOOLTIP_DEFAULT_OPTIONS","useValue","touchGestures","imports","MatCardModule","FlexLayoutModule","MatIconModule","MatTooltipModule","MatTableModule","MatTabsModule","MatFormFieldModule","MatSelectModule","MatDatepickerModule","MatCheckboxModule","MatAutocompleteModule","HttpClientModule","CommonModule","MatInputModule","MatNativeDateModule","MatButtonModule","MatExpansionModule","MatMenuModule","ReactiveFormsModule","MatDialogModule","MatChipsModule","DragDropModule","declarations","exports","NgModule","providers","MatDialogContent","MatDialogActions","MatDialogClose"],"mappings":"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","sourcesContent":["import { Injectable, Type } from '@angular/core';\r\nimport { ChoiceHandler } from './choice';\r\n\r\n/**\r\n * service for registering custom components\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JsonSchemaFormService {\r\n\r\n /**\r\n * layout editor mode\r\n */\r\n public editMode = false;\r\n\r\n /**\r\n * built-in formats\r\n */\r\n formats = {\r\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\r\n ipv4: /^(?!0)(?!.*\\.$)((1?\\d?\\d|25[0-5]|2[0-4]\\d)(\\.|$)){4}$/,\r\n url: /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$/,\r\n uri: /^\\w+:(\\/?\\/?)[^\\s]+$/\r\n };\r\n\r\n /**\r\n * registry of custom widgets. The keys are the values used in schema.widgetType, the values\r\n * are the Type of the custom widget component implementing WidgetComponent\r\n */\r\n registry = {};\r\n\r\n /**\r\n * registry of displayWith objects\r\n */\r\n displayWithRegistry: { [key: string]: ChoiceHandler } = {};\r\n\r\n /**\r\n * register custom component\r\n * @param key the name of the component which is used in schema extension: widget=custom, widgetType=key\r\n * @param value the implementation class\r\n */\r\n registerComponent(key: string, value: Type) {\r\n this.registry[key] = value;\r\n }\r\n\r\n /**\r\n * register displayWith implementations\r\n * @param key the name of the implementation which is used in schema extension: displayWith=key\r\n * @param value the implementation class\r\n */\r\n registerDisplayWith(key: string, value: ChoiceHandler) {\r\n this.displayWithRegistry[key] = value;\r\n }\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n/**\r\n * directive for dynamically loading custom widgets\r\n */\r\n@Directive({\r\n selector: '[libWidgetHost]'\r\n})\r\nexport class WidgetDirective {\r\n\r\n /**\r\n * allow caller to dynamically insert custom component\r\n * @param viewContainerRef dynamic component handle\r\n */\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n}\r\n","/**\r\n * static JsonPointer implementation\r\n */\r\nexport class JsonPointer {\r\n\r\n /**\r\n * evaluate the JSON pointer on o\r\n */\r\n static jsonPointer(o: any, pointer: string): any {\r\n return JsonPointer.jsonPointer2(o, JsonPointer.split(pointer));\r\n }\r\n\r\n /**\r\n * evaluate the JSON pointer (parsed array of paths) on o\r\n */\r\n static jsonPointer2(o: any, paths: string[]): any {\r\n\r\n if (o === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (paths.length === 0) {\r\n return o;\r\n }\r\n\r\n const path = paths[0];\r\n const np = Object.assign([], paths);\r\n np.splice(0, 1);\r\n\r\n if (paths[0] === '*') {\r\n const res = [];\r\n for (const f of (typeof (o) === 'object' ? Object.values(o) : o)) {\r\n res.push(this.jsonPointer2(f, np));\r\n }\r\n return res;\r\n } else {\r\n return this.jsonPointer2(o[path], np);\r\n }\r\n }\r\n\r\n /**\r\n * strip leading / and split the JSON pointer\r\n */\r\n static split(s: string): string[] {\r\n if (s === '') {\r\n return [];\r\n }\r\n if (s.startsWith('/')) {\r\n s = s.substring(1);\r\n const arr = s.split('/');\r\n for (const a of arr) {\r\n if (a === '') {\r\n throw new Error('JSON Pointer must not contain an empty reference token');\r\n }\r\n }\r\n return arr;\r\n }\r\n throw new Error('JSON Pointer must start with /');\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { Schema } from './schema';\r\nimport { map, publishReplay, refCount, switchMap } from 'rxjs/operators';\r\nimport jsonata from 'jsonata';\r\n\r\n/**\r\n * class backing a select / autocomplete option\r\n */\r\nexport interface Choice {\r\n\r\n /**\r\n * select value\r\n */\r\n value: any;\r\n\r\n /**\r\n * display name\r\n */\r\n name: string;\r\n}\r\n\r\n/**\r\n * interface for choice handlers for select / autocomplete choices\r\n */\r\nexport interface ChoiceHandler {\r\n\r\n /**\r\n * loads the choices\r\n */\r\n load(value: any, schema: Schema): Observable;\r\n\r\n /**\r\n * user typed in autocomplete field\r\n */\r\n filter(value: any, schema: Schema, current: string, choices: Observable): Observable;\r\n\r\n /**\r\n * return a single choice (i.e. convert value to Choice)\r\n */\r\n choice(value: any, schema: Schema): Observable;\r\n\r\n /**\r\n * delay between keystrokes before new data is loaded\r\n */\r\n debounceTime(): number;\r\n}\r\n\r\n/**\r\n * default implementation that handles choices based on schema fields.\r\n * can be overriden via schema.displayWith\r\n */\r\nexport class DefaultChoiceHandler implements ChoiceHandler {\r\n\r\n /**\r\n * create default choice handler\r\n *\r\n * @param http http connection client\r\n */\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * http cache for REST request on config/Table (i.e. schema requests)\r\n */\r\n cache: Observable;\r\n\r\n /**\r\n * load choices\r\n */\r\n load(value: any, schema: Schema): Observable {\r\n\r\n if (!this.cache) {\r\n if (schema.choices) {\r\n // static choices are given, convert them to Choice and merge the result\r\n const arr: Observable[] = [];\r\n for (const s of schema.choices) {\r\n arr.push(this.choice(s, schema));\r\n }\r\n this.cache = forkJoin(arr);\r\n } else {\r\n // load choices from URL\r\n this.cache = this.getChoices(schema.choicesUrl, schema.choicesUrlArgs, schema.choicesVerb).pipe(\r\n switchMap(res => {\r\n if (schema.jsonata) {\r\n res = jsonata(schema.jsonata).evaluate(res);\r\n if (!Array.isArray(res)) {\r\n res = [res];\r\n\r\n // introduce jsonName, jsonValue\r\n }\r\n }\r\n const obs: Observable[] = [];\r\n for (const r of res) {\r\n obs.push(this.choice(r, schema));\r\n }\r\n return forkJoin(obs);\r\n }),\r\n\r\n // setup caching\r\n publishReplay(1),\r\n refCount()\r\n );\r\n }\r\n }\r\n return this.cache;\r\n }\r\n\r\n /**\r\n * filter after keystroke\r\n */\r\n filter(value: any, schema: Schema, current: string, choices: Observable): Observable {\r\n return choices.pipe(map(arr => {\r\n if (!current) {\r\n return arr;\r\n }\r\n const res = arr.filter(i => this.include(i, current));\r\n return res;\r\n }));\r\n }\r\n\r\n /**\r\n * called from filter, intended to allow subclasses to easily change filter algorithm\r\n */\r\n include(i: Choice, current: string): boolean {\r\n return i.name?.toLowerCase().includes(current.toLowerCase());\r\n }\r\n\r\n /**\r\n * default choice implementation: just reuse value as name\r\n * check for localName\r\n */\r\n choice(value: any, schema: Schema): Observable {\r\n if (schema.displayWith === 'localName') {\r\n for (const delimiter of ['/', '#', ':', '.']) {\r\n const parts = value.split(delimiter);\r\n if (parts.length > 1) {\r\n return of({ value, name: parts[parts.length - 1] });\r\n }\r\n }\r\n return of({ value, name: value });\r\n }\r\n if (schema.jsonata) {\r\n if (typeof value === 'object') {\r\n return of(value);\r\n } else {\r\n // initially, value is a simple string\r\n return of({ value, name: value });\r\n }\r\n }\r\n if (schema.displayWithChoices) {\r\n return of({ value, name: schema.displayWithChoices[schema.choices.indexOf(value)] });\r\n }\r\n return of({ value, name: value });\r\n }\r\n\r\n /**\r\n * handle GET / POST\r\n */\r\n getChoices(url: string, args: any, verb: string): Observable {\r\n if (verb === 'GET') {\r\n return this.http.get(url, args);\r\n } else {\r\n return this.http.post(url, args, {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n })\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * default: no delay\r\n */\r\n debounceTime() {\r\n return 0;\r\n }\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n/**\r\n * dialog to edit a JSON node in a layout structure\r\n */\r\n@Component({\r\n selector: 'lib-edit-element-dialog',\r\n templateUrl: './edit-element-dialog.component.html'\r\n})\r\nexport class EditElementDialogComponent {\r\n\r\n /**\r\n * dialog constrcutor\r\n * @param dialogRef disloag ref\r\n * @param data data to edit\r\n */\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.schema = {\r\n title: 'Edit form',\r\n layout: 'vertical',\r\n order: [\r\n ['widget', 'layout', 'itemlayout'],\r\n ['title', 'description'],\r\n ['example', 'readOnly'],\r\n ['required', 'format', 'errorMessage'],\r\n 'choices', 'class', 'style'\r\n ],\r\n static: true,\r\n type: 'object',\r\n properties: {\r\n // description, class, style are always applicable\r\n description: { type: 'string', static: true, title: 'Description / tooltip' },\r\n class: { type: 'array', items: { type: 'string' }, layout: 'chips', style: { width: '365px' }, static: true, title: 'CSS classes' },\r\n style: { type: 'object', additionalProperties: { type: 'string' }, static: true, title: 'CSS styles' }\r\n }\r\n };\r\n\r\n if (data.properties) {\r\n // only show required and error message for objects\r\n this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n this.schema.properties.required = {\r\n choices: Object.keys(data.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,\r\n title: 'Required fields'\r\n };\r\n this.schema.properties.layout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Screen layout' };\r\n } else {\r\n if (data.items) {\r\n this.schema.properties.layout = {\r\n type: 'string', enum: ['vertical', 'horizontal', 'select', 'tab', 'table', 'chips'],\r\n static: true, title: 'Screen Layout'\r\n };\r\n this.schema.properties.itemlayout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Item screen layout' };\r\n }\r\n if (data.items?.properties) {\r\n // array of objects\r\n this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n this.schema.properties.required = {\r\n choices: Object.keys(data.items.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,\r\n title: 'Required fields'\r\n };\r\n } else {\r\n // array of simple types\r\n this.schema.properties.readOnly = {\r\n type: 'boolean', static: true, title: 'Read only value', style: { 'padding-top': '15px' }\r\n };\r\n this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n this.schema.properties.format = {\r\n type: 'string', static: true, title: 'Format',\r\n widget: 'select', choices: [null, 'email', 'ipv4', 'url', 'uri']\r\n };\r\n this.schema.properties.example = { type: 'string', static: true, title: 'Example data' };\r\n this.schema.properties.title = { type: 'string', static: true, title: 'Title' };\r\n this.schema.properties.widget = {\r\n type: 'string', enum: ['text', 'select', 'date', 'textarea', 'password'], static: true,\r\n title: 'Form widget'\r\n };\r\n this.schema.properties.choices = {\r\n type: 'array', items: { type: 'string' }, style: { width: '365px' },\r\n layout: 'chips', static: true, title: 'Input choices'\r\n };\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * schema to edit input form fields\r\n */\r\n schema: any;\r\n}\r\n","\r\n \r\n\r\n\r\n \r\n \r\n","import { EventEmitter } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EditElementDialogComponent } from './edit-element-dialog.component';\r\nimport { Schema } from './schema';\r\n\r\n/**\r\n * form editor - has a 1:1 relationship to form node\r\n */\r\nexport class Edit {\r\n\r\n /**\r\n * get access to parent object's fields\r\n *\r\n * @param schemaChange signal a change\r\n * @param name the current property name (key)\r\n * @param schema the current schema\r\n * @param parent the parent's schema (required in order to change the order)\r\n * @param dialog dialog service\r\n */\r\n constructor(\r\n private schemaChange: EventEmitter, private name: string, private schema: Schema, private parent: Schema,\r\n private dialog: MatDialog) {\r\n }\r\n\r\n /**\r\n * can add if addable is not empty\r\n */\r\n canAdd(): boolean {\r\n return this.addable().length > 0;\r\n }\r\n\r\n /**\r\n * get the entries in \"properties\" that are not in \"order\"\r\n */\r\n addable(): string[] {\r\n let s: Schema;\r\n if (this.schema.properties) {\r\n s = this.schema;\r\n } else if (this.schema.items?.properties) {\r\n s = this.schema.items;\r\n } else if (this.schema.additionalProperties?.properties) {\r\n s = this.schema.additionalProperties;\r\n } else {\r\n return [];\r\n }\r\n if (s.order) {\r\n const set = new Set(Object.keys(s.properties));\r\n for (const p of s.order) {\r\n if (Array.isArray(p)) {\r\n for (const q of p) {\r\n set.delete(q);\r\n }\r\n } else {\r\n set.delete(p);\r\n }\r\n }\r\n return Array.from(set);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * add a hidden prop to the end of the list\r\n */\r\n addSub(prop: string) {\r\n const index = this.parent.order.indexOf(this.name);\r\n if (index >= 0) {\r\n this.parent.order[index] = [(this.parent.order[index] as string), prop];\r\n } else {\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n p.push(prop);\r\n }\r\n }\r\n }\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * can add if addable is not empty\r\n */\r\n canAddSub(): boolean {\r\n return this.subaddable().length > 0;\r\n }\r\n\r\n /**\r\n * get the entries in \"properties\" that are not in \"order\"\r\n */\r\n subaddable(): string[] {\r\n if (this.parent?.order) {\r\n const set = new Set(Object.keys(this.parent.properties));\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n for (const q of p) {\r\n set.delete(q);\r\n }\r\n } else {\r\n set.delete(p);\r\n }\r\n }\r\n return Array.from(set);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * add a hidden prop to the end of the list\r\n */\r\n add(prop: string) {\r\n if (this.schema.properties) {\r\n this.schema.order.push(prop);\r\n } else if (this.schema.items?.properties) {\r\n this.schema.items.order.push(prop);\r\n } else {\r\n this.schema.additionalProperties.order.push(prop);\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * edit simple schema fields like title and description\r\n */\r\n edit() {\r\n // deep clone object so we have the possibility to cancel editing\r\n const clone = JSON.parse(JSON.stringify(this.schema));\r\n\r\n // handle (array) example\r\n if (clone.items?.examples?.length > 0) {\r\n clone.example = clone.items.examples[0];\r\n }\r\n if (clone.examples?.length > 0) {\r\n clone.example = clone.examples[0];\r\n }\r\n\r\n // text is default\r\n if (!clone.widget) {\r\n clone.widget = 'text';\r\n }\r\n\r\n // horizontal is default\r\n if (!clone.layout) {\r\n clone.layout = 'horizontal';\r\n }\r\n\r\n // array: apply choices and widget to items\r\n if (clone.items) {\r\n clone.widget = clone.items.widget;\r\n clone.choices = clone.items.choices;\r\n clone.errorMessage = clone.items.errorMessage;\r\n clone.format = clone.items.format;\r\n clone.required = clone.items.required;\r\n clone.itemlayout = clone.items.layout;\r\n }\r\n\r\n const dialogRef = this.dialog.open(EditElementDialogComponent, { minWidth: '50%', data: clone });\r\n dialogRef.afterClosed().subscribe(data => {\r\n if (data) {\r\n this.schema.title = data.title;\r\n this.schema.description = data.description;\r\n this.schema.widget = data.widget;\r\n this.schema.layout = data.layout;\r\n this.schema.readOnly = data.readOnly;\r\n this.schema.errorMessage = data.errorMessage;\r\n if (data.example) {\r\n if (data.items) {\r\n this.schema.items.examples = [data.example];\r\n } else {\r\n this.schema.examples = [data.example];\r\n }\r\n }\r\n if (data.style) {\r\n delete data.style[''];\r\n }\r\n if (data.style && Object.keys(data.style).length > 0) {\r\n this.schema.style = data.style;\r\n }\r\n if (data.class) {\r\n data.class = data.class.filter(el => el != null);\r\n }\r\n if (data.class?.length > 0) {\r\n this.schema.class = data.class;\r\n }\r\n if (data.items) {\r\n if (data.choices?.length > 0) {\r\n this.schema.items.choices = data.choices;\r\n }\r\n this.schema.items.widget = data.widget;\r\n this.schema.items.format = data.format;\r\n this.schema.items.errorMessage = data.errorMessage;\r\n this.schema.items.required = data.required;\r\n this.schema.items.layout = data.itemlayout;\r\n } else {\r\n this.schema.choices = data.choices;\r\n this.schema.widget = data.widget;\r\n this.schema.format = data.format;\r\n this.schema.errorMessage = data.errorMessage;\r\n this.schema.required = data.required;\r\n }\r\n this.schemaChange.emit();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * can hide if I my parent is an object\r\n */\r\n canHide(): boolean {\r\n return this.parent ? true : false;\r\n }\r\n\r\n /**\r\n * hide this prop\r\n */\r\n hide() {\r\n if (!this.parent.order) {\r\n this.parent.order = Object.keys(this.parent.properties);\r\n }\r\n let index = 0;\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n p.splice(p.indexOf(this.name), 1);\r\n if (p.length === 1) {\r\n this.parent.order[index] = p[0];\r\n }\r\n }\r\n }\r\n index++;\r\n }\r\n if (this.parent.order.indexOf(this.name) >= 0) {\r\n this.parent.order.splice(this.parent.order.indexOf(this.name), 1);\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * can I go up\r\n */\r\n canUp(): boolean {\r\n if (!this.parent) {\r\n return false;\r\n }\r\n const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);\r\n const index = props.indexOf(this.name);\r\n if (index >= 0) {\r\n return index > 0;\r\n } else {\r\n for (const p of props) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n return p.indexOf(this.name) > 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * go up\r\n */\r\n up() {\r\n if (!this.parent.order) {\r\n this.parent.order = Object.keys(this.parent.properties);\r\n }\r\n let index = this.parent.order.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = this.parent.order[index - 1];\r\n this.parent.order[index - 1] = this.parent.order[index];\r\n this.parent.order[index] = tmp;\r\n } else {\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n index = p.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = p[index - 1];\r\n p[index - 1] = p[index];\r\n p[index] = tmp;\r\n }\r\n }\r\n }\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * can I go down\r\n */\r\n canDown(): boolean {\r\n if (!this.parent) {\r\n return false;\r\n }\r\n const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);\r\n const index = props.indexOf(this.name);\r\n if (index >= 0) {\r\n return index < props.length - 1;\r\n } else {\r\n for (const p of props) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n return p.indexOf(this.name) < p.length - 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * go down\r\n */\r\n down() {\r\n if (!this.parent.order) {\r\n this.parent.order = Object.keys(this.parent.properties);\r\n }\r\n let index = this.parent.order.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = this.parent.order[index + 1];\r\n this.parent.order[index + 1] = this.parent.order[index];\r\n this.parent.order[index] = tmp;\r\n } else {\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n index = p.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = p[index + 1];\r\n p[index + 1] = p[index];\r\n p[index] = tmp;\r\n }\r\n }\r\n }\r\n }\r\n this.schemaChange.emit();\r\n }\r\n}\r\n","\r\n \r\n {{label}}\r\n {{schema.description}}\r\n \r\n \r\n \r\n\r\n\r\n
\r\n\r\n
\r\n \r\n more_vert\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n {{x}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n {{getLabel()}} key\r\n \r\n \r\n  \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{x.key}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n {{v}}\r\n cancel\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{x.value.title ? x.value.title : x.key}}
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n {{x}}\r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n \r\n {{label}}\r\n \r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n

{{error()}}

\r\n
\r\n
\r\n\r\n","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n SimpleChanges,\r\n OnChanges,\r\n ComponentFactoryResolver,\r\n ViewChild,\r\n ViewChildren,\r\n QueryList,\r\n} from \"@angular/core\";\r\nimport { MatSelectChange } from \"@angular/material/select\";\r\nimport { MatDatepickerInputEvent } from \"@angular/material/datepicker\";\r\nimport { MatCheckboxChange } from \"@angular/material/checkbox\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { forkJoin, Observable, ReplaySubject } from \"rxjs\";\r\nimport { KeyValue } from \"@angular/common\";\r\nimport { Schema } from \"./schema\";\r\nimport { WidgetComponent } from \"./widget.component\";\r\nimport { WidgetDirective } from \"./widget.directive\";\r\nimport { JsonSchemaFormService } from \"./json-schema-form.service\";\r\nimport { MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\r\nimport { JsonPointer } from \"./json-pointer\";\r\nimport { Choice, ChoiceHandler, DefaultChoiceHandler } from \"./choice\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport { debounceTime, startWith, switchMap } from \"rxjs/operators\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { Edit } from \"./edit\";\r\nimport { MatChipInputEvent } from \"@angular/material/chips\";\r\nimport { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\nimport { COMMA, ENTER, TAB } from \"@angular/cdk/keycodes\";\r\nimport jsonata from \"jsonata\";\r\n\r\n/**\r\n * generates an input form base on JSON schema and JSON object.\r\n * The component is used recursively.\r\n */\r\n@Component({\r\n selector: \"lib-json-schema-form\",\r\n templateUrl: \"./json-schema-form.component.html\",\r\n styleUrls: [\"./json-schema-form.component.css\"],\r\n})\r\nexport class JsonSchemaFormComponent implements OnInit, OnChanges {\r\n /**\r\n * component constructor\r\n * @param http http client\r\n * @param componentFactoryResolver allows dynamic components\r\n * @param service application service for registering components etc.\r\n * @param dialog dialog service\r\n */\r\n constructor(\r\n private http: HttpClient,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n public service: JsonSchemaFormService,\r\n private dialog: MatDialog\r\n ) {}\r\n\r\n /**\r\n * container children for event propagation\r\n */\r\n @ViewChildren(\"children\") children: QueryList;\r\n\r\n /**\r\n * container children for event propagation\r\n */\r\n @ViewChild(\"child\") child: JsonSchemaFormComponent;\r\n\r\n /**\r\n * if an array is displayed, indicates which array index is being hovered over in order to\r\n * display the \"-\" remove button\r\n */\r\n hover: number;\r\n\r\n /**\r\n * the name of the input field (only set if inside type: object)\r\n */\r\n @Input() name: string;\r\n\r\n /**\r\n * the label of the input field\r\n */\r\n @Input() label: string;\r\n\r\n /**\r\n * the input value\r\n */\r\n @Input() value: any;\r\n\r\n /**\r\n * root form value (can be used in custom components)\r\n */\r\n @Input() rootValue: any;\r\n\r\n /**\r\n * emit changes done by the user in the component\r\n */\r\n @Output() valueChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * emit whether this part of the form is valid\r\n */\r\n @Output() errorChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * indicate schema changes done via the layout editor\r\n */\r\n @Output() schemaChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * JSON schema to use\r\n */\r\n @Input() schema: Schema;\r\n\r\n /**\r\n * parent schema to edit required\r\n */\r\n @Input() parentSchema: Schema;\r\n\r\n /**\r\n * form editor\r\n */\r\n edit: Edit;\r\n\r\n /**\r\n * root JSON schema to use when looking up $ref (simply passed along the tree)\r\n */\r\n @Input() rootSchema: Schema;\r\n\r\n /**\r\n * base URL for resolving $ref\r\n */\r\n @Input() base: string;\r\n\r\n /**\r\n * indicates whether this is the root of the component tree\r\n */\r\n isRoot = false;\r\n\r\n /**\r\n * if present: value of the switch property that determines whether this component renders itself\r\n * (schema.case not present or schema.case === switch)\r\n */\r\n @Input() switch: string;\r\n\r\n /**\r\n * indicates to child components whether the parent object has hideUndefined set (i.e. do not render yourself\r\n * if your value is undefined)\r\n */\r\n @Input() hideUndefined: boolean;\r\n\r\n /**\r\n * are we already in the expansion panel?\r\n */\r\n @Input() inExpansion: boolean;\r\n\r\n /**\r\n * are we already in an array?\r\n */\r\n @Input() inArray: boolean;\r\n\r\n /**\r\n * required imported from parent\r\n */\r\n @Input() required: boolean;\r\n\r\n /**\r\n * hook for custom widgets\r\n */\r\n @ViewChild(WidgetDirective, { static: true }) widgetHost: WidgetDirective;\r\n\r\n /**\r\n * order field transforms properties into this structure.\r\n * allows omission, ordering and hierarchy\r\n */\r\n orderedProperties: { [key: string]: Schema }[];\r\n\r\n /**\r\n * make sure to return the same date object instance (cannot delete date #83)\r\n */\r\n date: Date;\r\n\r\n /**\r\n * choices that might be loaded async, initialized with current value and its potentially delayed toString value\r\n */\r\n choices: ReplaySubject;\r\n\r\n /**\r\n * autocomplete filtered choices\r\n */\r\n filteredOptions: Observable;\r\n\r\n /**\r\n * autocomplete form control for simpler change detection\r\n */\r\n control: FormControl;\r\n\r\n /**\r\n * implementation specified in displayWith\r\n */\r\n ch: ChoiceHandler;\r\n\r\n /**\r\n * complete chip entry with enter or comma\r\n */\r\n readonly separatorKeysCodes: number[] = [ENTER, COMMA, TAB];\r\n\r\n /**\r\n * readOnly if schema.readOnly or schema.createOnly and value set\r\n */\r\n readOnly: boolean;\r\n\r\n /**\r\n * error from a custom component\r\n */\r\n customError: string;\r\n\r\n /**\r\n * apply order, called anytime properties are set\r\n */\r\n setOrderedProperties() {\r\n if (this.schema.order) {\r\n this.orderedProperties = [];\r\n for (const p of this.schema.order) {\r\n const arr = Array.isArray(p) ? p : [p];\r\n const o = {};\r\n for (const q of arr) {\r\n o[q] = this.schema.properties[q];\r\n }\r\n this.orderedProperties.push(o);\r\n }\r\n } else if (this.schema.properties) {\r\n this.orderedProperties = [];\r\n for (const [key, value] of Object.entries(this.schema.properties)) {\r\n const o = {};\r\n o[key] = value;\r\n this.orderedProperties.push(o);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * initialize the comonent.\r\n * replace undefined with null and init autocomplete choices\r\n */\r\n ngOnInit(): void {\r\n this.readOnly =\r\n this.schema.readOnly || (this.schema.createOnly && this.value);\r\n\r\n if (!this.rootSchema) {\r\n this.rootSchema = this.schema;\r\n this.rootValue = this.value;\r\n this.isRoot = true;\r\n }\r\n\r\n if (!this.schema.type) {\r\n const p = this.schema.$ref;\r\n const parts = p.split(\"#\");\r\n if (parts.length === 1) {\r\n // URL only\r\n this.url(parts[0], null);\r\n } else {\r\n if (parts[0]) {\r\n // URL + anchor\r\n this.url(parts[0], parts[1]);\r\n } else {\r\n // local ref\r\n this.schema = JsonPointer.jsonPointer(this.rootSchema, parts[1]);\r\n this.setOrderedProperties();\r\n }\r\n }\r\n } else {\r\n this.setOrderedProperties();\r\n }\r\n\r\n if (typeof this.value === \"undefined\") {\r\n if (this.schema.default) {\r\n this.value = this.schema.default;\r\n setTimeout(() => this.emit(this.value), 500);\r\n } else {\r\n if (!this.hideUndefined) {\r\n this.value = null;\r\n }\r\n }\r\n }\r\n\r\n if (this.getLayout() === \"custom\") {\r\n this.loadComponent();\r\n }\r\n\r\n if (this.isRoot) {\r\n setTimeout(() => {\r\n this.errorChange.emit(this.recursiveError());\r\n }, 10);\r\n }\r\n\r\n this.ch = this.service.displayWithRegistry[this.schema.displayWith];\r\n if (!this.ch) {\r\n this.ch = new DefaultChoiceHandler(this.http);\r\n }\r\n this.control = new FormControl(this.value);\r\n this.choices = new ReplaySubject();\r\n if (Array.isArray(this.value)) {\r\n const arr = [];\r\n for (const i of this.value) {\r\n arr.push({ name: i, value: i });\r\n }\r\n this.choices.next(arr);\r\n } else {\r\n this.choices.next([{ name: this.value, value: this.value }]);\r\n }\r\n if (this.value || this.value === 0) {\r\n if (Array.isArray(this.value)) {\r\n const arr: Observable[] = [];\r\n for (const i of this.value) {\r\n arr.push(this.ch.choice(i, this.schema));\r\n }\r\n forkJoin(arr).subscribe((res) => this.choices.next(res));\r\n } else {\r\n this.ch\r\n .choice(this.value, this.schema)\r\n .subscribe((res) => this.choices.next([res]));\r\n }\r\n }\r\n this.filteredOptions = this.control.valueChanges.pipe(\r\n startWith(this.value),\r\n debounceTime(this.ch.debounceTime()),\r\n switchMap((x) => {\r\n this.change({ target: { value: x } });\r\n return this.ch.filter(this.value, this.schema, x, this.choices);\r\n })\r\n );\r\n\r\n this.edit = new Edit(\r\n this.schemaChange,\r\n this.name,\r\n this.schema,\r\n this.parentSchema,\r\n this.dialog\r\n );\r\n }\r\n\r\n /**\r\n * choice element activated - load values\r\n */\r\n focus() {\r\n this.ch.load(this.value, this.schema).subscribe((res) => {\r\n this.choices.next(res);\r\n });\r\n }\r\n\r\n /**\r\n * load schema from ref, apply pointer if needed\r\n */\r\n url(ref: string, pointer: string) {\r\n // URL + anchor\r\n this.base = this.base ? new URL(ref, this.base).href : ref;\r\n\r\n // check root schema referenced map\r\n if (this.rootSchema.referenced && this.rootSchema.referenced[this.base]) {\r\n const res = this.rootSchema.referenced[this.base];\r\n this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;\r\n this.setOrderedProperties();\r\n return;\r\n }\r\n\r\n this.http.get(this.base).subscribe(\r\n (res) => {\r\n this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;\r\n this.setOrderedProperties();\r\n },\r\n (error) => console.log(error)\r\n );\r\n\r\n // set temporary pseudo schema\r\n this.schema = { type: \"string\" };\r\n this.setOrderedProperties();\r\n }\r\n\r\n /**\r\n * emit valueChange event and also any validation error\r\n */\r\n emit(event: any) {\r\n this.valueChange.emit(event);\r\n if (this.isRoot) {\r\n setTimeout(() => {\r\n this.errorChange.emit(this.recursiveError());\r\n }, 10);\r\n }\r\n }\r\n\r\n /**\r\n * if the schema changes from the outside,\r\n * reset the component state wrt. errors and the choices cache\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.schema) {\r\n if (changes.schema.previousValue) {\r\n this.rootSchema = null;\r\n if (this.widgetHost.viewContainerRef) {\r\n this.widgetHost.viewContainerRef.clear();\r\n }\r\n this.ngOnInit();\r\n }\r\n }\r\n\r\n if (changes.switch && !changes.switch.isFirstChange()) {\r\n if (this.getLayout() === \"custom\") {\r\n this.loadComponent();\r\n } else {\r\n if (this.widgetHost.viewContainerRef) {\r\n this.widgetHost.viewContainerRef.clear();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * angular pipe sorting function for keyValue - keep the JSON order and do not\r\n * order alphabetically\r\n */\r\n originalOrder = (\r\n a: KeyValue,\r\n b: KeyValue\r\n ): number => {\r\n return 0;\r\n };\r\n\r\n /**\r\n * key method to instruct the display which HTML block to activate.\r\n */\r\n getLayout(): string {\r\n if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {\r\n return \"none\";\r\n }\r\n if (this.schema.widget === \"custom\") {\r\n return \"custom\";\r\n }\r\n if (this.hideUndefined && this.value === undefined) {\r\n return \"none\";\r\n }\r\n if (this.schema.type === \"object\") {\r\n if (this.schema.additionalProperties) {\r\n if (this.schema.layout === \"tab\") {\r\n return \"additionalPropertiesTab\";\r\n }\r\n return \"additionalProperties\";\r\n }\r\n return \"object\";\r\n }\r\n if (this.schema.type === \"array\") {\r\n if (this.schema.layout === \"tab\") {\r\n return \"tab\";\r\n }\r\n if (this.schema.layout === \"table\") {\r\n return \"table\";\r\n }\r\n if (this.schema.layout === \"select\") {\r\n return \"array-select\";\r\n }\r\n if (this.schema.layout === \"chips\") {\r\n return \"chips\";\r\n }\r\n return \"array\";\r\n }\r\n if (this.schema.enum) {\r\n return \"enum\";\r\n }\r\n if (this.schema.widget === \"date\") {\r\n return \"date\";\r\n }\r\n if (this.schema.widget === \"upload\") {\r\n return \"upload\";\r\n }\r\n if (this.schema.widget === \"textarea\") {\r\n return \"textarea\";\r\n }\r\n if (this.schema.type === \"boolean\") {\r\n return \"checkbox\";\r\n }\r\n if (this.schema.choicesUrl) {\r\n return \"autocomplete\";\r\n }\r\n if (this.schema.choices) {\r\n return \"autocomplete\";\r\n }\r\n if (this.schema.displayWith) {\r\n return \"autocomplete\";\r\n }\r\n return \"single\";\r\n }\r\n\r\n /**\r\n * called from template in the \"simple\" type. If \"type\" is \"number\" or \"integer\",\r\n * the HTML input type is \"number\" which avoids normal string input\r\n */\r\n getInputType(schema: Schema): string {\r\n if (schema.type === \"number\") {\r\n return \"number\";\r\n }\r\n if (schema.type === \"integer\") {\r\n return \"number\";\r\n }\r\n return schema.widget;\r\n }\r\n\r\n /**\r\n * event handler for object display. Catches the child component event and\r\n * handle it by setting the value[key].\r\n * Also init null objects with {}\r\n */\r\n onValueChange(key: string, value: any) {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n this.value[key] = value;\r\n\r\n if (this.schema.computed) {\r\n for (const field of Object.keys(this.schema.computed)) {\r\n const expression = this.schema.computed[field];\r\n this.value[field] = jsonata(expression).evaluate(this.value);\r\n }\r\n }\r\n\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * add an element to an array.\r\n * null arrays are initialized with []\r\n */\r\n add() {\r\n if (!(this.value instanceof Array)) {\r\n this.value = [];\r\n }\r\n if (this.schema.items.type === \"array\") {\r\n this.value.push([]);\r\n } else if (this.schema.items.type === \"object\") {\r\n this.value.push({});\r\n } else {\r\n this.value.push(null);\r\n }\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * event handler for adding a field\r\n */\r\n addField() {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n if (this.value[\"\"]) {\r\n return;\r\n }\r\n this.value[\"\"] = null;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * remove an element from an array\r\n */\r\n remove(i: number) {\r\n this.value.splice(i, 1);\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * remove a field\r\n */\r\n removeField(key: string) {\r\n delete this.value[key];\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * event handler for changed field names with \"additionalProperties\"\r\n */\r\n fieldNameChange(key: string, newvalue: any) {\r\n this.value[newvalue] = this.value[key];\r\n delete this.value[key];\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * returns the validation error on this level and call recursively for all children.\r\n * returns null if the form contents is valid\r\n */\r\n recursiveError(): string {\r\n const e = this.error();\r\n if (e) {\r\n return e;\r\n }\r\n if (this.child) {\r\n return this.child.recursiveError();\r\n }\r\n if (this.children) {\r\n for (const c of this.children) {\r\n const r = c.recursiveError();\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * return the error message provided in the schema or the generic error message\r\n * returned from the validation code\r\n */\r\n e(error: string): string {\r\n if (this.schema.errorMessage) {\r\n return this.schema.errorMessage;\r\n }\r\n return error;\r\n }\r\n\r\n /**\r\n * return error string\r\n */\r\n error(): string {\r\n if (this.schema.widget === \"custom\") {\r\n return this.customError;\r\n }\r\n if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {\r\n return null;\r\n }\r\n if (this.value) {\r\n if (this.schema.maxItems) {\r\n if (!(this.value.length <= this.schema.maxItems)) {\r\n return this.e(\r\n \"Only \" + this.schema.maxItems + \" array entries allowed\"\r\n );\r\n }\r\n }\r\n if (this.schema.uniqueItems) {\r\n if (!(new Set(this.value).size === this.value.length)) {\r\n return this.e(\"Array entries must be unique\");\r\n }\r\n }\r\n if (this.schema.minItems) {\r\n if (!(this.value.length >= this.schema.minItems)) {\r\n return this.e(\r\n \"At least \" + this.schema.minItems + \" array entries required\"\r\n );\r\n }\r\n }\r\n if (this.schema.maxProperties) {\r\n if (!(Object.keys(this.value).length <= this.schema.maxProperties)) {\r\n return this.e(\r\n \"Only \" + this.schema.maxProperties + \" fields allowed\"\r\n );\r\n }\r\n }\r\n if (this.schema.propertyNames) {\r\n for (const key of Object.keys(this.value)) {\r\n const re = new RegExp(this.schema.propertyNames);\r\n if (!re.test(key)) {\r\n return this.e(\"illegal field name: \" + key);\r\n }\r\n }\r\n }\r\n if (this.schema.dependencies) {\r\n for (const dep of Object.keys(this.schema.dependencies)) {\r\n if (this.value[dep]) {\r\n for (const l of this.schema.dependencies[dep]) {\r\n if (!this.value[l]) {\r\n return this.e(dep + \" depends on \" + l);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.schema.minProperties) {\r\n if (!(Object.keys(this.value).length >= this.schema.minProperties)) {\r\n return this.e(\r\n \"At least \" + this.schema.minProperties + \" fields required\"\r\n );\r\n }\r\n }\r\n if (this.schema.maxLength) {\r\n if (!((\"\" + this.value).length <= this.schema.maxLength)) {\r\n return this.e(\"Input is longer than \" + this.schema.maxLength);\r\n }\r\n }\r\n if (this.schema.minLength) {\r\n if (!((\"\" + this.value).length >= this.schema.minLength)) {\r\n return this.e(\"Input is shorter than \" + this.schema.minLength);\r\n }\r\n }\r\n if (this.schema.multipleOf) {\r\n if (!Number.isInteger(Number(this.value) / this.schema.multipleOf)) {\r\n return this.e(\"Must be multiple of \" + this.schema.multipleOf);\r\n }\r\n }\r\n if (this.schema.exclusiveMaximum) {\r\n if (!(Number(this.value) < this.schema.exclusiveMaximum)) {\r\n return this.e(\"Must be less than \" + this.schema.exclusiveMaximum);\r\n }\r\n }\r\n if (this.schema.maximum) {\r\n if (!(Number(this.value) <= this.schema.maximum)) {\r\n return this.e(\"Must be less than or equal \" + this.schema.maximum);\r\n }\r\n }\r\n if (this.schema.exclusiveMinimum) {\r\n if (!(Number(this.value) > this.schema.exclusiveMinimum)) {\r\n return this.e(\"Must greater than \" + this.schema.exclusiveMinimum);\r\n }\r\n }\r\n if (this.schema.minimum) {\r\n if (!(Number(this.value) >= this.schema.minimum)) {\r\n return this.e(\"Must greater than or equal \" + this.schema.minimum);\r\n }\r\n }\r\n }\r\n if (this.required) {\r\n if (this.value == null || Object.is(this.value, NaN)) {\r\n return this.e(\"required\");\r\n }\r\n }\r\n if (this.schema.required) {\r\n for (const dep of this.schema.required) {\r\n if (\r\n !this.value[dep] &&\r\n this.value[dep] !== false &&\r\n this.value[dep] !== 0\r\n ) {\r\n // ignore 'required' if dep is inactive due to switch / case\r\n let inactive = false;\r\n if (this.schema.switch) {\r\n const switc = this.value[this.schema.switch];\r\n if (switc && this.schema.properties[dep].case?.indexOf(switc) < 0) {\r\n inactive = true;\r\n }\r\n }\r\n if (!inactive) {\r\n return this.e(dep + \" is required\");\r\n }\r\n }\r\n }\r\n }\r\n if (this.schema.pattern) {\r\n const re = new RegExp(this.schema.pattern);\r\n if (!this.value) {\r\n return this.e(\"illegal string\");\r\n }\r\n if (!re.test(this.value)) {\r\n return this.e(\"illegal string\");\r\n }\r\n }\r\n if (this.schema.format && this.service.formats[this.schema.format]) {\r\n const re = new RegExp(this.service.formats[this.schema.format]);\r\n if (!this.value) {\r\n return this.e(\"illegal string\");\r\n }\r\n if (!re.test(this.value)) {\r\n return this.e(\"illegal string\");\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * use the element title if present, defaults to the label input or \"\" is both are null\r\n */\r\n getLabel(): string {\r\n if (this.schema.title) {\r\n return this.schema.title;\r\n }\r\n if (this.label) {\r\n return this.label;\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * input element change handler.\r\n * normalize the different kind of events, handle the datatypes, set the value and emit the change\r\n */\r\n change(event: any) {\r\n let eventTarget: any;\r\n\r\n if (event instanceof MatSelectChange) {\r\n event = event.value;\r\n } else if (event instanceof MatDatepickerInputEvent) {\r\n event = this.serializeDate(\r\n event.value,\r\n this.schema.dateFormat,\r\n this.schema.type\r\n );\r\n } else if (event instanceof MatAutocompleteSelectedEvent) {\r\n event = event.option.value;\r\n } else if (event instanceof MatCheckboxChange) {\r\n event = event.checked;\r\n } else {\r\n // save the event target in case the parsing changes the value\r\n // (e.g. integer input 5.3 becomes 5, this is reflected on the UI via this handle)\r\n eventTarget = event.target;\r\n event = event.target.value;\r\n }\r\n\r\n if (event === \"\") {\r\n event = null;\r\n }\r\n\r\n if (event == null) {\r\n this.value = null;\r\n }\r\n\r\n if (this.schema.type === \"number\") {\r\n this.value = parseFloat(event);\r\n } else if (this.schema.type === \"integer\") {\r\n this.value = parseInt(event, 10);\r\n } else if (this.schema.type === \"boolean\") {\r\n if (typeof event === \"string\") {\r\n if (event === \"true\") {\r\n this.value = true;\r\n } else if (event === \"false\") {\r\n this.value = false;\r\n } else {\r\n this.value = null;\r\n }\r\n } else {\r\n this.value = event;\r\n }\r\n } else if (this.schema.type === \"string\") {\r\n this.value = event;\r\n } else if (this.schema.type === \"array\") {\r\n this.value = event;\r\n } else {\r\n throw new Error(\"unknown type: \" + this.schema.type);\r\n }\r\n\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * allows for the result of a file upload to be written into a text form element\r\n */\r\n handleFileInput(event: any) {\r\n if (1024 * 1024 <= event.target.files.item(0).size) {\r\n console.log(\"The file size is limited to 1MB\");\r\n return;\r\n }\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.value = reader.result;\r\n this.emit(this.value);\r\n };\r\n \r\n reader.readAsDataURL(event.target.files.item(0));\r\n }\r\n\r\n /**\r\n * get example values from example array and default\r\n */\r\n example(): string {\r\n if (this.schema.examples && this.schema.examples[0]) {\r\n return this.schema.examples[0];\r\n }\r\n if (this.schema.default) {\r\n return this.schema.default;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * load the dynamic custom widget\r\n */\r\n loadComponent() {\r\n const componentFactory =\r\n this.componentFactoryResolver.resolveComponentFactory(\r\n this.service.registry[this.schema.widgetType]\r\n );\r\n const viewContainerRef = this.widgetHost.viewContainerRef;\r\n viewContainerRef.clear();\r\n const componentRef = viewContainerRef.createComponent(componentFactory);\r\n\r\n // input values\r\n (componentRef.instance as WidgetComponent).label = this.label;\r\n (componentRef.instance as WidgetComponent).value = this.value;\r\n (componentRef.instance as WidgetComponent).schema = this.schema;\r\n (componentRef.instance as WidgetComponent).rootSchema = this.rootSchema;\r\n (componentRef.instance as WidgetComponent).rootValue = this.rootValue;\r\n\r\n // subscribe to value changes and forward them\r\n (componentRef.instance as WidgetComponent).valueChange.subscribe((data) => {\r\n this.value = data;\r\n this.emit(this.value);\r\n });\r\n\r\n // subscribe to error changes and forward them\r\n (componentRef.instance as WidgetComponent).errorChange.subscribe(\r\n (error) => {\r\n this.customError = error;\r\n this.errorChange.emit(error);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * used for expansion panels - set value and forward event\r\n */\r\n setAndEmit(event: any) {\r\n this.value = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * set an array element and emit value change event\r\n */\r\n setIndexAndEmit(i: number, event: any) {\r\n this.value[i] = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * set an array element's field and emit value change event (applies to table layout)\r\n */\r\n setIndexAndEmitTable(i: number, field: string, event: any) {\r\n this.value[i][field] = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * used when hideUndefined is active. Called from the UI to\r\n * show a property with undefined value (in order to be able to set if in the form)\r\n */\r\n showProperty(prop: string) {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n if (this.value[prop] === undefined) {\r\n this.value[prop] = null;\r\n } else if (this.value[prop] === null) {\r\n this.value[prop] = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * used when hideUndefined is active. Called from the UI\r\n * to determine which properties are included in the \"to add\" list\r\n */\r\n showPropertyList(): string[] {\r\n if (this.schema.switch && this.value) {\r\n const sw = this.value[this.schema.switch];\r\n const props = [];\r\n for (const [k, v] of Object.entries(this.schema.properties)) {\r\n if (v.case) {\r\n if (v.case.includes(sw)) {\r\n props.push(k);\r\n }\r\n } else {\r\n props.push(k);\r\n }\r\n }\r\n return props.sort();\r\n } else {\r\n return Object.keys(this.schema.properties).sort();\r\n }\r\n }\r\n\r\n /**\r\n * string to date\r\n * @param date date string / number (millisecs since 1970)\r\n * @param format date format\r\n */\r\n parseDate(date: any, format: string): Date {\r\n if (!date && date !== 0) {\r\n return date;\r\n }\r\n if (typeof date === \"number\") {\r\n return this.sameDate(new Date(date));\r\n }\r\n if (!format) {\r\n return date;\r\n }\r\n const pdate = date.split(this.getDelimiter(format));\r\n const pformat = format.split(this.getDelimiter(format));\r\n return this.sameDate(\r\n new Date(\r\n pdate[pformat.indexOf(\"yyyy\")],\r\n pdate[pformat.indexOf(\"MM\")] - 1,\r\n pdate[pformat.indexOf(\"dd\")]\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * make sure to return the same date object instance (cannot delete date #83)\r\n */\r\n sameDate(nd: Date): Date {\r\n if (!this.date) {\r\n this.date = nd;\r\n }\r\n if (this.date.getTime() !== nd.getTime()) {\r\n this.date = nd;\r\n }\r\n return this.date;\r\n }\r\n\r\n /**\r\n * date to string\r\n * @param date the date to serialize\r\n * @param format the date format (e.g. dd-MM-yyyy)\r\n * @param type target datatype (allows serializing to millisecs since 1970)\r\n */\r\n serializeDate(date: Date, format: string, type: string): string {\r\n if (date == null) {\r\n return \"\";\r\n }\r\n if (type === \"integer\" || type === \"number\") {\r\n return \"\" + date.valueOf();\r\n }\r\n if (!format) {\r\n return date.toISOString();\r\n }\r\n const pformat = format.split(this.getDelimiter(format));\r\n const pdate = [null, null, null];\r\n pdate[pformat.indexOf(\"yyyy\")] = date.getFullYear();\r\n pdate[pformat.indexOf(\"MM\")] = date.getMonth() + 1;\r\n pdate[pformat.indexOf(\"dd\")] = date.getDate();\r\n return (\r\n pdate[0] +\r\n this.getDelimiter(format) +\r\n pdate[1] +\r\n this.getDelimiter(format) +\r\n pdate[2]\r\n );\r\n }\r\n\r\n /**\r\n * find the first non letter character in a date format such as dd/MM/yyyy (returns /)\r\n */\r\n getDelimiter(format: string): string {\r\n const delim = format.match(/\\W/g);\r\n if (!delim[0]) {\r\n throw new Error(\"No delimiter found in date format: \" + format);\r\n }\r\n return delim[0];\r\n }\r\n\r\n /**\r\n * new chip entered\r\n */\r\n addChip(event: MatChipInputEvent): void {\r\n const input = event.input;\r\n const value = event.value;\r\n\r\n // Add our fruit\r\n if ((value || \"\").trim()) {\r\n if (!this.value) {\r\n this.value = [];\r\n }\r\n this.value.push(value.trim());\r\n this.emit(this.value);\r\n }\r\n\r\n // Reset the input value\r\n if (input) {\r\n input.value = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * remove a chip\r\n */\r\n removeChip(v: string): void {\r\n const index = this.value.indexOf(v);\r\n if (index >= 0) {\r\n this.value.splice(index, 1);\r\n if (this.value.length === 0) {\r\n this.value = null;\r\n }\r\n this.emit(this.value);\r\n }\r\n }\r\n\r\n /**\r\n * chips d&d handler\r\n */\r\n dropChip(event: CdkDragDrop) {\r\n moveItemInArray(this.value, event.previousIndex, event.currentIndex);\r\n this.emit(this.value);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\r\n\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule, MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { WidgetDirective } from './widget.directive';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { EditElementDialogComponent } from './edit-element-dialog.component';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\n@NgModule({\r\n declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective],\r\n imports: [\r\n MatCardModule,\r\n FlexLayoutModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatTabsModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatDatepickerModule,\r\n MatCheckboxModule,\r\n MatAutocompleteModule,\r\n HttpClientModule,\r\n CommonModule,\r\n MatInputModule,\r\n MatNativeDateModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatMenuModule,\r\n ReactiveFormsModule,\r\n MatDialogModule,\r\n MatChipsModule,\r\n DragDropModule\r\n ],\r\n exports: [JsonSchemaFormComponent],\r\n providers: [\r\n // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892\r\n { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } }\r\n ]\r\n\r\n})\r\nexport class JsonSchemaFormModule { }\r\n"]} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts b/dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts new file mode 100644 index 0000000..a15adcd --- /dev/null +++ b/dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts @@ -0,0 +1,6 @@ +/** + * Generated bundle index. Do not edit. + */ +/// +export * from './public-api'; +//# sourceMappingURL=dashjoin-json-schema-form.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts.map b/dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts.map new file mode 100644 index 0000000..7b5a61b --- /dev/null +++ b/dist/dashjoin/json-schema-form/dashjoin-json-schema-form.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"dashjoin-json-schema-form.d.ts","sourceRoot":"","sources":["../../../projects/dashjoin/json-schema-form/src/dashjoin-json-schema-form.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,cAAc,CAAC"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/dashjoin-json-schema-form.js b/dist/dashjoin/json-schema-form/esm2015/dashjoin-json-schema-form.js new file mode 100644 index 0000000..41375fb --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/dashjoin-json-schema-form.js @@ -0,0 +1,5 @@ +/** + * Generated bundle index. Do not edit. + */ +export * from './public-api'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGpvaW4tanNvbi1zY2hlbWEtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hqb2luL2pzb24tc2NoZW1hLWZvcm0vc3JjL2Rhc2hqb2luLWpzb24tc2NoZW1hLWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ== \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/choice.js b/dist/dashjoin/json-schema-form/esm2015/lib/choice.js new file mode 100644 index 0000000..7e7e629 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/choice.js @@ -0,0 +1,122 @@ +import { HttpHeaders } from '@angular/common/http'; +import { forkJoin, of } from 'rxjs'; +import { map, publishReplay, refCount, switchMap } from 'rxjs/operators'; +import jsonata from 'jsonata'; +/** + * default implementation that handles choices based on schema fields. + * can be overriden via schema.displayWith + */ +export class DefaultChoiceHandler { + /** + * create default choice handler + * + * @param http http connection client + */ + constructor(http) { + this.http = http; + } + /** + * load choices + */ + load(value, schema) { + if (!this.cache) { + if (schema.choices) { + // static choices are given, convert them to Choice and merge the result + const arr = []; + for (const s of schema.choices) { + arr.push(this.choice(s, schema)); + } + this.cache = forkJoin(arr); + } + else { + // load choices from URL + this.cache = this.getChoices(schema.choicesUrl, schema.choicesUrlArgs, schema.choicesVerb).pipe(switchMap(res => { + if (schema.jsonata) { + res = jsonata(schema.jsonata).evaluate(res); + if (!Array.isArray(res)) { + res = [res]; + // introduce jsonName, jsonValue + } + } + const obs = []; + for (const r of res) { + obs.push(this.choice(r, schema)); + } + return forkJoin(obs); + }), + // setup caching + publishReplay(1), refCount()); + } + } + return this.cache; + } + /** + * filter after keystroke + */ + filter(value, schema, current, choices) { + return choices.pipe(map(arr => { + if (!current) { + return arr; + } + const res = arr.filter(i => this.include(i, current)); + return res; + })); + } + /** + * called from filter, intended to allow subclasses to easily change filter algorithm + */ + include(i, current) { + var _a; + return (_a = i.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(current.toLowerCase()); + } + /** + * default choice implementation: just reuse value as name + * check for localName + */ + choice(value, schema) { + if (schema.displayWith === 'localName') { + for (const delimiter of ['/', '#', ':', '.']) { + const parts = value.split(delimiter); + if (parts.length > 1) { + return of({ value, name: parts[parts.length - 1] }); + } + } + return of({ value, name: value }); + } + if (schema.jsonata) { + if (typeof value === 'object') { + return of(value); + } + else { + // initially, value is a simple string + return of({ value, name: value }); + } + } + if (schema.displayWithChoices) { + return of({ value, name: schema.displayWithChoices[schema.choices.indexOf(value)] }); + } + return of({ value, name: value }); + } + /** + * handle GET / POST + */ + getChoices(url, args, verb) { + if (verb === 'GET') { + return this.http.get(url, args); + } + else { + return this.http.post(url, args, { + headers: new HttpHeaders({ + 'Content-Type': 'application/json', + }) + }); + } + } + /** + * default: no delay + */ + debounceTime() { + return 0; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvaWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGFzaGpvaW4vanNvbi1zY2hlbWEtZm9ybS9zcmMvbGliL2Nob2ljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQTRDOUI7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUU3Qjs7OztPQUlHO0lBQ0gsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUFJLENBQUM7SUFPekM7O09BRUc7SUFDSCxJQUFJLENBQUMsS0FBVSxFQUFFLE1BQWM7UUFFM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLHdFQUF3RTtnQkFDeEUsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztnQkFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ3BDO2dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNILHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFB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RSxNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDeEY7UUFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsR0FBVyxFQUFFLElBQVMsRUFBRSxJQUFZO1FBQzNDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFRLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBUSxHQUFHLEVBQUUsSUFBSSxFQUFFO2dCQUNwQyxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUM7b0JBQ3JCLGNBQWMsRUFBRSxrQkFBa0I7aUJBQ3JDLENBQUM7YUFDTCxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDUixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xyXG5pbXBvcnQgeyBtYXAsIHB1Ymxpc2hSZXBsYXksIHJlZkNvdW50LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBqc29uYXRhIGZyb20gJ2pzb25hdGEnO1xyXG5cclxuLyoqXHJcbiAqIGNsYXNzIGJhY2tpbmcgYSBzZWxlY3QgLyBhdXRvY29tcGxldGUgb3B0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENob2ljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBzZWxlY3QgdmFsdWVcclxuICAgICAqL1xyXG4gICAgdmFsdWU6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgbmFtZVxyXG4gICAgICovXHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBpbnRlcmZhY2UgZm9yIGNob2ljZSBoYW5kbGVycyBmb3Igc2VsZWN0IC8gYXV0b2NvbXBsZXRlIGNob2ljZXNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hvaWNlSGFuZGxlciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBsb2FkcyB0aGUgY2hvaWNlc1xyXG4gICAgICovXHJcbiAgICBsb2FkKHZhbHVlOiBhbnksIHNjaGVtYTogU2NoZW1hKTogT2JzZXJ2YWJsZTxDaG9pY2VbXT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VyIHR5cGVkIGluIGF1dG9jb21wbGV0ZSBmaWVsZFxyXG4gICAgICovXHJcbiAgICBmaWx0ZXIodmFsdWU6IGFueSwgc2NoZW1hOiBTY2hlbWEsIGN1cnJlbnQ6IHN0cmluZywgY2hvaWNlczogT2JzZXJ2YWJsZTxDaG9pY2VbXT4pOiBPYnNlcnZhYmxlPENob2ljZVtdPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHJldHVybiBhIHNpbmdsZSBjaG9pY2UgKGkuZS4gY29udmVydCB2YWx1ZSB0byBDaG9pY2UpXHJcbiAgICAgKi9cclxuICAgIGNob2ljZSh2YWx1ZTogYW55LCBzY2hlbWE6IFNjaGVtYSk6IE9ic2VydmFibGU8Q2hvaWNlPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRlbGF5IGJldHdlZW4ga2V5c3Ryb2tlcyBiZWZvcmUgbmV3IGRhdGEgaXMgbG9hZGVkXHJcbiAgICAgKi9cclxuICAgIGRlYm91bmNlVGltZSgpOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBjaG9pY2VzIGJhc2VkIG9uIHNjaGVtYSBmaWVsZHMuXHJcbiAqIGNhbiBiZSBvdmVycmlkZW4gdmlhIHNjaGVtYS5kaXNwbGF5V2l0aFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERlZmF1bHRDaG9pY2VIYW5kbGVyIGltcGxlbWVudHMgQ2hvaWNlSGFuZGxlciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBjcmVhdGUgZGVmYXVsdCBjaG9pY2UgaGFuZGxlclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBodHRwICAgICAgaHR0cCBjb25uZWN0aW9uIGNsaWVudFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogaHR0cCBjYWNoZSBmb3IgUkVTVCByZXF1ZXN0IG9uIGNvbmZpZy9UYWJsZSAoaS5lLiBzY2hlbWEgcmVxdWVzdHMpXHJcbiAgICAgKi9cclxuICAgIGNhY2hlOiBPYnNlcnZhYmxlPENob2ljZVtdPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGxvYWQgY2hvaWNlc1xyXG4gICAgICovXHJcbiAgICBsb2FkKHZhbHVlOiBhbnksIHNjaGVtYTogU2NoZW1hKTogT2JzZXJ2YWJsZTxDaG9pY2VbXT4ge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FjaGUpIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYS5jaG9pY2VzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzdGF0aWMgY2hvaWNlcyBhcmUgZ2l2ZW4sIGNvbnZlcnQgdGhlbSB0byBDaG9pY2UgYW5kIG1lcmdlIHRoZSByZXN1bHRcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFycjogT2JzZXJ2YWJsZTxDaG9pY2U+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBzY2hlbWEuY2hvaWNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRoaXMuY2hvaWNlKHMsIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZSA9IGZvcmtKb2luKGFycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsb2FkIGNob2ljZXMgZnJvbSBVUkxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmdldENob2ljZXMoc2NoZW1hLmNob2ljZXNVcmwsIHNjaGVtYS5jaG9pY2VzVXJsQXJncywgc2NoZW1hLmNob2ljZXNWZXJiKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmpzb25hdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGpzb25hdGEoc2NoZW1hLmpzb25hdGEpLmV2YWx1YXRlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IFtyZXNdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRyb2R1Y2UganNvbk5hbWUsIGpzb25WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxDaG9pY2U+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzLnB1c2godGhpcy5jaG9pY2Uociwgc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG9icyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldHVwIGNhY2hpbmdcclxuICAgICAgICAgICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZkNvdW50KClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBmaWx0ZXIgYWZ0ZXIga2V5c3Ryb2tlXHJcbiAgICAgKi9cclxuICAgIGZpbHRlcih2YWx1ZTogYW55LCBzY2hlbWE6IFNjaGVtYSwgY3VycmVudDogc3RyaW5nLCBjaG9pY2VzOiBPYnNlcnZhYmxlPENob2ljZVtdPik6IE9ic2VydmFibGU8Q2hvaWNlW10+IHtcclxuICAgICAgICByZXR1cm4gY2hvaWNlcy5waXBlKG1hcChhcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXJyLmZpbHRlcihpID0+IHRoaXMuaW5jbHVkZShpLCBjdXJyZW50KSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2FsbGVkIGZyb20gZmlsdGVyLCBpbnRlbmRlZCB0byBhbGxvdyBzdWJjbGFzc2VzIHRvIGVhc2lseSBjaGFuZ2UgZmlsdGVyIGFsZ29yaXRobVxyXG4gICAgICovXHJcbiAgICBpbmNsdWRlKGk6IENob2ljZSwgY3VycmVudDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGkubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjdXJyZW50LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGVmYXVsdCBjaG9pY2UgaW1wbGVtZW50YXRpb246IGp1c3QgcmV1c2UgdmFsdWUgYXMgbmFtZVxyXG4gICAgICogY2hlY2sgZm9yIGxvY2FsTmFtZVxyXG4gICAgICovXHJcbiAgICBjaG9pY2UodmFsdWU6IGFueSwgc2NoZW1hOiBTY2hlbWEpOiBPYnNlcnZhYmxlPENob2ljZT4ge1xyXG4gICAgICAgIGlmIChzY2hlbWEuZGlzcGxheVdpdGggPT09ICdsb2NhbE5hbWUnKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGVsaW1pdGVyIG9mIFsnLycsICcjJywgJzonLCAnLiddKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KGRlbGltaXRlcik7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7IHZhbHVlLCBuYW1lOiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gb2YoeyB2YWx1ZSwgbmFtZTogdmFsdWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuanNvbmF0YSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxseSwgdmFsdWUgaXMgYSBzaW1wbGUgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoeyB2YWx1ZSwgbmFtZTogdmFsdWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5kaXNwbGF5V2l0aENob2ljZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgdmFsdWUsIG5hbWU6IHNjaGVtYS5kaXNwbGF5V2l0aENob2ljZXNbc2NoZW1hLmNob2ljZXMuaW5kZXhPZih2YWx1ZSldIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YoeyB2YWx1ZSwgbmFtZTogdmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBoYW5kbGUgR0VUIC8gUE9TVFxyXG4gICAgICovXHJcbiAgICBnZXRDaG9pY2VzKHVybDogc3RyaW5nLCBhcmdzOiBhbnksIHZlcmI6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgaWYgKHZlcmIgPT09ICdHRVQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih1cmwsIGFyZ3MpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odXJsLCBhcmdzLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0OiBubyBkZWxheVxyXG4gICAgICovXHJcbiAgICBkZWJvdW5jZVRpbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/edit-element-dialog.component.js b/dist/dashjoin/json-schema-form/esm2015/lib/edit-element-dialog.component.js new file mode 100644 index 0000000..19beb7a --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/edit-element-dialog.component.js @@ -0,0 +1,118 @@ +import { Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA } from '@angular/material/dialog'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/material/dialog"; +/** + * dialog to edit a JSON node in a layout structure + */ +export class EditElementDialogComponent { + /** + * dialog constrcutor + * @param dialogRef disloag ref + * @param data data to edit + */ + constructor(dialogRef, data) { + var _a; + this.dialogRef = dialogRef; + this.data = data; + this.schema = { + title: 'Edit form', + layout: 'vertical', + order: [ + ['widget', 'layout', 'itemlayout'], + ['title', 'description'], + ['example', 'readOnly'], + ['required', 'format', 'errorMessage'], + 'choices', 'class', 'style' + ], + static: true, + type: 'object', + properties: { + // description, class, style are always applicable + description: { type: 'string', static: true, title: 'Description / tooltip' }, + class: { type: 'array', items: { type: 'string' }, layout: 'chips', style: { width: '365px' }, static: true, title: 'CSS classes' }, + style: { type: 'object', additionalProperties: { type: 'string' }, static: true, title: 'CSS styles' } + } + }; + if (data.properties) { + // only show required and error message for objects + this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' }; + this.schema.properties.required = { + choices: Object.keys(data.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true, + title: 'Required fields' + }; + this.schema.properties.layout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Screen layout' }; + } + else { + if (data.items) { + this.schema.properties.layout = { + type: 'string', enum: ['vertical', 'horizontal', 'select', 'tab', 'table', 'chips'], + static: true, title: 'Screen Layout' + }; + this.schema.properties.itemlayout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Item screen layout' }; + } + if ((_a = data.items) === null || _a === void 0 ? void 0 : _a.properties) { + // array of objects + this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' }; + this.schema.properties.required = { + choices: Object.keys(data.items.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true, + title: 'Required fields' + }; + } + else { + // array of simple types + this.schema.properties.readOnly = { + type: 'boolean', static: true, title: 'Read only value', style: { 'padding-top': '15px' } + }; + this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' }; + this.schema.properties.format = { + type: 'string', static: true, title: 'Format', + widget: 'select', choices: [null, 'email', 'ipv4', 'url', 'uri'] + }; + this.schema.properties.example = { type: 'string', static: true, title: 'Example data' }; + this.schema.properties.title = { type: 'string', static: true, title: 'Title' }; + this.schema.properties.widget = { + type: 'string', enum: ['text', 'select', 'date', 'textarea', 'password'], static: true, + title: 'Form widget' + }; + this.schema.properties.choices = { + type: 'array', items: { type: 'string' }, style: { width: '365px' }, + layout: 'chips', static: true, title: 'Input choices' + }; + } + } + } +} +EditElementDialogComponent.ɵfac = function EditElementDialogComponent_Factory(t) { return new (t || EditElementDialogComponent)(i0.ɵɵdirectiveInject(i1.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); }; +EditElementDialogComponent.ɵcmp = i0.ɵɵdefineComponent({ type: EditElementDialogComponent, selectors: [["lib-edit-element-dialog"]], decls: 7, vars: 4, consts: [[2, "padding-top", "10px"], [3, "value", "schema", "label", "valueChange"], ["align", "end"], ["mat-button", "", 3, "click"], ["mat-raised-button", "", "cdkFocusInitial", "", 3, "mat-dialog-close"]], template: function EditElementDialogComponent_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-dialog-content", 0); + i0.ɵɵelementStart(1, "lib-json-schema-form", 1); + i0.ɵɵlistener("valueChange", function EditElementDialogComponent_Template_lib_json_schema_form_valueChange_1_listener($event) { return ctx.data = $event; }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(2, "mat-dialog-actions", 2); + i0.ɵɵelementStart(3, "button", 3); + i0.ɵɵlistener("click", function EditElementDialogComponent_Template_button_click_3_listener() { return ctx.dialogRef.close(); }); + i0.ɵɵtext(4, "Cancel"); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(5, "button", 4); + i0.ɵɵtext(6, "Ok"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + } if (rf & 2) { + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", ctx.data)("schema", ctx.schema)("label", ctx.schema.title); + i0.ɵɵadvance(4); + i0.ɵɵproperty("mat-dialog-close", ctx.data); + } }, encapsulation: 2 }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditElementDialogComponent, [{ + type: Component, + args: [{ + selector: 'lib-edit-element-dialog', + templateUrl: './edit-element-dialog.component.html' + }] + }], function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{ + type: Inject, + args: [MAT_DIALOG_DATA] + }] }]; }, null); })(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1lbGVtZW50LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoam9pbi9qc29uLXNjaGVtYS1mb3JtL3NyYy9saWIvZWRpdC1lbGVtZW50LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoam9pbi9qc29uLXNjaGVtYS1mb3JtL3NyYy9saWIvZWRpdC1lbGVtZW50LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFFekU7O0dBRUc7QUFLSCxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDOzs7O09BSUc7SUFDSCxZQUNTLFNBQW1ELEVBQzFCLElBQVM7O1FBRGxDLGNBQVMsR0FBVCxTQUFTLENBQTBDO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEtBQUssRUFBRSxXQUFXO1lBQ2xCLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLEtBQUssRUFBRTtnQkFDTCxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDO2dCQUNsQyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7Z0JBQ3hCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztnQkFDdkIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQztnQkFDdEMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPO2FBQzVCO1lBQ0QsTUFBTSxFQUFFLElBQUk7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRTtnQkFDVixrREFBa0Q7Z0JBQ2xELFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFB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LENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUc7b0JBQy9CLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7b0JBQ25FLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZUFBZTtpQkFDdEQsQ0FBQzthQUNIO1NBQ0Y7SUFDSCxDQUFDOztvR0EzRVUsMEJBQTBCLDhEQVMzQixlQUFlOytEQVRkLDBCQUEwQjtRQ1Z2Qyw2Q0FBK0M7UUFDM0MsK0NBQWdGO1FBQTFELDRKQUFnQjtRQUEwQyxpQkFBdUI7UUFDM0csaUJBQXFCO1FBQ3JCLDZDQUFnQztRQUM1QixpQ0FBK0M7UUFBNUIsdUdBQVMscUJBQWlCLElBQUM7UUFBQyxzQkFBTTtRQUFBLGlCQUFTO1FBQzlELGlDQUFvRTtRQUFBLGtCQUFFO1FBQUEsaUJBQVM7UUFDbkYsaUJBQXFCOztRQUxLLGVBQWdCO1FBQWhCLGdDQUFnQixzQkFBQSwyQkFBQTtRQUlaLGVBQXlCO1FBQXpCLDJDQUF5Qjs7dUZESzFDLDBCQUEwQjtjQUp0QyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsV0FBVyxFQUFFLHNDQUFzQzthQUNwRDs7c0JBVUksTUFBTTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuLyoqXHJcbiAqIGRpYWxvZyB0byBlZGl0IGEgSlNPTiBub2RlIGluIGEgbGF5b3V0IHN0cnVjdHVyZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZWRpdC1lbGVtZW50LWRpYWxvZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtZWxlbWVudC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0RWxlbWVudERpYWxvZ0NvbXBvbmVudCB7XHJcblxyXG4gIC8qKlxyXG4gICAqIGRpYWxvZyBjb25zdHJjdXRvclxyXG4gICAqIEBwYXJhbSBkaWFsb2dSZWYgICBkaXNsb2FnIHJlZlxyXG4gICAqIEBwYXJhbSBkYXRhICAgICAgICBkYXRhIHRvIGVkaXRcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFZGl0RWxlbWVudERpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zY2hlbWEgPSB7XHJcbiAgICAgIHRpdGxlOiAnRWRpdCBmb3JtJyxcclxuICAgICAgbGF5b3V0OiAndmVydGljYWwnLFxyXG4gICAgICBvcmRlcjogW1xyXG4gICAgICAgIFsnd2lkZ2V0JywgJ2xheW91dCcsICdpdGVtbGF5b3V0J10sXHJcbiAgICAgICAgWyd0aXRsZScsICdkZXNjcmlwdGlvbiddLFxyXG4gICAgICAgIFsnZXhhbXBsZScsICdyZWFkT25seSddLFxyXG4gICAgICAgIFsncmVxdWlyZWQnLCAnZm9ybWF0JywgJ2Vycm9yTWVzc2FnZSddLFxyXG4gICAgICAgICdjaG9pY2VzJywgJ2NsYXNzJywgJ3N0eWxlJ1xyXG4gICAgICBdLFxyXG4gICAgICBzdGF0aWM6IHRydWUsXHJcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgLy8gZGVzY3JpcHRpb24sIGNsYXNzLCBzdHlsZSBhcmUgYWx3YXlzIGFwcGxpY2FibGVcclxuICAgICAgICBkZXNjcmlwdGlvbjogeyB0eXBlOiAnc3RyaW5nJywgc3RhdGljOiB0cnVlLCB0aXRsZTogJ0Rlc2NyaXB0aW9uIC8gdG9vbHRpcCcgfSxcclxuICAgICAgICBjbGFzczogeyB0eXBlOiAnYXJyYXknLCBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9LCBsYXlvdXQ6ICdjaGlwcycsIHN0eWxlOiB7IHdpZHRoOiAnMzY1cHgnIH0sIHN0YXRpYzogdHJ1ZSwgdGl0bGU6ICdDU1MgY2xhc3NlcycgfSxcclxuICAgICAgICBzdHlsZTogeyB0eXBlOiAnb2JqZWN0JywgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogJ3N0cmluZycgfSwgc3RhdGljOiB0cnVlLCB0aXRsZTogJ0NTUyBzdHlsZXMnIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZGF0YS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIC8vIG9ubHkgc2hvdyByZXF1aXJlZCBhbmQgZXJyb3IgbWVzc2FnZSBmb3Igb2JqZWN0c1xyXG4gICAgICB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzLmVycm9yTWVzc2FnZSA9IHsgdHlwZTogJ3N0cmluZycsIHN0YXRpYzogdHJ1ZSwgdGl0bGU6ICdWYWxpZGF0aW9uIGVycm9yIG1lc3NhZ2UnIH07XHJcbiAgICAgIHRoaXMuc2NoZW1hLnByb3BlcnRpZXMucmVxdWlyZWQgPSB7XHJcbiAgICAgICAgY2hvaWNlczogT2JqZWN0LmtleXMoZGF0YS5wcm9wZXJ0aWVzKSwgdHlwZTogJ2FycmF5JywgbGF5b3V0OiAnc2VsZWN0JywgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSwgc3RhdGljOiB0cnVlLFxyXG4gICAgICAgIHRpdGxlOiAnUmVxdWlyZWQgZmllbGRzJ1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzLmxheW91dCA9IHsgdHlwZTogJ3N0cmluZycsIGVudW06IFsndmVydGljYWwnLCAnaG9yaXpvbnRhbCddLCBzdGF0aWM6IHRydWUsIHRpdGxlOiAnU2NyZWVuIGxheW91dCcgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChkYXRhLml0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllcy5sYXlvdXQgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJywgZW51bTogWyd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJywgJ3NlbGVjdCcsICd0YWInLCAndGFibGUnLCAnY2hpcHMnXSxcclxuICAgICAgICAgIHN0YXRpYzogdHJ1ZSwgdGl0bGU6ICdTY3JlZW4gTGF5b3V0J1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllcy5pdGVtbGF5b3V0ID0geyB0eXBlOiAnc3RyaW5nJywgZW51bTogWyd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJ10sIHN0YXRpYzogdHJ1ZSwgdGl0bGU6ICdJdGVtIHNjcmVlbiBsYXlvdXQnIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRhdGEuaXRlbXM/LnByb3BlcnRpZXMpIHtcclxuICAgICAgICAvLyBhcnJheSBvZiBvYmplY3RzXHJcbiAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllcy5lcnJvck1lc3NhZ2UgPSB7IHR5cGU6ICdzdHJpbmcnLCBzdGF0aWM6IHRydWUsIHRpdGxlOiAnVmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlJyB9O1xyXG4gICAgICAgIHRoaXMuc2NoZW1hLnByb3BlcnRpZXMucmVxdWlyZWQgPSB7XHJcbiAgICAgICAgICBjaG9pY2VzOiBPYmplY3Qua2V5cyhkYXRhLml0ZW1zLnByb3BlcnRpZXMpLCB0eXBlOiAnYXJyYXknLCBsYXlvdXQ6ICdzZWxlY3QnLCBpdGVtczogeyB0eXBlOiAnc3RyaW5nJyB9LCBzdGF0aWM6IHRydWUsXHJcbiAgICAgICAgICB0aXRsZTogJ1JlcXVpcmVkIGZpZWxkcydcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGFycmF5IG9mIHNpbXBsZSB0eXBlc1xyXG4gICAgICAgIHRoaXMuc2NoZW1hLnByb3BlcnRpZXMucmVhZE9ubHkgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsIHN0YXRpYzogdHJ1ZSwgdGl0bGU6ICdSZWFkIG9ubHkgdmFsdWUnLCBzdHlsZTogeyAncGFkZGluZy10b3AnOiAnMTVweCcgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllcy5lcnJvck1lc3NhZ2UgPSB7IHR5cGU6ICdzdHJpbmcnLCBzdGF0aWM6IHRydWUsIHRpdGxlOiAnVmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlJyB9O1xyXG4gICAgICAgIHRoaXMuc2NoZW1hLnByb3BlcnRpZXMuZm9ybWF0ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsIHN0YXRpYzogdHJ1ZSwgdGl0bGU6ICdGb3JtYXQnLFxyXG4gICAgICAgICAgd2lkZ2V0OiAnc2VsZWN0JywgY2hvaWNlczogW251bGwsICdlbWFpbCcsICdpcHY0JywgJ3VybCcsICd1cmknXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllcy5leGFtcGxlID0geyB0eXBlOiAnc3RyaW5nJywgc3RhdGljOiB0cnVlLCB0aXRsZTogJ0V4YW1wbGUgZGF0YScgfTtcclxuICAgICAgICB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzLnRpdGxlID0geyB0eXBlOiAnc3RyaW5nJywgc3RhdGljOiB0cnVlLCB0aXRsZTogJ1RpdGxlJyB9O1xyXG4gICAgICAgIHRoaXMuc2NoZW1hLnByb3BlcnRpZXMud2lkZ2V0ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsIGVudW06IFsndGV4dCcsICdzZWxlY3QnLCAnZGF0ZScsICd0ZXh0YXJlYScsICdwYXNzd29yZCddLCBzdGF0aWM6IHRydWUsXHJcbiAgICAgICAgICB0aXRsZTogJ0Zvcm0gd2lkZ2V0J1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllcy5jaG9pY2VzID0ge1xyXG4gICAgICAgICAgdHlwZTogJ2FycmF5JywgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSwgc3R5bGU6IHsgd2lkdGg6ICczNjVweCcgfSxcclxuICAgICAgICAgIGxheW91dDogJ2NoaXBzJywgc3RhdGljOiB0cnVlLCB0aXRsZTogJ0lucHV0IGNob2ljZXMnXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2NoZW1hIHRvIGVkaXQgaW5wdXQgZm9ybSBmaWVsZHNcclxuICAgKi9cclxuICBzY2hlbWE6IGFueTtcclxufVxyXG4iLCI8bWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCI+XHJcbiAgICA8bGliLWpzb24tc2NoZW1hLWZvcm0gWyh2YWx1ZSldPVwiZGF0YVwiIFtzY2hlbWFdPVwic2NoZW1hXCIgW2xhYmVsXT1cInNjaGVtYS50aXRsZVwiPjwvbGliLWpzb24tc2NoZW1hLWZvcm0+XHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG48bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cImRpYWxvZ1JlZi5jbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImRhdGFcIiBjZGtGb2N1c0luaXRpYWw+T2s8L2J1dHRvbj5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+Il19 \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/edit.js b/dist/dashjoin/json-schema-form/esm2015/lib/edit.js new file mode 100644 index 0000000..efd271d --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/edit.js @@ -0,0 +1,339 @@ +import { EditElementDialogComponent } from './edit-element-dialog.component'; +/** + * form editor - has a 1:1 relationship to form node + */ +export class Edit { + /** + * get access to parent object's fields + * + * @param schemaChange signal a change + * @param name the current property name (key) + * @param schema the current schema + * @param parent the parent's schema (required in order to change the order) + * @param dialog dialog service + */ + constructor(schemaChange, name, schema, parent, dialog) { + this.schemaChange = schemaChange; + this.name = name; + this.schema = schema; + this.parent = parent; + this.dialog = dialog; + } + /** + * can add if addable is not empty + */ + canAdd() { + return this.addable().length > 0; + } + /** + * get the entries in "properties" that are not in "order" + */ + addable() { + var _a, _b; + let s; + if (this.schema.properties) { + s = this.schema; + } + else if ((_a = this.schema.items) === null || _a === void 0 ? void 0 : _a.properties) { + s = this.schema.items; + } + else if ((_b = this.schema.additionalProperties) === null || _b === void 0 ? void 0 : _b.properties) { + s = this.schema.additionalProperties; + } + else { + return []; + } + if (s.order) { + const set = new Set(Object.keys(s.properties)); + for (const p of s.order) { + if (Array.isArray(p)) { + for (const q of p) { + set.delete(q); + } + } + else { + set.delete(p); + } + } + return Array.from(set); + } + else { + return []; + } + } + /** + * add a hidden prop to the end of the list + */ + addSub(prop) { + const index = this.parent.order.indexOf(this.name); + if (index >= 0) { + this.parent.order[index] = [this.parent.order[index], prop]; + } + else { + for (const p of this.parent.order) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + p.push(prop); + } + } + } + } + this.schemaChange.emit(); + } + /** + * can add if addable is not empty + */ + canAddSub() { + return this.subaddable().length > 0; + } + /** + * get the entries in "properties" that are not in "order" + */ + subaddable() { + var _a; + if ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.order) { + const set = new Set(Object.keys(this.parent.properties)); + for (const p of this.parent.order) { + if (Array.isArray(p)) { + for (const q of p) { + set.delete(q); + } + } + else { + set.delete(p); + } + } + return Array.from(set); + } + else { + return []; + } + } + /** + * add a hidden prop to the end of the list + */ + add(prop) { + var _a; + if (this.schema.properties) { + this.schema.order.push(prop); + } + else if ((_a = this.schema.items) === null || _a === void 0 ? void 0 : _a.properties) { + this.schema.items.order.push(prop); + } + else { + this.schema.additionalProperties.order.push(prop); + } + this.schemaChange.emit(); + } + /** + * edit simple schema fields like title and description + */ + edit() { + var _a, _b, _c; + // deep clone object so we have the possibility to cancel editing + const clone = JSON.parse(JSON.stringify(this.schema)); + // handle (array) example + if (((_b = (_a = clone.items) === null || _a === void 0 ? void 0 : _a.examples) === null || _b === void 0 ? void 0 : _b.length) > 0) { + clone.example = clone.items.examples[0]; + } + if (((_c = clone.examples) === null || _c === void 0 ? void 0 : _c.length) > 0) { + clone.example = clone.examples[0]; + } + // text is default + if (!clone.widget) { + clone.widget = 'text'; + } + // horizontal is default + if (!clone.layout) { + clone.layout = 'horizontal'; + } + // array: apply choices and widget to items + if (clone.items) { + clone.widget = clone.items.widget; + clone.choices = clone.items.choices; + clone.errorMessage = clone.items.errorMessage; + clone.format = clone.items.format; + clone.required = clone.items.required; + clone.itemlayout = clone.items.layout; + } + const dialogRef = this.dialog.open(EditElementDialogComponent, { minWidth: '50%', data: clone }); + dialogRef.afterClosed().subscribe(data => { + var _a, _b; + if (data) { + this.schema.title = data.title; + this.schema.description = data.description; + this.schema.widget = data.widget; + this.schema.layout = data.layout; + this.schema.readOnly = data.readOnly; + this.schema.errorMessage = data.errorMessage; + if (data.example) { + if (data.items) { + this.schema.items.examples = [data.example]; + } + else { + this.schema.examples = [data.example]; + } + } + if (data.style) { + delete data.style['']; + } + if (data.style && Object.keys(data.style).length > 0) { + this.schema.style = data.style; + } + if (data.class) { + data.class = data.class.filter(el => el != null); + } + if (((_a = data.class) === null || _a === void 0 ? void 0 : _a.length) > 0) { + this.schema.class = data.class; + } + if (data.items) { + if (((_b = data.choices) === null || _b === void 0 ? void 0 : _b.length) > 0) { + this.schema.items.choices = data.choices; + } + this.schema.items.widget = data.widget; + this.schema.items.format = data.format; + this.schema.items.errorMessage = data.errorMessage; + this.schema.items.required = data.required; + this.schema.items.layout = data.itemlayout; + } + else { + this.schema.choices = data.choices; + this.schema.widget = data.widget; + this.schema.format = data.format; + this.schema.errorMessage = data.errorMessage; + this.schema.required = data.required; + } + this.schemaChange.emit(); + } + }); + } + /** + * can hide if I my parent is an object + */ + canHide() { + return this.parent ? true : false; + } + /** + * hide this prop + */ + hide() { + if (!this.parent.order) { + this.parent.order = Object.keys(this.parent.properties); + } + let index = 0; + for (const p of this.parent.order) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + p.splice(p.indexOf(this.name), 1); + if (p.length === 1) { + this.parent.order[index] = p[0]; + } + } + } + index++; + } + if (this.parent.order.indexOf(this.name) >= 0) { + this.parent.order.splice(this.parent.order.indexOf(this.name), 1); + } + this.schemaChange.emit(); + } + /** + * can I go up + */ + canUp() { + if (!this.parent) { + return false; + } + const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties); + const index = props.indexOf(this.name); + if (index >= 0) { + return index > 0; + } + else { + for (const p of props) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + return p.indexOf(this.name) > 0; + } + } + } + } + } + /** + * go up + */ + up() { + if (!this.parent.order) { + this.parent.order = Object.keys(this.parent.properties); + } + let index = this.parent.order.indexOf(this.name); + if (index >= 0) { + const tmp = this.parent.order[index - 1]; + this.parent.order[index - 1] = this.parent.order[index]; + this.parent.order[index] = tmp; + } + else { + for (const p of this.parent.order) { + if (Array.isArray(p)) { + index = p.indexOf(this.name); + if (index >= 0) { + const tmp = p[index - 1]; + p[index - 1] = p[index]; + p[index] = tmp; + } + } + } + } + this.schemaChange.emit(); + } + /** + * can I go down + */ + canDown() { + if (!this.parent) { + return false; + } + const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties); + const index = props.indexOf(this.name); + if (index >= 0) { + return index < props.length - 1; + } + else { + for (const p of props) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + return p.indexOf(this.name) < p.length - 1; + } + } + } + } + } + /** + * go down + */ + down() { + if (!this.parent.order) { + this.parent.order = Object.keys(this.parent.properties); + } + let index = this.parent.order.indexOf(this.name); + if (index >= 0) { + const tmp = this.parent.order[index + 1]; + this.parent.order[index + 1] = this.parent.order[index]; + this.parent.order[index] = tmp; + } + else { + for (const p of this.parent.order) { + if (Array.isArray(p)) { + index = p.indexOf(this.name); + if (index >= 0) { + const tmp = p[index + 1]; + p[index + 1] = p[index]; + p[index] = tmp; + } + } + } + } + this.schemaChange.emit(); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hqb2luL2pzb24tc2NoZW1hLWZvcm0vc3JjL2xpYi9lZGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzdFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLElBQUk7SUFFYjs7Ozs7Ozs7T0FRRztJQUNILFlBQ1ksWUFBZ0MsRUFBVSxJQUFZLEVBQVUsTUFBYyxFQUFVLE1BQWMsRUFDdEcsTUFBaUI7UUFEakIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3RHLFdBQU0sR0FBTixNQUFNLENBQVc7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTzs7UUFDSCxJQUFJLENBQVMsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDeEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDbkI7YUFBTSxVQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSywwQ0FBRSxVQUFVLEVBQUU7WUFDdEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3pCO2FBQU0sVUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQiwwQ0FBRSxVQUFVLEVBQUU7WUFDckQsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUM7U0FDeEM7YUFBTTtZQUNILE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxJQUFJ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LE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdCLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTt3QkFDWixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDbEI7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRWRpdEVsZW1lbnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2VkaXQtZWxlbWVudC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xyXG5cclxuLyoqXHJcbiAqIGZvcm0gZWRpdG9yIC0gaGFzIGEgMToxIHJlbGF0aW9uc2hpcCB0byBmb3JtIG5vZGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFZGl0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldCBhY2Nlc3MgdG8gcGFyZW50IG9iamVjdCdzIGZpZWxkc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzY2hlbWFDaGFuZ2UgIHNpZ25hbCBhIGNoYW5nZVxyXG4gICAgICogQHBhcmFtIG5hbWUgICAgICAgICAgdGhlIGN1cnJlbnQgcHJvcGVydHkgbmFtZSAoa2V5KVxyXG4gICAgICogQHBhcmFtIHNjaGVtYSAgICAgICAgdGhlIGN1cnJlbnQgc2NoZW1hXHJcbiAgICAgKiBAcGFyYW0gcGFyZW50ICAgICAgICB0aGUgcGFyZW50J3Mgc2NoZW1hIChyZXF1aXJlZCBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIG9yZGVyKVxyXG4gICAgICogQHBhcmFtIGRpYWxvZyAgICAgICAgZGlhbG9nIHNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBzY2hlbWFDaGFuZ2U6IEV2ZW50RW1pdHRlcjx2b2lkPiwgcHJpdmF0ZSBuYW1lOiBzdHJpbmcsIHByaXZhdGUgc2NoZW1hOiBTY2hlbWEsIHByaXZhdGUgcGFyZW50OiBTY2hlbWEsXHJcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2FuIGFkZCBpZiBhZGRhYmxlIGlzIG5vdCBlbXB0eVxyXG4gICAgICovXHJcbiAgICBjYW5BZGQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkYWJsZSgpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBnZXQgdGhlIGVudHJpZXMgaW4gXCJwcm9wZXJ0aWVzXCIgdGhhdCBhcmUgbm90IGluIFwib3JkZXJcIlxyXG4gICAgICovXHJcbiAgICBhZGRhYmxlKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgczogU2NoZW1hO1xyXG4gICAgICAgIGlmICh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHMgPSB0aGlzLnNjaGVtYTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2NoZW1hLml0ZW1zPy5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHMgPSB0aGlzLnNjaGVtYS5pdGVtcztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPy5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHMgPSB0aGlzLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzLm9yZGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBzLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcSBvZiBwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUocSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKHApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHNldCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGFkZCBhIGhpZGRlbiBwcm9wIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgYWRkU3ViKHByb3A6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYXJlbnQub3JkZXIuaW5kZXhPZih0aGlzLm5hbWUpO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm9yZGVyW2luZGV4XSA9IFsodGhpcy5wYXJlbnQub3JkZXJbaW5kZXhdIGFzIHN0cmluZyksIHByb3BdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnBhcmVudC5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocC5pbmRleE9mKHRoaXMubmFtZSkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwLnB1c2gocHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2NoZW1hQ2hhbmdlLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGNhbiBhZGQgaWYgYWRkYWJsZSBpcyBub3QgZW1wdHlcclxuICAgICAqL1xyXG4gICAgY2FuQWRkU3ViKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YmFkZGFibGUoKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0IHRoZSBlbnRyaWVzIGluIFwicHJvcGVydGllc1wiIHRoYXQgYXJlIG5vdCBpbiBcIm9yZGVyXCJcclxuICAgICAqL1xyXG4gICAgc3ViYWRkYWJsZSgpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Py5vcmRlcikge1xyXG4gICAgICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHRoaXMucGFyZW50LnByb3BlcnRpZXMpKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGFyZW50Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcSBvZiBwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUocSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKHApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHNldCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGFkZCBhIGhpZGRlbiBwcm9wIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgYWRkKHByb3A6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hLm9yZGVyLnB1c2gocHJvcCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNjaGVtYS5pdGVtcz8ucHJvcGVydGllcykge1xyXG4gICAgICAgICAgICB0aGlzLnNjaGVtYS5pdGVtcy5vcmRlci5wdXNoKHByb3ApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLm9yZGVyLnB1c2gocHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2NoZW1hQ2hhbmdlLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGVkaXQgc2ltcGxlIHNjaGVtYSBmaWVsZHMgbGlrZSB0aXRsZSBhbmQgZGVzY3JpcHRpb25cclxuICAgICAqL1xyXG4gICAgZWRpdCgpIHtcclxuICAgICAgICAvLyBkZWVwIGNsb25lIG9iamVjdCBzbyB3ZSBoYXZlIHRoZSBwb3NzaWJpbGl0eSB0byBjYW5jZWwgZWRpdGluZ1xyXG4gICAgICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNjaGVtYSkpO1xyXG5cclxuICAgICAgICAvLyBoYW5kbGUgKGFycmF5KSBleGFtcGxlXHJcbiAgICAgICAgaWYgKGNsb25lLml0ZW1zPy5leGFtcGxlcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjbG9uZS5leGFtcGxlID0gY2xvbmUuaXRlbXMuZXhhbXBsZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbG9uZS5leGFtcGxlcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjbG9uZS5leGFtcGxlID0gY2xvbmUuZXhhbXBsZXNbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0ZXh0IGlzIGRlZmF1bHRcclxuICAgICAgICBpZiAoIWNsb25lLndpZGdldCkge1xyXG4gICAgICAgICAgICBjbG9uZS53aWRnZXQgPSAndGV4dCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBob3Jpem9udGFsIGlzIGRlZmF1bHRcclxuICAgICAgICBpZiAoIWNsb25lLmxheW91dCkge1xyXG4gICAgICAgICAgICBjbG9uZS5sYXlvdXQgPSAnaG9yaXpvbnRhbCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhcnJheTogYXBwbHkgY2hvaWNlcyBhbmQgd2lkZ2V0IHRvIGl0ZW1zXHJcbiAgICAgICAgaWYgKGNsb25lLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIGNsb25lLndpZGdldCA9IGNsb25lLml0ZW1zLndpZGdldDtcclxuICAgICAgICAgICAgY2xvbmUuY2hvaWNlcyA9IGNsb25lLml0ZW1zLmNob2ljZXM7XHJcbiAgICAgICAgICAgIGNsb25lLmVycm9yTWVzc2FnZSA9IGNsb25lLml0ZW1zLmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgY2xvbmUuZm9ybWF0ID0gY2xvbmUuaXRlbXMuZm9ybWF0O1xyXG4gICAgICAgICAgICBjbG9uZS5yZXF1aXJlZCA9IGNsb25lLml0ZW1zLnJlcXVpcmVkO1xyXG4gICAgICAgICAgICBjbG9uZS5pdGVtbGF5b3V0ID0gY2xvbmUuaXRlbXMubGF5b3V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihFZGl0RWxlbWVudERpYWxvZ0NvbXBvbmVudCwgeyBtaW5XaWR0aDogJzUwJScsIGRhdGE6IGNsb25lIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLnRpdGxlID0gZGF0YS50aXRsZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLndpZGdldCA9IGRhdGEud2lkZ2V0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2hlbWEubGF5b3V0ID0gZGF0YS5sYXlvdXQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5yZWFkT25seSA9IGRhdGEucmVhZE9ubHk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5lcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmV4YW1wbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5pdGVtcy5leGFtcGxlcyA9IFtkYXRhLmV4YW1wbGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLmV4YW1wbGVzID0gW2RhdGEuZXhhbXBsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3R5bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5zdHlsZVsnJ107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdHlsZSAmJiBPYmplY3Qua2V5cyhkYXRhLnN0eWxlKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlbWEuc3R5bGUgPSBkYXRhLnN0eWxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuY2xhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmNsYXNzID0gZGF0YS5jbGFzcy5maWx0ZXIoZWwgPT4gZWwgIT0gbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5jbGFzcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLmNsYXNzID0gZGF0YS5jbGFzcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2hvaWNlcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5pdGVtcy5jaG9pY2VzID0gZGF0YS5jaG9pY2VzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5pdGVtcy53aWRnZXQgPSBkYXRhLndpZGdldDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5pdGVtcy5mb3JtYXQgPSBkYXRhLmZvcm1hdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5pdGVtcy5lcnJvck1lc3NhZ2UgPSBkYXRhLmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5pdGVtcy5yZXF1aXJlZCA9IGRhdGEucmVxdWlyZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlbWEuaXRlbXMubGF5b3V0ID0gZGF0YS5pdGVtbGF5b3V0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5jaG9pY2VzID0gZGF0YS5jaG9pY2VzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLndpZGdldCA9IGRhdGEud2lkZ2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLmZvcm1hdCA9IGRhdGEuZm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLmVycm9yTWVzc2FnZSA9IGRhdGEuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hLnJlcXVpcmVkID0gZGF0YS5yZXF1aXJlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hQ2hhbmdlLmVtaXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2FuIGhpZGUgaWYgSSBteSBwYXJlbnQgaXMgYW4gb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIGNhbkhpZGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB0aGlzIHByb3BcclxuICAgICAqL1xyXG4gICAgaGlkZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm9yZGVyID0gT2JqZWN0LmtleXModGhpcy5wYXJlbnQucHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGFyZW50Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHApKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocC5pbmRleE9mKHRoaXMubmFtZSkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHAuc3BsaWNlKHAuaW5kZXhPZih0aGlzLm5hbWUpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQub3JkZXJbaW5kZXhdID0gcFswXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Lm9yZGVyLmluZGV4T2YodGhpcy5uYW1lKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm9yZGVyLnNwbGljZSh0aGlzLnBhcmVudC5vcmRlci5pbmRleE9mKHRoaXMubmFtZSksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjaGVtYUNoYW5nZS5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBjYW4gSSBnbyB1cFxyXG4gICAgICovXHJcbiAgICBjYW5VcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnBhcmVudC5vcmRlciA/IHRoaXMucGFyZW50Lm9yZGVyIDogT2JqZWN0LmtleXModGhpcy5wYXJlbnQucHJvcGVydGllcyk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBwcm9wcy5pbmRleE9mKHRoaXMubmFtZSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ID4gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAuaW5kZXhPZih0aGlzLm5hbWUpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAuaW5kZXhPZih0aGlzLm5hbWUpID4gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBnbyB1cFxyXG4gICAgICovXHJcbiAgICB1cCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm9yZGVyID0gT2JqZWN0LmtleXModGhpcy5wYXJlbnQucHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMucGFyZW50Lm9yZGVyLmluZGV4T2YodGhpcy5uYW1lKTtcclxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnBhcmVudC5vcmRlcltpbmRleCAtIDFdO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vcmRlcltpbmRleCAtIDFdID0gdGhpcy5wYXJlbnQub3JkZXJbaW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vcmRlcltpbmRleF0gPSB0bXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGFyZW50Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcC5pbmRleE9mKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wID0gcFtpbmRleCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwW2luZGV4IC0gMV0gPSBwW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcFtpbmRleF0gPSB0bXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2NoZW1hQ2hhbmdlLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGNhbiBJIGdvIGRvd25cclxuICAgICAqL1xyXG4gICAgY2FuRG93bigpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnBhcmVudC5vcmRlciA/IHRoaXMucGFyZW50Lm9yZGVyIDogT2JqZWN0LmtleXModGhpcy5wYXJlbnQucHJvcGVydGllcyk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBwcm9wcy5pbmRleE9mKHRoaXMubmFtZSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgcHJvcHMubGVuZ3RoIC0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAuaW5kZXhPZih0aGlzLm5hbWUpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAuaW5kZXhPZih0aGlzLm5hbWUpIDwgcC5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdvIGRvd25cclxuICAgICAqL1xyXG4gICAgZG93bigpIHtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm9yZGVyID0gT2JqZWN0LmtleXModGhpcy5wYXJlbnQucHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMucGFyZW50Lm9yZGVyLmluZGV4T2YodGhpcy5uYW1lKTtcclxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnBhcmVudC5vcmRlcltpbmRleCArIDFdO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vcmRlcltpbmRleCArIDFdID0gdGhpcy5wYXJlbnQub3JkZXJbaW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vcmRlcltpbmRleF0gPSB0bXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGFyZW50Lm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcC5pbmRleE9mKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wID0gcFtpbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwW2luZGV4ICsgMV0gPSBwW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcFtpbmRleF0gPSB0bXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2NoZW1hQ2hhbmdlLmVtaXQoKTtcclxuICAgIH1cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/json-pointer.js b/dist/dashjoin/json-schema-form/esm2015/lib/json-pointer.js new file mode 100644 index 0000000..7076171 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/json-pointer.js @@ -0,0 +1,55 @@ +/** + * static JsonPointer implementation + */ +export class JsonPointer { + /** + * evaluate the JSON pointer on o + */ + static jsonPointer(o, pointer) { + return JsonPointer.jsonPointer2(o, JsonPointer.split(pointer)); + } + /** + * evaluate the JSON pointer (parsed array of paths) on o + */ + static jsonPointer2(o, paths) { + if (o === undefined) { + return undefined; + } + if (paths.length === 0) { + return o; + } + const path = paths[0]; + const np = Object.assign([], paths); + np.splice(0, 1); + if (paths[0] === '*') { + const res = []; + for (const f of (typeof (o) === 'object' ? Object.values(o) : o)) { + res.push(this.jsonPointer2(f, np)); + } + return res; + } + else { + return this.jsonPointer2(o[path], np); + } + } + /** + * strip leading / and split the JSON pointer + */ + static split(s) { + if (s === '') { + return []; + } + if (s.startsWith('/')) { + s = s.substring(1); + const arr = s.split('/'); + for (const a of arr) { + if (a === '') { + throw new Error('JSON Pointer must not contain an empty reference token'); + } + } + return arr; + } + throw new Error('JSON Pointer must start with /'); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1wb2ludGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGFzaGpvaW4vanNvbi1zY2hlbWEtZm9ybS9zcmMvbGliL2pzb24tcG9pbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBRXBCOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFNLEVBQUUsT0FBZTtRQUN0QyxPQUFPLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQU0sRUFBRSxLQUFlO1FBRXZDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNqQixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbEIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2YsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM5RCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEM7WUFDRCxPQUFPLEdBQUcsQ0FBQztTQUNkO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFTO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztpQkFDN0U7YUFDSjtZQUNELE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIHN0YXRpYyBKc29uUG9pbnRlciBpbXBsZW1lbnRhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEpzb25Qb2ludGVyIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGV2YWx1YXRlIHRoZSBKU09OIHBvaW50ZXIgb24gb1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMganNvblBvaW50ZXIobzogYW55LCBwb2ludGVyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBKc29uUG9pbnRlci5qc29uUG9pbnRlcjIobywgSnNvblBvaW50ZXIuc3BsaXQocG9pbnRlcikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZXZhbHVhdGUgdGhlIEpTT04gcG9pbnRlciAocGFyc2VkIGFycmF5IG9mIHBhdGhzKSBvbiBvXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBqc29uUG9pbnRlcjIobzogYW55LCBwYXRoczogc3RyaW5nW10pOiBhbnkge1xyXG5cclxuICAgICAgICBpZiAobyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGF0aHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHBhdGhzWzBdO1xyXG4gICAgICAgIGNvbnN0IG5wID0gT2JqZWN0LmFzc2lnbihbXSwgcGF0aHMpO1xyXG4gICAgICAgIG5wLnNwbGljZSgwLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBhdGhzWzBdID09PSAnKicpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiAodHlwZW9mIChvKSA9PT0gJ29iamVjdCcgPyBPYmplY3QudmFsdWVzKG8pIDogbykpIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMuanNvblBvaW50ZXIyKGYsIG5wKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5qc29uUG9pbnRlcjIob1twYXRoXSwgbnApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHN0cmlwIGxlYWRpbmcgLyBhbmQgc3BsaXQgdGhlIEpTT04gcG9pbnRlclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc3BsaXQoczogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGlmIChzID09PSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzLnN0YXJ0c1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHMuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBhIG9mIGFycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGEgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OIFBvaW50ZXIgbXVzdCBub3QgY29udGFpbiBhbiBlbXB0eSByZWZlcmVuY2UgdG9rZW4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04gUG9pbnRlciBtdXN0IHN0YXJ0IHdpdGggLycpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.component.js b/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.component.js new file mode 100644 index 0000000..80fa6c8 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.component.js @@ -0,0 +1,1920 @@ +import { Component, Input, Output, EventEmitter, ViewChild, ViewChildren, } from "@angular/core"; +import { MatSelectChange } from "@angular/material/select"; +import { MatDatepickerInputEvent } from "@angular/material/datepicker"; +import { MatCheckboxChange } from "@angular/material/checkbox"; +import { forkJoin, ReplaySubject } from "rxjs"; +import { WidgetDirective } from "./widget.directive"; +import { MatAutocompleteSelectedEvent } from "@angular/material/autocomplete"; +import { JsonPointer } from "./json-pointer"; +import { DefaultChoiceHandler } from "./choice"; +import { FormControl } from "@angular/forms"; +import { debounceTime, startWith, switchMap } from "rxjs/operators"; +import { Edit } from "./edit"; +import { moveItemInArray } from "@angular/cdk/drag-drop"; +import { COMMA, ENTER, TAB } from "@angular/cdk/keycodes"; +import jsonata from "jsonata"; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/common/http"; +import * as i2 from "./json-schema-form.service"; +import * as i3 from "@angular/material/dialog"; +import * as i4 from "@angular/common"; +import * as i5 from "./widget.directive"; +import * as i6 from "@angular/material/expansion"; +import * as i7 from "@angular/flex-layout/extended"; +import * as i8 from "@angular/material/tooltip"; +import * as i9 from "@angular/material/icon"; +import * as i10 from "@angular/material/menu"; +import * as i11 from "@angular/flex-layout/flex"; +import * as i12 from "@angular/material/button"; +import * as i13 from "@angular/material/checkbox"; +import * as i14 from "@angular/material/form-field"; +import * as i15 from "@angular/material/input"; +import * as i16 from "@angular/material/tabs"; +import * as i17 from "@angular/material/chips"; +import * as i18 from "@angular/cdk/drag-drop"; +import * as i19 from "@angular/material/select"; +import * as i20 from "@angular/material/core"; +import * as i21 from "@angular/material/datepicker"; +import * as i22 from "@angular/forms"; +import * as i23 from "@angular/material/autocomplete"; +const _c0 = ["child"]; +const _c1 = ["children"]; +function JsonSchemaFormComponent_mat_expansion_panel_0_Template(rf, ctx) { if (rf & 1) { + const _r5 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-expansion-panel", 3); + i0.ɵɵelementStart(1, "mat-expansion-panel-header"); + i0.ɵɵelementStart(2, "mat-panel-title"); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "mat-panel-description"); + i0.ɵɵtext(5); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(6, "lib-json-schema-form", 4, 5); + i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_mat_expansion_panel_0_Template_lib_json_schema_form_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.setAndEmit($event); })("schemaChange", function JsonSchemaFormComponent_mat_expansion_panel_0_Template_lib_json_schema_form_schemaChange_6_listener() { i0.ɵɵrestoreView(_r5); const ctx_r6 = i0.ɵɵnextContext(); return ctx_r6.schemaChange.emit(); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r0 = i0.ɵɵnextContext(); + i0.ɵɵproperty("ngStyle", ctx_r0.schema.style)("ngClass", ctx_r0.schema.class)("expanded", ctx_r0.schema.expanded); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate(ctx_r0.label); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r0.schema.description); + i0.ɵɵadvance(1); + i0.ɵɵproperty("label", ctx_r0.label)("name", ctx_r0.name)("value", ctx_r0.value)("switch", ctx_r0.switch)("rootValue", ctx_r0.rootValue)("rootSchema", ctx_r0.rootSchema)("schema", ctx_r0.schema)("inExpansion", true)("base", ctx_r0.base); +} } +function JsonSchemaFormComponent_div_1_div_1_button_31_Template(rf, ctx) { if (rf & 1) { + const _r30 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 14); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_button_31_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r30); const x_r28 = ctx.$implicit; const ctx_r29 = i0.ɵɵnextContext(3); return ctx_r29.edit.add(x_r28); }); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r28 = ctx.$implicit; + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate(x_r28); +} } +function JsonSchemaFormComponent_div_1_div_1_button_34_Template(rf, ctx) { if (rf & 1) { + const _r33 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 14); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_button_34_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r33); const x_r31 = ctx.$implicit; const ctx_r32 = i0.ɵɵnextContext(3); return ctx_r32.edit.addSub(x_r31); }); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r31 = ctx.$implicit; + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate(x_r31); +} } +function JsonSchemaFormComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) { + const _r35 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mat-icon", 12); + i0.ɵɵtext(2, " more_vert "); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(3, "mat-menu", null, 13); + i0.ɵɵelementStart(5, "button", 14); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r35); const ctx_r34 = i0.ɵɵnextContext(2); return ctx_r34.edit.edit(); }); + i0.ɵɵelementStart(6, "mat-icon"); + i0.ɵɵtext(7, "edit"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(8, "Edit "); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(9, "button", 15); + i0.ɵɵelementStart(10, "mat-icon"); + i0.ɵɵtext(11, "add"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(12, "Show "); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(13, "button", 15); + i0.ɵɵelementStart(14, "mat-icon"); + i0.ɵɵtext(15, "playlist_add"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(16, "Show inline "); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(17, "button", 16); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r35); const ctx_r36 = i0.ɵɵnextContext(2); return ctx_r36.edit.hide(); }); + i0.ɵɵelementStart(18, "mat-icon"); + i0.ɵɵtext(19, "remove"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(20, "Hide "); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(21, "button", 16); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r35); const ctx_r37 = i0.ɵɵnextContext(2); return ctx_r37.edit.up(); }); + i0.ɵɵelementStart(22, "mat-icon"); + i0.ɵɵtext(23, "north_west"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(24, "Up / Left "); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(25, "button", 16); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r35); const ctx_r38 = i0.ɵɵnextContext(2); return ctx_r38.edit.down(); }); + i0.ɵɵelementStart(26, "mat-icon"); + i0.ɵɵtext(27, "south_east"); + i0.ɵɵelementEnd(); + i0.ɵɵtext(28, "Down / Right "); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(29, "mat-menu", null, 17); + i0.ɵɵtemplate(31, JsonSchemaFormComponent_div_1_div_1_button_31_Template, 2, 1, "button", 18); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(32, "mat-menu", null, 19); + i0.ɵɵtemplate(34, JsonSchemaFormComponent_div_1_div_1_button_34_Template, 2, 1, "button", 18); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const _r23 = i0.ɵɵreference(4); + const _r24 = i0.ɵɵreference(30); + const _r26 = i0.ɵɵreference(33); + const ctx_r7 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("matMenuTriggerFor", _r23)("matTooltip", ctx_r7.name ? "Form element " + ctx_r7.name : ctx_r7.isRoot ? "Form root" : ""); + i0.ɵɵadvance(8); + i0.ɵɵproperty("disabled", !ctx_r7.edit.canAdd())("matMenuTriggerFor", _r24); + i0.ɵɵadvance(4); + i0.ɵɵproperty("disabled", !ctx_r7.edit.canAddSub())("matMenuTriggerFor", _r26); + i0.ɵɵadvance(4); + i0.ɵɵproperty("disabled", !ctx_r7.edit.canHide()); + i0.ɵɵadvance(4); + i0.ɵɵproperty("disabled", !ctx_r7.edit.canUp()); + i0.ɵɵadvance(4); + i0.ɵɵproperty("disabled", !ctx_r7.edit.canDown()); + i0.ɵɵadvance(6); + i0.ɵɵproperty("ngForOf", ctx_r7.edit.addable()); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngForOf", ctx_r7.edit.subaddable()); +} } +function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template(rf, ctx) { if (rf & 1) { + const _r48 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "lib-json-schema-form", 26, 27); + i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r48); const x_r43 = i0.ɵɵnextContext().$implicit; const ctx_r46 = i0.ɵɵnextContext(4); return ctx_r46.onValueChange(x_r43.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r48); const ctx_r49 = i0.ɵɵnextContext(5); return ctx_r49.schemaChange.emit(); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r43 = i0.ɵɵnextContext().$implicit; + const ctx_r44 = i0.ɵɵnextContext(4); + i0.ɵɵadvance(1); + i0.ɵɵproperty("name", x_r43.key)("label", x_r43.value.title ? x_r43.value.title : x_r43.key)("value", ctx_r44.value ? ctx_r44.value[x_r43.key] : undefined)("switch", ctx_r44.value ? ctx_r44.value[ctx_r44.schema.switch] : undefined)("rootValue", ctx_r44.rootValue)("rootSchema", ctx_r44.rootSchema)("schema", x_r43.value)("parentSchema", ctx_r44.schema)("required", ctx_r44.schema.required ? ctx_r44.schema.required.includes(x_r43.key) : false)("hideUndefined", ctx_r44.schema.hideUndefined)("base", ctx_r44.base); +} } +function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 25); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template, 3, 11, "div", 7); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r43 = ctx.$implicit; + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", x_r43.value && (x_r43.value.type || x_r43.value.$ref)); +} } +function JsonSchemaFormComponent_div_1_span_2_div_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 23); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_div_1_Template, 2, 1, "div", 24); + i0.ɵɵpipe(2, "keyvalue"); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const op_r41 = ctx.$implicit; + const ctx_r39 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("fxLayout", ctx_r39.schema.layout !== "vertical" ? "column" : "row wrap"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 2, op_r41, ctx_r39.originalOrder)); +} } +function JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template(rf, ctx) { if (rf & 1) { + const _r55 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mat-checkbox", 31); + i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template_mat_checkbox_change_1_listener() { i0.ɵɵrestoreView(_r55); const x_r53 = ctx.$implicit; const ctx_r54 = i0.ɵɵnextContext(4); return ctx_r54.showProperty(x_r53); }); + i0.ɵɵtext(2); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r53 = ctx.$implicit; + const ctx_r52 = i0.ɵɵnextContext(4); + i0.ɵɵadvance(1); + i0.ɵɵproperty("disabled", ctx_r52.value ? ctx_r52.value[x_r53] : false)("checked", ctx_r52.value && ctx_r52.value[x_r53] !== undefined); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", x_r53, " "); +} } +function JsonSchemaFormComponent_div_1_span_2_div_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 28); + i0.ɵɵelementStart(1, "button", 29); + i0.ɵɵelementStart(2, "mat-icon"); + i0.ɵɵtext(3, "more_vert"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "mat-menu", null, 13); + i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template, 3, 3, "div", 30); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const _r51 = i0.ɵɵreference(5); + const ctx_r40 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(1); + i0.ɵɵproperty("matMenuTriggerFor", _r51); + i0.ɵɵadvance(5); + i0.ɵɵproperty("ngForOf", ctx_r40.showPropertyList()); +} } +function JsonSchemaFormComponent_div_1_span_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "span", 20); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_Template, 3, 5, "div", 21); + i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_2_div_2_Template, 7, 2, "div", 22); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r8 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("fxLayout", ctx_r8.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r8.schema.style)("ngClass", ctx_r8.schema.class); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", ctx_r8.orderedProperties); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r8.schema.hideUndefined); +} } +function JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template(rf, ctx) { if (rf & 1) { + const _r64 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 38); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r64); const x_r58 = i0.ɵɵnextContext().$implicit; const ctx_r62 = i0.ɵɵnextContext(3); return ctx_r62.removeField(x_r58.key); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "remove_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r61 = i0.ɵɵnextContext(4); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r61.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_3_div_1_Template(rf, ctx) { if (rf & 1) { + const _r66 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵlistener("mouseenter", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_div_mouseenter_0_listener() { i0.ɵɵrestoreView(_r66); const i_r59 = ctx.index; const ctx_r65 = i0.ɵɵnextContext(3); return ctx_r65.hover = i_r59; })("mouseleave", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_div_mouseleave_0_listener() { i0.ɵɵrestoreView(_r66); const ctx_r67 = i0.ɵɵnextContext(3); return ctx_r67.hover = null; }); + i0.ɵɵelementStart(1, "mat-form-field"); + i0.ɵɵelementStart(2, "mat-label"); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "input", 35); + i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r66); const x_r58 = ctx.$implicit; const ctx_r68 = i0.ɵɵnextContext(3); return ctx_r68.fieldNameChange(x_r58.key, $event.target.value); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵtext(5, " \u00A0 "); + i0.ɵɵelementStart(6, "lib-json-schema-form", 36, 27); + i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_lib_json_schema_form_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r66); const x_r58 = ctx.$implicit; const ctx_r69 = i0.ɵɵnextContext(3); return ctx_r69.onValueChange(x_r58.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_lib_json_schema_form_schemaChange_6_listener() { i0.ɵɵrestoreView(_r66); const ctx_r70 = i0.ɵɵnextContext(3); return ctx_r70.schemaChange.emit(); }); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(8, JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template, 3, 1, "button", 37); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r58 = ctx.$implicit; + const ctx_r56 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate1("", ctx_r56.getLabel(), " key"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("disabled", ctx_r56.readOnly)("value", x_r58.key); + i0.ɵɵadvance(2); + i0.ɵɵproperty("label", ctx_r56.getLabel() + " value")("value", ctx_r56.value[x_r58.key])("rootValue", ctx_r56.rootValue)("rootSchema", ctx_r56.rootSchema)("schema", ctx_r56.schema.additionalProperties)("base", ctx_r56.base); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r56.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_3_button_3_Template(rf, ctx) { if (rf & 1) { + const _r72 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 39); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_3_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r72); const ctx_r71 = i0.ɵɵnextContext(3); return ctx_r71.addField(); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "add_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r57 = i0.ɵɵnextContext(3); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r57.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_3_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "span", 20); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_3_div_1_Template, 9, 10, "div", 32); + i0.ɵɵpipe(2, "keyvalue"); + i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_3_button_3_Template, 3, 1, "button", 33); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r9 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("fxLayout", ctx_r9.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r9.schema.style)("ngClass", ctx_r9.schema.class); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 5, ctx_r9.value, ctx_r9.originalOrder)); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r9.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template(rf, ctx) { if (rf & 1) { + const _r84 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-form-field"); + i0.ɵɵelementStart(1, "input", 45); + i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r84); const x_r75 = i0.ɵɵnextContext(2).$implicit; const ctx_r82 = i0.ɵɵnextContext(3); return ctx_r82.fieldNameChange(x_r75.key, $event.target.value); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r75 = i0.ɵɵnextContext(2).$implicit; + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", x_r75.key); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_span_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "span"); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r75 = i0.ɵɵnextContext(2).$implicit; + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate(x_r75.key); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵtemplate(0, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template, 2, 1, "mat-form-field", 7); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_span_1_Template, 2, 1, "span", 7); +} if (rf & 2) { + const ctx_r77 = i0.ɵɵnextContext(4); + i0.ɵɵproperty("ngIf", !ctx_r77.readOnly); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r77.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template(rf, ctx) { if (rf & 1) { + const _r89 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 38); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r89); const x_r75 = i0.ɵɵnextContext().$implicit; const ctx_r87 = i0.ɵɵnextContext(3); return ctx_r87.removeField(x_r75.key); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "remove_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r79 = i0.ɵɵnextContext(4); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r79.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template(rf, ctx) { if (rf & 1) { + const _r91 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-tab", 42); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_Template, 2, 2, "ng-template", 43); + i0.ɵɵelementStart(2, "lib-json-schema-form", 44, 27); + i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template_lib_json_schema_form_valueChange_2_listener($event) { i0.ɵɵrestoreView(_r91); const x_r75 = ctx.$implicit; const ctx_r90 = i0.ɵɵnextContext(3); return ctx_r90.onValueChange(x_r75.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template_lib_json_schema_form_schemaChange_2_listener() { i0.ɵɵrestoreView(_r91); const ctx_r92 = i0.ɵɵnextContext(3); return ctx_r92.schemaChange.emit(); }); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template, 3, 1, "button", 37); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r75 = ctx.$implicit; + const ctx_r73 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(2); + i0.ɵɵproperty("value", ctx_r73.value[x_r75.key])("rootValue", ctx_r73.rootValue)("rootSchema", ctx_r73.rootSchema)("schema", ctx_r73.schema.additionalProperties)("base", ctx_r73.base); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r73.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template(rf, ctx) { if (rf & 1) { + const _r95 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 39); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r95); const ctx_r94 = i0.ɵɵnextContext(4); return ctx_r94.addField(); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "add_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r93 = i0.ɵɵnextContext(4); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r93.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-tab"); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template, 3, 1, "ng-template", 43); + i0.ɵɵelementEnd(); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-tab-group", 40); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template, 5, 6, "mat-tab", 41); + i0.ɵɵpipe(2, "keyvalue"); + i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_Template, 2, 0, "mat-tab", 7); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r10 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngStyle", ctx_r10.schema.style)("ngClass", ctx_r10.schema.class); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 4, ctx_r10.value, ctx_r10.originalOrder)); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r10.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template(rf, ctx) { if (rf & 1) { + const _r104 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 38); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r104); const i_r99 = i0.ɵɵnextContext().index; const ctx_r102 = i0.ɵɵnextContext(3); return ctx_r102.remove(i_r99); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "remove_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r101 = i0.ɵɵnextContext(4); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r101.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_5_div_1_Template(rf, ctx) { if (rf & 1) { + const _r106 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 34); + i0.ɵɵlistener("mouseenter", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_div_mouseenter_0_listener() { i0.ɵɵrestoreView(_r106); const i_r99 = ctx.index; const ctx_r105 = i0.ɵɵnextContext(3); return ctx_r105.hover = i_r99; })("mouseleave", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_div_mouseleave_0_listener() { i0.ɵɵrestoreView(_r106); const ctx_r107 = i0.ɵɵnextContext(3); return ctx_r107.hover = null; }); + i0.ɵɵelementStart(1, "lib-json-schema-form", 36, 27); + i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r106); const i_r99 = ctx.index; const ctx_r108 = i0.ɵɵnextContext(3); return ctx_r108.setIndexAndEmit(i_r99, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r106); const ctx_r109 = i0.ɵɵnextContext(3); return ctx_r109.schemaChange.emit(); }); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template, 3, 1, "button", 37); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const i_r99 = ctx.index; + const ctx_r96 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(1); + i0.ɵɵproperty("label", ctx_r96.getLabel())("value", ctx_r96.value[i_r99])("rootValue", ctx_r96.rootValue)("rootSchema", ctx_r96.rootSchema)("schema", ctx_r96.schema.items)("base", ctx_r96.base); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r96.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_5_button_2_Template(rf, ctx) { if (rf & 1) { + const _r111 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 39); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_5_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r111); const ctx_r110 = i0.ɵɵnextContext(3); return ctx_r110.add(); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "add_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r97 = i0.ɵɵnextContext(3); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r97.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_5_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "span", 20); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_5_div_1_Template, 4, 7, "div", 32); + i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_5_button_2_Template, 3, 1, "button", 33); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r11 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("fxLayout", ctx_r11.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r11.schema.style)("ngClass", ctx_r11.schema.class); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", ctx_r11.value); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r11.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template(rf, ctx) { if (rf & 1) { + const _r116 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-chip", 51); + i0.ɵɵlistener("removed", function JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template_mat_chip_removed_0_listener() { i0.ɵɵrestoreView(_r116); const v_r114 = ctx.$implicit; const ctx_r115 = i0.ɵɵnextContext(3); return ctx_r115.removeChip(v_r114); }); + i0.ɵɵtext(1); + i0.ɵɵelementStart(2, "mat-icon", 52); + i0.ɵɵtext(3, "cancel"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const v_r114 = ctx.$implicit; + const ctx_r113 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("removable", !ctx_r113.readOnly); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", v_r114, " "); +} } +function JsonSchemaFormComponent_div_1_span_6_Template(rf, ctx) { if (rf & 1) { + const _r118 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "span"); + i0.ɵɵelementStart(1, "mat-form-field", 46); + i0.ɵɵelementStart(2, "mat-chip-list", 47, 48); + i0.ɵɵlistener("cdkDropListDropped", function JsonSchemaFormComponent_div_1_span_6_Template_mat_chip_list_cdkDropListDropped_2_listener($event) { i0.ɵɵrestoreView(_r118); const ctx_r117 = i0.ɵɵnextContext(2); return ctx_r117.dropChip($event); }); + i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template, 4, 2, "mat-chip", 49); + i0.ɵɵelementStart(5, "input", 50); + i0.ɵɵlistener("matChipInputTokenEnd", function JsonSchemaFormComponent_div_1_span_6_Template_input_matChipInputTokenEnd_5_listener($event) { i0.ɵɵrestoreView(_r118); const ctx_r119 = i0.ɵɵnextContext(2); return ctx_r119.addChip($event); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const _r112 = i0.ɵɵreference(3); + const ctx_r12 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngStyle", ctx_r12.schema.style)("ngClass", ctx_r12.schema.class); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngForOf", ctx_r12.value); + i0.ɵɵadvance(1); + i0.ɵɵproperty("placeholder", ctx_r12.schema.title)("matChipInputFor", _r112)("matChipInputSeparatorKeyCodes", ctx_r12.separatorKeysCodes)("disabled", ctx_r12.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template(rf, ctx) { if (rf & 1) { + const _r128 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 38); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r128); const i_r123 = i0.ɵɵnextContext().index; const ctx_r126 = i0.ɵɵnextContext(3); return ctx_r126.remove(i_r123); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "remove_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r125 = i0.ɵɵnextContext(4); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r125.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template(rf, ctx) { if (rf & 1) { + const _r130 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-tab", 54); + i0.ɵɵelementStart(1, "lib-json-schema-form", 44, 27); + i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r130); const i_r123 = ctx.index; const ctx_r129 = i0.ɵɵnextContext(3); return ctx_r129.setIndexAndEmit(i_r123, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r130); const ctx_r131 = i0.ɵɵnextContext(3); return ctx_r131.schemaChange.emit(); }); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template, 3, 1, "button", 37); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const i_r123 = ctx.index; + const ctx_r120 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("label", ctx_r120.getLabel() + " " + i_r123); + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", ctx_r120.value[i_r123])("rootValue", ctx_r120.rootValue)("rootSchema", ctx_r120.rootSchema)("schema", ctx_r120.schema.items)("base", ctx_r120.base); + i0.ɵɵadvance(2); + i0.ɵɵproperty("ngIf", !ctx_r120.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template(rf, ctx) { if (rf & 1) { + const _r134 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 39); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r134); const ctx_r133 = i0.ɵɵnextContext(4); return ctx_r133.add(); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "add_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r132 = i0.ɵɵnextContext(4); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r132.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-tab"); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template, 3, 1, "ng-template", 43); + i0.ɵɵelementEnd(); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-tab-group", 40); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template, 4, 7, "mat-tab", 53); + i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_Template, 2, 0, "mat-tab", 7); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r13 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngStyle", ctx_r13.schema.style)("ngClass", ctx_r13.schema.class); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", ctx_r13.value); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r13.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_8_th_3_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "th", 58); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r138 = ctx.$implicit; + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", x_r138.value.title ? x_r138.value.title : x_r138.key, ""); +} } +function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template(rf, ctx) { if (rf & 1) { + const _r147 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "td"); + i0.ɵɵelementStart(1, "lib-json-schema-form", 59, 27); + i0.ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template_lib_json_schema_form_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r147); const x_r143 = ctx.$implicit; const i_r140 = i0.ɵɵnextContext().index; const ctx_r145 = i0.ɵɵnextContext(3); return ctx_r145.setIndexAndEmitTable(i_r140, x_r143.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template_lib_json_schema_form_schemaChange_1_listener() { i0.ɵɵrestoreView(_r147); const ctx_r148 = i0.ɵɵnextContext(4); return ctx_r148.schemaChange.emit(); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r143 = ctx.$implicit; + const row_r139 = i0.ɵɵnextContext().$implicit; + const ctx_r141 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", row_r139[x_r143.key])("rootValue", ctx_r141.rootValue)("rootSchema", ctx_r141.rootSchema)("schema", ctx_r141.schema.items.properties[x_r143.key])("base", ctx_r141.base); +} } +function JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template(rf, ctx) { if (rf & 1) { + const _r152 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 39); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r152); const i_r140 = i0.ɵɵnextContext().index; const ctx_r150 = i0.ɵɵnextContext(3); return ctx_r150.remove(i_r140); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "remove_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r142 = i0.ɵɵnextContext(4); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r142.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_8_tr_6_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "tr"); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template, 3, 5, "td", 30); + i0.ɵɵpipe(2, "keyvalue"); + i0.ɵɵelementStart(3, "td"); + i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template, 3, 1, "button", 33); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r136 = i0.ɵɵnextContext(3); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 2, ctx_r136.schema.items.properties, ctx_r136.originalOrder)); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngIf", !ctx_r136.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_8_button_7_Template(rf, ctx) { if (rf & 1) { + const _r154 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "button", 39); + i0.ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_8_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r154); const ctx_r153 = i0.ɵɵnextContext(3); return ctx_r153.add(); }); + i0.ɵɵelementStart(1, "mat-icon"); + i0.ɵɵtext(2, "add_circle_outline"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r137 = i0.ɵɵnextContext(3); + i0.ɵɵpropertyInterpolate("matTooltip", ctx_r137.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_8_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "span", 46); + i0.ɵɵelementStart(1, "table", 55); + i0.ɵɵelementStart(2, "tr"); + i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_8_th_3_Template, 2, 1, "th", 56); + i0.ɵɵpipe(4, "keyvalue"); + i0.ɵɵelement(5, "th", 57); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_8_tr_6_Template, 5, 5, "tr", 30); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(7, JsonSchemaFormComponent_div_1_span_8_button_7_Template, 3, 1, "button", 33); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r14 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngStyle", ctx_r14.schema.style)("ngClass", ctx_r14.schema.class); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(4, 5, ctx_r14.schema.items.properties, ctx_r14.originalOrder)); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngForOf", ctx_r14.value); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r14.readOnly); +} } +function JsonSchemaFormComponent_div_1_div_9_mat_option_5_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-option", 63); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const x_r156 = ctx.$implicit; + i0.ɵɵproperty("value", x_r156); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate(x_r156); +} } +function JsonSchemaFormComponent_div_1_div_9_Template(rf, ctx) { if (rf & 1) { + const _r158 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mat-form-field", 46); + i0.ɵɵelementStart(2, "mat-label"); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "mat-select", 60); + i0.ɵɵlistener("selectionChange", function JsonSchemaFormComponent_div_1_div_9_Template_mat_select_selectionChange_4_listener($event) { i0.ɵɵrestoreView(_r158); const ctx_r157 = i0.ɵɵnextContext(2); return ctx_r157.change($event); }); + i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_9_mat_option_5_Template, 2, 2, "mat-option", 61); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(6, "p", 62); + i0.ɵɵtext(7); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r15 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngStyle", ctx_r15.schema.style)("ngClass", ctx_r15.schema.class); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r15.label); + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", ctx_r15.value)("disabled", ctx_r15.readOnly); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", ctx_r15.schema.enum); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r15.error()); +} } +function JsonSchemaFormComponent_div_1_div_10_mat_option_5_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-option", 67); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const choice_r160 = ctx.$implicit; + i0.ɵɵproperty("value", choice_r160.value)("matTooltip", choice_r160.name !== choice_r160.value ? choice_r160.value : null); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", choice_r160.name, " "); +} } +function JsonSchemaFormComponent_div_1_div_10_Template(rf, ctx) { if (rf & 1) { + const _r162 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mat-form-field", 64); + i0.ɵɵelementStart(2, "mat-label"); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "mat-select", 65); + i0.ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_10_Template_mat_select_focus_4_listener() { i0.ɵɵrestoreView(_r162); const ctx_r161 = i0.ɵɵnextContext(2); return ctx_r161.focus(); })("selectionChange", function JsonSchemaFormComponent_div_1_div_10_Template_mat_select_selectionChange_4_listener($event) { i0.ɵɵrestoreView(_r162); const ctx_r163 = i0.ɵɵnextContext(2); return ctx_r163.change($event); }); + i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_10_mat_option_5_Template, 2, 3, "mat-option", 66); + i0.ɵɵpipe(6, "async"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(7, "p", 62); + i0.ɵɵtext(8); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r16 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("matTooltip", ctx_r16.schema.description)("ngStyle", ctx_r16.schema.style)("ngClass", ctx_r16.schema.class); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r16.label); + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", ctx_r16.value)("disabled", ctx_r16.readOnly); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(6, 8, ctx_r16.choices)); + i0.ɵɵadvance(3); + i0.ɵɵtextInterpolate(ctx_r16.error()); +} } +function JsonSchemaFormComponent_div_1_div_11_Template(rf, ctx) { if (rf & 1) { + const _r166 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mat-form-field", 46); + i0.ɵɵelementStart(2, "mat-label"); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "input", 68); + i0.ɵɵlistener("dateChange", function JsonSchemaFormComponent_div_1_div_11_Template_input_dateChange_4_listener($event) { i0.ɵɵrestoreView(_r166); const ctx_r165 = i0.ɵɵnextContext(2); return ctx_r165.change($event); }); + i0.ɵɵelementEnd(); + i0.ɵɵelement(5, "mat-datepicker-toggle", 69); + i0.ɵɵelement(6, "mat-datepicker", null, 70); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(8, "p", 62); + i0.ɵɵtext(9); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const _r164 = i0.ɵɵreference(7); + const ctx_r17 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngStyle", ctx_r17.schema.style)("ngClass", ctx_r17.schema.class); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r17.label); + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", ctx_r17.parseDate(ctx_r17.value, ctx_r17.schema.dateFormat))("matDatepicker", _r164)("disabled", ctx_r17.readOnly); + i0.ɵɵadvance(1); + i0.ɵɵproperty("for", _r164); + i0.ɵɵadvance(4); + i0.ɵɵtextInterpolate(ctx_r17.error()); +} } +function JsonSchemaFormComponent_div_1_div_12_Template(rf, ctx) { if (rf & 1) { + const _r168 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div", 71); + i0.ɵɵelementStart(1, "mat-checkbox", 72); + i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_12_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r168); const ctx_r167 = i0.ɵɵnextContext(2); return ctx_r167.change($event); }); + i0.ɵɵtext(2); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(3, "p", 62); + i0.ɵɵtext(4); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r18 = i0.ɵɵnextContext(2); + i0.ɵɵproperty("ngStyle", ctx_r18.schema.style)("ngClass", ctx_r18.schema.class); + i0.ɵɵadvance(1); + i0.ɵɵproperty("checked", ctx_r18.value)("disabled", ctx_r18.readOnly); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", ctx_r18.label, ""); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r18.error()); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_mat_option_4_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-option", 67); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const choice_r172 = ctx.$implicit; + i0.ɵɵproperty("value", choice_r172.value)("matTooltip", choice_r172.name !== choice_r172.value ? choice_r172.value : null); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", choice_r172.name, " "); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template(rf, ctx) { if (rf & 1) { + const _r174 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-form-field", 46); + i0.ɵɵelementStart(1, "mat-label"); + i0.ɵɵtext(2); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(3, "mat-select", 73); + i0.ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template_mat_select_focus_3_listener() { i0.ɵɵrestoreView(_r174); const ctx_r173 = i0.ɵɵnextContext(3); return ctx_r173.focus(); })("selectionChange", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template_mat_select_selectionChange_3_listener($event) { i0.ɵɵrestoreView(_r174); const ctx_r175 = i0.ɵɵnextContext(3); return ctx_r175.change($event); }); + i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_mat_option_4_Template, 2, 3, "mat-option", 66); + i0.ɵɵpipe(5, "async"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r169 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("ngStyle", ctx_r169.schema.style)("ngClass", ctx_r169.schema.class); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r169.label); + i0.ɵɵadvance(1); + i0.ɵɵproperty("value", ctx_r169.value)("disabled", ctx_r169.readOnly); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(5, 6, ctx_r169.choices)); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_mat_option_6_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "mat-option", 67); + i0.ɵɵtext(1); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const choice_r178 = ctx.$implicit; + i0.ɵɵproperty("value", choice_r178.value)("matTooltip", choice_r178.name !== choice_r178.value ? choice_r178.value : null); + i0.ɵɵadvance(1); + i0.ɵɵtextInterpolate1(" ", choice_r178.name, " "); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template(rf, ctx) { if (rf & 1) { + const _r180 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "mat-form-field", 46); + i0.ɵɵelementStart(1, "mat-label"); + i0.ɵɵtext(2); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(3, "input", 74); + i0.ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template_input_focus_3_listener() { i0.ɵɵrestoreView(_r180); const ctx_r179 = i0.ɵɵnextContext(3); return ctx_r179.focus(); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(4, "mat-autocomplete", null, 75); + i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_mat_option_6_Template, 2, 3, "mat-option", 66); + i0.ɵɵpipe(7, "async"); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const _r176 = i0.ɵɵreference(5); + const ctx_r170 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("ngStyle", ctx_r170.schema.style)("ngClass", ctx_r170.schema.class); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r170.label); + i0.ɵɵadvance(1); + i0.ɵɵproperty("formControl", ctx_r170.control)("matAutocomplete", _r176); + i0.ɵɵadvance(3); + i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(7, 6, ctx_r170.filteredOptions)); +} } +function JsonSchemaFormComponent_div_1_div_13_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template, 6, 8, "mat-form-field", 10); + i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template, 8, 8, "mat-form-field", 10); + i0.ɵɵelementStart(3, "p", 62); + i0.ɵɵtext(4); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r19 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r19.schema.widget === "select"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r19.schema.widget !== "select"); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r19.error()); +} } +function JsonSchemaFormComponent_div_1_div_14_input_4_Template(rf, ctx) { if (rf & 1) { + const _r184 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "input", 78); + i0.ɵɵlistener("input", function JsonSchemaFormComponent_div_1_div_14_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r184); const ctx_r183 = i0.ɵɵnextContext(3); return ctx_r183.change($event); })("focus", function JsonSchemaFormComponent_div_1_div_14_input_4_Template_input_focus_0_listener() { i0.ɵɵrestoreView(_r184); const ctx_r185 = i0.ɵɵnextContext(3); return ctx_r185.getInputType(ctx_r185.schema) == "password" ? ctx_r185.value = "" : ""; }); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r181 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("disabled", ctx_r181.readOnly)("placeholder", ctx_r181.example())("type", ctx_r181.getInputType(ctx_r181.schema))("value", ctx_r181.value); +} } +function JsonSchemaFormComponent_div_1_div_14_input_5_Template(rf, ctx) { if (rf & 1) { + const _r187 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "input", 79); + i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_14_input_5_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r187); const ctx_r186 = i0.ɵɵnextContext(3); return ctx_r186.change($event); }); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r182 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("disabled", ctx_r182.readOnly)("placeholder", ctx_r182.example())("type", ctx_r182.getInputType(ctx_r182.schema))("value", ctx_r182.value); +} } +function JsonSchemaFormComponent_div_1_div_14_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mat-form-field", 46); + i0.ɵɵelementStart(2, "mat-label"); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_14_input_4_Template, 1, 4, "input", 76); + i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_14_input_5_Template, 1, 4, "input", 77); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(6, "p", 62); + i0.ɵɵtext(7); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r20 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngStyle", ctx_r20.schema.style)("ngClass", ctx_r20.schema.class); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r20.label); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r20.inArray); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r20.inArray); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r20.error()); +} } +function JsonSchemaFormComponent_div_1_div_15_textarea_4_Template(rf, ctx) { if (rf & 1) { + const _r191 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "textarea", 82); + i0.ɵɵlistener("input", function JsonSchemaFormComponent_div_1_div_15_textarea_4_Template_textarea_input_0_listener($event) { i0.ɵɵrestoreView(_r191); const ctx_r190 = i0.ɵɵnextContext(3); return ctx_r190.change($event); }); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r188 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("disabled", ctx_r188.readOnly)("placeholder", ctx_r188.example())("value", ctx_r188.value)("ngStyle", ctx_r188.schema.style)("ngClass", ctx_r188.schema.class); +} } +function JsonSchemaFormComponent_div_1_div_15_textarea_5_Template(rf, ctx) { if (rf & 1) { + const _r193 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "textarea", 83); + i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_15_textarea_5_Template_textarea_change_0_listener($event) { i0.ɵɵrestoreView(_r193); const ctx_r192 = i0.ɵɵnextContext(3); return ctx_r192.change($event); }); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r189 = i0.ɵɵnextContext(3); + i0.ɵɵproperty("disabled", ctx_r189.readOnly)("placeholder", ctx_r189.example())("value", ctx_r189.value)("ngStyle", ctx_r189.schema.style)("ngClass", ctx_r189.schema.class); +} } +function JsonSchemaFormComponent_div_1_div_15_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "mat-form-field", 46); + i0.ɵɵelementStart(2, "mat-label"); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_15_textarea_4_Template, 1, 5, "textarea", 80); + i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_15_textarea_5_Template, 1, 5, "textarea", 81); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(6, "p", 62); + i0.ɵɵtext(7); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r21 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngStyle", ctx_r21.schema.style)("ngClass", ctx_r21.schema.class); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r21.label); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", !ctx_r21.inArray); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r21.inArray); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r21.error()); +} } +function JsonSchemaFormComponent_div_1_div_16_Template(rf, ctx) { if (rf & 1) { + const _r195 = i0.ɵɵgetCurrentView(); + i0.ɵɵelementStart(0, "div"); + i0.ɵɵelementStart(1, "input", 84); + i0.ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_16_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r195); const ctx_r194 = i0.ɵɵnextContext(2); return ctx_r194.handleFileInput($event); }); + i0.ɵɵelementEnd(); + i0.ɵɵelementStart(2, "p", 62); + i0.ɵɵtext(3); + i0.ɵɵelementEnd(); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r22 = i0.ɵɵnextContext(2); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngStyle", ctx_r22.schema.style)("ngClass", ctx_r22.schema.class)("disabled", ctx_r22.readOnly); + i0.ɵɵadvance(2); + i0.ɵɵtextInterpolate(ctx_r22.error()); +} } +function JsonSchemaFormComponent_div_1_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵelementStart(0, "div", 6); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_div_1_Template, 35, 11, "div", 7); + i0.ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_2_Template, 3, 5, "span", 8); + i0.ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_3_Template, 4, 8, "span", 8); + i0.ɵɵtemplate(4, JsonSchemaFormComponent_div_1_mat_tab_group_4_Template, 4, 7, "mat-tab-group", 9); + i0.ɵɵtemplate(5, JsonSchemaFormComponent_div_1_span_5_Template, 3, 5, "span", 8); + i0.ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_6_Template, 6, 7, "span", 7); + i0.ɵɵtemplate(7, JsonSchemaFormComponent_div_1_mat_tab_group_7_Template, 3, 4, "mat-tab-group", 9); + i0.ɵɵtemplate(8, JsonSchemaFormComponent_div_1_span_8_Template, 8, 8, "span", 10); + i0.ɵɵtemplate(9, JsonSchemaFormComponent_div_1_div_9_Template, 8, 7, "div", 7); + i0.ɵɵtemplate(10, JsonSchemaFormComponent_div_1_div_10_Template, 9, 10, "div", 7); + i0.ɵɵtemplate(11, JsonSchemaFormComponent_div_1_div_11_Template, 10, 8, "div", 7); + i0.ɵɵtemplate(12, JsonSchemaFormComponent_div_1_div_12_Template, 5, 6, "div", 11); + i0.ɵɵtemplate(13, JsonSchemaFormComponent_div_1_div_13_Template, 5, 3, "div", 7); + i0.ɵɵtemplate(14, JsonSchemaFormComponent_div_1_div_14_Template, 8, 6, "div", 7); + i0.ɵɵtemplate(15, JsonSchemaFormComponent_div_1_div_15_Template, 8, 6, "div", 7); + i0.ɵɵtemplate(16, JsonSchemaFormComponent_div_1_div_16_Template, 4, 4, "div", 7); + i0.ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r1 = i0.ɵɵnextContext(); + i0.ɵɵproperty("matTooltip", ctx_r1.schema.description); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.service.editMode && !ctx_r1.schema.static && !ctx_r1.inArray && ctx_r1.getLayout() !== "none"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "object"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "additionalProperties"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "additionalPropertiesTab"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "array"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "chips"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "tab"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "table"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "enum"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "array-select"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "date"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "checkbox"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "autocomplete"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "single"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "textarea"); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx_r1.getLayout() === "upload"); +} } +function JsonSchemaFormComponent_ng_template_2_Template(rf, ctx) { } +/** + * generates an input form base on JSON schema and JSON object. + * The component is used recursively. + */ +export class JsonSchemaFormComponent { + /** + * component constructor + * @param http http client + * @param componentFactoryResolver allows dynamic components + * @param service application service for registering components etc. + * @param dialog dialog service + */ + constructor(http, componentFactoryResolver, service, dialog) { + this.http = http; + this.componentFactoryResolver = componentFactoryResolver; + this.service = service; + this.dialog = dialog; + /** + * emit changes done by the user in the component + */ + this.valueChange = new EventEmitter(); + /** + * emit whether this part of the form is valid + */ + this.errorChange = new EventEmitter(); + /** + * indicate schema changes done via the layout editor + */ + this.schemaChange = new EventEmitter(); + /** + * indicates whether this is the root of the component tree + */ + this.isRoot = false; + /** + * complete chip entry with enter or comma + */ + this.separatorKeysCodes = [ENTER, COMMA, TAB]; + /** + * angular pipe sorting function for keyValue - keep the JSON order and do not + * order alphabetically + */ + this.originalOrder = (a, b) => { + return 0; + }; + } + /** + * apply order, called anytime properties are set + */ + setOrderedProperties() { + if (this.schema.order) { + this.orderedProperties = []; + for (const p of this.schema.order) { + const arr = Array.isArray(p) ? p : [p]; + const o = {}; + for (const q of arr) { + o[q] = this.schema.properties[q]; + } + this.orderedProperties.push(o); + } + } + else if (this.schema.properties) { + this.orderedProperties = []; + for (const [key, value] of Object.entries(this.schema.properties)) { + const o = {}; + o[key] = value; + this.orderedProperties.push(o); + } + } + } + /** + * initialize the comonent. + * replace undefined with null and init autocomplete choices + */ + ngOnInit() { + this.readOnly = + this.schema.readOnly || (this.schema.createOnly && this.value); + if (!this.rootSchema) { + this.rootSchema = this.schema; + this.rootValue = this.value; + this.isRoot = true; + } + if (!this.schema.type) { + const p = this.schema.$ref; + const parts = p.split("#"); + if (parts.length === 1) { + // URL only + this.url(parts[0], null); + } + else { + if (parts[0]) { + // URL + anchor + this.url(parts[0], parts[1]); + } + else { + // local ref + this.schema = JsonPointer.jsonPointer(this.rootSchema, parts[1]); + this.setOrderedProperties(); + } + } + } + else { + this.setOrderedProperties(); + } + if (typeof this.value === "undefined") { + if (this.schema.default) { + this.value = this.schema.default; + setTimeout(() => this.emit(this.value), 500); + } + else { + if (!this.hideUndefined) { + this.value = null; + } + } + } + if (this.getLayout() === "custom") { + this.loadComponent(); + } + if (this.isRoot) { + setTimeout(() => { + this.errorChange.emit(this.recursiveError()); + }, 10); + } + this.ch = this.service.displayWithRegistry[this.schema.displayWith]; + if (!this.ch) { + this.ch = new DefaultChoiceHandler(this.http); + } + this.control = new FormControl(this.value); + this.choices = new ReplaySubject(); + if (Array.isArray(this.value)) { + const arr = []; + for (const i of this.value) { + arr.push({ name: i, value: i }); + } + this.choices.next(arr); + } + else { + this.choices.next([{ name: this.value, value: this.value }]); + } + if (this.value || this.value === 0) { + if (Array.isArray(this.value)) { + const arr = []; + for (const i of this.value) { + arr.push(this.ch.choice(i, this.schema)); + } + forkJoin(arr).subscribe((res) => this.choices.next(res)); + } + else { + this.ch + .choice(this.value, this.schema) + .subscribe((res) => this.choices.next([res])); + } + } + this.filteredOptions = this.control.valueChanges.pipe(startWith(this.value), debounceTime(this.ch.debounceTime()), switchMap((x) => { + this.change({ target: { value: x } }); + return this.ch.filter(this.value, this.schema, x, this.choices); + })); + this.edit = new Edit(this.schemaChange, this.name, this.schema, this.parentSchema, this.dialog); + } + /** + * choice element activated - load values + */ + focus() { + this.ch.load(this.value, this.schema).subscribe((res) => { + this.choices.next(res); + }); + } + /** + * load schema from ref, apply pointer if needed + */ + url(ref, pointer) { + // URL + anchor + this.base = this.base ? new URL(ref, this.base).href : ref; + // check root schema referenced map + if (this.rootSchema.referenced && this.rootSchema.referenced[this.base]) { + const res = this.rootSchema.referenced[this.base]; + this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res; + this.setOrderedProperties(); + return; + } + this.http.get(this.base).subscribe((res) => { + this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res; + this.setOrderedProperties(); + }, (error) => console.log(error)); + // set temporary pseudo schema + this.schema = { type: "string" }; + this.setOrderedProperties(); + } + /** + * emit valueChange event and also any validation error + */ + emit(event) { + this.valueChange.emit(event); + if (this.isRoot) { + setTimeout(() => { + this.errorChange.emit(this.recursiveError()); + }, 10); + } + } + /** + * if the schema changes from the outside, + * reset the component state wrt. errors and the choices cache + */ + ngOnChanges(changes) { + if (changes.schema) { + if (changes.schema.previousValue) { + this.rootSchema = null; + if (this.widgetHost.viewContainerRef) { + this.widgetHost.viewContainerRef.clear(); + } + this.ngOnInit(); + } + } + if (changes.switch && !changes.switch.isFirstChange()) { + if (this.getLayout() === "custom") { + this.loadComponent(); + } + else { + if (this.widgetHost.viewContainerRef) { + this.widgetHost.viewContainerRef.clear(); + } + } + } + } + /** + * key method to instruct the display which HTML block to activate. + */ + getLayout() { + if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) { + return "none"; + } + if (this.schema.widget === "custom") { + return "custom"; + } + if (this.hideUndefined && this.value === undefined) { + return "none"; + } + if (this.schema.type === "object") { + if (this.schema.additionalProperties) { + if (this.schema.layout === "tab") { + return "additionalPropertiesTab"; + } + return "additionalProperties"; + } + return "object"; + } + if (this.schema.type === "array") { + if (this.schema.layout === "tab") { + return "tab"; + } + if (this.schema.layout === "table") { + return "table"; + } + if (this.schema.layout === "select") { + return "array-select"; + } + if (this.schema.layout === "chips") { + return "chips"; + } + return "array"; + } + if (this.schema.enum) { + return "enum"; + } + if (this.schema.widget === "date") { + return "date"; + } + if (this.schema.widget === "upload") { + return "upload"; + } + if (this.schema.widget === "textarea") { + return "textarea"; + } + if (this.schema.type === "boolean") { + return "checkbox"; + } + if (this.schema.choicesUrl) { + return "autocomplete"; + } + if (this.schema.choices) { + return "autocomplete"; + } + if (this.schema.displayWith) { + return "autocomplete"; + } + return "single"; + } + /** + * called from template in the "simple" type. If "type" is "number" or "integer", + * the HTML input type is "number" which avoids normal string input + */ + getInputType(schema) { + if (schema.type === "number") { + return "number"; + } + if (schema.type === "integer") { + return "number"; + } + return schema.widget; + } + /** + * event handler for object display. Catches the child component event and + * handle it by setting the value[key]. + * Also init null objects with {} + */ + onValueChange(key, value) { + if (!this.value) { + this.value = {}; + } + this.value[key] = value; + if (this.schema.computed) { + for (const field of Object.keys(this.schema.computed)) { + const expression = this.schema.computed[field]; + this.value[field] = jsonata(expression).evaluate(this.value); + } + } + this.emit(this.value); + } + /** + * add an element to an array. + * null arrays are initialized with [] + */ + add() { + if (!(this.value instanceof Array)) { + this.value = []; + } + if (this.schema.items.type === "array") { + this.value.push([]); + } + else if (this.schema.items.type === "object") { + this.value.push({}); + } + else { + this.value.push(null); + } + this.emit(this.value); + } + /** + * event handler for adding a field + */ + addField() { + if (!this.value) { + this.value = {}; + } + if (this.value[""]) { + return; + } + this.value[""] = null; + this.emit(this.value); + } + /** + * remove an element from an array + */ + remove(i) { + this.value.splice(i, 1); + this.emit(this.value); + } + /** + * remove a field + */ + removeField(key) { + delete this.value[key]; + this.emit(this.value); + } + /** + * event handler for changed field names with "additionalProperties" + */ + fieldNameChange(key, newvalue) { + this.value[newvalue] = this.value[key]; + delete this.value[key]; + this.emit(this.value); + } + /** + * returns the validation error on this level and call recursively for all children. + * returns null if the form contents is valid + */ + recursiveError() { + const e = this.error(); + if (e) { + return e; + } + if (this.child) { + return this.child.recursiveError(); + } + if (this.children) { + for (const c of this.children) { + const r = c.recursiveError(); + if (r) { + return r; + } + } + } + return null; + } + /** + * return the error message provided in the schema or the generic error message + * returned from the validation code + */ + e(error) { + if (this.schema.errorMessage) { + return this.schema.errorMessage; + } + return error; + } + /** + * return error string + */ + error() { + var _a; + if (this.schema.widget === "custom") { + return this.customError; + } + if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) { + return null; + } + if (this.value) { + if (this.schema.maxItems) { + if (!(this.value.length <= this.schema.maxItems)) { + return this.e("Only " + this.schema.maxItems + " array entries allowed"); + } + } + if (this.schema.uniqueItems) { + if (!(new Set(this.value).size === this.value.length)) { + return this.e("Array entries must be unique"); + } + } + if (this.schema.minItems) { + if (!(this.value.length >= this.schema.minItems)) { + return this.e("At least " + this.schema.minItems + " array entries required"); + } + } + if (this.schema.maxProperties) { + if (!(Object.keys(this.value).length <= this.schema.maxProperties)) { + return this.e("Only " + this.schema.maxProperties + " fields allowed"); + } + } + if (this.schema.propertyNames) { + for (const key of Object.keys(this.value)) { + const re = new RegExp(this.schema.propertyNames); + if (!re.test(key)) { + return this.e("illegal field name: " + key); + } + } + } + if (this.schema.dependencies) { + for (const dep of Object.keys(this.schema.dependencies)) { + if (this.value[dep]) { + for (const l of this.schema.dependencies[dep]) { + if (!this.value[l]) { + return this.e(dep + " depends on " + l); + } + } + } + } + } + if (this.schema.minProperties) { + if (!(Object.keys(this.value).length >= this.schema.minProperties)) { + return this.e("At least " + this.schema.minProperties + " fields required"); + } + } + if (this.schema.maxLength) { + if (!(("" + this.value).length <= this.schema.maxLength)) { + return this.e("Input is longer than " + this.schema.maxLength); + } + } + if (this.schema.minLength) { + if (!(("" + this.value).length >= this.schema.minLength)) { + return this.e("Input is shorter than " + this.schema.minLength); + } + } + if (this.schema.multipleOf) { + if (!Number.isInteger(Number(this.value) / this.schema.multipleOf)) { + return this.e("Must be multiple of " + this.schema.multipleOf); + } + } + if (this.schema.exclusiveMaximum) { + if (!(Number(this.value) < this.schema.exclusiveMaximum)) { + return this.e("Must be less than " + this.schema.exclusiveMaximum); + } + } + if (this.schema.maximum) { + if (!(Number(this.value) <= this.schema.maximum)) { + return this.e("Must be less than or equal " + this.schema.maximum); + } + } + if (this.schema.exclusiveMinimum) { + if (!(Number(this.value) > this.schema.exclusiveMinimum)) { + return this.e("Must greater than " + this.schema.exclusiveMinimum); + } + } + if (this.schema.minimum) { + if (!(Number(this.value) >= this.schema.minimum)) { + return this.e("Must greater than or equal " + this.schema.minimum); + } + } + } + if (this.required) { + if (this.value == null || Object.is(this.value, NaN)) { + return this.e("required"); + } + } + if (this.schema.required) { + for (const dep of this.schema.required) { + if (!this.value[dep] && + this.value[dep] !== false && + this.value[dep] !== 0) { + // ignore 'required' if dep is inactive due to switch / case + let inactive = false; + if (this.schema.switch) { + const switc = this.value[this.schema.switch]; + if (switc && ((_a = this.schema.properties[dep].case) === null || _a === void 0 ? void 0 : _a.indexOf(switc)) < 0) { + inactive = true; + } + } + if (!inactive) { + return this.e(dep + " is required"); + } + } + } + } + if (this.schema.pattern) { + const re = new RegExp(this.schema.pattern); + if (!this.value) { + return this.e("illegal string"); + } + if (!re.test(this.value)) { + return this.e("illegal string"); + } + } + if (this.schema.format && this.service.formats[this.schema.format]) { + const re = new RegExp(this.service.formats[this.schema.format]); + if (!this.value) { + return this.e("illegal string"); + } + if (!re.test(this.value)) { + return this.e("illegal string"); + } + } + return null; + } + /** + * use the element title if present, defaults to the label input or "" is both are null + */ + getLabel() { + if (this.schema.title) { + return this.schema.title; + } + if (this.label) { + return this.label; + } + return ""; + } + /** + * input element change handler. + * normalize the different kind of events, handle the datatypes, set the value and emit the change + */ + change(event) { + let eventTarget; + if (event instanceof MatSelectChange) { + event = event.value; + } + else if (event instanceof MatDatepickerInputEvent) { + event = this.serializeDate(event.value, this.schema.dateFormat, this.schema.type); + } + else if (event instanceof MatAutocompleteSelectedEvent) { + event = event.option.value; + } + else if (event instanceof MatCheckboxChange) { + event = event.checked; + } + else { + // save the event target in case the parsing changes the value + // (e.g. integer input 5.3 becomes 5, this is reflected on the UI via this handle) + eventTarget = event.target; + event = event.target.value; + } + if (event === "") { + event = null; + } + if (event == null) { + this.value = null; + } + if (this.schema.type === "number") { + this.value = parseFloat(event); + } + else if (this.schema.type === "integer") { + this.value = parseInt(event, 10); + } + else if (this.schema.type === "boolean") { + if (typeof event === "string") { + if (event === "true") { + this.value = true; + } + else if (event === "false") { + this.value = false; + } + else { + this.value = null; + } + } + else { + this.value = event; + } + } + else if (this.schema.type === "string") { + this.value = event; + } + else if (this.schema.type === "array") { + this.value = event; + } + else { + throw new Error("unknown type: " + this.schema.type); + } + this.emit(this.value); + } + /** + * allows for the result of a file upload to be written into a text form element + */ + handleFileInput(event) { + if (1024 * 1024 <= event.target.files.item(0).size) { + console.log("The file size is limited to 1MB"); + return; + } + const reader = new FileReader(); + reader.onload = () => { + this.value = reader.result; + this.emit(this.value); + }; + reader.readAsDataURL(event.target.files.item(0)); + } + /** + * get example values from example array and default + */ + example() { + if (this.schema.examples && this.schema.examples[0]) { + return this.schema.examples[0]; + } + if (this.schema.default) { + return this.schema.default; + } + return null; + } + /** + * load the dynamic custom widget + */ + loadComponent() { + const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.service.registry[this.schema.widgetType]); + const viewContainerRef = this.widgetHost.viewContainerRef; + viewContainerRef.clear(); + const componentRef = viewContainerRef.createComponent(componentFactory); + // input values + componentRef.instance.label = this.label; + componentRef.instance.value = this.value; + componentRef.instance.schema = this.schema; + componentRef.instance.rootSchema = this.rootSchema; + componentRef.instance.rootValue = this.rootValue; + // subscribe to value changes and forward them + componentRef.instance.valueChange.subscribe((data) => { + this.value = data; + this.emit(this.value); + }); + // subscribe to error changes and forward them + componentRef.instance.errorChange.subscribe((error) => { + this.customError = error; + this.errorChange.emit(error); + }); + } + /** + * used for expansion panels - set value and forward event + */ + setAndEmit(event) { + this.value = event; + this.emit(this.value); + } + /** + * set an array element and emit value change event + */ + setIndexAndEmit(i, event) { + this.value[i] = event; + this.emit(this.value); + } + /** + * set an array element's field and emit value change event (applies to table layout) + */ + setIndexAndEmitTable(i, field, event) { + this.value[i][field] = event; + this.emit(this.value); + } + /** + * used when hideUndefined is active. Called from the UI to + * show a property with undefined value (in order to be able to set if in the form) + */ + showProperty(prop) { + if (!this.value) { + this.value = {}; + } + if (this.value[prop] === undefined) { + this.value[prop] = null; + } + else if (this.value[prop] === null) { + this.value[prop] = undefined; + } + } + /** + * used when hideUndefined is active. Called from the UI + * to determine which properties are included in the "to add" list + */ + showPropertyList() { + if (this.schema.switch && this.value) { + const sw = this.value[this.schema.switch]; + const props = []; + for (const [k, v] of Object.entries(this.schema.properties)) { + if (v.case) { + if (v.case.includes(sw)) { + props.push(k); + } + } + else { + props.push(k); + } + } + return props.sort(); + } + else { + return Object.keys(this.schema.properties).sort(); + } + } + /** + * string to date + * @param date date string / number (millisecs since 1970) + * @param format date format + */ + parseDate(date, format) { + if (!date && date !== 0) { + return date; + } + if (typeof date === "number") { + return this.sameDate(new Date(date)); + } + if (!format) { + return date; + } + const pdate = date.split(this.getDelimiter(format)); + const pformat = format.split(this.getDelimiter(format)); + return this.sameDate(new Date(pdate[pformat.indexOf("yyyy")], pdate[pformat.indexOf("MM")] - 1, pdate[pformat.indexOf("dd")])); + } + /** + * make sure to return the same date object instance (cannot delete date #83) + */ + sameDate(nd) { + if (!this.date) { + this.date = nd; + } + if (this.date.getTime() !== nd.getTime()) { + this.date = nd; + } + return this.date; + } + /** + * date to string + * @param date the date to serialize + * @param format the date format (e.g. dd-MM-yyyy) + * @param type target datatype (allows serializing to millisecs since 1970) + */ + serializeDate(date, format, type) { + if (date == null) { + return ""; + } + if (type === "integer" || type === "number") { + return "" + date.valueOf(); + } + if (!format) { + return date.toISOString(); + } + const pformat = format.split(this.getDelimiter(format)); + const pdate = [null, null, null]; + pdate[pformat.indexOf("yyyy")] = date.getFullYear(); + pdate[pformat.indexOf("MM")] = date.getMonth() + 1; + pdate[pformat.indexOf("dd")] = date.getDate(); + return (pdate[0] + + this.getDelimiter(format) + + pdate[1] + + this.getDelimiter(format) + + pdate[2]); + } + /** + * find the first non letter character in a date format such as dd/MM/yyyy (returns /) + */ + getDelimiter(format) { + const delim = format.match(/\W/g); + if (!delim[0]) { + throw new Error("No delimiter found in date format: " + format); + } + return delim[0]; + } + /** + * new chip entered + */ + addChip(event) { + const input = event.input; + const value = event.value; + // Add our fruit + if ((value || "").trim()) { + if (!this.value) { + this.value = []; + } + this.value.push(value.trim()); + this.emit(this.value); + } + // Reset the input value + if (input) { + input.value = ""; + } + } + /** + * remove a chip + */ + removeChip(v) { + const index = this.value.indexOf(v); + if (index >= 0) { + this.value.splice(index, 1); + if (this.value.length === 0) { + this.value = null; + } + this.emit(this.value); + } + } + /** + * chips d&d handler + */ + dropChip(event) { + moveItemInArray(this.value, event.previousIndex, event.currentIndex); + this.emit(this.value); + } +} +JsonSchemaFormComponent.ɵfac = function JsonSchemaFormComponent_Factory(t) { return new (t || JsonSchemaFormComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i2.JsonSchemaFormService), i0.ɵɵdirectiveInject(i3.MatDialog)); }; +JsonSchemaFormComponent.ɵcmp = i0.ɵɵdefineComponent({ type: JsonSchemaFormComponent, selectors: [["lib-json-schema-form"]], viewQuery: function JsonSchemaFormComponent_Query(rf, ctx) { if (rf & 1) { + i0.ɵɵviewQuery(_c0, 1); + i0.ɵɵviewQuery(WidgetDirective, 3); + i0.ɵɵviewQuery(_c1, 1); + } if (rf & 2) { + let _t; + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.child = _t.first); + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.widgetHost = _t.first); + i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t); + } }, inputs: { name: "name", label: "label", value: "value", rootValue: "rootValue", schema: "schema", parentSchema: "parentSchema", rootSchema: "rootSchema", base: "base", switch: "switch", hideUndefined: "hideUndefined", inExpansion: "inExpansion", inArray: "inArray", required: "required" }, outputs: { valueChange: "valueChange", errorChange: "errorChange", schemaChange: "schemaChange" }, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 2, consts: [[3, "ngStyle", "ngClass", "expanded", 4, "ngIf"], [3, "matTooltip", 4, "ngIf"], ["libWidgetHost", ""], [3, "ngStyle", "ngClass", "expanded"], [3, "label", "name", "value", "switch", "rootValue", "rootSchema", "schema", "inExpansion", "base", "valueChange", "schemaChange"], ["child", ""], [3, "matTooltip"], [4, "ngIf"], [3, "fxLayout", "ngStyle", "ngClass", 4, "ngIf"], ["animationDuration", "0ms", "style", "max-width: 96vw", 3, "ngStyle", "ngClass", 4, "ngIf"], [3, "ngStyle", "ngClass", 4, "ngIf"], ["style", "margin: 6px; margin-top: 12px;", 3, "ngStyle", "ngClass", 4, "ngIf"], [2, "cursor", "pointer", 3, "matMenuTriggerFor", "matTooltip"], ["menu", "matMenu"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", 3, "disabled", "matMenuTriggerFor"], ["mat-menu-item", "", 3, "disabled", "click"], ["madd", "matMenu"], ["mat-menu-item", "", 3, "click", 4, "ngFor", "ngForOf"], ["madd2", "matMenu"], [3, "fxLayout", "ngStyle", "ngClass"], [3, "fxLayout", 4, "ngFor", "ngForOf"], ["style", "margin-right: 20px;", 4, "ngIf"], [3, "fxLayout"], ["style", "display: flex; margin: 2px", 4, "ngFor", "ngForOf"], [2, "display", "flex", "margin", "2px"], [3, "name", "label", "value", "switch", "rootValue", "rootSchema", "schema", "parentSchema", "required", "hideUndefined", "base", "valueChange", "schemaChange"], ["children", ""], [2, "margin-right", "20px"], ["mat-icon-button", "", 3, "matMenuTriggerFor"], [4, "ngFor", "ngForOf"], [3, "disabled", "checked", "change"], ["style", "display: flex; margin: 2px; position: relative", 3, "mouseenter", "mouseleave", 4, "ngFor", "ngForOf"], ["mat-icon-button", "", 3, "matTooltip", "click", 4, "ngIf"], [2, "display", "flex", "margin", "2px", "position", "relative", 3, "mouseenter", "mouseleave"], ["autocomplete", "off", "matInput", "", 3, "disabled", "value", "change"], ["inArray", "true", 3, "label", "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], ["mat-icon-button", "", "class", "example-handle", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", 1, "example-handle", 3, "matTooltip", "click"], ["mat-icon-button", "", 3, "matTooltip", "click"], ["animationDuration", "0ms", 2, "max-width", "96vw", 3, "ngStyle", "ngClass"], ["style", "margin: 2px; position: relative", 4, "ngFor", "ngForOf"], [2, "margin", "2px", "position", "relative"], ["mat-tab-label", ""], ["inArray", "true", 3, "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], ["autocomplete", "off", "matInput", "", 3, "value", "change"], [3, "ngStyle", "ngClass"], ["aria-label", "Fruit selection", "cdkDropList", "", "cdkDropListOrientation", "horizontal", 3, "cdkDropListDropped"], ["chipList", ""], ["cdkDrag", "", 3, "removable", "removed", 4, "ngFor", "ngForOf"], ["autocomplete", "off", 3, "placeholder", "matChipInputFor", "matChipInputSeparatorKeyCodes", "disabled", "matChipInputTokenEnd"], ["cdkDrag", "", 3, "removable", "removed"], ["matChipRemove", ""], ["style", "margin: 2px; position: relative", 3, "label", 4, "ngFor", "ngForOf"], [2, "margin", "2px", "position", "relative", 3, "label"], ["summary", "Properties table"], ["scope", "col", 4, "ngFor", "ngForOf"], ["id", "remove_row"], ["scope", "col"], [3, "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], [3, "value", "disabled", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [1, "error", "mat-typography"], [3, "value"], [3, "matTooltip", "ngStyle", "ngClass"], ["multiple", "", 3, "value", "disabled", "focus", "selectionChange"], [3, "value", "matTooltip", 4, "ngFor", "ngForOf"], [3, "value", "matTooltip"], ["autocomplete", "off", "matInput", "", 2, "width", "100%", 3, "value", "matDatepicker", "disabled", "dateChange"], ["matSuffix", "", 3, "for"], ["picker", ""], [2, "margin", "6px", "margin-top", "12px", 3, "ngStyle", "ngClass"], [3, "checked", "disabled", "change"], [3, "value", "disabled", "focus", "selectionChange"], ["type", "text", "matInput", "", 3, "formControl", "matAutocomplete", "focus"], ["auto", "matAutocomplete"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "input", "focus", 4, "ngIf"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "change", 4, "ngIf"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "input", "focus"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "change"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "input", 4, "ngIf"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "change", 4, "ngIf"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "input"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "change"], ["type", "file", "id", "file", 3, "ngStyle", "ngClass", "disabled", "change"]], template: function JsonSchemaFormComponent_Template(rf, ctx) { if (rf & 1) { + i0.ɵɵtemplate(0, JsonSchemaFormComponent_mat_expansion_panel_0_Template, 8, 14, "mat-expansion-panel", 0); + i0.ɵɵtemplate(1, JsonSchemaFormComponent_div_1_Template, 17, 17, "div", 1); + i0.ɵɵtemplate(2, JsonSchemaFormComponent_ng_template_2_Template, 0, 0, "ng-template", 2); + } if (rf & 2) { + i0.ɵɵproperty("ngIf", (ctx.schema.expanded === true || ctx.schema.expanded === false) && !ctx.inExpansion); + i0.ɵɵadvance(1); + i0.ɵɵproperty("ngIf", ctx.schema.expanded === null || ctx.schema.expanded === undefined || ctx.inExpansion); + } }, directives: [i4.NgIf, i5.WidgetDirective, i6.MatExpansionPanel, i7.DefaultStyleDirective, i4.NgStyle, i7.DefaultClassDirective, i4.NgClass, i6.MatExpansionPanelHeader, i6.MatExpansionPanelTitle, i6.MatExpansionPanelDescription, JsonSchemaFormComponent, i8.MatTooltip, i9.MatIcon, i10.MatMenuTrigger, i10.MatMenu, i10.MatMenuItem, i4.NgForOf, i11.DefaultLayoutDirective, i12.MatButton, i13.MatCheckbox, i14.MatFormField, i14.MatLabel, i15.MatInput, i16.MatTabGroup, i16.MatTab, i16.MatTabLabel, i17.MatChipList, i18.CdkDropList, i17.MatChipInput, i17.MatChip, i18.CdkDrag, i17.MatChipRemove, i19.MatSelect, i20.MatOption, i21.MatDatepickerInput, i21.MatDatepickerToggle, i14.MatSuffix, i21.MatDatepicker, i22.DefaultValueAccessor, i23.MatAutocompleteTrigger, i22.NgControlStatus, i22.FormControlDirective, i23.MatAutocomplete], pipes: [i4.KeyValuePipe, i4.AsyncPipe], styles: [".example-handle[_ngcontent-%COMP%]{position:absolute;z-index:9;top:0;right:0}.error[_ngcontent-%COMP%]{font-size:small;color:red;position:relative;top:-18px}"] }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonSchemaFormComponent, [{ + type: Component, + args: [{ + selector: "lib-json-schema-form", + templateUrl: "./json-schema-form.component.html", + styleUrls: ["./json-schema-form.component.css"], + }] + }], function () { return [{ type: i1.HttpClient }, { type: i0.ComponentFactoryResolver }, { type: i2.JsonSchemaFormService }, { type: i3.MatDialog }]; }, { children: [{ + type: ViewChildren, + args: ["children"] + }], child: [{ + type: ViewChild, + args: ["child"] + }], name: [{ + type: Input + }], label: [{ + type: Input + }], value: [{ + type: Input + }], rootValue: [{ + type: Input + }], valueChange: [{ + type: Output + }], errorChange: [{ + type: Output + }], schemaChange: [{ + type: Output + }], schema: [{ + type: Input + }], parentSchema: [{ + type: Input + }], rootSchema: [{ + type: Input + }], base: [{ + type: Input + }], switch: [{ + type: Input + }], hideUndefined: [{ + type: Input + }], inExpansion: [{ + type: Input + }], inArray: [{ + type: Input + }], required: [{ + type: Input + }], widgetHost: [{ + type: ViewChild, + args: [WidgetDirective, { static: true }] + }] }); })(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoam9pbi9qc29uLXNjaGVtYS1mb3JtL3NyYy9saWIvanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoam9pbi9qc29uLXNjaGVtYS1mb3JtL3NyYy9saWIvanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUlaLFNBQVMsRUFDVCxZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxRQUFRLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUF5QixvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QixPQUFPLEVBQWUsZUFB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QixLQUFLO1lBS0ksV0FBVztrQkFBcEIsTUFBTTtZQUtHLFdBQVc7a0JBQXBCLE1BQU07WUFLRyxZQUFZO2tCQUFyQixNQUFNO1lBS0UsTUFBTTtrQkFBZCxLQUFLO1lBS0csWUFBWTtrQkFBcEIsS0FBSztZQVVHLFVBQVU7a0JBQWxCLEtBQUs7WUFLRyxJQUFJO2tCQUFaLEtBQUs7WUFXRyxNQUFNO2tCQUFkLEtBQUs7WUFNRyxhQUFhO2tCQUFyQixLQUFLO1lBS0csV0FBVztrQkFBbkIsS0FBSztZQUtHLE9BQU87a0JBQWYsS0FBSztZQUtHLFFBQVE7a0JBQWhCLEtBQUs7WUFLd0MsVUFBVTtrQkFBdkQsU0FBUzttQkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3RcIjtcclxuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlclwiO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gXCIuL3NjaGVtYVwiO1xyXG5pbXBvcnQgeyBXaWRnZXRDb21wb25lbnQgfSBmcm9tIFwiLi93aWRnZXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFdpZGdldERpcmVjdGl2ZSB9IGZyb20gXCIuL3dpZGdldC5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgSnNvblNjaGVtYUZvcm1TZXJ2aWNlIH0gZnJvbSBcIi4vanNvbi1zY2hlbWEtZm9ybS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlXCI7XHJcbmltcG9ydCB7IEpzb25Qb2ludGVyIH0gZnJvbSBcIi4vanNvbi1wb2ludGVyXCI7XHJcbmltcG9ydCB7IENob2ljZSwgQ2hvaWNlSGFuZGxlciwgRGVmYXVsdENob2ljZUhhbmRsZXIgfSBmcm9tIFwiLi9jaG9pY2VcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IEVkaXQgfSBmcm9tIFwiLi9lZGl0XCI7XHJcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzXCI7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQgeyBDT01NQSwgRU5URVIsIFRBQiB9IGZyb20gXCJAYW5ndWxhci9jZGsva2V5Y29kZXNcIjtcclxuaW1wb3J0IGpzb25hdGEgZnJvbSBcImpzb25hdGFcIjtcclxuXHJcbi8qKlxyXG4gKiBnZW5lcmF0ZXMgYW4gaW5wdXQgZm9ybSBiYXNlIG9uIEpTT04gc2NoZW1hIGFuZCBKU09OIG9iamVjdC5cclxuICogVGhlIGNvbXBvbmVudCBpcyB1c2VkIHJlY3Vyc2l2ZWx5LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLWpzb24tc2NoZW1hLWZvcm1cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2pzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vanNvbi1zY2hlbWEtZm9ybS5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSnNvblNjaGVtYUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgLyoqXHJcbiAgICogY29tcG9uZW50IGNvbnN0cnVjdG9yXHJcbiAgICogQHBhcmFtIGh0dHAgICAgICAgICAgICAgICAgICAgICAgICBodHRwIGNsaWVudFxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgICAgYWxsb3dzIGR5bmFtaWMgY29tcG9uZW50c1xyXG4gICAqIEBwYXJhbSBzZXJ2aWNlICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gc2VydmljZSBmb3IgcmVnaXN0ZXJpbmcgY29tcG9uZW50cyBldGMuXHJcbiAgICogQHBhcmFtIGRpYWxvZyAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cgc2VydmljZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHB1YmxpYyBzZXJ2aWNlOiBKc29uU2NoZW1hRm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBjb250YWluZXIgY2hpbGRyZW4gZm9yIGV2ZW50IHByb3BhZ2F0aW9uXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZHJlbihcImNoaWxkcmVuXCIpIGNoaWxkcmVuOiBRdWVyeUxpc3Q8SnNvblNjaGVtYUZvcm1Db21wb25lbnQ+O1xyXG5cclxuICAvKipcclxuICAgKiBjb250YWluZXIgY2hpbGRyZW4gZm9yIGV2ZW50IHByb3BhZ2F0aW9uXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZChcImNoaWxkXCIpIGNoaWxkOiBKc29uU2NoZW1hRm9ybUNvbXBvbmVudDtcclxuXHJcbiAgLyoqXHJcbiAgICogaWYgYW4gYXJyYXkgaXMgZGlzcGxheWVkLCBpbmRpY2F0ZXMgd2hpY2ggYXJyYXkgaW5kZXggaXMgYmVpbmcgaG92ZXJlZCBvdmVyIGluIG9yZGVyIHRvXHJcbiAgICogZGlzcGxheSB0aGUgXCItXCIgcmVtb3ZlIGJ1dHRvblxyXG4gICAqL1xyXG4gIGhvdmVyOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBmaWVsZCAob25seSBzZXQgaWYgaW5zaWRlIHR5cGU6IG9iamVjdClcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBsYWJlbCBvZiB0aGUgaW5wdXQgZmllbGRcclxuICAgKi9cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiB0aGUgaW5wdXQgdmFsdWVcclxuICAgKi9cclxuICBASW5wdXQoKSB2YWx1ZTogYW55O1xyXG5cclxuICAvKipcclxuICAgKiByb290IGZvcm0gdmFsdWUgKGNhbiBiZSB1c2VkIGluIGN1c3RvbSBjb21wb25lbnRzKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJvb3RWYWx1ZTogYW55O1xyXG5cclxuICAvKipcclxuICAgKiBlbWl0IGNoYW5nZXMgZG9uZSBieSB0aGUgdXNlciBpbiB0aGUgY29tcG9uZW50XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogZW1pdCB3aGV0aGVyIHRoaXMgcGFydCBvZiB0aGUgZm9ybSBpcyB2YWxpZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlcnJvckNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIGluZGljYXRlIHNjaGVtYSBjaGFuZ2VzIGRvbmUgdmlhIHRoZSBsYXlvdXQgZWRpdG9yXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHNjaGVtYUNoYW5nZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBKU09OIHNjaGVtYSB0byB1c2VcclxuICAgKi9cclxuICBASW5wdXQoKSBzY2hlbWE6IFNjaGVtYTtcclxuXHJcbiAgLyoqXHJcbiAgICogcGFyZW50IHNjaGVtYSB0byBlZGl0IHJlcXVpcmVkXHJcbiAgICovXHJcbiAgQElucHV0KCkgcGFyZW50U2NoZW1hOiBTY2hlbWE7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZvcm0gZWRpdG9yXHJcbiAgICovXHJcbiAgZWRpdDogRWRpdDtcclxuXHJcbiAgLyoqXHJcbiAgICogcm9vdCBKU09OIHNjaGVtYSB0byB1c2Ugd2hlbiBsb29raW5nIHVwICRyZWYgKHNpbXBseSBwYXNzZWQgYWxvbmcgdGhlIHRyZWUpXHJcbiAgICovXHJcbiAgQElucHV0KCkgcm9vdFNjaGVtYTogU2NoZW1hO1xyXG5cclxuICAvKipcclxuICAgKiBiYXNlIFVSTCBmb3IgcmVzb2x2aW5nICRyZWZcclxuICAgKi9cclxuICBASW5wdXQoKSBiYXNlOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgdGhlIHJvb3Qgb2YgdGhlIGNvbXBvbmVudCB0cmVlXHJcbiAgICovXHJcbiAgaXNSb290ID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIGlmIHByZXNlbnQ6IHZhbHVlIG9mIHRoZSBzd2l0Y2ggcHJvcGVydHkgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBjb21wb25lbnQgcmVuZGVycyBpdHNlbGZcclxuICAgKiAoc2NoZW1hLmNhc2Ugbm90IHByZXNlbnQgb3Igc2NoZW1hLmNhc2UgPT09IHN3aXRjaClcclxuICAgKi9cclxuICBASW5wdXQoKSBzd2l0Y2g6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogaW5kaWNhdGVzIHRvIGNoaWxkIGNvbXBvbmVudHMgd2hldGhlciB0aGUgcGFyZW50IG9iamVjdCBoYXMgaGlkZVVuZGVmaW5lZCBzZXQgKGkuZS4gZG8gbm90IHJlbmRlciB5b3Vyc2VsZlxyXG4gICAqIGlmIHlvdXIgdmFsdWUgaXMgdW5kZWZpbmVkKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGhpZGVVbmRlZmluZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGFyZSB3ZSBhbHJlYWR5IGluIHRoZSBleHBhbnNpb24gcGFuZWw/XHJcbiAgICovXHJcbiAgQElucHV0KCkgaW5FeHBhbnNpb246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGFyZSB3ZSBhbHJlYWR5IGluIGFuIGFycmF5P1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGluQXJyYXk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlcXVpcmVkIGltcG9ydGVkIGZyb20gcGFyZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGhvb2sgZm9yIGN1c3RvbSB3aWRnZXRzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZChXaWRnZXREaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHdpZGdldEhvc3Q6IFdpZGdldERpcmVjdGl2ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogb3JkZXIgZmllbGQgdHJhbnNmb3JtcyBwcm9wZXJ0aWVzIGludG8gdGhpcyBzdHJ1Y3R1cmUuXHJcbiAgICogYWxsb3dzIG9taXNzaW9uLCBvcmRlcmluZyBhbmQgaGllcmFyY2h5XHJcbiAgICovXHJcbiAgb3JkZXJlZFByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogU2NoZW1hIH1bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogbWFrZSBzdXJlIHRvIHJldHVybiB0aGUgc2FtZSBkYXRlIG9iamVjdCBpbnN0YW5jZSAoY2Fubm90IGRlbGV0ZSBkYXRlICM4MylcclxuICAgKi9cclxuICBkYXRlOiBEYXRlO1xyXG5cclxuICAvKipcclxuICAgKiBjaG9pY2VzIHRoYXQgbWlnaHQgYmUgbG9hZGVkIGFzeW5jLCBpbml0aWFsaXplZCB3aXRoIGN1cnJlbnQgdmFsdWUgYW5kIGl0cyBwb3RlbnRpYWxseSBkZWxheWVkIHRvU3RyaW5nIHZhbHVlXHJcbiAgICovXHJcbiAgY2hvaWNlczogUmVwbGF5U3ViamVjdDxDaG9pY2VbXT47XHJcblxyXG4gIC8qKlxyXG4gICAqIGF1dG9jb21wbGV0ZSBmaWx0ZXJlZCBjaG9pY2VzXHJcbiAgICovXHJcbiAgZmlsdGVyZWRPcHRpb25zOiBPYnNlcnZhYmxlPENob2ljZVtdPjtcclxuXHJcbiAgLyoqXHJcbiAgICogYXV0b2NvbXBsZXRlIGZvcm0gY29udHJvbCBmb3Igc2ltcGxlciBjaGFuZ2UgZGV0ZWN0aW9uXHJcbiAgICovXHJcbiAgY29udHJvbDogRm9ybUNvbnRyb2w7XHJcblxyXG4gIC8qKlxyXG4gICAqIGltcGxlbWVudGF0aW9uIHNwZWNpZmllZCBpbiBkaXNwbGF5V2l0aFxyXG4gICAqL1xyXG4gIGNoOiBDaG9pY2VIYW5kbGVyO1xyXG5cclxuICAvKipcclxuICAgKiBjb21wbGV0ZSBjaGlwIGVudHJ5IHdpdGggZW50ZXIgb3IgY29tbWFcclxuICAgKi9cclxuICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQSwgVEFCXTtcclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZE9ubHkgaWYgc2NoZW1hLnJlYWRPbmx5IG9yIHNjaGVtYS5jcmVhdGVPbmx5IGFuZCB2YWx1ZSBzZXRcclxuICAgKi9cclxuICByZWFkT25seTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogZXJyb3IgZnJvbSBhIGN1c3RvbSBjb21wb25lbnRcclxuICAgKi9cclxuICBjdXN0b21FcnJvcjogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhcHBseSBvcmRlciwgY2FsbGVkIGFueXRpbWUgcHJvcGVydGllcyBhcmUgc2V0XHJcbiAgICovXHJcbiAgc2V0T3JkZXJlZFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5zY2hlbWEub3JkZXIpIHtcclxuICAgICAgdGhpcy5vcmRlcmVkUHJvcGVydGllcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5zY2hlbWEub3JkZXIpIHtcclxuICAgICAgICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KHApID8gcCA6IFtwXTtcclxuICAgICAgICBjb25zdCBvID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBxIG9mIGFycikge1xyXG4gICAgICAgICAgb1txXSA9IHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub3JkZXJlZFByb3BlcnRpZXMucHVzaChvKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRoaXMub3JkZXJlZFByb3BlcnRpZXMgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucHJvcGVydGllcykpIHtcclxuICAgICAgICBjb25zdCBvID0ge307XHJcbiAgICAgICAgb1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vcmRlcmVkUHJvcGVydGllcy5wdXNoKG8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplIHRoZSBjb21vbmVudC5cclxuICAgKiByZXBsYWNlIHVuZGVmaW5lZCB3aXRoIG51bGwgYW5kIGluaXQgYXV0b2NvbXBsZXRlIGNob2ljZXNcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPVxyXG4gICAgICB0aGlzLnNjaGVtYS5yZWFkT25seSB8fCAodGhpcy5zY2hlbWEuY3JlYXRlT25seSAmJiB0aGlzLnZhbHVlKTtcclxuXHJcbiAgICBpZiAoIXRoaXMucm9vdFNjaGVtYSkge1xyXG4gICAgICB0aGlzLnJvb3RTY2hlbWEgPSB0aGlzLnNjaGVtYTtcclxuICAgICAgdGhpcy5yb290VmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNjaGVtYS50eXBlKSB7XHJcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnNjaGVtYS4kcmVmO1xyXG4gICAgICBjb25zdCBwYXJ0cyA9IHAuc3BsaXQoXCIjXCIpO1xyXG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgLy8gVVJMIG9ubHlcclxuICAgICAgICB0aGlzLnVybChwYXJ0c1swXSwgbnVsbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHBhcnRzWzBdKSB7XHJcbiAgICAgICAgICAvLyBVUkwgKyBhbmNob3JcclxuICAgICAgICAgIHRoaXMudXJsKHBhcnRzWzBdLCBwYXJ0c1sxXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGxvY2FsIHJlZlxyXG4gICAgICAgICAgdGhpcy5zY2hlbWEgPSBKc29uUG9pbnRlci5qc29uUG9pbnRlcih0aGlzLnJvb3RTY2hlbWEsIHBhcnRzWzFdKTtcclxuICAgICAgICAgIHRoaXMuc2V0T3JkZXJlZFByb3BlcnRpZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0T3JkZXJlZFByb3BlcnRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLmRlZmF1bHQpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zY2hlbWEuZGVmYXVsdDtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZW1pdCh0aGlzLnZhbHVlKSwgNTAwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGlkZVVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0TGF5b3V0KCkgPT09IFwiY3VzdG9tXCIpIHtcclxuICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNSb290KSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZXJyb3JDaGFuZ2UuZW1pdCh0aGlzLnJlY3Vyc2l2ZUVycm9yKCkpO1xyXG4gICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaCA9IHRoaXMuc2VydmljZS5kaXNwbGF5V2l0aFJlZ2lzdHJ5W3RoaXMuc2NoZW1hLmRpc3BsYXlXaXRoXTtcclxuICAgIGlmICghdGhpcy5jaCkge1xyXG4gICAgICB0aGlzLmNoID0gbmV3IERlZmF1bHRDaG9pY2VIYW5kbGVyKHRoaXMuaHR0cCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmNob2ljZXMgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcclxuICAgICAgY29uc3QgYXJyID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgYXJyLnB1c2goeyBuYW1lOiBpLCB2YWx1ZTogaSB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNob2ljZXMubmV4dChhcnIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaG9pY2VzLm5leHQoW3sgbmFtZTogdGhpcy52YWx1ZSwgdmFsdWU6IHRoaXMudmFsdWUgfV0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZSA9PT0gMCkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IGFycjogT2JzZXJ2YWJsZTxDaG9pY2U+W10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgYXJyLnB1c2godGhpcy5jaC5jaG9pY2UoaSwgdGhpcy5zY2hlbWEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9ya0pvaW4oYXJyKS5zdWJzY3JpYmUoKHJlcykgPT4gdGhpcy5jaG9pY2VzLm5leHQocmVzKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaFxyXG4gICAgICAgICAgLmNob2ljZSh0aGlzLnZhbHVlLCB0aGlzLnNjaGVtYSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4gdGhpcy5jaG9pY2VzLm5leHQoW3Jlc10pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLnZhbHVlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuY2guZGVib3VuY2VUaW1lKCkpLFxyXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZSh7IHRhcmdldDogeyB2YWx1ZTogeCB9IH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoLmZpbHRlcih0aGlzLnZhbHVlLCB0aGlzLnNjaGVtYSwgeCwgdGhpcy5jaG9pY2VzKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5lZGl0ID0gbmV3IEVkaXQoXHJcbiAgICAgIHRoaXMuc2NoZW1hQ2hhbmdlLFxyXG4gICAgICB0aGlzLm5hbWUsXHJcbiAgICAgIHRoaXMuc2NoZW1hLFxyXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYSxcclxuICAgICAgdGhpcy5kaWFsb2dcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjaG9pY2UgZWxlbWVudCBhY3RpdmF0ZWQgLSBsb2FkIHZhbHVlc1xyXG4gICAqL1xyXG4gIGZvY3VzKCkge1xyXG4gICAgdGhpcy5jaC5sb2FkKHRoaXMudmFsdWUsIHRoaXMuc2NoZW1hKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICB0aGlzLmNob2ljZXMubmV4dChyZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBsb2FkIHNjaGVtYSBmcm9tIHJlZiwgYXBwbHkgcG9pbnRlciBpZiBuZWVkZWRcclxuICAgKi9cclxuICB1cmwocmVmOiBzdHJpbmcsIHBvaW50ZXI6IHN0cmluZykge1xyXG4gICAgLy8gVVJMICsgYW5jaG9yXHJcbiAgICB0aGlzLmJhc2UgPSB0aGlzLmJhc2UgPyBuZXcgVVJMKHJlZiwgdGhpcy5iYXNlKS5ocmVmIDogcmVmO1xyXG5cclxuICAgIC8vIGNoZWNrIHJvb3Qgc2NoZW1hIHJlZmVyZW5jZWQgbWFwXHJcbiAgICBpZiAodGhpcy5yb290U2NoZW1hLnJlZmVyZW5jZWQgJiYgdGhpcy5yb290U2NoZW1hLnJlZmVyZW5jZWRbdGhpcy5iYXNlXSkge1xyXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnJvb3RTY2hlbWEucmVmZXJlbmNlZFt0aGlzLmJhc2VdO1xyXG4gICAgICB0aGlzLnNjaGVtYSA9IHBvaW50ZXIgPyBKc29uUG9pbnRlci5qc29uUG9pbnRlcihyZXMsIHBvaW50ZXIpIDogcmVzO1xyXG4gICAgICB0aGlzLnNldE9yZGVyZWRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0dHAuZ2V0KHRoaXMuYmFzZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBwb2ludGVyID8gSnNvblBvaW50ZXIuanNvblBvaW50ZXIocmVzLCBwb2ludGVyKSA6IHJlcztcclxuICAgICAgICB0aGlzLnNldE9yZGVyZWRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4gY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHNldCB0ZW1wb3JhcnkgcHNldWRvIHNjaGVtYVxyXG4gICAgdGhpcy5zY2hlbWEgPSB7IHR5cGU6IFwic3RyaW5nXCIgfTtcclxuICAgIHRoaXMuc2V0T3JkZXJlZFByb3BlcnRpZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGVtaXQgdmFsdWVDaGFuZ2UgZXZlbnQgYW5kIGFsc28gYW55IHZhbGlkYXRpb24gZXJyb3JcclxuICAgKi9cclxuICBlbWl0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgICBpZiAodGhpcy5pc1Jvb3QpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lcnJvckNoYW5nZS5lbWl0KHRoaXMucmVjdXJzaXZlRXJyb3IoKSk7XHJcbiAgICAgIH0sIDEwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGlmIHRoZSBzY2hlbWEgY2hhbmdlcyBmcm9tIHRoZSBvdXRzaWRlLFxyXG4gICAqIHJlc2V0IHRoZSBjb21wb25lbnQgc3RhdGUgd3J0LiBlcnJvcnMgYW5kIHRoZSBjaG9pY2VzIGNhY2hlXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMuc2NoZW1hKSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzLnNjaGVtYS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5yb290U2NoZW1hID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy53aWRnZXRIb3N0LnZpZXdDb250YWluZXJSZWYpIHtcclxuICAgICAgICAgIHRoaXMud2lkZ2V0SG9zdC52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLnN3aXRjaCAmJiAhY2hhbmdlcy5zd2l0Y2guaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLmdldExheW91dCgpID09PSBcImN1c3RvbVwiKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0SG9zdC52aWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgICB0aGlzLndpZGdldEhvc3Qudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYW5ndWxhciBwaXBlIHNvcnRpbmcgZnVuY3Rpb24gZm9yIGtleVZhbHVlIC0ga2VlcCB0aGUgSlNPTiBvcmRlciBhbmQgZG8gbm90XHJcbiAgICogb3JkZXIgYWxwaGFiZXRpY2FsbHlcclxuICAgKi9cclxuICBvcmlnaW5hbE9yZGVyID0gKFxyXG4gICAgYTogS2V5VmFsdWU8c3RyaW5nLCBTY2hlbWE+LFxyXG4gICAgYjogS2V5VmFsdWU8c3RyaW5nLCBTY2hlbWE+XHJcbiAgKTogbnVtYmVyID0+IHtcclxuICAgIHJldHVybiAwO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIGtleSBtZXRob2QgdG8gaW5zdHJ1Y3QgdGhlIGRpc3BsYXkgd2hpY2ggSFRNTCBibG9jayB0byBhY3RpdmF0ZS5cclxuICAgKi9cclxuICBnZXRMYXlvdXQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnNjaGVtYS5jYXNlICYmIHRoaXMuc2NoZW1hLmNhc2UuaW5kZXhPZih0aGlzLnN3aXRjaCkgPCAwKSB7XHJcbiAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNjaGVtYS53aWRnZXQgPT09IFwiY3VzdG9tXCIpIHtcclxuICAgICAgcmV0dXJuIFwiY3VzdG9tXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oaWRlVW5kZWZpbmVkICYmIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBpZiAodGhpcy5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMpIHtcclxuICAgICAgICBpZiAodGhpcy5zY2hlbWEubGF5b3V0ID09PSBcInRhYlwiKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJhZGRpdGlvbmFsUHJvcGVydGllc1RhYlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBcIm9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLnR5cGUgPT09IFwiYXJyYXlcIikge1xyXG4gICAgICBpZiAodGhpcy5zY2hlbWEubGF5b3V0ID09PSBcInRhYlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidGFiXCI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLmxheW91dCA9PT0gXCJ0YWJsZVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidGFibGVcIjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zY2hlbWEubGF5b3V0ID09PSBcInNlbGVjdFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiYXJyYXktc2VsZWN0XCI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLmxheW91dCA9PT0gXCJjaGlwc1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiY2hpcHNcIjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gXCJhcnJheVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLmVudW0pIHtcclxuICAgICAgcmV0dXJuIFwiZW51bVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLndpZGdldCA9PT0gXCJkYXRlXCIpIHtcclxuICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLndpZGdldCA9PT0gXCJ1cGxvYWRcIikge1xyXG4gICAgICByZXR1cm4gXCJ1cGxvYWRcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNjaGVtYS53aWRnZXQgPT09IFwidGV4dGFyZWFcIikge1xyXG4gICAgICByZXR1cm4gXCJ0ZXh0YXJlYVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLnR5cGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIHJldHVybiBcImNoZWNrYm94XCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2hlbWEuY2hvaWNlc1VybCkge1xyXG4gICAgICByZXR1cm4gXCJhdXRvY29tcGxldGVcIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNjaGVtYS5jaG9pY2VzKSB7XHJcbiAgICAgIHJldHVybiBcImF1dG9jb21wbGV0ZVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLmRpc3BsYXlXaXRoKSB7XHJcbiAgICAgIHJldHVybiBcImF1dG9jb21wbGV0ZVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwic2luZ2xlXCI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjYWxsZWQgZnJvbSB0ZW1wbGF0ZSBpbiB0aGUgXCJzaW1wbGVcIiB0eXBlLiBJZiBcInR5cGVcIiBpcyBcIm51bWJlclwiIG9yIFwiaW50ZWdlclwiLFxyXG4gICAqIHRoZSBIVE1MIGlucHV0IHR5cGUgaXMgXCJudW1iZXJcIiB3aGljaCBhdm9pZHMgbm9ybWFsIHN0cmluZyBpbnB1dFxyXG4gICAqL1xyXG4gIGdldElucHV0VHlwZShzY2hlbWE6IFNjaGVtYSk6IHN0cmluZyB7XHJcbiAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NoZW1hLnR5cGUgPT09IFwiaW50ZWdlclwiKSB7XHJcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNjaGVtYS53aWRnZXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBldmVudCBoYW5kbGVyIGZvciBvYmplY3QgZGlzcGxheS4gQ2F0Y2hlcyB0aGUgY2hpbGQgY29tcG9uZW50IGV2ZW50IGFuZFxyXG4gICAqIGhhbmRsZSBpdCBieSBzZXR0aW5nIHRoZSB2YWx1ZVtrZXldLlxyXG4gICAqIEFsc28gaW5pdCBudWxsIG9iamVjdHMgd2l0aCB7fVxyXG4gICAqL1xyXG4gIG9uVmFsdWVDaGFuZ2Uoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy52YWx1ZSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0ge307XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlW2tleV0gPSB2YWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5zY2hlbWEuY29tcHV0ZWQpIHtcclxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5jb21wdXRlZCkpIHtcclxuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5zY2hlbWEuY29tcHV0ZWRbZmllbGRdO1xyXG4gICAgICAgIHRoaXMudmFsdWVbZmllbGRdID0ganNvbmF0YShleHByZXNzaW9uKS5ldmFsdWF0ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW1pdCh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGFkZCBhbiBlbGVtZW50IHRvIGFuIGFycmF5LlxyXG4gICAqIG51bGwgYXJyYXlzIGFyZSBpbml0aWFsaXplZCB3aXRoIFtdXHJcbiAgICovXHJcbiAgYWRkKCkge1xyXG4gICAgaWYgKCEodGhpcy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2hlbWEuaXRlbXMudHlwZSA9PT0gXCJhcnJheVwiKSB7XHJcbiAgICAgIHRoaXMudmFsdWUucHVzaChbXSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2NoZW1hLml0ZW1zLnR5cGUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgdGhpcy52YWx1ZS5wdXNoKHt9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmFsdWUucHVzaChudWxsKTtcclxuICAgIH1cclxuICAgIHRoaXMuZW1pdCh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGV2ZW50IGhhbmRsZXIgZm9yIGFkZGluZyBhIGZpZWxkXHJcbiAgICovXHJcbiAgYWRkRmllbGQoKSB7XHJcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHt9O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsdWVbXCJcIl0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZVtcIlwiXSA9IG51bGw7XHJcbiAgICB0aGlzLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGFuIGFycmF5XHJcbiAgICovXHJcbiAgcmVtb3ZlKGk6IG51bWJlcikge1xyXG4gICAgdGhpcy52YWx1ZS5zcGxpY2UoaSwgMSk7XHJcbiAgICB0aGlzLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZW1vdmUgYSBmaWVsZFxyXG4gICAqL1xyXG4gIHJlbW92ZUZpZWxkKGtleTogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgdGhpcy52YWx1ZVtrZXldO1xyXG4gICAgdGhpcy5lbWl0KHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZXZlbnQgaGFuZGxlciBmb3IgY2hhbmdlZCBmaWVsZCBuYW1lcyB3aXRoIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIlxyXG4gICAqL1xyXG4gIGZpZWxkTmFtZUNoYW5nZShrZXk6IHN0cmluZywgbmV3dmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZVtuZXd2YWx1ZV0gPSB0aGlzLnZhbHVlW2tleV07XHJcbiAgICBkZWxldGUgdGhpcy52YWx1ZVtrZXldO1xyXG4gICAgdGhpcy5lbWl0KHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJucyB0aGUgdmFsaWRhdGlvbiBlcnJvciBvbiB0aGlzIGxldmVsIGFuZCBjYWxsIHJlY3Vyc2l2ZWx5IGZvciBhbGwgY2hpbGRyZW4uXHJcbiAgICogcmV0dXJucyBudWxsIGlmIHRoZSBmb3JtIGNvbnRlbnRzIGlzIHZhbGlkXHJcbiAgICovXHJcbiAgcmVjdXJzaXZlRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGUgPSB0aGlzLmVycm9yKCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICByZXR1cm4gZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoaWxkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkLnJlY3Vyc2l2ZUVycm9yKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGlsZHJlbikge1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikge1xyXG4gICAgICAgIGNvbnN0IHIgPSBjLnJlY3Vyc2l2ZUVycm9yKCk7XHJcbiAgICAgICAgaWYgKHIpIHtcclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2UgcHJvdmlkZWQgaW4gdGhlIHNjaGVtYSBvciB0aGUgZ2VuZXJpYyBlcnJvciBtZXNzYWdlXHJcbiAgICogcmV0dXJuZWQgZnJvbSB0aGUgdmFsaWRhdGlvbiBjb2RlXHJcbiAgICovXHJcbiAgZShlcnJvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnNjaGVtYS5lcnJvck1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybiBlcnJvciBzdHJpbmdcclxuICAgKi9cclxuICBlcnJvcigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2NoZW1hLndpZGdldCA9PT0gXCJjdXN0b21cIikge1xyXG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21FcnJvcjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNjaGVtYS5jYXNlICYmIHRoaXMuc2NoZW1hLmNhc2UuaW5kZXhPZih0aGlzLnN3aXRjaCkgPCAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLm1heEl0ZW1zKSB7XHJcbiAgICAgICAgaWYgKCEodGhpcy52YWx1ZS5sZW5ndGggPD0gdGhpcy5zY2hlbWEubWF4SXRlbXMpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lKFxyXG4gICAgICAgICAgICBcIk9ubHkgXCIgKyB0aGlzLnNjaGVtYS5tYXhJdGVtcyArIFwiIGFycmF5IGVudHJpZXMgYWxsb3dlZFwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zY2hlbWEudW5pcXVlSXRlbXMpIHtcclxuICAgICAgICBpZiAoIShuZXcgU2V0KHRoaXMudmFsdWUpLnNpemUgPT09IHRoaXMudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZShcIkFycmF5IGVudHJpZXMgbXVzdCBiZSB1bmlxdWVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNjaGVtYS5taW5JdGVtcykge1xyXG4gICAgICAgIGlmICghKHRoaXMudmFsdWUubGVuZ3RoID49IHRoaXMuc2NoZW1hLm1pbkl0ZW1zKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZShcclxuICAgICAgICAgICAgXCJBdCBsZWFzdCBcIiArIHRoaXMuc2NoZW1hLm1pbkl0ZW1zICsgXCIgYXJyYXkgZW50cmllcyByZXF1aXJlZFwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zY2hlbWEubWF4UHJvcGVydGllcykge1xyXG4gICAgICAgIGlmICghKE9iamVjdC5rZXlzKHRoaXMudmFsdWUpLmxlbmd0aCA8PSB0aGlzLnNjaGVtYS5tYXhQcm9wZXJ0aWVzKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZShcclxuICAgICAgICAgICAgXCJPbmx5IFwiICsgdGhpcy5zY2hlbWEubWF4UHJvcGVydGllcyArIFwiIGZpZWxkcyBhbGxvd2VkXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNjaGVtYS5wcm9wZXJ0eU5hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh0aGlzLnNjaGVtYS5wcm9wZXJ0eU5hbWVzKTtcclxuICAgICAgICAgIGlmICghcmUudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmUoXCJpbGxlZ2FsIGZpZWxkIG5hbWU6IFwiICsga2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLmRlcGVuZGVuY2llcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLmRlcGVuZGVuY2llcykpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnZhbHVlW2RlcF0pIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBsIG9mIHRoaXMuc2NoZW1hLmRlcGVuZGVuY2llc1tkZXBdKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlW2xdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lKGRlcCArIFwiIGRlcGVuZHMgb24gXCIgKyBsKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLm1pblByb3BlcnRpZXMpIHtcclxuICAgICAgICBpZiAoIShPYmplY3Qua2V5cyh0aGlzLnZhbHVlKS5sZW5ndGggPj0gdGhpcy5zY2hlbWEubWluUHJvcGVydGllcykpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmUoXHJcbiAgICAgICAgICAgIFwiQXQgbGVhc3QgXCIgKyB0aGlzLnNjaGVtYS5taW5Qcm9wZXJ0aWVzICsgXCIgZmllbGRzIHJlcXVpcmVkXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNjaGVtYS5tYXhMZW5ndGgpIHtcclxuICAgICAgICBpZiAoISgoXCJcIiArIHRoaXMudmFsdWUpLmxlbmd0aCA8PSB0aGlzLnNjaGVtYS5tYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lKFwiSW5wdXQgaXMgbG9uZ2VyIHRoYW4gXCIgKyB0aGlzLnNjaGVtYS5tYXhMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zY2hlbWEubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCEoKFwiXCIgKyB0aGlzLnZhbHVlKS5sZW5ndGggPj0gdGhpcy5zY2hlbWEubWluTGVuZ3RoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZShcIklucHV0IGlzIHNob3J0ZXIgdGhhbiBcIiArIHRoaXMuc2NoZW1hLm1pbkxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNjaGVtYS5tdWx0aXBsZU9mKSB7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcih0aGlzLnZhbHVlKSAvIHRoaXMuc2NoZW1hLm11bHRpcGxlT2YpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lKFwiTXVzdCBiZSBtdWx0aXBsZSBvZiBcIiArIHRoaXMuc2NoZW1hLm11bHRpcGxlT2YpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWF4aW11bSkge1xyXG4gICAgICAgIGlmICghKE51bWJlcih0aGlzLnZhbHVlKSA8IHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lKFwiTXVzdCBiZSBsZXNzIHRoYW4gXCIgKyB0aGlzLnNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLm1heGltdW0pIHtcclxuICAgICAgICBpZiAoIShOdW1iZXIodGhpcy52YWx1ZSkgPD0gdGhpcy5zY2hlbWEubWF4aW11bSkpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmUoXCJNdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCBcIiArIHRoaXMuc2NoZW1hLm1heGltdW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zY2hlbWEuZXhjbHVzaXZlTWluaW11bSkge1xyXG4gICAgICAgIGlmICghKE51bWJlcih0aGlzLnZhbHVlKSA+IHRoaXMuc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lKFwiTXVzdCBncmVhdGVyIHRoYW4gXCIgKyB0aGlzLnNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2NoZW1hLm1pbmltdW0pIHtcclxuICAgICAgICBpZiAoIShOdW1iZXIodGhpcy52YWx1ZSkgPj0gdGhpcy5zY2hlbWEubWluaW11bSkpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmUoXCJNdXN0IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBcIiArIHRoaXMuc2NoZW1hLm1pbmltdW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXModGhpcy52YWx1ZSwgTmFOKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmUoXCJyZXF1aXJlZFwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLnJlcXVpcmVkKSB7XHJcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuc2NoZW1hLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMudmFsdWVbZGVwXSAmJlxyXG4gICAgICAgICAgdGhpcy52YWx1ZVtkZXBdICE9PSBmYWxzZSAmJlxyXG4gICAgICAgICAgdGhpcy52YWx1ZVtkZXBdICE9PSAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBpZ25vcmUgJ3JlcXVpcmVkJyBpZiBkZXAgaXMgaW5hY3RpdmUgZHVlIHRvIHN3aXRjaCAvIGNhc2VcclxuICAgICAgICAgIGxldCBpbmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2NoZW1hLnN3aXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBzd2l0YyA9IHRoaXMudmFsdWVbdGhpcy5zY2hlbWEuc3dpdGNoXTtcclxuICAgICAgICAgICAgaWYgKHN3aXRjICYmIHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbZGVwXS5jYXNlPy5pbmRleE9mKHN3aXRjKSA8IDApIHtcclxuICAgICAgICAgICAgICBpbmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghaW5hY3RpdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZShkZXAgKyBcIiBpcyByZXF1aXJlZFwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNjaGVtYS5wYXR0ZXJuKSB7XHJcbiAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh0aGlzLnNjaGVtYS5wYXR0ZXJuKTtcclxuICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZShcImlsbGVnYWwgc3RyaW5nXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghcmUudGVzdCh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmUoXCJpbGxlZ2FsIHN0cmluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NoZW1hLmZvcm1hdCAmJiB0aGlzLnNlcnZpY2UuZm9ybWF0c1t0aGlzLnNjaGVtYS5mb3JtYXRdKSB7XHJcbiAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh0aGlzLnNlcnZpY2UuZm9ybWF0c1t0aGlzLnNjaGVtYS5mb3JtYXRdKTtcclxuICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZShcImlsbGVnYWwgc3RyaW5nXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghcmUudGVzdCh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmUoXCJpbGxlZ2FsIHN0cmluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB1c2UgdGhlIGVsZW1lbnQgdGl0bGUgaWYgcHJlc2VudCwgZGVmYXVsdHMgdG8gdGhlIGxhYmVsIGlucHV0IG9yIFwiXCIgaXMgYm90aCBhcmUgbnVsbFxyXG4gICAqL1xyXG4gIGdldExhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5zY2hlbWEudGl0bGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRpdGxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubGFiZWwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubGFiZWw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGlucHV0IGVsZW1lbnQgY2hhbmdlIGhhbmRsZXIuXHJcbiAgICogbm9ybWFsaXplIHRoZSBkaWZmZXJlbnQga2luZCBvZiBldmVudHMsIGhhbmRsZSB0aGUgZGF0YXR5cGVzLCBzZXQgdGhlIHZhbHVlIGFuZCBlbWl0IHRoZSBjaGFuZ2VcclxuICAgKi9cclxuICBjaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IGV2ZW50VGFyZ2V0OiBhbnk7XHJcblxyXG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTWF0U2VsZWN0Q2hhbmdlKSB7XHJcbiAgICAgIGV2ZW50ID0gZXZlbnQudmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQpIHtcclxuICAgICAgZXZlbnQgPSB0aGlzLnNlcmlhbGl6ZURhdGUoXHJcbiAgICAgICAgZXZlbnQudmFsdWUsXHJcbiAgICAgICAgdGhpcy5zY2hlbWEuZGF0ZUZvcm1hdCxcclxuICAgICAgICB0aGlzLnNjaGVtYS50eXBlXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgICBldmVudCA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNYXRDaGVja2JveENoYW5nZSkge1xyXG4gICAgICBldmVudCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzYXZlIHRoZSBldmVudCB0YXJnZXQgaW4gY2FzZSB0aGUgcGFyc2luZyBjaGFuZ2VzIHRoZSB2YWx1ZVxyXG4gICAgICAvLyAoZS5nLiBpbnRlZ2VyIGlucHV0IDUuMyBiZWNvbWVzIDUsIHRoaXMgaXMgcmVmbGVjdGVkIG9uIHRoZSBVSSB2aWEgdGhpcyBoYW5kbGUpXHJcbiAgICAgIGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBldmVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQgPT09IFwiXCIpIHtcclxuICAgICAgZXZlbnQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudCA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNjaGVtYS50eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBwYXJzZUZsb2F0KGV2ZW50KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zY2hlbWEudHlwZSA9PT0gXCJpbnRlZ2VyXCIpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlSW50KGV2ZW50LCAxMCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2NoZW1hLnR5cGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgZXZlbnQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBpZiAoZXZlbnQgPT09IFwidHJ1ZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSBcImZhbHNlXCIpIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBldmVudDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBldmVudDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zY2hlbWEudHlwZSA9PT0gXCJhcnJheVwiKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBldmVudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0aGlzLnNjaGVtYS50eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBhbGxvd3MgZm9yIHRoZSByZXN1bHQgb2YgYSBmaWxlIHVwbG9hZCB0byBiZSB3cml0dGVuIGludG8gYSB0ZXh0IGZvcm0gZWxlbWVudFxyXG4gICAqL1xyXG4gIGhhbmRsZUZpbGVJbnB1dChldmVudDogYW55KSB7XHJcbiAgICBpZiAoMTAyNCAqIDEwMjQgPD0gZXZlbnQudGFyZ2V0LmZpbGVzLml0ZW0oMCkuc2l6ZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIlRoZSBmaWxlIHNpemUgaXMgbGltaXRlZCB0byAxTUJcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLnZhbHVlID0gcmVhZGVyLnJlc3VsdDtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgfTtcclxuICAgXHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXMuaXRlbSgwKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgZXhhbXBsZSB2YWx1ZXMgZnJvbSBleGFtcGxlIGFycmF5IGFuZCBkZWZhdWx0XHJcbiAgICovXHJcbiAgZXhhbXBsZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2NoZW1hLmV4YW1wbGVzICYmIHRoaXMuc2NoZW1hLmV4YW1wbGVzWzBdKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5leGFtcGxlc1swXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNjaGVtYS5kZWZhdWx0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5kZWZhdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBsb2FkIHRoZSBkeW5hbWljIGN1c3RvbSB3aWRnZXRcclxuICAgKi9cclxuICBsb2FkQ29tcG9uZW50KCkge1xyXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9XHJcbiAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxyXG4gICAgICAgIHRoaXMuc2VydmljZS5yZWdpc3RyeVt0aGlzLnNjaGVtYS53aWRnZXRUeXBlXVxyXG4gICAgICApO1xyXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMud2lkZ2V0SG9zdC52aWV3Q29udGFpbmVyUmVmO1xyXG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcblxyXG4gICAgLy8gaW5wdXQgdmFsdWVzXHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFdpZGdldENvbXBvbmVudCkubGFiZWwgPSB0aGlzLmxhYmVsO1xyXG4gICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBXaWRnZXRDb21wb25lbnQpLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgV2lkZ2V0Q29tcG9uZW50KS5zY2hlbWEgPSB0aGlzLnNjaGVtYTtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgV2lkZ2V0Q29tcG9uZW50KS5yb290U2NoZW1hID0gdGhpcy5yb290U2NoZW1hO1xyXG4gICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBXaWRnZXRDb21wb25lbnQpLnJvb3RWYWx1ZSA9IHRoaXMucm9vdFZhbHVlO1xyXG5cclxuICAgIC8vIHN1YnNjcmliZSB0byB2YWx1ZSBjaGFuZ2VzIGFuZCBmb3J3YXJkIHRoZW1cclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgV2lkZ2V0Q29tcG9uZW50KS52YWx1ZUNoYW5nZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy52YWx1ZSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHN1YnNjcmliZSB0byBlcnJvciBjaGFuZ2VzIGFuZCBmb3J3YXJkIHRoZW1cclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgV2lkZ2V0Q29tcG9uZW50KS5lcnJvckNoYW5nZS5zdWJzY3JpYmUoXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tRXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yQ2hhbmdlLmVtaXQoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdXNlZCBmb3IgZXhwYW5zaW9uIHBhbmVscyAtIHNldCB2YWx1ZSBhbmQgZm9yd2FyZCBldmVudFxyXG4gICAqL1xyXG4gIHNldEFuZEVtaXQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50O1xyXG4gICAgdGhpcy5lbWl0KHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGFuIGFycmF5IGVsZW1lbnQgYW5kIGVtaXQgdmFsdWUgY2hhbmdlIGV2ZW50XHJcbiAgICovXHJcbiAgc2V0SW5kZXhBbmRFbWl0KGk6IG51bWJlciwgZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZVtpXSA9IGV2ZW50O1xyXG4gICAgdGhpcy5lbWl0KHRoaXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGFuIGFycmF5IGVsZW1lbnQncyBmaWVsZCBhbmQgZW1pdCB2YWx1ZSBjaGFuZ2UgZXZlbnQgKGFwcGxpZXMgdG8gdGFibGUgbGF5b3V0KVxyXG4gICAqL1xyXG4gIHNldEluZGV4QW5kRW1pdFRhYmxlKGk6IG51bWJlciwgZmllbGQ6IHN0cmluZywgZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZVtpXVtmaWVsZF0gPSBldmVudDtcclxuICAgIHRoaXMuZW1pdCh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHVzZWQgd2hlbiBoaWRlVW5kZWZpbmVkIGlzIGFjdGl2ZS4gQ2FsbGVkIGZyb20gdGhlIFVJIHRvXHJcbiAgICogc2hvdyBhIHByb3BlcnR5IHdpdGggdW5kZWZpbmVkIHZhbHVlIChpbiBvcmRlciB0byBiZSBhYmxlIHRvIHNldCBpZiBpbiB0aGUgZm9ybSlcclxuICAgKi9cclxuICBzaG93UHJvcGVydHkocHJvcDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHt9O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsdWVbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnZhbHVlW3Byb3BdID0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZVtwcm9wXSA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnZhbHVlW3Byb3BdID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdXNlZCB3aGVuIGhpZGVVbmRlZmluZWQgaXMgYWN0aXZlLiBDYWxsZWQgZnJvbSB0aGUgVUlcclxuICAgKiB0byBkZXRlcm1pbmUgd2hpY2ggcHJvcGVydGllcyBhcmUgaW5jbHVkZWQgaW4gdGhlIFwidG8gYWRkXCIgbGlzdFxyXG4gICAqL1xyXG4gIHNob3dQcm9wZXJ0eUxpc3QoKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKHRoaXMuc2NoZW1hLnN3aXRjaCAmJiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHN3ID0gdGhpcy52YWx1ZVt0aGlzLnNjaGVtYS5zd2l0Y2hdO1xyXG4gICAgICBjb25zdCBwcm9wcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKSkge1xyXG4gICAgICAgIGlmICh2LmNhc2UpIHtcclxuICAgICAgICAgIGlmICh2LmNhc2UuaW5jbHVkZXMoc3cpKSB7XHJcbiAgICAgICAgICAgIHByb3BzLnB1c2goayk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByb3BzLnB1c2goayk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwcm9wcy5zb3J0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvcGVydGllcykuc29ydCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc3RyaW5nIHRvIGRhdGVcclxuICAgKiBAcGFyYW0gZGF0ZSAgICBkYXRlIHN0cmluZyAvIG51bWJlciAobWlsbGlzZWNzIHNpbmNlIDE5NzApXHJcbiAgICogQHBhcmFtIGZvcm1hdCAgZGF0ZSBmb3JtYXRcclxuICAgKi9cclxuICBwYXJzZURhdGUoZGF0ZTogYW55LCBmb3JtYXQ6IHN0cmluZyk6IERhdGUge1xyXG4gICAgaWYgKCFkYXRlICYmIGRhdGUgIT09IDApIHtcclxuICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FtZURhdGUobmV3IERhdGUoZGF0ZSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmb3JtYXQpIHtcclxuICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwZGF0ZSA9IGRhdGUuc3BsaXQodGhpcy5nZXREZWxpbWl0ZXIoZm9ybWF0KSk7XHJcbiAgICBjb25zdCBwZm9ybWF0ID0gZm9ybWF0LnNwbGl0KHRoaXMuZ2V0RGVsaW1pdGVyKGZvcm1hdCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuc2FtZURhdGUoXHJcbiAgICAgIG5ldyBEYXRlKFxyXG4gICAgICAgIHBkYXRlW3Bmb3JtYXQuaW5kZXhPZihcInl5eXlcIildLFxyXG4gICAgICAgIHBkYXRlW3Bmb3JtYXQuaW5kZXhPZihcIk1NXCIpXSAtIDEsXHJcbiAgICAgICAgcGRhdGVbcGZvcm1hdC5pbmRleE9mKFwiZGRcIildXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBtYWtlIHN1cmUgdG8gcmV0dXJuIHRoZSBzYW1lIGRhdGUgb2JqZWN0IGluc3RhbmNlIChjYW5ub3QgZGVsZXRlIGRhdGUgIzgzKVxyXG4gICAqL1xyXG4gIHNhbWVEYXRlKG5kOiBEYXRlKTogRGF0ZSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0ZSkge1xyXG4gICAgICB0aGlzLmRhdGUgPSBuZDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGUuZ2V0VGltZSgpICE9PSBuZC5nZXRUaW1lKCkpIHtcclxuICAgICAgdGhpcy5kYXRlID0gbmQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZGF0ZSB0byBzdHJpbmdcclxuICAgKiBAcGFyYW0gZGF0ZSAgICB0aGUgZGF0ZSB0byBzZXJpYWxpemVcclxuICAgKiBAcGFyYW0gZm9ybWF0ICB0aGUgZGF0ZSBmb3JtYXQgKGUuZy4gZGQtTU0teXl5eSlcclxuICAgKiBAcGFyYW0gdHlwZSAgICB0YXJnZXQgZGF0YXR5cGUgKGFsbG93cyBzZXJpYWxpemluZyB0byBtaWxsaXNlY3Mgc2luY2UgMTk3MClcclxuICAgKi9cclxuICBzZXJpYWxpemVEYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGRhdGUgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImludGVnZXJcIiB8fCB0eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHJldHVybiBcIlwiICsgZGF0ZS52YWx1ZU9mKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZvcm1hdCkge1xyXG4gICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGZvcm1hdCA9IGZvcm1hdC5zcGxpdCh0aGlzLmdldERlbGltaXRlcihmb3JtYXQpKTtcclxuICAgIGNvbnN0IHBkYXRlID0gW251bGwsIG51bGwsIG51bGxdO1xyXG4gICAgcGRhdGVbcGZvcm1hdC5pbmRleE9mKFwieXl5eVwiKV0gPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBwZGF0ZVtwZm9ybWF0LmluZGV4T2YoXCJNTVwiKV0gPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgcGRhdGVbcGZvcm1hdC5pbmRleE9mKFwiZGRcIildID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBwZGF0ZVswXSArXHJcbiAgICAgIHRoaXMuZ2V0RGVsaW1pdGVyKGZvcm1hdCkgK1xyXG4gICAgICBwZGF0ZVsxXSArXHJcbiAgICAgIHRoaXMuZ2V0RGVsaW1pdGVyKGZvcm1hdCkgK1xyXG4gICAgICBwZGF0ZVsyXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbmQgdGhlIGZpcnN0IG5vbiBsZXR0ZXIgY2hhcmFjdGVyIGluIGEgZGF0ZSBmb3JtYXQgc3VjaCBhcyBkZC9NTS95eXl5IChyZXR1cm5zIC8pXHJcbiAgICovXHJcbiAgZ2V0RGVsaW1pdGVyKGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRlbGltID0gZm9ybWF0Lm1hdGNoKC9cXFcvZyk7XHJcbiAgICBpZiAoIWRlbGltWzBdKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGRlbGltaXRlciBmb3VuZCBpbiBkYXRlIGZvcm1hdDogXCIgKyBmb3JtYXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlbGltWzBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbmV3IGNoaXAgZW50ZXJlZFxyXG4gICAqL1xyXG4gIGFkZENoaXAoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LmlucHV0O1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcclxuXHJcbiAgICAvLyBBZGQgb3VyIGZydWl0XHJcbiAgICBpZiAoKHZhbHVlIHx8IFwiXCIpLnRyaW0oKSkge1xyXG4gICAgICBpZiAoIXRoaXMudmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy52YWx1ZS5wdXNoKHZhbHVlLnRyaW0oKSk7XHJcbiAgICAgIHRoaXMuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNldCB0aGUgaW5wdXQgdmFsdWVcclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBpbnB1dC52YWx1ZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZW1vdmUgYSBjaGlwXHJcbiAgICovXHJcbiAgcmVtb3ZlQ2hpcCh2OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy52YWx1ZS5pbmRleE9mKHYpO1xyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjaGlwcyBkJmQgaGFuZGxlclxyXG4gICAqL1xyXG4gIGRyb3BDaGlwKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcclxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLnZhbHVlLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgdGhpcy5lbWl0KHRoaXMudmFsdWUpO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj1cIihzY2hlbWEuZXhwYW5kZWQgPT09IHRydWUgfHwgc2NoZW1hLmV4cGFuZGVkID09PSBmYWxzZSkgJiYgIWluRXhwYW5zaW9uXCJcclxuICBbbmdTdHlsZV09XCJzY2hlbWEuc3R5bGVcIiBbbmdDbGFzc109XCJzY2hlbWEuY2xhc3NcIiBbZXhwYW5kZWRdPVwic2NoZW1hLmV4cGFuZGVkXCI+XHJcbiAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgPG1hdC1wYW5lbC10aXRsZT57e2xhYmVsfX08L21hdC1wYW5lbC10aXRsZT5cclxuICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+e3tzY2hlbWEuZGVzY3JpcHRpb259fTwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgPGxpYi1qc29uLXNjaGVtYS1mb3JtICNjaGlsZCBbbGFiZWxdPVwibGFiZWxcIiBbbmFtZV09XCJuYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCIgKHZhbHVlQ2hhbmdlKT1cInNldEFuZEVtaXQoJGV2ZW50KVwiXHJcbiAgICBbc3dpdGNoXT1cInN3aXRjaFwiIFtyb290VmFsdWVdPVwicm9vdFZhbHVlXCIgW3Jvb3RTY2hlbWFdPVwicm9vdFNjaGVtYVwiIFtzY2hlbWFdPVwic2NoZW1hXCIgW2luRXhwYW5zaW9uXT1cInRydWVcIlxyXG4gICAgW2Jhc2VdPVwiYmFzZVwiIChzY2hlbWFDaGFuZ2UpPVwic2NoZW1hQ2hhbmdlLmVtaXQoKVwiPlxyXG4gIDwvbGliLWpzb24tc2NoZW1hLWZvcm0+XHJcbjwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuXHJcbjxkaXYgKm5nSWY9XCIoc2NoZW1hLmV4cGFuZGVkID09PSBudWxsIHx8IHNjaGVtYS5leHBhbmRlZCA9PT0gdW5kZWZpbmVkKSB8fCBpbkV4cGFuc2lvblwiXHJcbiAgW21hdFRvb2x0aXBdPVwic2NoZW1hLmRlc2NyaXB0aW9uXCI+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzZXJ2aWNlLmVkaXRNb2RlICYmICFzY2hlbWEuc3RhdGljICYmICFpbkFycmF5ICYmIGdldExheW91dCgpICE9PSAnbm9uZSdcIj5cclxuICAgIDxtYXQtaWNvbiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwibmFtZSA/ICdGb3JtIGVsZW1lbnQgJytuYW1lIDogKGlzUm9vdCA/ICdGb3JtIHJvb3QnIDogJycpXCI+XHJcbiAgICAgIG1vcmVfdmVydFxyXG4gICAgPC9tYXQtaWNvbj5cclxuXHJcbiAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZWRpdC5lZGl0KClcIj5cclxuICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+RWRpdFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWVkaXQuY2FuQWRkKClcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWRkXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+U2hvd1xyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWVkaXQuY2FuQWRkU3ViKClcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWRkMlwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5wbGF5bGlzdF9hZGQ8L21hdC1pY29uPlNob3cgaW5saW5lXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIgIWVkaXQuY2FuSGlkZSgpXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZWRpdC5oaWRlKClcIj5cclxuICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5IaWRlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhZWRpdC5jYW5VcCgpXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZWRpdC51cCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPm5vcnRoX3dlc3Q8L21hdC1pY29uPlVwIC8gTGVmdFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWVkaXQuY2FuRG93bigpXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZWRpdC5kb3duKClcIj5cclxuICAgICAgICA8bWF0LWljb24+c291dGhfZWFzdDwvbWF0LWljb24+RG93biAvIFJpZ2h0XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtbWVudT5cclxuXHJcbiAgICA8bWF0LW1lbnUgI21hZGQ9XCJtYXRNZW51XCI+XHJcbiAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IHggb2YgZWRpdC5hZGRhYmxlKClcIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJlZGl0LmFkZCh4KVwiPnt7eH19PC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG5cclxuICAgIDxtYXQtbWVudSAjbWFkZDI9XCJtYXRNZW51XCI+XHJcbiAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IHggb2YgZWRpdC5zdWJhZGRhYmxlKClcIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJlZGl0LmFkZFN1Yih4KVwiPnt7eH19PC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIG9iamVjdCByb3cgd3JhcCBsYXlvdXQgLS0+XHJcbiAgPHNwYW4gKm5nSWY9XCJnZXRMYXlvdXQoKSA9PT0gJ29iamVjdCdcIiBbZnhMYXlvdXRdPVwic2NoZW1hLmxheW91dCA9PT0gJ3ZlcnRpY2FsJyA/ICdjb2x1bW4nIDogJ3JvdyB3cmFwJ1wiXHJcbiAgICBbbmdTdHlsZV09XCJzY2hlbWEuc3R5bGVcIiBbbmdDbGFzc109XCJzY2hlbWEuY2xhc3NcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wIG9mIG9yZGVyZWRQcm9wZXJ0aWVzXCIgW2Z4TGF5b3V0XT1cInNjaGVtYS5sYXlvdXQgIT09ICd2ZXJ0aWNhbCcgPyAnY29sdW1uJyA6ICdyb3cgd3JhcCdcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCIgbGV0IHggb2Ygb3AgfCBrZXl2YWx1ZTpvcmlnaW5hbE9yZGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBtYXJnaW46IDJweFwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ4LnZhbHVlICYmICh4LnZhbHVlLnR5cGUgfHwgeC52YWx1ZS4kcmVmKVwiPlxyXG4gICAgICAgICAgPGxpYi1qc29uLXNjaGVtYS1mb3JtICNjaGlsZHJlbiBbbmFtZV09XCJ4LmtleVwiIFtsYWJlbF09XCJ4LnZhbHVlLnRpdGxlID8geC52YWx1ZS50aXRsZSA6IHgua2V5XCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlID8gdmFsdWVbeC5rZXldIDogdW5kZWZpbmVkXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoeC5rZXksICRldmVudClcIlxyXG4gICAgICAgICAgICBbc3dpdGNoXT1cInZhbHVlID8gdmFsdWVbc2NoZW1hLnN3aXRjaF0gOiB1bmRlZmluZWRcIiBbcm9vdFZhbHVlXT1cInJvb3RWYWx1ZVwiIFtyb290U2NoZW1hXT1cInJvb3RTY2hlbWFcIlxyXG4gICAgICAgICAgICBbc2NoZW1hXT1cIngudmFsdWVcIiBbcGFyZW50U2NoZW1hXT1cInNjaGVtYVwiXHJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJzY2hlbWEucmVxdWlyZWQgPyBzY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoeC5rZXkpIDogZmFsc2VcIlxyXG4gICAgICAgICAgICBbaGlkZVVuZGVmaW5lZF09XCJzY2hlbWEuaGlkZVVuZGVmaW5lZFwiIFtiYXNlXT1cImJhc2VcIiAoc2NoZW1hQ2hhbmdlKT1cInNjaGVtYUNoYW5nZS5lbWl0KClcIj5cclxuICAgICAgICAgIDwvbGliLWpzb24tc2NoZW1hLWZvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2NoZW1hLmhpZGVVbmRlZmluZWRcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBweDtcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB4IG9mIHNob3dQcm9wZXJ0eUxpc3QoKVwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwidmFsdWUgPyB2YWx1ZVt4XSA6IGZhbHNlXCIgW2NoZWNrZWRdPVwidmFsdWUgJiYgKHZhbHVlW3hdICE9PSB1bmRlZmluZWQpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzaG93UHJvcGVydHkoeClcIj5cclxuICAgICAgICAgICAge3t4fX1cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1tZW51PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9zcGFuPlxyXG5cclxuICA8IS0tIGFkZGl0aW9uYWwgcHJvcGVydGllcyAtLT5cclxuICA8c3BhbiAqbmdJZj1cImdldExheW91dCgpID09PSAnYWRkaXRpb25hbFByb3BlcnRpZXMnXCIgW2Z4TGF5b3V0XT1cInNjaGVtYS5sYXlvdXQgPT09ICd2ZXJ0aWNhbCcgPyAnY29sdW1uJyA6ICdyb3cgd3JhcCdcIlxyXG4gICAgW25nU3R5bGVdPVwic2NoZW1hLnN0eWxlXCIgW25nQ2xhc3NdPVwic2NoZW1hLmNsYXNzXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCB4IG9mIHZhbHVlIHwga2V5dmFsdWU6b3JpZ2luYWxPcmRlcjsgbGV0IGk9aW5kZXhcIlxyXG4gICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IG1hcmdpbjogMnB4OyBwb3NpdGlvbjogcmVsYXRpdmVcIiAobW91c2VlbnRlcik9XCJob3Zlcj1pXCIgKG1vdXNlbGVhdmUpPVwiaG92ZXI9bnVsbFwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57e2dldExhYmVsKCl9fSBrZXk8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cInJlYWRPbmx5XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbWF0SW5wdXQgW3ZhbHVlXT1cIngua2V5XCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwiZmllbGROYW1lQ2hhbmdlKHgua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPGxpYi1qc29uLXNjaGVtYS1mb3JtICNjaGlsZHJlbiBbbGFiZWxdPVwiZ2V0TGFiZWwoKSArICcgdmFsdWUnXCIgW3ZhbHVlXT1cInZhbHVlW3gua2V5XVwiXHJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoeC5rZXksICRldmVudClcIiBbcm9vdFZhbHVlXT1cInJvb3RWYWx1ZVwiIFtyb290U2NoZW1hXT1cInJvb3RTY2hlbWFcIlxyXG4gICAgICAgIFtzY2hlbWFdPVwic2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIgaW5BcnJheT1cInRydWVcIiBbYmFzZV09XCJiYXNlXCIgKHNjaGVtYUNoYW5nZSk9XCJzY2hlbWFDaGFuZ2UuZW1pdCgpXCI+XHJcbiAgICAgIDwvbGliLWpzb24tc2NoZW1hLWZvcm0+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCIhcmVhZE9ubHlcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZUZpZWxkKHgua2V5KVwiIGNsYXNzPVwiZXhhbXBsZS1oYW5kbGVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e2dldExhYmVsKCl9fVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5yZW1vdmVfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cIiFyZWFkT25seVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiIGFkZEZpZWxkKClcIiBtYXRUb29sdGlwPVwie3tnZXRMYWJlbCgpfX1cIj5cclxuICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L3NwYW4+XHJcblxyXG4gIDwhLS0gYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRhYiBsYXlvdXQgLS0+XHJcbiAgPG1hdC10YWItZ3JvdXAgYW5pbWF0aW9uRHVyYXRpb249XCIwbXNcIiAqbmdJZj1cImdldExheW91dCgpID09PSAnYWRkaXRpb25hbFByb3BlcnRpZXNUYWInXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDk2dndcIlxyXG4gICAgW25nU3R5bGVdPVwic2NoZW1hLnN0eWxlXCIgW25nQ2xhc3NdPVwic2NoZW1hLmNsYXNzXCI+XHJcbiAgICA8bWF0LXRhYiAqbmdGb3I9XCJsZXQgeCBvZiB2YWx1ZSB8IGtleXZhbHVlOm9yaWdpbmFsT3JkZXI7IGxldCBpPWluZGV4XCIgc3R5bGU9XCJtYXJnaW46IDJweDsgcG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFyZWFkT25seVwiPlxyXG4gICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIG1hdElucHV0IFt2YWx1ZV09XCJ4LmtleVwiIChjaGFuZ2UpPVwiZmllbGROYW1lQ2hhbmdlKHgua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJyZWFkT25seVwiPnt7eC5rZXl9fTwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPGxpYi1qc29uLXNjaGVtYS1mb3JtICNjaGlsZHJlbiBbdmFsdWVdPVwidmFsdWVbeC5rZXldXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoeC5rZXksICRldmVudClcIlxyXG4gICAgICAgIFtyb290VmFsdWVdPVwicm9vdFZhbHVlXCIgW3Jvb3RTY2hlbWFdPVwicm9vdFNjaGVtYVwiIFtzY2hlbWFdPVwic2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIgaW5BcnJheT1cInRydWVcIlxyXG4gICAgICAgIFtiYXNlXT1cImJhc2VcIiAoc2NoZW1hQ2hhbmdlKT1cInNjaGVtYUNoYW5nZS5lbWl0KClcIj5cclxuICAgICAgPC9saWItanNvbi1zY2hlbWEtZm9ybT5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyZWFkT25seVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlRmllbGQoeC5rZXkpXCIgY2xhc3M9XCJleGFtcGxlLWhhbmRsZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcD1cInt7Z2V0TGFiZWwoKX19XCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnJlbW92ZV9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gICAgPG1hdC10YWIgKm5nSWY9XCIhcmVhZE9ubHlcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZEZpZWxkKClcIiBtYXRUb29sdGlwPVwie3tnZXRMYWJlbCgpfX1cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgPCEtLSBhcnJheSByb3cgd3JhcCBsYXlvdXQgLS0+XHJcbiAgPHNwYW4gKm5nSWY9XCJnZXRMYXlvdXQoKSA9PT0gJ2FycmF5J1wiIFtmeExheW91dF09XCJzY2hlbWEubGF5b3V0ID09PSAndmVydGljYWwnID8gJ2NvbHVtbicgOiAncm93IHdyYXAnXCJcclxuICAgIFtuZ1N0eWxlXT1cInNjaGVtYS5zdHlsZVwiIFtuZ0NsYXNzXT1cInNjaGVtYS5jbGFzc1wiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgeCBvZiB2YWx1ZTsgbGV0IGk9aW5kZXhcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IG1hcmdpbjogMnB4OyBwb3NpdGlvbjogcmVsYXRpdmVcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJob3Zlcj1pXCIgKG1vdXNlbGVhdmUpPVwiaG92ZXI9bnVsbFwiPlxyXG4gICAgICA8bGliLWpzb24tc2NoZW1hLWZvcm0gI2NoaWxkcmVuIFtsYWJlbF09XCJnZXRMYWJlbCgpXCIgW3ZhbHVlXT1cInZhbHVlW2ldXCIgKHZhbHVlQ2hhbmdlKT1cInNldEluZGV4QW5kRW1pdChpLCAkZXZlbnQpXCJcclxuICAgICAgICBpbkFycmF5PVwidHJ1ZVwiIFtyb290VmFsdWVdPVwicm9vdFZhbHVlXCIgW3Jvb3RTY2hlbWFdPVwicm9vdFNjaGVtYVwiIFtzY2hlbWFdPVwic2NoZW1hLml0ZW1zXCIgW2Jhc2VdPVwiYmFzZVwiXHJcbiAgICAgICAgKHNjaGVtYUNoYW5nZSk9XCJzY2hlbWFDaGFuZ2UuZW1pdCgpXCI+XHJcbiAgICAgIDwvbGliLWpzb24tc2NoZW1hLWZvcm0+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCIhcmVhZE9ubHlcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZShpKVwiIGNsYXNzPVwiZXhhbXBsZS1oYW5kbGVcIiBtYXRUb29sdGlwPVwie3tnZXRMYWJlbCgpfX1cIj5cclxuICAgICAgICA8bWF0LWljb24+cmVtb3ZlX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gKm5nSWY9XCIhcmVhZE9ubHlcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIiBhZGQoKVwiIG1hdFRvb2x0aXA9XCJ7e2dldExhYmVsKCl9fVwiPlxyXG4gICAgICA8bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvc3Bhbj5cclxuXHJcbiAgPCEtLSBhcnJheSBjaGlwcyBsYXlvdXQgLS0+XHJcbiAgPHNwYW4gKm5nSWY9XCJnZXRMYXlvdXQoKSA9PT0gJ2NoaXBzJ1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIFtuZ1N0eWxlXT1cInNjaGVtYS5zdHlsZVwiIFtuZ0NsYXNzXT1cInNjaGVtYS5jbGFzc1wiPlxyXG4gICAgICA8bWF0LWNoaXAtbGlzdCAjY2hpcExpc3QgYXJpYS1sYWJlbD1cIkZydWl0IHNlbGVjdGlvblwiIGNka0Ryb3BMaXN0IGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BDaGlwKCRldmVudClcIj5cclxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IHYgb2YgdmFsdWVcIiBbcmVtb3ZhYmxlXT1cIiFyZWFkT25seVwiIChyZW1vdmVkKT1cInJlbW92ZUNoaXAodilcIiBjZGtEcmFnPlxyXG4gICAgICAgICAge3t2fX1cclxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgICA8aW5wdXQgW3BsYWNlaG9sZGVyXT1cInNjaGVtYS50aXRsZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIlxyXG4gICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGRDaGlwKCRldmVudClcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRPbmx5XCI+XHJcbiAgICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9zcGFuPlxyXG5cclxuICA8IS0tIGFycmF5IHRhYiBsYXlvdXQgLS0+XHJcbiAgPG1hdC10YWItZ3JvdXAgYW5pbWF0aW9uRHVyYXRpb249XCIwbXNcIiAqbmdJZj1cImdldExheW91dCgpID09PSAndGFiJ1wiIHN0eWxlPVwibWF4LXdpZHRoOiA5NnZ3XCIgW25nU3R5bGVdPVwic2NoZW1hLnN0eWxlXCJcclxuICAgIFtuZ0NsYXNzXT1cInNjaGVtYS5jbGFzc1wiPlxyXG4gICAgPG1hdC10YWIgKm5nRm9yPVwibGV0IHggb2YgdmFsdWU7IGxldCBpPWluZGV4XCIgc3R5bGU9XCJtYXJnaW46IDJweDsgcG9zaXRpb246IHJlbGF0aXZlXCIgW2xhYmVsXT1cImdldExhYmVsKCkrJyAnK2lcIj5cclxuICAgICAgPGxpYi1qc29uLXNjaGVtYS1mb3JtICNjaGlsZHJlbiBbdmFsdWVdPVwidmFsdWVbaV1cIiAodmFsdWVDaGFuZ2UpPVwic2V0SW5kZXhBbmRFbWl0KGksICRldmVudClcIiBpbkFycmF5PVwidHJ1ZVwiXHJcbiAgICAgICAgW3Jvb3RWYWx1ZV09XCJyb290VmFsdWVcIiBbcm9vdFNjaGVtYV09XCJyb290U2NoZW1hXCIgW3NjaGVtYV09XCJzY2hlbWEuaXRlbXNcIiBbYmFzZV09XCJiYXNlXCJcclxuICAgICAgICAoc2NoZW1hQ2hhbmdlKT1cInNjaGVtYUNoYW5nZS5lbWl0KClcIj5cclxuICAgICAgPC9saWItanNvbi1zY2hlbWEtZm9ybT5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyZWFkT25seVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlKGkpXCIgY2xhc3M9XCJleGFtcGxlLWhhbmRsZVwiIG1hdFRvb2x0aXA9XCJ7e2dldExhYmVsKCl9fVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5yZW1vdmVfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LXRhYj5cclxuICAgIDxtYXQtdGFiICpuZ0lmPVwiIXJlYWRPbmx5XCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCIgYWRkKClcIiBtYXRUb29sdGlwPVwie3tnZXRMYWJlbCgpfX1cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgPCEtLSBhcnJheSB0YWJsZSBsYXlvdXQgLS0+XHJcbiAgPHNwYW4gKm5nSWY9XCJnZXRMYXlvdXQoKSA9PT0gJ3RhYmxlJ1wiIFtuZ1N0eWxlXT1cInNjaGVtYS5zdHlsZVwiIFtuZ0NsYXNzXT1cInNjaGVtYS5jbGFzc1wiPlxyXG4gICAgPHRhYmxlIHN1bW1hcnk9XCJQcm9wZXJ0aWVzIHRhYmxlXCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGggKm5nRm9yPVwibGV0IHggb2Ygc2NoZW1hLml0ZW1zLnByb3BlcnRpZXMgfCBrZXl2YWx1ZTpvcmlnaW5hbE9yZGVyXCIgc2NvcGU9XCJjb2xcIj5cclxuICAgICAgICAgIHt7eC52YWx1ZS50aXRsZSA/IHgudmFsdWUudGl0bGUgOiB4LmtleX19PC90aD5cclxuICAgICAgICA8dGggaWQ9XCJyZW1vdmVfcm93XCI+PC90aD5cclxuICAgICAgPC90cj5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgdmFsdWU7IGxldCBpPWluZGV4XCI+XHJcbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCB4IG9mIHNjaGVtYS5pdGVtcy5wcm9wZXJ0aWVzIHwga2V5dmFsdWU6b3JpZ2luYWxPcmRlclwiPlxyXG4gICAgICAgICAgPGxpYi1qc29uLXNjaGVtYS1mb3JtICNjaGlsZHJlbiBbdmFsdWVdPVwicm93W3gua2V5XVwiICh2YWx1ZUNoYW5nZSk9XCJzZXRJbmRleEFuZEVtaXRUYWJsZShpLCB4LmtleSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtyb290VmFsdWVdPVwicm9vdFZhbHVlXCIgW3Jvb3RTY2hlbWFdPVwicm9vdFNjaGVtYVwiIFtzY2hlbWFdPVwic2NoZW1hLml0ZW1zLnByb3BlcnRpZXNbeC5rZXldXCIgW2Jhc2VdPVwiYmFzZVwiXHJcbiAgICAgICAgICAgIChzY2hlbWFDaGFuZ2UpPVwic2NoZW1hQ2hhbmdlLmVtaXQoKVwiPlxyXG4gICAgICAgICAgPC9saWItanNvbi1zY2hlbWEtZm9ybT5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcmVhZE9ubHlcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZShpKVwiIG1hdFRvb2x0aXA9XCJ7e2dldExhYmVsKCl9fVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cIiFyZWFkT25seVwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiIGFkZCgpXCIgbWF0VG9vbHRpcD1cInt7Z2V0TGFiZWwoKX19XCI+XHJcbiAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9zcGFuPlxyXG5cclxuICA8IS0tIGVudW0gLS0+XHJcbiAgPGRpdiAqbmdJZj1cImdldExheW91dCgpID09PSAnZW51bSdcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBbbmdTdHlsZV09XCJzY2hlbWEuc3R5bGVcIiBbbmdDbGFzc109XCJzY2hlbWEuY2xhc3NcIj5cclxuICAgICAgPG1hdC1sYWJlbD57e2xhYmVsfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cInZhbHVlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJyZWFkT25seVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB4IG9mIHNjaGVtYS5lbnVtXCIgW3ZhbHVlXT1cInhcIj57e3h9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxwIGNsYXNzPVwiZXJyb3IgbWF0LXR5cG9ncmFwaHlcIj57e2Vycm9yKCl9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhcnJheS1zZWxlY3QgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImdldExheW91dCgpID09PSAnYXJyYXktc2VsZWN0J1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIFttYXRUb29sdGlwXT1cInNjaGVtYS5kZXNjcmlwdGlvblwiIFtuZ1N0eWxlXT1cInNjaGVtYS5zdHlsZVwiIFtuZ0NsYXNzXT1cInNjaGVtYS5jbGFzc1wiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7bGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBtdWx0aXBsZSBbdmFsdWVdPVwidmFsdWVcIiAoZm9jdXMpPVwiZm9jdXMoKVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGNob2ljZXMgfCBhc3luY1wiIFt2YWx1ZV09XCJjaG9pY2UudmFsdWVcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiY2hvaWNlLm5hbWUgIT09IGNob2ljZS52YWx1ZSA/IGNob2ljZS52YWx1ZSA6IG51bGxcIj5cclxuICAgICAgICAgIHt7Y2hvaWNlLm5hbWV9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxwIGNsYXNzPVwiZXJyb3IgbWF0LXR5cG9ncmFwaHlcIj57e2Vycm9yKCl9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBkYXRlIGVsZW1lbnQgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImdldExheW91dCgpID09PSAnZGF0ZSdcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBbbmdTdHlsZV09XCJzY2hlbWEuc3R5bGVcIiBbbmdDbGFzc109XCJzY2hlbWEuY2xhc3NcIj5cclxuICAgICAgPG1hdC1sYWJlbD57e2xhYmVsfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIG1hdElucHV0IFt2YWx1ZV09XCJwYXJzZURhdGUodmFsdWUsIHNjaGVtYS5kYXRlRm9ybWF0KVwiIChkYXRlQ2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPHAgY2xhc3M9XCJlcnJvciBtYXQtdHlwb2dyYXBoeVwiPnt7ZXJyb3IoKX19PC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIGNoZWNrYm94IGVsZW1lbnQgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImdldExheW91dCgpID09PSAnY2hlY2tib3gnXCIgW25nU3R5bGVdPVwic2NoZW1hLnN0eWxlXCIgW25nQ2xhc3NdPVwic2NoZW1hLmNsYXNzXCJcclxuICAgIHN0eWxlPVwibWFyZ2luOiA2cHg7IG1hcmdpbi10b3A6IDEycHg7XCI+XHJcbiAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cInZhbHVlXCIgKGNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJyZWFkT25seVwiPlxyXG4gICAgICB7e2xhYmVsfX08L21hdC1jaGVja2JveD5cclxuICAgIDxwIGNsYXNzPVwiZXJyb3IgbWF0LXR5cG9ncmFwaHlcIj57e2Vycm9yKCl9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBhdXRvY29tcGxldGUgZWxlbWVudCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZ2V0TGF5b3V0KCkgPT09ICdhdXRvY29tcGxldGUnXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJzY2hlbWEud2lkZ2V0ID09PSAnc2VsZWN0J1wiIFtuZ1N0eWxlXT1cInNjaGVtYS5zdHlsZVwiIFtuZ0NsYXNzXT1cInNjaGVtYS5jbGFzc1wiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7bGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwidmFsdWVcIiAoZm9jdXMpPVwiZm9jdXMoKVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGNob2ljZXMgfCBhc3luY1wiIFt2YWx1ZV09XCJjaG9pY2UudmFsdWVcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiY2hvaWNlLm5hbWUgIT09IGNob2ljZS52YWx1ZSA/IGNob2ljZS52YWx1ZSA6IG51bGxcIj5cclxuICAgICAgICAgIHt7Y2hvaWNlLm5hbWV9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInNjaGVtYS53aWRnZXQgIT09ICdzZWxlY3QnXCIgW25nU3R5bGVdPVwic2NoZW1hLnN0eWxlXCIgW25nQ2xhc3NdPVwic2NoZW1hLmNsYXNzXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3tsYWJlbH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIgKGZvY3VzKT1cImZvY3VzKClcIj5cclxuICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGZpbHRlcmVkT3B0aW9ucyB8IGFzeW5jXCIgW3ZhbHVlXT1cImNob2ljZS52YWx1ZVwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjaG9pY2UubmFtZSAhPT0gY2hvaWNlLnZhbHVlID8gY2hvaWNlLnZhbHVlIDogbnVsbFwiPlxyXG4gICAgICAgICAge3tjaG9pY2UubmFtZX19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPHAgY2xhc3M9XCJlcnJvciBtYXQtdHlwb2dyYXBoeVwiPnt7ZXJyb3IoKX19PC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIHNpbmdsZSBlbGVtZW50IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJnZXRMYXlvdXQoKSA9PT0gJ3NpbmdsZSdcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBbbmdTdHlsZV09XCJzY2hlbWEuc3R5bGVcIiBbbmdDbGFzc109XCJzY2hlbWEuY2xhc3NcIj5cclxuICAgICAgPG1hdC1sYWJlbD57e2xhYmVsfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0ICpuZ0lmPVwiIWluQXJyYXlcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBbcGxhY2Vob2xkZXJdPVwiZXhhbXBsZSgpXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbWF0SW5wdXRcclxuICAgICAgICBbdHlwZV09XCJnZXRJbnB1dFR5cGUoc2NoZW1hKVwiIFt2YWx1ZV09XCJ2YWx1ZVwiIChpbnB1dCk9XCJjaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzKT1cImdldElucHV0VHlwZShzY2hlbWEpID09ICdwYXNzd29yZCcgPyB2YWx1ZSA9ICcnOicnXCI+XHJcbiAgICAgIDxpbnB1dCAqbmdJZj1cImluQXJyYXlcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBbcGxhY2Vob2xkZXJdPVwiZXhhbXBsZSgpXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbWF0SW5wdXRcclxuICAgICAgICBbdHlwZV09XCJnZXRJbnB1dFR5cGUoc2NoZW1hKVwiIFt2YWx1ZV09XCJ2YWx1ZVwiIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8cCBjbGFzcz1cImVycm9yIG1hdC10eXBvZ3JhcGh5XCI+e3tlcnJvcigpfX08L3A+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gdGV4dGFyZWEgZWxlbWVudCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZ2V0TGF5b3V0KCkgPT09ICd0ZXh0YXJlYSdcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBbbmdTdHlsZV09XCJzY2hlbWEuc3R5bGVcIiBbbmdDbGFzc109XCJzY2hlbWEuY2xhc3NcIj5cclxuICAgICAgPG1hdC1sYWJlbD57e2xhYmVsfX08L21hdC1sYWJlbD5cclxuICAgICAgPHRleHRhcmVhICpuZ0lmPVwiIWluQXJyYXlcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBbcGxhY2Vob2xkZXJdPVwiZXhhbXBsZSgpXCIgbWF0SW5wdXQgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgICAgICAoaW5wdXQpPVwiY2hhbmdlKCRldmVudClcIiBbbmdTdHlsZV09XCJzY2hlbWEuc3R5bGVcIiBbbmdDbGFzc109XCJzY2hlbWEuY2xhc3NcIj48L3RleHRhcmVhPlxyXG4gICAgICA8dGV4dGFyZWEgKm5nSWY9XCJpbkFycmF5XCIgW2Rpc2FibGVkXT1cInJlYWRPbmx5XCIgW3BsYWNlaG9sZGVyXT1cImV4YW1wbGUoKVwiIG1hdElucHV0IFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiIFtuZ1N0eWxlXT1cInNjaGVtYS5zdHlsZVwiIFtuZ0NsYXNzXT1cInNjaGVtYS5jbGFzc1wiPjwvdGV4dGFyZWE+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPHAgY2xhc3M9XCJlcnJvciBtYXQtdHlwb2dyYXBoeVwiPnt7ZXJyb3IoKX19PC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIHVwbG9hZCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZ2V0TGF5b3V0KCkgPT09ICd1cGxvYWQnXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImZpbGVcIiAoY2hhbmdlKT1cImhhbmRsZUZpbGVJbnB1dCgkZXZlbnQpXCIgW25nU3R5bGVdPVwic2NoZW1hLnN0eWxlXCIgW25nQ2xhc3NdPVwic2NoZW1hLmNsYXNzXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInJlYWRPbmx5XCI+XHJcbiAgICA8cCBjbGFzcz1cImVycm9yIG1hdC10eXBvZ3JhcGh5XCI+e3tlcnJvcigpfX08L3A+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgbGliV2lkZ2V0SG9zdD48L25nLXRlbXBsYXRlPlxyXG4iXX0= \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.module.js b/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.module.js new file mode 100644 index 0000000..caaf702 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.module.js @@ -0,0 +1,119 @@ +import { NgModule } from '@angular/core'; +import { JsonSchemaFormComponent } from './json-schema-form.component'; +import { MatCardModule } from '@angular/material/card'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTooltipModule, MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip'; +import { MatTableModule } from '@angular/material/table'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatSelectModule } from '@angular/material/select'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatAutocompleteModule } from '@angular/material/autocomplete'; +import { HttpClientModule } from '@angular/common/http'; +import { CommonModule } from '@angular/common'; +import { MatInputModule } from '@angular/material/input'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatButtonModule } from '@angular/material/button'; +import { WidgetDirective } from './widget.directive'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MatMenuModule } from '@angular/material/menu'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatDialogModule } from '@angular/material/dialog'; +import { EditElementDialogComponent } from './edit-element-dialog.component'; +import { MatChipsModule } from '@angular/material/chips'; +import { DragDropModule } from '@angular/cdk/drag-drop'; +import * as i0 from "@angular/core"; +import * as i1 from "@angular/material/dialog"; +import * as i2 from "@angular/material/button"; +export class JsonSchemaFormModule { +} +JsonSchemaFormModule.ɵfac = function JsonSchemaFormModule_Factory(t) { return new (t || JsonSchemaFormModule)(); }; +JsonSchemaFormModule.ɵmod = i0.ɵɵdefineNgModule({ type: JsonSchemaFormModule }); +JsonSchemaFormModule.ɵinj = i0.ɵɵdefineInjector({ providers: [ + // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892 + { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } } + ], imports: [[ + MatCardModule, + FlexLayoutModule, + MatIconModule, + MatTooltipModule, + MatTableModule, + MatTabsModule, + MatFormFieldModule, + MatSelectModule, + MatDatepickerModule, + MatCheckboxModule, + MatAutocompleteModule, + HttpClientModule, + CommonModule, + MatInputModule, + MatNativeDateModule, + MatButtonModule, + MatExpansionModule, + MatMenuModule, + ReactiveFormsModule, + MatDialogModule, + MatChipsModule, + DragDropModule + ]] }); +(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(JsonSchemaFormModule, { declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective], imports: [MatCardModule, + FlexLayoutModule, + MatIconModule, + MatTooltipModule, + MatTableModule, + MatTabsModule, + MatFormFieldModule, + MatSelectModule, + MatDatepickerModule, + MatCheckboxModule, + MatAutocompleteModule, + HttpClientModule, + CommonModule, + MatInputModule, + MatNativeDateModule, + MatButtonModule, + MatExpansionModule, + MatMenuModule, + ReactiveFormsModule, + MatDialogModule, + MatChipsModule, + DragDropModule], exports: [JsonSchemaFormComponent] }); })(); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonSchemaFormModule, [{ + type: NgModule, + args: [{ + declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective], + imports: [ + MatCardModule, + FlexLayoutModule, + MatIconModule, + MatTooltipModule, + MatTableModule, + MatTabsModule, + MatFormFieldModule, + MatSelectModule, + MatDatepickerModule, + MatCheckboxModule, + MatAutocompleteModule, + HttpClientModule, + CommonModule, + MatInputModule, + MatNativeDateModule, + MatButtonModule, + MatExpansionModule, + MatMenuModule, + ReactiveFormsModule, + MatDialogModule, + MatChipsModule, + DragDropModule + ], + exports: [JsonSchemaFormComponent], + providers: [ + // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892 + { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } } + ] + }] + }], null, null); })(); +i0.ɵɵsetComponentScope(EditElementDialogComponent, [i1.MatDialogContent, JsonSchemaFormComponent, i1.MatDialogActions, i2.MatButton, i1.MatDialogClose], []); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEtZm9ybS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoam9pbi9qc29uLXNjaGVtYS1mb3JtL3NyYy9saWIvanNvbi1zY2hlbWEtZm9ybS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFtQ3hELE1BQU0sT0FBTyxvQkFBb0I7O3dGQUFwQixvQkFBb0I7d0RBQXBCLG9CQUFvQjs2REFOcEI7UUFDVCx5RkFBeUY7UUFDekYsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFO0tBQzdFLFlBNUJRO1lBQ1AsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLHFCQUFxQjtZQUNyQixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLGtCQUFrQjtZQUNsQixhQUFhO1lBQ2IsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixjQUFjO1lBQ2QsY0FBYztTQUNmO3dGQVFVLG9CQUFvQixtQkFoQ2hCLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLGVBQWUsYUFFakYsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLHFCQUFxQjtRQUNyQixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixjQUFjO1FBQ2QsY0FBYyxhQUVOLHVCQUF1Qjt1RkFPdEIsb0JBQW9CO2NBakNoQyxRQUFRO2VBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxDQUFDO2dCQUNwRixPQUFPLEVBQUU7b0JBQ1AsYUFBYTtvQkFDYixnQkFBZ0I7b0JBQ2hCLGFBQWE7b0JBQ2IsZ0JBQWdCO29CQUNoQixjQUFjO29CQUNkLGFBQWE7b0JBQ2Isa0JBQWtCO29CQUNsQixlQUFlO29CQUNmLG1CQUFtQjtvQkFDbkIsaUJBQWlCO29CQUNqQixxQkFBcUI7b0JBQ3JCLGdCQUFnQjtvQkFDaEIsWUFBWTtvQkFDWixjQUFjO29CQUNkLG1CQUFtQjtvQkFDbkIsZUFBZTtvQkFDZixrQkFBa0I7b0JBQ2xCLGFBQWE7b0JBQ2IsbUJBQW1CO29CQUNuQixlQUFlO29CQUNmLGNBQWM7b0JBQ2QsY0FBYztpQkFDZjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbEMsU0FBUyxFQUFFO29CQUNULHlGQUF5RjtvQkFDekYsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFO2lCQUM3RTthQUVGOzt1QkEvQnlDLDBCQUEwQix3QkFBbkQsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSnNvblNjaGVtYUZvcm1Db21wb25lbnQgfSBmcm9tICcuL2pzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlLCBNQVRfVE9PTFRJUF9ERUZBVUxUX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IFdpZGdldERpcmVjdGl2ZSB9IGZyb20gJy4vd2lkZ2V0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRWRpdEVsZW1lbnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2VkaXQtZWxlbWVudC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0pzb25TY2hlbWFGb3JtQ29tcG9uZW50LCBFZGl0RWxlbWVudERpYWxvZ0NvbXBvbmVudCwgV2lkZ2V0RGlyZWN0aXZlXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXRDYXJkTW9kdWxlLFxyXG4gICAgRmxleExheW91dE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0VGFibGVNb2R1bGUsXHJcbiAgICBNYXRUYWJzTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxyXG4gICAgSHR0cENsaWVudE1vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEV4cGFuc2lvbk1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0Q2hpcHNNb2R1bGUsXHJcbiAgICBEcmFnRHJvcE1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW0pzb25TY2hlbWFGb3JtQ29tcG9uZW50XSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIC8vIHR1cm4gb2ZmIHRvb2x0aXAgZ2VzdHVyZXMgb24gbW9iaWxlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy80ODkyXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9UT09MVElQX0RFRkFVTFRfT1BUSU9OUywgdXNlVmFsdWU6IHsgdG91Y2hHZXN0dXJlczogJ29mZicgfSB9XHJcbiAgXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIEpzb25TY2hlbWFGb3JtTW9kdWxlIHsgfVxyXG4iXX0= \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.service.js b/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.service.js new file mode 100644 index 0000000..fd6912c --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/json-schema-form.service.js @@ -0,0 +1,56 @@ +import { Injectable } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * service for registering custom components + */ +export class JsonSchemaFormService { + constructor() { + /** + * layout editor mode + */ + this.editMode = false; + /** + * built-in formats + */ + this.formats = { + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + ipv4: /^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/, + url: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/, + uri: /^\w+:(\/?\/?)[^\s]+$/ + }; + /** + * registry of custom widgets. The keys are the values used in schema.widgetType, the values + * are the Type of the custom widget component implementing WidgetComponent + */ + this.registry = {}; + /** + * registry of displayWith objects + */ + this.displayWithRegistry = {}; + } + /** + * register custom component + * @param key the name of the component which is used in schema extension: widget=custom, widgetType=key + * @param value the implementation class + */ + registerComponent(key, value) { + this.registry[key] = value; + } + /** + * register displayWith implementations + * @param key the name of the implementation which is used in schema extension: displayWith=key + * @param value the implementation class + */ + registerDisplayWith(key, value) { + this.displayWithRegistry[key] = value; + } +} +JsonSchemaFormService.ɵfac = function JsonSchemaFormService_Factory(t) { return new (t || JsonSchemaFormService)(); }; +JsonSchemaFormService.ɵprov = i0.ɵɵdefineInjectable({ token: JsonSchemaFormService, factory: JsonSchemaFormService.ɵfac, providedIn: 'root' }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(JsonSchemaFormService, [{ + type: Injectable, + args: [{ + providedIn: 'root' + }] + }], null, null); })(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEtZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGFzaGpvaW4vanNvbi1zY2hlbWEtZm9ybS9zcmMvbGliL2pzb24tc2NoZW1hLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sZUFBZSxDQUFDOztBQUdqRDs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFIbEM7UUFLRTs7V0FFRztRQUNJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFeEI7O1dBRUc7UUFDSCxZQUFPLEdBQUc7WUFDUixLQUFLLEVBQUUseUpBQXlKO1lBQ2hLLElBQUksRUFBRSx1REFBdUQ7WUFDN0QsR0FBRyxFQUFFLHlHQUF5RztZQUM5RyxHQUFHLEVBQUUsc0JBQXNCO1NBQzVCLENBQUM7UUFFRjs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQ7O1dBRUc7UUFDSCx3QkFBbUIsR0FBcUMsRUFBRSxDQUFDO0tBbUI1RDtJQWpCQzs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsR0FBVyxFQUFFLEtBQWdCO1FBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsR0FBVyxFQUFFLEtBQW9CO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDeEMsQ0FBQzs7MEZBNUNVLHFCQUFxQjs2REFBckIscUJBQXFCLFdBQXJCLHFCQUFxQixtQkFGcEIsTUFBTTt1RkFFUCxxQkFBcUI7Y0FIakMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaG9pY2VIYW5kbGVyIH0gZnJvbSAnLi9jaG9pY2UnO1xyXG5cclxuLyoqXHJcbiAqIHNlcnZpY2UgZm9yIHJlZ2lzdGVyaW5nIGN1c3RvbSBjb21wb25lbnRzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKc29uU2NoZW1hRm9ybVNlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBsYXlvdXQgZWRpdG9yIG1vZGVcclxuICAgKi9cclxuICBwdWJsaWMgZWRpdE1vZGUgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogYnVpbHQtaW4gZm9ybWF0c1xyXG4gICAqL1xyXG4gIGZvcm1hdHMgPSB7XHJcbiAgICBlbWFpbDogL14oKFtePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcclxuICAgIGlwdjQ6IC9eKD8hMCkoPyEuKlxcLiQpKCgxP1xcZD9cXGR8MjVbMC01XXwyWzAtNF1cXGQpKFxcLnwkKSl7NH0kLyxcclxuICAgIHVybDogL15odHRwcz86XFwvXFwvKHd3d1xcLik/Wy1hLXpBLVowLTlAOiUuX1xcK34jPV17MSwyNTZ9XFwuW2EtekEtWjAtOSgpXXsxLDZ9XFxiKFstYS16QS1aMC05KClAOiVfXFwrLn4jPyYvLz1dKikkLyxcclxuICAgIHVyaTogL15cXHcrOihcXC8/XFwvPylbXlxcc10rJC9cclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiByZWdpc3RyeSBvZiBjdXN0b20gd2lkZ2V0cy4gVGhlIGtleXMgYXJlIHRoZSB2YWx1ZXMgdXNlZCBpbiBzY2hlbWEud2lkZ2V0VHlwZSwgdGhlIHZhbHVlc1xyXG4gICAqIGFyZSB0aGUgVHlwZTxhbnk+IG9mIHRoZSBjdXN0b20gd2lkZ2V0IGNvbXBvbmVudCBpbXBsZW1lbnRpbmcgV2lkZ2V0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgcmVnaXN0cnkgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogcmVnaXN0cnkgb2YgZGlzcGxheVdpdGggb2JqZWN0c1xyXG4gICAqL1xyXG4gIGRpc3BsYXlXaXRoUmVnaXN0cnk6IHsgW2tleTogc3RyaW5nXTogQ2hvaWNlSGFuZGxlciB9ID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlZ2lzdGVyIGN1c3RvbSBjb21wb25lbnRcclxuICAgKiBAcGFyYW0ga2V5ICAgICB0aGUgbmFtZSBvZiB0aGUgY29tcG9uZW50IHdoaWNoIGlzIHVzZWQgaW4gc2NoZW1hIGV4dGVuc2lvbjogd2lkZ2V0PWN1c3RvbSwgd2lkZ2V0VHlwZT1rZXlcclxuICAgKiBAcGFyYW0gdmFsdWUgICB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3NcclxuICAgKi9cclxuICByZWdpc3RlckNvbXBvbmVudChrZXk6IHN0cmluZywgdmFsdWU6IFR5cGU8YW55Pikge1xyXG4gICAgdGhpcy5yZWdpc3RyeVtrZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWdpc3RlciBkaXNwbGF5V2l0aCBpbXBsZW1lbnRhdGlvbnNcclxuICAgKiBAcGFyYW0ga2V5ICAgICB0aGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgdXNlZCBpbiBzY2hlbWEgZXh0ZW5zaW9uOiBkaXNwbGF5V2l0aD1rZXlcclxuICAgKiBAcGFyYW0gdmFsdWUgICB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3NcclxuICAgKi9cclxuICByZWdpc3RlckRpc3BsYXlXaXRoKGtleTogc3RyaW5nLCB2YWx1ZTogQ2hvaWNlSGFuZGxlcikge1xyXG4gICAgdGhpcy5kaXNwbGF5V2l0aFJlZ2lzdHJ5W2tleV0gPSB2YWx1ZTtcclxuICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/schema.js b/dist/dashjoin/json-schema-form/esm2015/lib/schema.js new file mode 100644 index 0000000..08ad3d0 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/schema.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGFzaGpvaW4vanNvbi1zY2hlbWEtZm9ybS9zcmMvbGliL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgSlNPTiBNZXRhIFNjaGVtYS5cclxuICogVGhpcyBpbmNsdWRlcyB0aGUgb3B0aW9uYWwgZGVmaW5pdGlvbiBrZXl3b3JkcyB0aGF0IGluc3RydWN0IHRoZVxyXG4gKiBmb3JtIGVkaXRvciBhcyB0byB3aGljaCBpbnB1dCB3aWRnZXRzIGFyZSB0byBiZSB1c2VkIGFuZCBhcyB0b1xyXG4gKiBob3cgdGhlIHdpZGdldCBsYXlvdXQgaXMgdG8gYmUgcGVyZm9ybWVkXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBzY2hlbWEgcHJvcGVydHkgdHlwZVxyXG4gICAgICovXHJcbiAgICB0eXBlPzogJ2Jvb2xlYW4nIHwgJ3N0cmluZycgfCAnYXJyYXknIHwgJ251bWJlcicgfCAnaW50ZWdlcicgfCAnb2JqZWN0JztcclxuXHJcbiAgICAvKipcclxuICAgICAqIHNjaGVtYSBwcm9wZXJ0eSByZWZlcmVuY2VcclxuICAgICAqL1xyXG4gICAgJyRyZWYnPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVmZXJlbmNlZCBzY2hlbWFzIGNhbiBiZSBlbWJlZGRlZCBoZXJlLCB0aGlzIGtleSBtdXN0IGJlIHNjaGVtYS4kaWRcclxuICAgICAqL1xyXG4gICAgcmVmZXJlbmNlZD86IHsgW2tleTogc3RyaW5nXTogYW55IH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBmaXhlZCBwcm9wZXJ0eSB2YWx1ZSByYW5nZS5cclxuICAgICAqIGlmIHNldCwgdGhlIGVkaXRvciB1c2VzIGEgc2VsZWN0IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgZW51bT86IHN0cmluZ1tdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IGlzIHJlcXVpcmVkIChpLmUuIG11c3QgYmUgbm9uIG51bGwpXHJcbiAgICAgKiBodHRwczovL2pzb24tc2NoZW1hLm9yZy91bmRlcnN0YW5kaW5nLWpzb24tc2NoZW1hL3JlZmVyZW5jZS9vYmplY3QuaHRtbCNyZXF1aXJlZFxyXG4gICAgICovXHJcbiAgICByZXF1aXJlZD86IHN0cmluZ1tdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogc3RyaW5nIHBhdHRlcm5cclxuICAgICAqIGh0dHBzOi8vanNvbi1zY2hlbWEub3JnL3VuZGVyc3RhbmRpbmctanNvbi1zY2hlbWEvcmVmZXJlbmNlL3JlZ3VsYXJfZXhwcmVzc2lvbnMuaHRtbFxyXG4gICAgICovXHJcbiAgICBwYXR0ZXJuPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2hvb3NlIGEgcGF0dGVybiBiYXNlZCBvbiBwcmUtZGVmaW5lZCBpZGVudGlmaWVycyBzdWNoIGFzIGVtYWlsIGV0Yy5cclxuICAgICAqL1xyXG4gICAgZm9ybWF0Pzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF0dGVybiB0byBwYXJzZSBhbmQgc2VyaWFsaXplIGRhdGUgc3RyaW5ncy4gQmFzZXMgb24gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS90ZXh0L1NpbXBsZURhdGVGb3JtYXQuaHRtbFxyXG4gICAgICogYnV0IHN1cHBvcnRzIG9ubHkgeWVhciAoeXl5eSksIG1vbnRoIChNTSksIGFuZCBkYXkgKGRkKSwgT25seSBhcHBsaWVzIHRvIFwid2lkZ2V0OiBkYXRlXCJcclxuICAgICAqL1xyXG4gICAgZGF0ZUZvcm1hdD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIGlucHV0IG11c3QgYmUgbXVsdGlwbGUgb2YgeFxyXG4gICAgICovXHJcbiAgICBtdWx0aXBsZU9mPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogbnVtYmVyIDwgPiA8PSA+PVxyXG4gICAgICovXHJcbiAgICBtYXhpbXVtPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogbnVtYmVyIDwgPiA8PSA+PVxyXG4gICAgICovXHJcbiAgICBtaW5pbXVtPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogbnVtYmVyIDwgPiA8PSA+PVxyXG4gICAgICovXHJcbiAgICBleGNsdXNpdmVNYXhpbXVtPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogbnVtYmVyIDwgPiA8PSA+PVxyXG4gICAgICovXHJcbiAgICBleGNsdXNpdmVNaW5pbXVtPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogc3RyaW5nIG11c3QgYmUgc2hvcnRlciAvIGxvbmdlciB0aGFuIHhcclxuICAgICAqL1xyXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogc3RyaW5nIG11c3QgYmUgc2hvcnRlciAvIGxvbmdlciB0aGFuIHhcclxuICAgICAqL1xyXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVzdHJpY3QgYXJyYXkgbGVuZ3RoXHJcbiAgICAgKi9cclxuICAgIG1heEl0ZW1zPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVzdHJpY3QgYXJyYXkgbGVuZ3RoXHJcbiAgICAgKi9cclxuICAgIG1pbkl0ZW1zPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogbWFrZXMgc3VyZSBhcnJheSBpdGVtcyBhcmUgdW5pcXVlXHJcbiAgICAgKi9cclxuICAgIHVuaXF1ZUl0ZW1zPzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHJlc3RyaWN0IG9iamVjdCBudW1iZXIgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBtYXhQcm9wZXJ0aWVzPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogcmVzdHJpY3Qgb2JqZWN0IG51bWJlciBvZiBwcm9wZXJ0aWVzXHJcbiAgICAgKi9cclxuICAgIG1pblByb3BlcnRpZXM/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBmaWVsZCBuYW1lcyBtdXN0IG1hdGNoIHRoaXMgcmVndWxhciBleHByZXNzaW9uXHJcbiAgICAgKi9cclxuICAgIHByb3BlcnR5TmFtZXM/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZXBlbmRlbmNpZXMgYWxsb3dzIHNwZWNpZnlpbmcgYSBtYXAgb2YgZmllbGQgbmFtZXMgdG8gdGhlIGZpZWxkcyB0aGV5IGRlcGVuZCBvbjpcclxuICAgICAqIFwiZGVwZW5kZW5jaWVzXCI6IHtcImNyZWRpdF9jYXJkXCI6IFtcImJpbGxpbmdfYWRkcmVzc1wiXX0gc3RhdGVzIHRoYXQgYSBjcmVkaXQgY2FyZFxyXG4gICAgICogY2FuIG9ubHkgYmUgcHJlc2VudCBpZiB0aGUgYmlsbGluZyBhZGRyZXNzIGlzIHByZXNlbnRcclxuICAgICAqL1xyXG4gICAgZGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogYWRkaXRpb25hbCBwcm9wZXJ0aWVzICh3aXRoIHVua25vd24gbmFtZSkgaGF2ZSB0aGUgZm9sbG93aW5nIHNjaGVtYVxyXG4gICAgICovXHJcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllcz86IFNjaGVtYTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGZpZWxkIHRpdGxlXHJcbiAgICAgKiBodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDE5LTA5L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi45LjFcclxuICAgICAqL1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBmaWVsZCBkZXNjcmlwdGlvblxyXG4gICAgICogaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uOS4xXHJcbiAgICAgKi9cclxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9qc29uLXNjaGVtYS12YWxpZGF0aW9uLmh0bWwjcmZjLnNlY3Rpb24uOS41XHJcbiAgICAgKi9cclxuICAgIGV4YW1wbGVzPzogc3RyaW5nW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDE5LTA5L2pzb24tc2NoZW1hLXZhbGlkYXRpb24uaHRtbCNyZmMuc2VjdGlvbi45LjJcclxuICAgICAqL1xyXG4gICAgZGVmYXVsdD86IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvanNvbi1zY2hlbWEtdmFsaWRhdGlvbi5odG1sI3JmYy5zZWN0aW9uLjkuNFxyXG4gICAgICovXHJcbiAgICByZWFkT25seT86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBsaWtlIHJlYWRvbmx5IGJ1dCBhbGxvd3Mgc2V0dGluZyBhIHZhbHVlIGluaXRpYWxseVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVPbmx5PzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRlZmluZXMgdHlwZXMgdGhhdCBjYW4gYmUgcmVmJ2VkXHJcbiAgICAgKi9cclxuICAgIGRlZmluaXRpb25zPzogeyBba2V5OiBzdHJpbmddOiBTY2hlbWEgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRlZmluZXMgdGhlIGFycmF5IGVsZW1lbnQgc3RydWN0dXJlIGlmIHR5cGUgPSBhcnJheVxyXG4gICAgICovXHJcbiAgICBpdGVtcz86IFNjaGVtYTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRlZmluZXMgcHJvcGVydGllcyBpZiB0eXBlID0gb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IFNjaGVtYSB9O1xyXG5cclxuXHJcbiAgICAvLyBFeHRlbnNpb24ga2V5d29yZHMsIG1lYW5pbmcgdGhvc2UgZGVmaW5lZCBvdXRzaWRlIG9mIHRoaXMgZG9jdW1lbnQgYW5kIGl0cyBjb21wYW5pb25zLCBhcmUgZnJlZSB0byBkZWZpbmUgb3RoZXIgYmVoYXZpb3JzIGFzIHdlbGxcclxuICAgIC8vIGh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMTktMDkvanNvbi1zY2hlbWEtY29yZS5odG1sI3JmYy5zZWN0aW9uLjQuMy4xXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZpbmVzIHRoaXMgcHJvcGVydHkgdG8gYmUgYSBVUkkuIE9uIHRoZSBVSSBpdCB3aWxsIGJlIGRpc3BsYXllZCBhcyBhIHN0cmluZy5cclxuICAgICAqIEZvciBpbnN0YW5jZSwgdGhlIGltcGxlbWVudGF0aW9uIG1pZ2h0IGRlY2lkZSB0byB1c2UgdGhlIGxhYmVsU2VydmljZSB0byBkaXNwbGF5IG5pY2UgbmFtZXMgb24gdGhlIFVJXHJcbiAgICAgKi9cclxuICAgIHVyaT86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZpbmVzIHdoaWNoIGlucHV0IHdpZGdldCBpcyB1c2VkIGZvciBkYXRhIGRpc3BsYXkgYW5kIGVudHJ5LlxyXG4gICAgICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYSBtaXggb2YgSFRNTCBpbnB1dCBwcm9wZXJ0aWVzXHJcbiAgICAgKiAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0KVxyXG4gICAgICogYW5kIG5hdGl2ZSBhbmd1bGFyIHdpZGdldHMgc3VjaCBhcyBodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vY29tcG9uZW50cy9kYXRlcGlja2VyL292ZXJ2aWV3XHJcbiAgICAgKi9cclxuICAgIHdpZGdldD86ICdzZWxlY3QnIHwgJ3VwbG9hZCcgfCAnZGF0ZScgfCAndGV4dGFyZWEnIHwgJ3Bhc3N3b3JkJyB8ICdjb2xvcicgfFxyXG4gICAgJ2RhdGV0aW1lLWxvY2FsJyB8ICdlbWFpbCcgfCAnbW9udGgnIHwgJ3RlbCcgfCAndGltZScgfCAndXJsJyB8ICd3ZWVrJyB8ICdjdXN0b20nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaWYgd2lkZ2V0PWN1c3RvbSwgdGhpcyBmaWVsZHMgaW5kaWNhdGVzIHdoaWNoIGVudHJ5IGZyb20gdGhlIHdpZGdldCByZWdpc3RyeSBpcyB0byBiZSB1c2VkXHJcbiAgICAgKi9cclxuICAgIHdpZGdldFR5cGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBzdHlsZSBhcHBsaWVkIHRvIGZvcm0gZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdHlsZT86IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGNsYXNzIGFwcGxpZWQgdG8gZm9ybSBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIGNsYXNzPzogc3RyaW5nW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIGluIGNhc2UgdGhlIHNlbGVjdCAvIGF1dG9jb21wbGV0ZSBvcHRpb25zIGFyZSBnYXRoZXJlZCBmcm9tIGEgUkVTVCBzZXJ2aWNlIFVSTC5cclxuICAgICAqIGRlZmluZXMgdGhlIFJFU1Qgc2VydmljZSBVUkwuXHJcbiAgICAgKi9cclxuICAgIGNob2ljZXNVcmw/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIGluIGNhc2UgdGhlIHNlbGVjdCAvIGF1dG9jb21wbGV0ZSBvcHRpb25zIGFyZSBnYXRoZXJlZCBmcm9tIGEgUkVTVCBzZXJ2aWNlIFVSTC5cclxuICAgICAqIGRlZmluZXMgdGhlIEhUVFAgdmVyYiB0byB1c2UgZm9yIHRoZSBSRVNUIHNlcnZpY2UgVVJMLiBUaGUgZGVmYXVsdCBpcyBQT1NULlxyXG4gICAgICovXHJcbiAgICBjaG9pY2VzVmVyYj86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgaW4gY2FzZSB0aGUgc2VsZWN0IC8gYXV0b2NvbXBsZXRlIG9wdGlvbnMgYXJlIGdhdGhlcmVkIGZyb20gYSBSRVNUIHNlcnZpY2UgVVJMLlxyXG4gICAgICogZGVmaW5lcyB0aGUgUkVTVCBzZXJ2aWNlIHBhcmFtZXRlci4gVGhlIGNvbnZlbnRpb24gaXMgdG8gaGF2ZSBhIHNpbmdsZSBwYXJhbWV0ZXIuXHJcbiAgICAgKiBNdWx0aXBsZSBmaWVsZHMgbmVlZCB0byBiZSB3cmFwcGVkIGludG8gYSBzaW5nbGUgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIGNob2ljZXNVcmxBcmdzPzogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXNlZCBpbiBjYXNlIHRoZSBzZWxlY3QgLyBhdXRvY29tcGxldGUgb3B0aW9ucyBhcmUgZGVmaW5lZCBzdGF0aWNhbGx5XHJcbiAgICAgKi9cclxuICAgIGNob2ljZXM/OiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogbmFtZSBvZiB0aGUgZGlzcGxheVdpdGggZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgZGlzcGxheVdpdGg/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBhbHRlcm5hdGl2ZSB0byBkaXNwbGF5V2l0aCBpbiBjYXNlIHdlIGhhdmUgc3RhdGljIG9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgZGlzcGxheVdpdGhDaG9pY2VzPzogc3RyaW5nW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIGluIGNhc2UgdGhlIHNlbGVjdCAvIGF1dG9jb21wbGV0ZSBvcHRpb25zIGFyZSBnYXRoZXJlZCBmcm9tIGEgUkVTVCBzZXJ2aWNlIFVSTC5cclxuICAgICAqIHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBSRVNUIHJlc3VsdCBpbnRvIGEgc3RyaW5nIGFycmF5IG9yIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZCB2YWx1ZSBmaWVsZHNcclxuICAgICAqL1xyXG4gICAganNvbmF0YT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIGlucHV0IGNvbnRyb2wgbGF5b3V0OlxyXG4gICAgICpcclxuICAgICAqIGhvcml6b250YWwgKGRlZmF1bHQpOiBpbnB1dCBjb250cm9scyBhcmUgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGFuZCBmbGV4LXdyYXAgaWYgdGhlcmUgaXMgaW5zdWZmaWNpZW50IHNwYWNlXHJcbiAgICAgKiB2ZXJ0aWNhbDogaW5wdXQgY29udHJvbHMgYXJlIGFycmFuZ2VkIHZlcnRpY2FsbHlcclxuICAgICAqIHRhYjogY29udHJvbHMgYXJlIHNob3duIGluIHRhYnMgKG9ubHkgYXBwbGllcyB0byBhcnJheXMpXHJcbiAgICAgKiB0YWJsZTogY29udHJvbHMgYXJlIHNob3duIGluIGEgdGFibGUgd2l0aCB0aGUgcHJvcGVydHkgbmFtZXMgYmVpbmcgdGhlIGNvbHVtbiBuYW1lcyAob25seSBhcHBsaWVzIHRvIGFuIGFycmF5IG9mIG9iamVjdHMpXHJcbiAgICAgKiBzZWxlY3Q6IGFycmF5IGlzIHNob3duIGFzIGEgbXVsdGktc2VsZWN0IChvbmx5IGFwcGxpZXMgdG8gYXJyYXlzIG9mIHN0cmluZylcclxuICAgICAqL1xyXG4gICAgbGF5b3V0PzogJ3RhYicgfCAndGFibGUnIHwgJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8ICdzZWxlY3QnIHwgJ2NoaXBzJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRlZmluZXMgb3JkZXIsIG9taXNzaW9uLCBhbmQgMi1sZXZlbCBoaWVyYXJjaHkgKHZpYSBuZXN0ZWQgbGlzdHMpIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcy5cclxuICAgICAqIFRoZSB0b3AgbGV2ZWwgbGF5b3V0IGlzIGRlZmluZWQgYXMgZWl0aGVyIGhvcml6b250YWwgb3IgdmVydGljYWwsIHN1Ymxpc3RzIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uXHJcbiAgICAgKi9cclxuICAgIG9yZGVyPzogKHN0cmluZyB8IHN0cmluZ1tdKVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogc2ltcGxpZmllZCB2ZXJzaW9uIG9mIGNvbmRpdGlvbmFscyAoaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9qc29uLXNjaGVtYS1jb3JlLmh0bWwjcmZjLnNlY3Rpb24uOS4yLjIpLlxyXG4gICAgICogd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCAnY2FzZScuIHN3aXRjaCBtYXJrcyBhIHByb3BlcnR5IHdob3NlIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBvdGhlciBwcm9wZXJ0aWVzXHJcbiAgICAgKiBhcmUgc2hvd24gb3Igbm90XHJcbiAgICAgKi9cclxuICAgIHN3aXRjaD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIHNob3cgdGhlIHByb3BlcnR5IGlmIHRoZSBzd2l0Y2ggcHJvcGVydHkncyB2YWx1ZSBpcyBvbmUgb2YgY2FzZSdzIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBjYXNlPzogc3RyaW5nW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBsb2NhdGVkIGluIGFuIGV4cGFuc2lvbiBwYW5lbFxyXG4gICAgICovXHJcbiAgICBleHBhbmRlZD86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBoaWRlIHVuZGVmaW5lZCBwcm9wZXJ0aWVzIGluIG9iamVjdCBsYXlvdXRzXHJcbiAgICAgKi9cclxuICAgIGhpZGVVbmRlZmluZWQ/OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogYWxsb3dzIGRlZmluaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgdGhhdCBhcmUgc2V0IHdoZW4gdGhlIHZhbHVlIGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgY29tcHV0ZWQ/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogYWxsb3dzIGN1c3RvbWl6aW5nIHRoZSB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VcclxuICAgICAqL1xyXG4gICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaWYgdHJ1ZSwgaW5kaWNhdGVzIG5vdCB0byBzaG93IGZvcm0gZWRpdG9yIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYz86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBhbGxvd3Mgc3BlY2lmeWluZyB0aGUganNvbiBzY2hlbWEgdmVyc2lvblxyXG4gICAgICovXHJcbiAgICAkc2NoZW1hPzogc3RyaW5nO1xyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/widget.component.js b/dist/dashjoin/json-schema-form/esm2015/lib/widget.component.js new file mode 100644 index 0000000..76493b0 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/widget.component.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hqb2luL2pzb24tc2NoZW1hLWZvcm0vc3JjL2xpYi93aWRnZXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xyXG5cclxuLyoqXHJcbiAqIGludGVyZmFjZSB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYWxsIGN1c3RvbSBjb21wb25lbnRzXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldENvbXBvbmVudCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgZmllbGRcclxuICAgICAqL1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIHRoZSBpbnB1dCB2YWx1ZVxyXG4gICAgICovXHJcbiAgICB2YWx1ZTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogcm9vdCBmb3JtIHZhbHVlIChjYW4gYmUgdXNlZCBpbiBjdXN0b20gY29tcG9uZW50cylcclxuICAgICAqL1xyXG4gICAgcm9vdFZhbHVlOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBKU09OIHNjaGVtYSB0byB1c2VcclxuICAgICAqL1xyXG4gICAgc2NoZW1hOiBTY2hlbWE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByb290IEpTT04gc2NoZW1hIHRvIHVzZSB3aGVuIGxvb2tpbmcgdXAgJHJlZiAoc2ltcGx5IHBhc3NlZCBhbG9uZyB0aGUgdHJlZSlcclxuICAgICAqL1xyXG4gICAgcm9vdFNjaGVtYTogU2NoZW1hO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZW1pdCBjaGFuZ2VzIGRvbmUgYnkgdGhlIHVzZXIgaW4gdGhlIGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBlbWl0IHZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICAgKi9cclxuICAgIGVycm9yQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcclxufVxyXG4iXX0= \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/lib/widget.directive.js b/dist/dashjoin/json-schema-form/esm2015/lib/widget.directive.js new file mode 100644 index 0000000..ab47b21 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/lib/widget.directive.js @@ -0,0 +1,23 @@ +import { Directive } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * directive for dynamically loading custom widgets + */ +export class WidgetDirective { + /** + * allow caller to dynamically insert custom component + * @param viewContainerRef dynamic component handle + */ + constructor(viewContainerRef) { + this.viewContainerRef = viewContainerRef; + } +} +WidgetDirective.ɵfac = function WidgetDirective_Factory(t) { return new (t || WidgetDirective)(i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; +WidgetDirective.ɵdir = i0.ɵɵdefineDirective({ type: WidgetDirective, selectors: [["", "libWidgetHost", ""]] }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WidgetDirective, [{ + type: Directive, + args: [{ + selector: '[libWidgetHost]' + }] + }], function () { return [{ type: i0.ViewContainerRef }]; }, null); })(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hqb2luL2pzb24tc2NoZW1hLWZvcm0vc3JjL2xpYi93aWRnZXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDOztBQUU1RDs7R0FFRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBRXhCOzs7T0FHRztJQUNILFlBQW1CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBQUksQ0FBQzs7OEVBTmpELGVBQWU7b0RBQWYsZUFBZTt1RkFBZixlQUFlO2NBSDNCLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsaUJBQWlCO2FBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogZGlyZWN0aXZlIGZvciBkeW5hbWljYWxseSBsb2FkaW5nIGN1c3RvbSB3aWRnZXRzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2xpYldpZGdldEhvc3RdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2lkZ2V0RGlyZWN0aXZlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGFsbG93IGNhbGxlciB0byBkeW5hbWljYWxseSBpbnNlcnQgY3VzdG9tIGNvbXBvbmVudFxyXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXJSZWYgIGR5bmFtaWMgY29tcG9uZW50IGhhbmRsZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikgeyB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/esm2015/public-api.js b/dist/dashjoin/json-schema-form/esm2015/public-api.js new file mode 100644 index 0000000..34b4041 --- /dev/null +++ b/dist/dashjoin/json-schema-form/esm2015/public-api.js @@ -0,0 +1,10 @@ +/* + * Public API Surface of json-schema-form + */ +export * from './lib/json-schema-form.service'; +export * from './lib/json-schema-form.component'; +export * from './lib/json-schema-form.module'; +export * from './lib/schema'; +export * from './lib/widget.component'; +export * from './lib/choice'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hqb2luL2pzb24tc2NoZW1hLWZvcm0vc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGpzb24tc2NoZW1hLWZvcm1cclxuICovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2pzb24tc2NoZW1hLWZvcm0uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2pzb24tc2NoZW1hLWZvcm0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvanNvbi1zY2hlbWEtZm9ybS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zY2hlbWEnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi93aWRnZXQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hvaWNlJztcclxuIl19 \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js b/dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js new file mode 100644 index 0000000..8fb7a81 --- /dev/null +++ b/dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js @@ -0,0 +1,2711 @@ +import { ɵɵdefineInjectable, ɵsetClassMetadata, Injectable, ɵɵdirectiveInject, ViewContainerRef, ɵɵdefineDirective, Directive, ɵɵdefineComponent, ɵɵelementStart, ɵɵlistener, ɵɵelementEnd, ɵɵtext, ɵɵadvance, ɵɵproperty, Component, Inject, ɵɵgetCurrentView, ɵɵrestoreView, ɵɵnextContext, ɵɵtextInterpolate, ɵɵtemplate, ɵɵreference, ɵɵpipe, ɵɵpipeBind2, ɵɵtextInterpolate1, ɵɵpropertyInterpolate, ɵɵelement, ɵɵpipeBind1, EventEmitter, ComponentFactoryResolver, ɵɵviewQuery, ɵɵqueryRefresh, ɵɵloadQuery, ɵɵNgOnChangesFeature, ViewChildren, ViewChild, Input, Output, ɵɵdefineNgModule, ɵɵdefineInjector, ɵɵsetNgModuleScope, NgModule, ɵɵsetComponentScope } from '@angular/core'; +import { MatSelectChange, MatSelect, MatSelectModule } from '@angular/material/select'; +import { MatDatepickerInputEvent, MatDatepickerInput, MatDatepickerToggle, MatDatepicker, MatDatepickerModule } from '@angular/material/datepicker'; +import { MatCheckboxChange, MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox'; +import { forkJoin, of, ReplaySubject } from 'rxjs'; +import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete, MatAutocompleteModule } from '@angular/material/autocomplete'; +import { HttpHeaders, HttpClient, HttpClientModule } from '@angular/common/http'; +import { switchMap, publishReplay, refCount, map, startWith, debounceTime } from 'rxjs/operators'; +import jsonata from 'jsonata'; +import { FormControl, DefaultValueAccessor, NgControlStatus, FormControlDirective, ReactiveFormsModule } from '@angular/forms'; +import { MatDialogRef, MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog'; +import { moveItemInArray, CdkDropList, CdkDrag, DragDropModule } from '@angular/cdk/drag-drop'; +import { ENTER, COMMA, TAB } from '@angular/cdk/keycodes'; +import { NgIf, NgStyle, NgClass, NgForOf, KeyValuePipe, AsyncPipe, CommonModule } from '@angular/common'; +import { MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, MatExpansionModule } from '@angular/material/expansion'; +import { DefaultStyleDirective, DefaultClassDirective } from '@angular/flex-layout/extended'; +import { MatTooltip, MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipModule } from '@angular/material/tooltip'; +import { MatIcon, MatIconModule } from '@angular/material/icon'; +import { MatMenuTrigger, MatMenu, MatMenuItem, MatMenuModule } from '@angular/material/menu'; +import { DefaultLayoutDirective } from '@angular/flex-layout/flex'; +import { MatButton, MatButtonModule } from '@angular/material/button'; +import { MatFormField, MatLabel, MatSuffix, MatFormFieldModule } from '@angular/material/form-field'; +import { MatInput, MatInputModule } from '@angular/material/input'; +import { MatTabGroup, MatTab, MatTabLabel, MatTabsModule } from '@angular/material/tabs'; +import { MatChipList, MatChipInput, MatChip, MatChipRemove, MatChipsModule } from '@angular/material/chips'; +import { MatOption, MatNativeDateModule } from '@angular/material/core'; +import { MatCardModule } from '@angular/material/card'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { MatTableModule } from '@angular/material/table'; + +/** + * service for registering custom components + */ +class JsonSchemaFormService { + constructor() { + /** + * layout editor mode + */ + this.editMode = false; + /** + * built-in formats + */ + this.formats = { + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + ipv4: /^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/, + url: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/, + uri: /^\w+:(\/?\/?)[^\s]+$/ + }; + /** + * registry of custom widgets. The keys are the values used in schema.widgetType, the values + * are the Type of the custom widget component implementing WidgetComponent + */ + this.registry = {}; + /** + * registry of displayWith objects + */ + this.displayWithRegistry = {}; + } + /** + * register custom component + * @param key the name of the component which is used in schema extension: widget=custom, widgetType=key + * @param value the implementation class + */ + registerComponent(key, value) { + this.registry[key] = value; + } + /** + * register displayWith implementations + * @param key the name of the implementation which is used in schema extension: displayWith=key + * @param value the implementation class + */ + registerDisplayWith(key, value) { + this.displayWithRegistry[key] = value; + } +} +JsonSchemaFormService.ɵfac = function JsonSchemaFormService_Factory(t) { return new (t || JsonSchemaFormService)(); }; +JsonSchemaFormService.ɵprov = ɵɵdefineInjectable({ token: JsonSchemaFormService, factory: JsonSchemaFormService.ɵfac, providedIn: 'root' }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(JsonSchemaFormService, [{ + type: Injectable, + args: [{ + providedIn: 'root' + }] + }], null, null); })(); + +/** + * directive for dynamically loading custom widgets + */ +class WidgetDirective { + /** + * allow caller to dynamically insert custom component + * @param viewContainerRef dynamic component handle + */ + constructor(viewContainerRef) { + this.viewContainerRef = viewContainerRef; + } +} +WidgetDirective.ɵfac = function WidgetDirective_Factory(t) { return new (t || WidgetDirective)(ɵɵdirectiveInject(ViewContainerRef)); }; +WidgetDirective.ɵdir = ɵɵdefineDirective({ type: WidgetDirective, selectors: [["", "libWidgetHost", ""]] }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(WidgetDirective, [{ + type: Directive, + args: [{ + selector: '[libWidgetHost]' + }] + }], function () { return [{ type: ViewContainerRef }]; }, null); })(); + +/** + * static JsonPointer implementation + */ +class JsonPointer { + /** + * evaluate the JSON pointer on o + */ + static jsonPointer(o, pointer) { + return JsonPointer.jsonPointer2(o, JsonPointer.split(pointer)); + } + /** + * evaluate the JSON pointer (parsed array of paths) on o + */ + static jsonPointer2(o, paths) { + if (o === undefined) { + return undefined; + } + if (paths.length === 0) { + return o; + } + const path = paths[0]; + const np = Object.assign([], paths); + np.splice(0, 1); + if (paths[0] === '*') { + const res = []; + for (const f of (typeof (o) === 'object' ? Object.values(o) : o)) { + res.push(this.jsonPointer2(f, np)); + } + return res; + } + else { + return this.jsonPointer2(o[path], np); + } + } + /** + * strip leading / and split the JSON pointer + */ + static split(s) { + if (s === '') { + return []; + } + if (s.startsWith('/')) { + s = s.substring(1); + const arr = s.split('/'); + for (const a of arr) { + if (a === '') { + throw new Error('JSON Pointer must not contain an empty reference token'); + } + } + return arr; + } + throw new Error('JSON Pointer must start with /'); + } +} + +/** + * default implementation that handles choices based on schema fields. + * can be overriden via schema.displayWith + */ +class DefaultChoiceHandler { + /** + * create default choice handler + * + * @param http http connection client + */ + constructor(http) { + this.http = http; + } + /** + * load choices + */ + load(value, schema) { + if (!this.cache) { + if (schema.choices) { + // static choices are given, convert them to Choice and merge the result + const arr = []; + for (const s of schema.choices) { + arr.push(this.choice(s, schema)); + } + this.cache = forkJoin(arr); + } + else { + // load choices from URL + this.cache = this.getChoices(schema.choicesUrl, schema.choicesUrlArgs, schema.choicesVerb).pipe(switchMap(res => { + if (schema.jsonata) { + res = jsonata(schema.jsonata).evaluate(res); + if (!Array.isArray(res)) { + res = [res]; + // introduce jsonName, jsonValue + } + } + const obs = []; + for (const r of res) { + obs.push(this.choice(r, schema)); + } + return forkJoin(obs); + }), + // setup caching + publishReplay(1), refCount()); + } + } + return this.cache; + } + /** + * filter after keystroke + */ + filter(value, schema, current, choices) { + return choices.pipe(map(arr => { + if (!current) { + return arr; + } + const res = arr.filter(i => this.include(i, current)); + return res; + })); + } + /** + * called from filter, intended to allow subclasses to easily change filter algorithm + */ + include(i, current) { + var _a; + return (_a = i.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(current.toLowerCase()); + } + /** + * default choice implementation: just reuse value as name + * check for localName + */ + choice(value, schema) { + if (schema.displayWith === 'localName') { + for (const delimiter of ['/', '#', ':', '.']) { + const parts = value.split(delimiter); + if (parts.length > 1) { + return of({ value, name: parts[parts.length - 1] }); + } + } + return of({ value, name: value }); + } + if (schema.jsonata) { + if (typeof value === 'object') { + return of(value); + } + else { + // initially, value is a simple string + return of({ value, name: value }); + } + } + if (schema.displayWithChoices) { + return of({ value, name: schema.displayWithChoices[schema.choices.indexOf(value)] }); + } + return of({ value, name: value }); + } + /** + * handle GET / POST + */ + getChoices(url, args, verb) { + if (verb === 'GET') { + return this.http.get(url, args); + } + else { + return this.http.post(url, args, { + headers: new HttpHeaders({ + 'Content-Type': 'application/json', + }) + }); + } + } + /** + * default: no delay + */ + debounceTime() { + return 0; + } +} + +/** + * dialog to edit a JSON node in a layout structure + */ +class EditElementDialogComponent { + /** + * dialog constrcutor + * @param dialogRef disloag ref + * @param data data to edit + */ + constructor(dialogRef, data) { + var _a; + this.dialogRef = dialogRef; + this.data = data; + this.schema = { + title: 'Edit form', + layout: 'vertical', + order: [ + ['widget', 'layout', 'itemlayout'], + ['title', 'description'], + ['example', 'readOnly'], + ['required', 'format', 'errorMessage'], + 'choices', 'class', 'style' + ], + static: true, + type: 'object', + properties: { + // description, class, style are always applicable + description: { type: 'string', static: true, title: 'Description / tooltip' }, + class: { type: 'array', items: { type: 'string' }, layout: 'chips', style: { width: '365px' }, static: true, title: 'CSS classes' }, + style: { type: 'object', additionalProperties: { type: 'string' }, static: true, title: 'CSS styles' } + } + }; + if (data.properties) { + // only show required and error message for objects + this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' }; + this.schema.properties.required = { + choices: Object.keys(data.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true, + title: 'Required fields' + }; + this.schema.properties.layout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Screen layout' }; + } + else { + if (data.items) { + this.schema.properties.layout = { + type: 'string', enum: ['vertical', 'horizontal', 'select', 'tab', 'table', 'chips'], + static: true, title: 'Screen Layout' + }; + this.schema.properties.itemlayout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Item screen layout' }; + } + if ((_a = data.items) === null || _a === void 0 ? void 0 : _a.properties) { + // array of objects + this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' }; + this.schema.properties.required = { + choices: Object.keys(data.items.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true, + title: 'Required fields' + }; + } + else { + // array of simple types + this.schema.properties.readOnly = { + type: 'boolean', static: true, title: 'Read only value', style: { 'padding-top': '15px' } + }; + this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' }; + this.schema.properties.format = { + type: 'string', static: true, title: 'Format', + widget: 'select', choices: [null, 'email', 'ipv4', 'url', 'uri'] + }; + this.schema.properties.example = { type: 'string', static: true, title: 'Example data' }; + this.schema.properties.title = { type: 'string', static: true, title: 'Title' }; + this.schema.properties.widget = { + type: 'string', enum: ['text', 'select', 'date', 'textarea', 'password'], static: true, + title: 'Form widget' + }; + this.schema.properties.choices = { + type: 'array', items: { type: 'string' }, style: { width: '365px' }, + layout: 'chips', static: true, title: 'Input choices' + }; + } + } + } +} +EditElementDialogComponent.ɵfac = function EditElementDialogComponent_Factory(t) { return new (t || EditElementDialogComponent)(ɵɵdirectiveInject(MatDialogRef), ɵɵdirectiveInject(MAT_DIALOG_DATA)); }; +EditElementDialogComponent.ɵcmp = ɵɵdefineComponent({ type: EditElementDialogComponent, selectors: [["lib-edit-element-dialog"]], decls: 7, vars: 4, consts: [[2, "padding-top", "10px"], [3, "value", "schema", "label", "valueChange"], ["align", "end"], ["mat-button", "", 3, "click"], ["mat-raised-button", "", "cdkFocusInitial", "", 3, "mat-dialog-close"]], template: function EditElementDialogComponent_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-dialog-content", 0); + ɵɵelementStart(1, "lib-json-schema-form", 1); + ɵɵlistener("valueChange", function EditElementDialogComponent_Template_lib_json_schema_form_valueChange_1_listener($event) { return ctx.data = $event; }); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementStart(2, "mat-dialog-actions", 2); + ɵɵelementStart(3, "button", 3); + ɵɵlistener("click", function EditElementDialogComponent_Template_button_click_3_listener() { return ctx.dialogRef.close(); }); + ɵɵtext(4, "Cancel"); + ɵɵelementEnd(); + ɵɵelementStart(5, "button", 4); + ɵɵtext(6, "Ok"); + ɵɵelementEnd(); + ɵɵelementEnd(); + } if (rf & 2) { + ɵɵadvance(1); + ɵɵproperty("value", ctx.data)("schema", ctx.schema)("label", ctx.schema.title); + ɵɵadvance(4); + ɵɵproperty("mat-dialog-close", ctx.data); + } }, encapsulation: 2 }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(EditElementDialogComponent, [{ + type: Component, + args: [{ + selector: 'lib-edit-element-dialog', + templateUrl: './edit-element-dialog.component.html' + }] + }], function () { return [{ type: MatDialogRef }, { type: undefined, decorators: [{ + type: Inject, + args: [MAT_DIALOG_DATA] + }] }]; }, null); })(); + +/** + * form editor - has a 1:1 relationship to form node + */ +class Edit { + /** + * get access to parent object's fields + * + * @param schemaChange signal a change + * @param name the current property name (key) + * @param schema the current schema + * @param parent the parent's schema (required in order to change the order) + * @param dialog dialog service + */ + constructor(schemaChange, name, schema, parent, dialog) { + this.schemaChange = schemaChange; + this.name = name; + this.schema = schema; + this.parent = parent; + this.dialog = dialog; + } + /** + * can add if addable is not empty + */ + canAdd() { + return this.addable().length > 0; + } + /** + * get the entries in "properties" that are not in "order" + */ + addable() { + var _a, _b; + let s; + if (this.schema.properties) { + s = this.schema; + } + else if ((_a = this.schema.items) === null || _a === void 0 ? void 0 : _a.properties) { + s = this.schema.items; + } + else if ((_b = this.schema.additionalProperties) === null || _b === void 0 ? void 0 : _b.properties) { + s = this.schema.additionalProperties; + } + else { + return []; + } + if (s.order) { + const set = new Set(Object.keys(s.properties)); + for (const p of s.order) { + if (Array.isArray(p)) { + for (const q of p) { + set.delete(q); + } + } + else { + set.delete(p); + } + } + return Array.from(set); + } + else { + return []; + } + } + /** + * add a hidden prop to the end of the list + */ + addSub(prop) { + const index = this.parent.order.indexOf(this.name); + if (index >= 0) { + this.parent.order[index] = [this.parent.order[index], prop]; + } + else { + for (const p of this.parent.order) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + p.push(prop); + } + } + } + } + this.schemaChange.emit(); + } + /** + * can add if addable is not empty + */ + canAddSub() { + return this.subaddable().length > 0; + } + /** + * get the entries in "properties" that are not in "order" + */ + subaddable() { + var _a; + if ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.order) { + const set = new Set(Object.keys(this.parent.properties)); + for (const p of this.parent.order) { + if (Array.isArray(p)) { + for (const q of p) { + set.delete(q); + } + } + else { + set.delete(p); + } + } + return Array.from(set); + } + else { + return []; + } + } + /** + * add a hidden prop to the end of the list + */ + add(prop) { + var _a; + if (this.schema.properties) { + this.schema.order.push(prop); + } + else if ((_a = this.schema.items) === null || _a === void 0 ? void 0 : _a.properties) { + this.schema.items.order.push(prop); + } + else { + this.schema.additionalProperties.order.push(prop); + } + this.schemaChange.emit(); + } + /** + * edit simple schema fields like title and description + */ + edit() { + var _a, _b, _c; + // deep clone object so we have the possibility to cancel editing + const clone = JSON.parse(JSON.stringify(this.schema)); + // handle (array) example + if (((_b = (_a = clone.items) === null || _a === void 0 ? void 0 : _a.examples) === null || _b === void 0 ? void 0 : _b.length) > 0) { + clone.example = clone.items.examples[0]; + } + if (((_c = clone.examples) === null || _c === void 0 ? void 0 : _c.length) > 0) { + clone.example = clone.examples[0]; + } + // text is default + if (!clone.widget) { + clone.widget = 'text'; + } + // horizontal is default + if (!clone.layout) { + clone.layout = 'horizontal'; + } + // array: apply choices and widget to items + if (clone.items) { + clone.widget = clone.items.widget; + clone.choices = clone.items.choices; + clone.errorMessage = clone.items.errorMessage; + clone.format = clone.items.format; + clone.required = clone.items.required; + clone.itemlayout = clone.items.layout; + } + const dialogRef = this.dialog.open(EditElementDialogComponent, { minWidth: '50%', data: clone }); + dialogRef.afterClosed().subscribe(data => { + var _a, _b; + if (data) { + this.schema.title = data.title; + this.schema.description = data.description; + this.schema.widget = data.widget; + this.schema.layout = data.layout; + this.schema.readOnly = data.readOnly; + this.schema.errorMessage = data.errorMessage; + if (data.example) { + if (data.items) { + this.schema.items.examples = [data.example]; + } + else { + this.schema.examples = [data.example]; + } + } + if (data.style) { + delete data.style['']; + } + if (data.style && Object.keys(data.style).length > 0) { + this.schema.style = data.style; + } + if (data.class) { + data.class = data.class.filter(el => el != null); + } + if (((_a = data.class) === null || _a === void 0 ? void 0 : _a.length) > 0) { + this.schema.class = data.class; + } + if (data.items) { + if (((_b = data.choices) === null || _b === void 0 ? void 0 : _b.length) > 0) { + this.schema.items.choices = data.choices; + } + this.schema.items.widget = data.widget; + this.schema.items.format = data.format; + this.schema.items.errorMessage = data.errorMessage; + this.schema.items.required = data.required; + this.schema.items.layout = data.itemlayout; + } + else { + this.schema.choices = data.choices; + this.schema.widget = data.widget; + this.schema.format = data.format; + this.schema.errorMessage = data.errorMessage; + this.schema.required = data.required; + } + this.schemaChange.emit(); + } + }); + } + /** + * can hide if I my parent is an object + */ + canHide() { + return this.parent ? true : false; + } + /** + * hide this prop + */ + hide() { + if (!this.parent.order) { + this.parent.order = Object.keys(this.parent.properties); + } + let index = 0; + for (const p of this.parent.order) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + p.splice(p.indexOf(this.name), 1); + if (p.length === 1) { + this.parent.order[index] = p[0]; + } + } + } + index++; + } + if (this.parent.order.indexOf(this.name) >= 0) { + this.parent.order.splice(this.parent.order.indexOf(this.name), 1); + } + this.schemaChange.emit(); + } + /** + * can I go up + */ + canUp() { + if (!this.parent) { + return false; + } + const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties); + const index = props.indexOf(this.name); + if (index >= 0) { + return index > 0; + } + else { + for (const p of props) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + return p.indexOf(this.name) > 0; + } + } + } + } + } + /** + * go up + */ + up() { + if (!this.parent.order) { + this.parent.order = Object.keys(this.parent.properties); + } + let index = this.parent.order.indexOf(this.name); + if (index >= 0) { + const tmp = this.parent.order[index - 1]; + this.parent.order[index - 1] = this.parent.order[index]; + this.parent.order[index] = tmp; + } + else { + for (const p of this.parent.order) { + if (Array.isArray(p)) { + index = p.indexOf(this.name); + if (index >= 0) { + const tmp = p[index - 1]; + p[index - 1] = p[index]; + p[index] = tmp; + } + } + } + } + this.schemaChange.emit(); + } + /** + * can I go down + */ + canDown() { + if (!this.parent) { + return false; + } + const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties); + const index = props.indexOf(this.name); + if (index >= 0) { + return index < props.length - 1; + } + else { + for (const p of props) { + if (Array.isArray(p)) { + if (p.indexOf(this.name) >= 0) { + return p.indexOf(this.name) < p.length - 1; + } + } + } + } + } + /** + * go down + */ + down() { + if (!this.parent.order) { + this.parent.order = Object.keys(this.parent.properties); + } + let index = this.parent.order.indexOf(this.name); + if (index >= 0) { + const tmp = this.parent.order[index + 1]; + this.parent.order[index + 1] = this.parent.order[index]; + this.parent.order[index] = tmp; + } + else { + for (const p of this.parent.order) { + if (Array.isArray(p)) { + index = p.indexOf(this.name); + if (index >= 0) { + const tmp = p[index + 1]; + p[index + 1] = p[index]; + p[index] = tmp; + } + } + } + } + this.schemaChange.emit(); + } +} + +const _c0 = ["child"]; +const _c1 = ["children"]; +function JsonSchemaFormComponent_mat_expansion_panel_0_Template(rf, ctx) { if (rf & 1) { + const _r5 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "mat-expansion-panel", 3); + ɵɵelementStart(1, "mat-expansion-panel-header"); + ɵɵelementStart(2, "mat-panel-title"); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵelementStart(4, "mat-panel-description"); + ɵɵtext(5); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementStart(6, "lib-json-schema-form", 4, 5); + ɵɵlistener("valueChange", function JsonSchemaFormComponent_mat_expansion_panel_0_Template_lib_json_schema_form_valueChange_6_listener($event) { ɵɵrestoreView(_r5); const ctx_r4 = ɵɵnextContext(); return ctx_r4.setAndEmit($event); })("schemaChange", function JsonSchemaFormComponent_mat_expansion_panel_0_Template_lib_json_schema_form_schemaChange_6_listener() { ɵɵrestoreView(_r5); const ctx_r6 = ɵɵnextContext(); return ctx_r6.schemaChange.emit(); }); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r0 = ɵɵnextContext(); + ɵɵproperty("ngStyle", ctx_r0.schema.style)("ngClass", ctx_r0.schema.class)("expanded", ctx_r0.schema.expanded); + ɵɵadvance(3); + ɵɵtextInterpolate(ctx_r0.label); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r0.schema.description); + ɵɵadvance(1); + ɵɵproperty("label", ctx_r0.label)("name", ctx_r0.name)("value", ctx_r0.value)("switch", ctx_r0.switch)("rootValue", ctx_r0.rootValue)("rootSchema", ctx_r0.rootSchema)("schema", ctx_r0.schema)("inExpansion", true)("base", ctx_r0.base); +} } +function JsonSchemaFormComponent_div_1_div_1_button_31_Template(rf, ctx) { if (rf & 1) { + const _r30 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 14); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_button_31_Template_button_click_0_listener() { ɵɵrestoreView(_r30); const x_r28 = ctx.$implicit; const ctx_r29 = ɵɵnextContext(3); return ctx_r29.edit.add(x_r28); }); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r28 = ctx.$implicit; + ɵɵadvance(1); + ɵɵtextInterpolate(x_r28); +} } +function JsonSchemaFormComponent_div_1_div_1_button_34_Template(rf, ctx) { if (rf & 1) { + const _r33 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 14); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_button_34_Template_button_click_0_listener() { ɵɵrestoreView(_r33); const x_r31 = ctx.$implicit; const ctx_r32 = ɵɵnextContext(3); return ctx_r32.edit.addSub(x_r31); }); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r31 = ctx.$implicit; + ɵɵadvance(1); + ɵɵtextInterpolate(x_r31); +} } +function JsonSchemaFormComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) { + const _r35 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "mat-icon", 12); + ɵɵtext(2, " more_vert "); + ɵɵelementEnd(); + ɵɵelementStart(3, "mat-menu", null, 13); + ɵɵelementStart(5, "button", 14); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_5_listener() { ɵɵrestoreView(_r35); const ctx_r34 = ɵɵnextContext(2); return ctx_r34.edit.edit(); }); + ɵɵelementStart(6, "mat-icon"); + ɵɵtext(7, "edit"); + ɵɵelementEnd(); + ɵɵtext(8, "Edit "); + ɵɵelementEnd(); + ɵɵelementStart(9, "button", 15); + ɵɵelementStart(10, "mat-icon"); + ɵɵtext(11, "add"); + ɵɵelementEnd(); + ɵɵtext(12, "Show "); + ɵɵelementEnd(); + ɵɵelementStart(13, "button", 15); + ɵɵelementStart(14, "mat-icon"); + ɵɵtext(15, "playlist_add"); + ɵɵelementEnd(); + ɵɵtext(16, "Show inline "); + ɵɵelementEnd(); + ɵɵelementStart(17, "button", 16); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_17_listener() { ɵɵrestoreView(_r35); const ctx_r36 = ɵɵnextContext(2); return ctx_r36.edit.hide(); }); + ɵɵelementStart(18, "mat-icon"); + ɵɵtext(19, "remove"); + ɵɵelementEnd(); + ɵɵtext(20, "Hide "); + ɵɵelementEnd(); + ɵɵelementStart(21, "button", 16); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_21_listener() { ɵɵrestoreView(_r35); const ctx_r37 = ɵɵnextContext(2); return ctx_r37.edit.up(); }); + ɵɵelementStart(22, "mat-icon"); + ɵɵtext(23, "north_west"); + ɵɵelementEnd(); + ɵɵtext(24, "Up / Left "); + ɵɵelementEnd(); + ɵɵelementStart(25, "button", 16); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_div_1_Template_button_click_25_listener() { ɵɵrestoreView(_r35); const ctx_r38 = ɵɵnextContext(2); return ctx_r38.edit.down(); }); + ɵɵelementStart(26, "mat-icon"); + ɵɵtext(27, "south_east"); + ɵɵelementEnd(); + ɵɵtext(28, "Down / Right "); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementStart(29, "mat-menu", null, 17); + ɵɵtemplate(31, JsonSchemaFormComponent_div_1_div_1_button_31_Template, 2, 1, "button", 18); + ɵɵelementEnd(); + ɵɵelementStart(32, "mat-menu", null, 19); + ɵɵtemplate(34, JsonSchemaFormComponent_div_1_div_1_button_34_Template, 2, 1, "button", 18); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const _r23 = ɵɵreference(4); + const _r24 = ɵɵreference(30); + const _r26 = ɵɵreference(33); + const ctx_r7 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("matMenuTriggerFor", _r23)("matTooltip", ctx_r7.name ? "Form element " + ctx_r7.name : ctx_r7.isRoot ? "Form root" : ""); + ɵɵadvance(8); + ɵɵproperty("disabled", !ctx_r7.edit.canAdd())("matMenuTriggerFor", _r24); + ɵɵadvance(4); + ɵɵproperty("disabled", !ctx_r7.edit.canAddSub())("matMenuTriggerFor", _r26); + ɵɵadvance(4); + ɵɵproperty("disabled", !ctx_r7.edit.canHide()); + ɵɵadvance(4); + ɵɵproperty("disabled", !ctx_r7.edit.canUp()); + ɵɵadvance(4); + ɵɵproperty("disabled", !ctx_r7.edit.canDown()); + ɵɵadvance(6); + ɵɵproperty("ngForOf", ctx_r7.edit.addable()); + ɵɵadvance(3); + ɵɵproperty("ngForOf", ctx_r7.edit.subaddable()); +} } +function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template(rf, ctx) { if (rf & 1) { + const _r48 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "lib-json-schema-form", 26, 27); + ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template_lib_json_schema_form_valueChange_1_listener($event) { ɵɵrestoreView(_r48); const x_r43 = ɵɵnextContext().$implicit; const ctx_r46 = ɵɵnextContext(4); return ctx_r46.onValueChange(x_r43.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template_lib_json_schema_form_schemaChange_1_listener() { ɵɵrestoreView(_r48); const ctx_r49 = ɵɵnextContext(5); return ctx_r49.schemaChange.emit(); }); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r43 = ɵɵnextContext().$implicit; + const ctx_r44 = ɵɵnextContext(4); + ɵɵadvance(1); + ɵɵproperty("name", x_r43.key)("label", x_r43.value.title ? x_r43.value.title : x_r43.key)("value", ctx_r44.value ? ctx_r44.value[x_r43.key] : undefined)("switch", ctx_r44.value ? ctx_r44.value[ctx_r44.schema.switch] : undefined)("rootValue", ctx_r44.rootValue)("rootSchema", ctx_r44.rootSchema)("schema", x_r43.value)("parentSchema", ctx_r44.schema)("required", ctx_r44.schema.required ? ctx_r44.schema.required.includes(x_r43.key) : false)("hideUndefined", ctx_r44.schema.hideUndefined)("base", ctx_r44.base); +} } +function JsonSchemaFormComponent_div_1_span_2_div_1_div_1_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "div", 25); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_div_1_div_1_Template, 3, 11, "div", 7); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r43 = ctx.$implicit; + ɵɵadvance(1); + ɵɵproperty("ngIf", x_r43.value && (x_r43.value.type || x_r43.value.$ref)); +} } +function JsonSchemaFormComponent_div_1_span_2_div_1_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "div", 23); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_div_1_Template, 2, 1, "div", 24); + ɵɵpipe(2, "keyvalue"); + ɵɵelementEnd(); +} if (rf & 2) { + const op_r41 = ctx.$implicit; + const ctx_r39 = ɵɵnextContext(3); + ɵɵproperty("fxLayout", ctx_r39.schema.layout !== "vertical" ? "column" : "row wrap"); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ɵɵpipeBind2(2, 2, op_r41, ctx_r39.originalOrder)); +} } +function JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template(rf, ctx) { if (rf & 1) { + const _r55 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "mat-checkbox", 31); + ɵɵlistener("change", function JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template_mat_checkbox_change_1_listener() { ɵɵrestoreView(_r55); const x_r53 = ctx.$implicit; const ctx_r54 = ɵɵnextContext(4); return ctx_r54.showProperty(x_r53); }); + ɵɵtext(2); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r53 = ctx.$implicit; + const ctx_r52 = ɵɵnextContext(4); + ɵɵadvance(1); + ɵɵproperty("disabled", ctx_r52.value ? ctx_r52.value[x_r53] : false)("checked", ctx_r52.value && ctx_r52.value[x_r53] !== undefined); + ɵɵadvance(1); + ɵɵtextInterpolate1(" ", x_r53, " "); +} } +function JsonSchemaFormComponent_div_1_span_2_div_2_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "div", 28); + ɵɵelementStart(1, "button", 29); + ɵɵelementStart(2, "mat-icon"); + ɵɵtext(3, "more_vert"); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementStart(4, "mat-menu", null, 13); + ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_2_div_2_div_6_Template, 3, 3, "div", 30); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const _r51 = ɵɵreference(5); + const ctx_r40 = ɵɵnextContext(3); + ɵɵadvance(1); + ɵɵproperty("matMenuTriggerFor", _r51); + ɵɵadvance(5); + ɵɵproperty("ngForOf", ctx_r40.showPropertyList()); +} } +function JsonSchemaFormComponent_div_1_span_2_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "span", 20); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_2_div_1_Template, 3, 5, "div", 21); + ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_2_div_2_Template, 7, 2, "div", 22); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r8 = ɵɵnextContext(2); + ɵɵproperty("fxLayout", ctx_r8.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r8.schema.style)("ngClass", ctx_r8.schema.class); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ctx_r8.orderedProperties); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r8.schema.hideUndefined); +} } +function JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template(rf, ctx) { if (rf & 1) { + const _r64 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 38); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template_button_click_0_listener() { ɵɵrestoreView(_r64); const x_r58 = ɵɵnextContext().$implicit; const ctx_r62 = ɵɵnextContext(3); return ctx_r62.removeField(x_r58.key); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "remove_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r61 = ɵɵnextContext(4); + ɵɵpropertyInterpolate("matTooltip", ctx_r61.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_3_div_1_Template(rf, ctx) { if (rf & 1) { + const _r66 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div", 34); + ɵɵlistener("mouseenter", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_div_mouseenter_0_listener() { ɵɵrestoreView(_r66); const i_r59 = ctx.index; const ctx_r65 = ɵɵnextContext(3); return ctx_r65.hover = i_r59; })("mouseleave", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_div_mouseleave_0_listener() { ɵɵrestoreView(_r66); const ctx_r67 = ɵɵnextContext(3); return ctx_r67.hover = null; }); + ɵɵelementStart(1, "mat-form-field"); + ɵɵelementStart(2, "mat-label"); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵelementStart(4, "input", 35); + ɵɵlistener("change", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_input_change_4_listener($event) { ɵɵrestoreView(_r66); const x_r58 = ctx.$implicit; const ctx_r68 = ɵɵnextContext(3); return ctx_r68.fieldNameChange(x_r58.key, $event.target.value); }); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵtext(5, " \u00A0 "); + ɵɵelementStart(6, "lib-json-schema-form", 36, 27); + ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_lib_json_schema_form_valueChange_6_listener($event) { ɵɵrestoreView(_r66); const x_r58 = ctx.$implicit; const ctx_r69 = ɵɵnextContext(3); return ctx_r69.onValueChange(x_r58.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_3_div_1_Template_lib_json_schema_form_schemaChange_6_listener() { ɵɵrestoreView(_r66); const ctx_r70 = ɵɵnextContext(3); return ctx_r70.schemaChange.emit(); }); + ɵɵelementEnd(); + ɵɵtemplate(8, JsonSchemaFormComponent_div_1_span_3_div_1_button_8_Template, 3, 1, "button", 37); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r58 = ctx.$implicit; + const ctx_r56 = ɵɵnextContext(3); + ɵɵadvance(3); + ɵɵtextInterpolate1("", ctx_r56.getLabel(), " key"); + ɵɵadvance(1); + ɵɵproperty("disabled", ctx_r56.readOnly)("value", x_r58.key); + ɵɵadvance(2); + ɵɵproperty("label", ctx_r56.getLabel() + " value")("value", ctx_r56.value[x_r58.key])("rootValue", ctx_r56.rootValue)("rootSchema", ctx_r56.rootSchema)("schema", ctx_r56.schema.additionalProperties)("base", ctx_r56.base); + ɵɵadvance(2); + ɵɵproperty("ngIf", !ctx_r56.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_3_button_3_Template(rf, ctx) { if (rf & 1) { + const _r72 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 39); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_3_button_3_Template_button_click_0_listener() { ɵɵrestoreView(_r72); const ctx_r71 = ɵɵnextContext(3); return ctx_r71.addField(); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "add_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r57 = ɵɵnextContext(3); + ɵɵpropertyInterpolate("matTooltip", ctx_r57.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_3_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "span", 20); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_3_div_1_Template, 9, 10, "div", 32); + ɵɵpipe(2, "keyvalue"); + ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_3_button_3_Template, 3, 1, "button", 33); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r9 = ɵɵnextContext(2); + ɵɵproperty("fxLayout", ctx_r9.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r9.schema.style)("ngClass", ctx_r9.schema.class); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ɵɵpipeBind2(2, 5, ctx_r9.value, ctx_r9.originalOrder)); + ɵɵadvance(2); + ɵɵproperty("ngIf", !ctx_r9.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template(rf, ctx) { if (rf & 1) { + const _r84 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "mat-form-field"); + ɵɵelementStart(1, "input", 45); + ɵɵlistener("change", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template_input_change_1_listener($event) { ɵɵrestoreView(_r84); const x_r75 = ɵɵnextContext(2).$implicit; const ctx_r82 = ɵɵnextContext(3); return ctx_r82.fieldNameChange(x_r75.key, $event.target.value); }); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r75 = ɵɵnextContext(2).$implicit; + ɵɵadvance(1); + ɵɵproperty("value", x_r75.key); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_span_1_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "span"); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r75 = ɵɵnextContext(2).$implicit; + ɵɵadvance(1); + ɵɵtextInterpolate(x_r75.key); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_Template(rf, ctx) { if (rf & 1) { + ɵɵtemplate(0, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_mat_form_field_0_Template, 2, 1, "mat-form-field", 7); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_span_1_Template, 2, 1, "span", 7); +} if (rf & 2) { + const ctx_r77 = ɵɵnextContext(4); + ɵɵproperty("ngIf", !ctx_r77.readOnly); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r77.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template(rf, ctx) { if (rf & 1) { + const _r89 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 38); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template_button_click_0_listener() { ɵɵrestoreView(_r89); const x_r75 = ɵɵnextContext().$implicit; const ctx_r87 = ɵɵnextContext(3); return ctx_r87.removeField(x_r75.key); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "remove_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r79 = ɵɵnextContext(4); + ɵɵpropertyInterpolate("matTooltip", ctx_r79.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template(rf, ctx) { if (rf & 1) { + const _r91 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "mat-tab", 42); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_ng_template_1_Template, 2, 2, "ng-template", 43); + ɵɵelementStart(2, "lib-json-schema-form", 44, 27); + ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template_lib_json_schema_form_valueChange_2_listener($event) { ɵɵrestoreView(_r91); const x_r75 = ctx.$implicit; const ctx_r90 = ɵɵnextContext(3); return ctx_r90.onValueChange(x_r75.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template_lib_json_schema_form_schemaChange_2_listener() { ɵɵrestoreView(_r91); const ctx_r92 = ɵɵnextContext(3); return ctx_r92.schemaChange.emit(); }); + ɵɵelementEnd(); + ɵɵtemplate(4, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_button_4_Template, 3, 1, "button", 37); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r75 = ctx.$implicit; + const ctx_r73 = ɵɵnextContext(3); + ɵɵadvance(2); + ɵɵproperty("value", ctx_r73.value[x_r75.key])("rootValue", ctx_r73.rootValue)("rootSchema", ctx_r73.rootSchema)("schema", ctx_r73.schema.additionalProperties)("base", ctx_r73.base); + ɵɵadvance(2); + ɵɵproperty("ngIf", !ctx_r73.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template(rf, ctx) { if (rf & 1) { + const _r95 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 39); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template_button_click_0_listener() { ɵɵrestoreView(_r95); const ctx_r94 = ɵɵnextContext(4); return ctx_r94.addField(); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "add_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r93 = ɵɵnextContext(4); + ɵɵpropertyInterpolate("matTooltip", ctx_r93.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-tab"); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_ng_template_1_Template, 3, 1, "ng-template", 43); + ɵɵelementEnd(); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_4_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-tab-group", 40); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_1_Template, 5, 6, "mat-tab", 41); + ɵɵpipe(2, "keyvalue"); + ɵɵtemplate(3, JsonSchemaFormComponent_div_1_mat_tab_group_4_mat_tab_3_Template, 2, 0, "mat-tab", 7); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r10 = ɵɵnextContext(2); + ɵɵproperty("ngStyle", ctx_r10.schema.style)("ngClass", ctx_r10.schema.class); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ɵɵpipeBind2(2, 4, ctx_r10.value, ctx_r10.originalOrder)); + ɵɵadvance(2); + ɵɵproperty("ngIf", !ctx_r10.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template(rf, ctx) { if (rf & 1) { + const _r104 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 38); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template_button_click_0_listener() { ɵɵrestoreView(_r104); const i_r99 = ɵɵnextContext().index; const ctx_r102 = ɵɵnextContext(3); return ctx_r102.remove(i_r99); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "remove_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r101 = ɵɵnextContext(4); + ɵɵpropertyInterpolate("matTooltip", ctx_r101.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_5_div_1_Template(rf, ctx) { if (rf & 1) { + const _r106 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div", 34); + ɵɵlistener("mouseenter", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_div_mouseenter_0_listener() { ɵɵrestoreView(_r106); const i_r99 = ctx.index; const ctx_r105 = ɵɵnextContext(3); return ctx_r105.hover = i_r99; })("mouseleave", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_div_mouseleave_0_listener() { ɵɵrestoreView(_r106); const ctx_r107 = ɵɵnextContext(3); return ctx_r107.hover = null; }); + ɵɵelementStart(1, "lib-json-schema-form", 36, 27); + ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_lib_json_schema_form_valueChange_1_listener($event) { ɵɵrestoreView(_r106); const i_r99 = ctx.index; const ctx_r108 = ɵɵnextContext(3); return ctx_r108.setIndexAndEmit(i_r99, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_5_div_1_Template_lib_json_schema_form_schemaChange_1_listener() { ɵɵrestoreView(_r106); const ctx_r109 = ɵɵnextContext(3); return ctx_r109.schemaChange.emit(); }); + ɵɵelementEnd(); + ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_5_div_1_button_3_Template, 3, 1, "button", 37); + ɵɵelementEnd(); +} if (rf & 2) { + const i_r99 = ctx.index; + const ctx_r96 = ɵɵnextContext(3); + ɵɵadvance(1); + ɵɵproperty("label", ctx_r96.getLabel())("value", ctx_r96.value[i_r99])("rootValue", ctx_r96.rootValue)("rootSchema", ctx_r96.rootSchema)("schema", ctx_r96.schema.items)("base", ctx_r96.base); + ɵɵadvance(2); + ɵɵproperty("ngIf", !ctx_r96.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_5_button_2_Template(rf, ctx) { if (rf & 1) { + const _r111 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 39); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_5_button_2_Template_button_click_0_listener() { ɵɵrestoreView(_r111); const ctx_r110 = ɵɵnextContext(3); return ctx_r110.add(); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "add_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r97 = ɵɵnextContext(3); + ɵɵpropertyInterpolate("matTooltip", ctx_r97.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_5_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "span", 20); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_5_div_1_Template, 4, 7, "div", 32); + ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_5_button_2_Template, 3, 1, "button", 33); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r11 = ɵɵnextContext(2); + ɵɵproperty("fxLayout", ctx_r11.schema.layout === "vertical" ? "column" : "row wrap")("ngStyle", ctx_r11.schema.style)("ngClass", ctx_r11.schema.class); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ctx_r11.value); + ɵɵadvance(1); + ɵɵproperty("ngIf", !ctx_r11.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template(rf, ctx) { if (rf & 1) { + const _r116 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "mat-chip", 51); + ɵɵlistener("removed", function JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template_mat_chip_removed_0_listener() { ɵɵrestoreView(_r116); const v_r114 = ctx.$implicit; const ctx_r115 = ɵɵnextContext(3); return ctx_r115.removeChip(v_r114); }); + ɵɵtext(1); + ɵɵelementStart(2, "mat-icon", 52); + ɵɵtext(3, "cancel"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const v_r114 = ctx.$implicit; + const ctx_r113 = ɵɵnextContext(3); + ɵɵproperty("removable", !ctx_r113.readOnly); + ɵɵadvance(1); + ɵɵtextInterpolate1(" ", v_r114, " "); +} } +function JsonSchemaFormComponent_div_1_span_6_Template(rf, ctx) { if (rf & 1) { + const _r118 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "span"); + ɵɵelementStart(1, "mat-form-field", 46); + ɵɵelementStart(2, "mat-chip-list", 47, 48); + ɵɵlistener("cdkDropListDropped", function JsonSchemaFormComponent_div_1_span_6_Template_mat_chip_list_cdkDropListDropped_2_listener($event) { ɵɵrestoreView(_r118); const ctx_r117 = ɵɵnextContext(2); return ctx_r117.dropChip($event); }); + ɵɵtemplate(4, JsonSchemaFormComponent_div_1_span_6_mat_chip_4_Template, 4, 2, "mat-chip", 49); + ɵɵelementStart(5, "input", 50); + ɵɵlistener("matChipInputTokenEnd", function JsonSchemaFormComponent_div_1_span_6_Template_input_matChipInputTokenEnd_5_listener($event) { ɵɵrestoreView(_r118); const ctx_r119 = ɵɵnextContext(2); return ctx_r119.addChip($event); }); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const _r112 = ɵɵreference(3); + const ctx_r12 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("ngStyle", ctx_r12.schema.style)("ngClass", ctx_r12.schema.class); + ɵɵadvance(3); + ɵɵproperty("ngForOf", ctx_r12.value); + ɵɵadvance(1); + ɵɵproperty("placeholder", ctx_r12.schema.title)("matChipInputFor", _r112)("matChipInputSeparatorKeyCodes", ctx_r12.separatorKeysCodes)("disabled", ctx_r12.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template(rf, ctx) { if (rf & 1) { + const _r128 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 38); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template_button_click_0_listener() { ɵɵrestoreView(_r128); const i_r123 = ɵɵnextContext().index; const ctx_r126 = ɵɵnextContext(3); return ctx_r126.remove(i_r123); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "remove_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r125 = ɵɵnextContext(4); + ɵɵpropertyInterpolate("matTooltip", ctx_r125.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template(rf, ctx) { if (rf & 1) { + const _r130 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "mat-tab", 54); + ɵɵelementStart(1, "lib-json-schema-form", 44, 27); + ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template_lib_json_schema_form_valueChange_1_listener($event) { ɵɵrestoreView(_r130); const i_r123 = ctx.index; const ctx_r129 = ɵɵnextContext(3); return ctx_r129.setIndexAndEmit(i_r123, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template_lib_json_schema_form_schemaChange_1_listener() { ɵɵrestoreView(_r130); const ctx_r131 = ɵɵnextContext(3); return ctx_r131.schemaChange.emit(); }); + ɵɵelementEnd(); + ɵɵtemplate(3, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_button_3_Template, 3, 1, "button", 37); + ɵɵelementEnd(); +} if (rf & 2) { + const i_r123 = ctx.index; + const ctx_r120 = ɵɵnextContext(3); + ɵɵproperty("label", ctx_r120.getLabel() + " " + i_r123); + ɵɵadvance(1); + ɵɵproperty("value", ctx_r120.value[i_r123])("rootValue", ctx_r120.rootValue)("rootSchema", ctx_r120.rootSchema)("schema", ctx_r120.schema.items)("base", ctx_r120.base); + ɵɵadvance(2); + ɵɵproperty("ngIf", !ctx_r120.readOnly); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template(rf, ctx) { if (rf & 1) { + const _r134 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 39); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template_button_click_0_listener() { ɵɵrestoreView(_r134); const ctx_r133 = ɵɵnextContext(4); return ctx_r133.add(); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "add_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r132 = ɵɵnextContext(4); + ɵɵpropertyInterpolate("matTooltip", ctx_r132.getLabel()); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-tab"); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_ng_template_1_Template, 3, 1, "ng-template", 43); + ɵɵelementEnd(); +} } +function JsonSchemaFormComponent_div_1_mat_tab_group_7_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-tab-group", 40); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_1_Template, 4, 7, "mat-tab", 53); + ɵɵtemplate(2, JsonSchemaFormComponent_div_1_mat_tab_group_7_mat_tab_2_Template, 2, 0, "mat-tab", 7); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r13 = ɵɵnextContext(2); + ɵɵproperty("ngStyle", ctx_r13.schema.style)("ngClass", ctx_r13.schema.class); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ctx_r13.value); + ɵɵadvance(1); + ɵɵproperty("ngIf", !ctx_r13.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_8_th_3_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "th", 58); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r138 = ctx.$implicit; + ɵɵadvance(1); + ɵɵtextInterpolate1(" ", x_r138.value.title ? x_r138.value.title : x_r138.key, ""); +} } +function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template(rf, ctx) { if (rf & 1) { + const _r147 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "td"); + ɵɵelementStart(1, "lib-json-schema-form", 59, 27); + ɵɵlistener("valueChange", function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template_lib_json_schema_form_valueChange_1_listener($event) { ɵɵrestoreView(_r147); const x_r143 = ctx.$implicit; const i_r140 = ɵɵnextContext().index; const ctx_r145 = ɵɵnextContext(3); return ctx_r145.setIndexAndEmitTable(i_r140, x_r143.key, $event); })("schemaChange", function JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template_lib_json_schema_form_schemaChange_1_listener() { ɵɵrestoreView(_r147); const ctx_r148 = ɵɵnextContext(4); return ctx_r148.schemaChange.emit(); }); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r143 = ctx.$implicit; + const row_r139 = ɵɵnextContext().$implicit; + const ctx_r141 = ɵɵnextContext(3); + ɵɵadvance(1); + ɵɵproperty("value", row_r139[x_r143.key])("rootValue", ctx_r141.rootValue)("rootSchema", ctx_r141.rootSchema)("schema", ctx_r141.schema.items.properties[x_r143.key])("base", ctx_r141.base); +} } +function JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template(rf, ctx) { if (rf & 1) { + const _r152 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 39); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template_button_click_0_listener() { ɵɵrestoreView(_r152); const i_r140 = ɵɵnextContext().index; const ctx_r150 = ɵɵnextContext(3); return ctx_r150.remove(i_r140); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "remove_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r142 = ɵɵnextContext(4); + ɵɵpropertyInterpolate("matTooltip", ctx_r142.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_8_tr_6_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "tr"); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_span_8_tr_6_td_1_Template, 3, 5, "td", 30); + ɵɵpipe(2, "keyvalue"); + ɵɵelementStart(3, "td"); + ɵɵtemplate(4, JsonSchemaFormComponent_div_1_span_8_tr_6_button_4_Template, 3, 1, "button", 33); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r136 = ɵɵnextContext(3); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ɵɵpipeBind2(2, 2, ctx_r136.schema.items.properties, ctx_r136.originalOrder)); + ɵɵadvance(3); + ɵɵproperty("ngIf", !ctx_r136.readOnly); +} } +function JsonSchemaFormComponent_div_1_span_8_button_7_Template(rf, ctx) { if (rf & 1) { + const _r154 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "button", 39); + ɵɵlistener("click", function JsonSchemaFormComponent_div_1_span_8_button_7_Template_button_click_0_listener() { ɵɵrestoreView(_r154); const ctx_r153 = ɵɵnextContext(3); return ctx_r153.add(); }); + ɵɵelementStart(1, "mat-icon"); + ɵɵtext(2, "add_circle_outline"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r137 = ɵɵnextContext(3); + ɵɵpropertyInterpolate("matTooltip", ctx_r137.getLabel()); +} } +function JsonSchemaFormComponent_div_1_span_8_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "span", 46); + ɵɵelementStart(1, "table", 55); + ɵɵelementStart(2, "tr"); + ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_8_th_3_Template, 2, 1, "th", 56); + ɵɵpipe(4, "keyvalue"); + ɵɵelement(5, "th", 57); + ɵɵelementEnd(); + ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_8_tr_6_Template, 5, 5, "tr", 30); + ɵɵelementEnd(); + ɵɵtemplate(7, JsonSchemaFormComponent_div_1_span_8_button_7_Template, 3, 1, "button", 33); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r14 = ɵɵnextContext(2); + ɵɵproperty("ngStyle", ctx_r14.schema.style)("ngClass", ctx_r14.schema.class); + ɵɵadvance(3); + ɵɵproperty("ngForOf", ɵɵpipeBind2(4, 5, ctx_r14.schema.items.properties, ctx_r14.originalOrder)); + ɵɵadvance(3); + ɵɵproperty("ngForOf", ctx_r14.value); + ɵɵadvance(1); + ɵɵproperty("ngIf", !ctx_r14.readOnly); +} } +function JsonSchemaFormComponent_div_1_div_9_mat_option_5_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-option", 63); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const x_r156 = ctx.$implicit; + ɵɵproperty("value", x_r156); + ɵɵadvance(1); + ɵɵtextInterpolate(x_r156); +} } +function JsonSchemaFormComponent_div_1_div_9_Template(rf, ctx) { if (rf & 1) { + const _r158 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "mat-form-field", 46); + ɵɵelementStart(2, "mat-label"); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵelementStart(4, "mat-select", 60); + ɵɵlistener("selectionChange", function JsonSchemaFormComponent_div_1_div_9_Template_mat_select_selectionChange_4_listener($event) { ɵɵrestoreView(_r158); const ctx_r157 = ɵɵnextContext(2); return ctx_r157.change($event); }); + ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_9_mat_option_5_Template, 2, 2, "mat-option", 61); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementStart(6, "p", 62); + ɵɵtext(7); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r15 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("ngStyle", ctx_r15.schema.style)("ngClass", ctx_r15.schema.class); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r15.label); + ɵɵadvance(1); + ɵɵproperty("value", ctx_r15.value)("disabled", ctx_r15.readOnly); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ctx_r15.schema.enum); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r15.error()); +} } +function JsonSchemaFormComponent_div_1_div_10_mat_option_5_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-option", 67); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const choice_r160 = ctx.$implicit; + ɵɵproperty("value", choice_r160.value)("matTooltip", choice_r160.name !== choice_r160.value ? choice_r160.value : null); + ɵɵadvance(1); + ɵɵtextInterpolate1(" ", choice_r160.name, " "); +} } +function JsonSchemaFormComponent_div_1_div_10_Template(rf, ctx) { if (rf & 1) { + const _r162 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "mat-form-field", 64); + ɵɵelementStart(2, "mat-label"); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵelementStart(4, "mat-select", 65); + ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_10_Template_mat_select_focus_4_listener() { ɵɵrestoreView(_r162); const ctx_r161 = ɵɵnextContext(2); return ctx_r161.focus(); })("selectionChange", function JsonSchemaFormComponent_div_1_div_10_Template_mat_select_selectionChange_4_listener($event) { ɵɵrestoreView(_r162); const ctx_r163 = ɵɵnextContext(2); return ctx_r163.change($event); }); + ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_10_mat_option_5_Template, 2, 3, "mat-option", 66); + ɵɵpipe(6, "async"); + ɵɵelementEnd(); + ɵɵelementEnd(); + ɵɵelementStart(7, "p", 62); + ɵɵtext(8); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r16 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("matTooltip", ctx_r16.schema.description)("ngStyle", ctx_r16.schema.style)("ngClass", ctx_r16.schema.class); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r16.label); + ɵɵadvance(1); + ɵɵproperty("value", ctx_r16.value)("disabled", ctx_r16.readOnly); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ɵɵpipeBind1(6, 8, ctx_r16.choices)); + ɵɵadvance(3); + ɵɵtextInterpolate(ctx_r16.error()); +} } +function JsonSchemaFormComponent_div_1_div_11_Template(rf, ctx) { if (rf & 1) { + const _r166 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "mat-form-field", 46); + ɵɵelementStart(2, "mat-label"); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵelementStart(4, "input", 68); + ɵɵlistener("dateChange", function JsonSchemaFormComponent_div_1_div_11_Template_input_dateChange_4_listener($event) { ɵɵrestoreView(_r166); const ctx_r165 = ɵɵnextContext(2); return ctx_r165.change($event); }); + ɵɵelementEnd(); + ɵɵelement(5, "mat-datepicker-toggle", 69); + ɵɵelement(6, "mat-datepicker", null, 70); + ɵɵelementEnd(); + ɵɵelementStart(8, "p", 62); + ɵɵtext(9); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const _r164 = ɵɵreference(7); + const ctx_r17 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("ngStyle", ctx_r17.schema.style)("ngClass", ctx_r17.schema.class); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r17.label); + ɵɵadvance(1); + ɵɵproperty("value", ctx_r17.parseDate(ctx_r17.value, ctx_r17.schema.dateFormat))("matDatepicker", _r164)("disabled", ctx_r17.readOnly); + ɵɵadvance(1); + ɵɵproperty("for", _r164); + ɵɵadvance(4); + ɵɵtextInterpolate(ctx_r17.error()); +} } +function JsonSchemaFormComponent_div_1_div_12_Template(rf, ctx) { if (rf & 1) { + const _r168 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div", 71); + ɵɵelementStart(1, "mat-checkbox", 72); + ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_12_Template_mat_checkbox_change_1_listener($event) { ɵɵrestoreView(_r168); const ctx_r167 = ɵɵnextContext(2); return ctx_r167.change($event); }); + ɵɵtext(2); + ɵɵelementEnd(); + ɵɵelementStart(3, "p", 62); + ɵɵtext(4); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r18 = ɵɵnextContext(2); + ɵɵproperty("ngStyle", ctx_r18.schema.style)("ngClass", ctx_r18.schema.class); + ɵɵadvance(1); + ɵɵproperty("checked", ctx_r18.value)("disabled", ctx_r18.readOnly); + ɵɵadvance(1); + ɵɵtextInterpolate1(" ", ctx_r18.label, ""); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r18.error()); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_mat_option_4_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-option", 67); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const choice_r172 = ctx.$implicit; + ɵɵproperty("value", choice_r172.value)("matTooltip", choice_r172.name !== choice_r172.value ? choice_r172.value : null); + ɵɵadvance(1); + ɵɵtextInterpolate1(" ", choice_r172.name, " "); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template(rf, ctx) { if (rf & 1) { + const _r174 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "mat-form-field", 46); + ɵɵelementStart(1, "mat-label"); + ɵɵtext(2); + ɵɵelementEnd(); + ɵɵelementStart(3, "mat-select", 73); + ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template_mat_select_focus_3_listener() { ɵɵrestoreView(_r174); const ctx_r173 = ɵɵnextContext(3); return ctx_r173.focus(); })("selectionChange", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template_mat_select_selectionChange_3_listener($event) { ɵɵrestoreView(_r174); const ctx_r175 = ɵɵnextContext(3); return ctx_r175.change($event); }); + ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_mat_option_4_Template, 2, 3, "mat-option", 66); + ɵɵpipe(5, "async"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r169 = ɵɵnextContext(3); + ɵɵproperty("ngStyle", ctx_r169.schema.style)("ngClass", ctx_r169.schema.class); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r169.label); + ɵɵadvance(1); + ɵɵproperty("value", ctx_r169.value)("disabled", ctx_r169.readOnly); + ɵɵadvance(1); + ɵɵproperty("ngForOf", ɵɵpipeBind1(5, 6, ctx_r169.choices)); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_mat_option_6_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "mat-option", 67); + ɵɵtext(1); + ɵɵelementEnd(); +} if (rf & 2) { + const choice_r178 = ctx.$implicit; + ɵɵproperty("value", choice_r178.value)("matTooltip", choice_r178.name !== choice_r178.value ? choice_r178.value : null); + ɵɵadvance(1); + ɵɵtextInterpolate1(" ", choice_r178.name, " "); +} } +function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template(rf, ctx) { if (rf & 1) { + const _r180 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "mat-form-field", 46); + ɵɵelementStart(1, "mat-label"); + ɵɵtext(2); + ɵɵelementEnd(); + ɵɵelementStart(3, "input", 74); + ɵɵlistener("focus", function JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template_input_focus_3_listener() { ɵɵrestoreView(_r180); const ctx_r179 = ɵɵnextContext(3); return ctx_r179.focus(); }); + ɵɵelementEnd(); + ɵɵelementStart(4, "mat-autocomplete", null, 75); + ɵɵtemplate(6, JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_mat_option_6_Template, 2, 3, "mat-option", 66); + ɵɵpipe(7, "async"); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const _r176 = ɵɵreference(5); + const ctx_r170 = ɵɵnextContext(3); + ɵɵproperty("ngStyle", ctx_r170.schema.style)("ngClass", ctx_r170.schema.class); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r170.label); + ɵɵadvance(1); + ɵɵproperty("formControl", ctx_r170.control)("matAutocomplete", _r176); + ɵɵadvance(3); + ɵɵproperty("ngForOf", ɵɵpipeBind1(7, 6, ctx_r170.filteredOptions)); +} } +function JsonSchemaFormComponent_div_1_div_13_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "div"); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_div_13_mat_form_field_1_Template, 6, 8, "mat-form-field", 10); + ɵɵtemplate(2, JsonSchemaFormComponent_div_1_div_13_mat_form_field_2_Template, 8, 8, "mat-form-field", 10); + ɵɵelementStart(3, "p", 62); + ɵɵtext(4); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r19 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r19.schema.widget === "select"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r19.schema.widget !== "select"); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r19.error()); +} } +function JsonSchemaFormComponent_div_1_div_14_input_4_Template(rf, ctx) { if (rf & 1) { + const _r184 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "input", 78); + ɵɵlistener("input", function JsonSchemaFormComponent_div_1_div_14_input_4_Template_input_input_0_listener($event) { ɵɵrestoreView(_r184); const ctx_r183 = ɵɵnextContext(3); return ctx_r183.change($event); })("focus", function JsonSchemaFormComponent_div_1_div_14_input_4_Template_input_focus_0_listener() { ɵɵrestoreView(_r184); const ctx_r185 = ɵɵnextContext(3); return ctx_r185.getInputType(ctx_r185.schema) == "password" ? ctx_r185.value = "" : ""; }); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r181 = ɵɵnextContext(3); + ɵɵproperty("disabled", ctx_r181.readOnly)("placeholder", ctx_r181.example())("type", ctx_r181.getInputType(ctx_r181.schema))("value", ctx_r181.value); +} } +function JsonSchemaFormComponent_div_1_div_14_input_5_Template(rf, ctx) { if (rf & 1) { + const _r187 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "input", 79); + ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_14_input_5_Template_input_change_0_listener($event) { ɵɵrestoreView(_r187); const ctx_r186 = ɵɵnextContext(3); return ctx_r186.change($event); }); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r182 = ɵɵnextContext(3); + ɵɵproperty("disabled", ctx_r182.readOnly)("placeholder", ctx_r182.example())("type", ctx_r182.getInputType(ctx_r182.schema))("value", ctx_r182.value); +} } +function JsonSchemaFormComponent_div_1_div_14_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "mat-form-field", 46); + ɵɵelementStart(2, "mat-label"); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_14_input_4_Template, 1, 4, "input", 76); + ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_14_input_5_Template, 1, 4, "input", 77); + ɵɵelementEnd(); + ɵɵelementStart(6, "p", 62); + ɵɵtext(7); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r20 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("ngStyle", ctx_r20.schema.style)("ngClass", ctx_r20.schema.class); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r20.label); + ɵɵadvance(1); + ɵɵproperty("ngIf", !ctx_r20.inArray); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r20.inArray); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r20.error()); +} } +function JsonSchemaFormComponent_div_1_div_15_textarea_4_Template(rf, ctx) { if (rf & 1) { + const _r191 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "textarea", 82); + ɵɵlistener("input", function JsonSchemaFormComponent_div_1_div_15_textarea_4_Template_textarea_input_0_listener($event) { ɵɵrestoreView(_r191); const ctx_r190 = ɵɵnextContext(3); return ctx_r190.change($event); }); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r188 = ɵɵnextContext(3); + ɵɵproperty("disabled", ctx_r188.readOnly)("placeholder", ctx_r188.example())("value", ctx_r188.value)("ngStyle", ctx_r188.schema.style)("ngClass", ctx_r188.schema.class); +} } +function JsonSchemaFormComponent_div_1_div_15_textarea_5_Template(rf, ctx) { if (rf & 1) { + const _r193 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "textarea", 83); + ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_15_textarea_5_Template_textarea_change_0_listener($event) { ɵɵrestoreView(_r193); const ctx_r192 = ɵɵnextContext(3); return ctx_r192.change($event); }); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r189 = ɵɵnextContext(3); + ɵɵproperty("disabled", ctx_r189.readOnly)("placeholder", ctx_r189.example())("value", ctx_r189.value)("ngStyle", ctx_r189.schema.style)("ngClass", ctx_r189.schema.class); +} } +function JsonSchemaFormComponent_div_1_div_15_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "mat-form-field", 46); + ɵɵelementStart(2, "mat-label"); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵtemplate(4, JsonSchemaFormComponent_div_1_div_15_textarea_4_Template, 1, 5, "textarea", 80); + ɵɵtemplate(5, JsonSchemaFormComponent_div_1_div_15_textarea_5_Template, 1, 5, "textarea", 81); + ɵɵelementEnd(); + ɵɵelementStart(6, "p", 62); + ɵɵtext(7); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r21 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("ngStyle", ctx_r21.schema.style)("ngClass", ctx_r21.schema.class); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r21.label); + ɵɵadvance(1); + ɵɵproperty("ngIf", !ctx_r21.inArray); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r21.inArray); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r21.error()); +} } +function JsonSchemaFormComponent_div_1_div_16_Template(rf, ctx) { if (rf & 1) { + const _r195 = ɵɵgetCurrentView(); + ɵɵelementStart(0, "div"); + ɵɵelementStart(1, "input", 84); + ɵɵlistener("change", function JsonSchemaFormComponent_div_1_div_16_Template_input_change_1_listener($event) { ɵɵrestoreView(_r195); const ctx_r194 = ɵɵnextContext(2); return ctx_r194.handleFileInput($event); }); + ɵɵelementEnd(); + ɵɵelementStart(2, "p", 62); + ɵɵtext(3); + ɵɵelementEnd(); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r22 = ɵɵnextContext(2); + ɵɵadvance(1); + ɵɵproperty("ngStyle", ctx_r22.schema.style)("ngClass", ctx_r22.schema.class)("disabled", ctx_r22.readOnly); + ɵɵadvance(2); + ɵɵtextInterpolate(ctx_r22.error()); +} } +function JsonSchemaFormComponent_div_1_Template(rf, ctx) { if (rf & 1) { + ɵɵelementStart(0, "div", 6); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_div_1_Template, 35, 11, "div", 7); + ɵɵtemplate(2, JsonSchemaFormComponent_div_1_span_2_Template, 3, 5, "span", 8); + ɵɵtemplate(3, JsonSchemaFormComponent_div_1_span_3_Template, 4, 8, "span", 8); + ɵɵtemplate(4, JsonSchemaFormComponent_div_1_mat_tab_group_4_Template, 4, 7, "mat-tab-group", 9); + ɵɵtemplate(5, JsonSchemaFormComponent_div_1_span_5_Template, 3, 5, "span", 8); + ɵɵtemplate(6, JsonSchemaFormComponent_div_1_span_6_Template, 6, 7, "span", 7); + ɵɵtemplate(7, JsonSchemaFormComponent_div_1_mat_tab_group_7_Template, 3, 4, "mat-tab-group", 9); + ɵɵtemplate(8, JsonSchemaFormComponent_div_1_span_8_Template, 8, 8, "span", 10); + ɵɵtemplate(9, JsonSchemaFormComponent_div_1_div_9_Template, 8, 7, "div", 7); + ɵɵtemplate(10, JsonSchemaFormComponent_div_1_div_10_Template, 9, 10, "div", 7); + ɵɵtemplate(11, JsonSchemaFormComponent_div_1_div_11_Template, 10, 8, "div", 7); + ɵɵtemplate(12, JsonSchemaFormComponent_div_1_div_12_Template, 5, 6, "div", 11); + ɵɵtemplate(13, JsonSchemaFormComponent_div_1_div_13_Template, 5, 3, "div", 7); + ɵɵtemplate(14, JsonSchemaFormComponent_div_1_div_14_Template, 8, 6, "div", 7); + ɵɵtemplate(15, JsonSchemaFormComponent_div_1_div_15_Template, 8, 6, "div", 7); + ɵɵtemplate(16, JsonSchemaFormComponent_div_1_div_16_Template, 4, 4, "div", 7); + ɵɵelementEnd(); +} if (rf & 2) { + const ctx_r1 = ɵɵnextContext(); + ɵɵproperty("matTooltip", ctx_r1.schema.description); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.service.editMode && !ctx_r1.schema.static && !ctx_r1.inArray && ctx_r1.getLayout() !== "none"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "object"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "additionalProperties"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "additionalPropertiesTab"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "array"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "chips"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "tab"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "table"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "enum"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "array-select"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "date"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "checkbox"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "autocomplete"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "single"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "textarea"); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx_r1.getLayout() === "upload"); +} } +function JsonSchemaFormComponent_ng_template_2_Template(rf, ctx) { } +/** + * generates an input form base on JSON schema and JSON object. + * The component is used recursively. + */ +class JsonSchemaFormComponent { + /** + * component constructor + * @param http http client + * @param componentFactoryResolver allows dynamic components + * @param service application service for registering components etc. + * @param dialog dialog service + */ + constructor(http, componentFactoryResolver, service, dialog) { + this.http = http; + this.componentFactoryResolver = componentFactoryResolver; + this.service = service; + this.dialog = dialog; + /** + * emit changes done by the user in the component + */ + this.valueChange = new EventEmitter(); + /** + * emit whether this part of the form is valid + */ + this.errorChange = new EventEmitter(); + /** + * indicate schema changes done via the layout editor + */ + this.schemaChange = new EventEmitter(); + /** + * indicates whether this is the root of the component tree + */ + this.isRoot = false; + /** + * complete chip entry with enter or comma + */ + this.separatorKeysCodes = [ENTER, COMMA, TAB]; + /** + * angular pipe sorting function for keyValue - keep the JSON order and do not + * order alphabetically + */ + this.originalOrder = (a, b) => { + return 0; + }; + } + /** + * apply order, called anytime properties are set + */ + setOrderedProperties() { + if (this.schema.order) { + this.orderedProperties = []; + for (const p of this.schema.order) { + const arr = Array.isArray(p) ? p : [p]; + const o = {}; + for (const q of arr) { + o[q] = this.schema.properties[q]; + } + this.orderedProperties.push(o); + } + } + else if (this.schema.properties) { + this.orderedProperties = []; + for (const [key, value] of Object.entries(this.schema.properties)) { + const o = {}; + o[key] = value; + this.orderedProperties.push(o); + } + } + } + /** + * initialize the comonent. + * replace undefined with null and init autocomplete choices + */ + ngOnInit() { + this.readOnly = + this.schema.readOnly || (this.schema.createOnly && this.value); + if (!this.rootSchema) { + this.rootSchema = this.schema; + this.rootValue = this.value; + this.isRoot = true; + } + if (!this.schema.type) { + const p = this.schema.$ref; + const parts = p.split("#"); + if (parts.length === 1) { + // URL only + this.url(parts[0], null); + } + else { + if (parts[0]) { + // URL + anchor + this.url(parts[0], parts[1]); + } + else { + // local ref + this.schema = JsonPointer.jsonPointer(this.rootSchema, parts[1]); + this.setOrderedProperties(); + } + } + } + else { + this.setOrderedProperties(); + } + if (typeof this.value === "undefined") { + if (this.schema.default) { + this.value = this.schema.default; + setTimeout(() => this.emit(this.value), 500); + } + else { + if (!this.hideUndefined) { + this.value = null; + } + } + } + if (this.getLayout() === "custom") { + this.loadComponent(); + } + if (this.isRoot) { + setTimeout(() => { + this.errorChange.emit(this.recursiveError()); + }, 10); + } + this.ch = this.service.displayWithRegistry[this.schema.displayWith]; + if (!this.ch) { + this.ch = new DefaultChoiceHandler(this.http); + } + this.control = new FormControl(this.value); + this.choices = new ReplaySubject(); + if (Array.isArray(this.value)) { + const arr = []; + for (const i of this.value) { + arr.push({ name: i, value: i }); + } + this.choices.next(arr); + } + else { + this.choices.next([{ name: this.value, value: this.value }]); + } + if (this.value || this.value === 0) { + if (Array.isArray(this.value)) { + const arr = []; + for (const i of this.value) { + arr.push(this.ch.choice(i, this.schema)); + } + forkJoin(arr).subscribe((res) => this.choices.next(res)); + } + else { + this.ch + .choice(this.value, this.schema) + .subscribe((res) => this.choices.next([res])); + } + } + this.filteredOptions = this.control.valueChanges.pipe(startWith(this.value), debounceTime(this.ch.debounceTime()), switchMap((x) => { + this.change({ target: { value: x } }); + return this.ch.filter(this.value, this.schema, x, this.choices); + })); + this.edit = new Edit(this.schemaChange, this.name, this.schema, this.parentSchema, this.dialog); + } + /** + * choice element activated - load values + */ + focus() { + this.ch.load(this.value, this.schema).subscribe((res) => { + this.choices.next(res); + }); + } + /** + * load schema from ref, apply pointer if needed + */ + url(ref, pointer) { + // URL + anchor + this.base = this.base ? new URL(ref, this.base).href : ref; + // check root schema referenced map + if (this.rootSchema.referenced && this.rootSchema.referenced[this.base]) { + const res = this.rootSchema.referenced[this.base]; + this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res; + this.setOrderedProperties(); + return; + } + this.http.get(this.base).subscribe((res) => { + this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res; + this.setOrderedProperties(); + }, (error) => console.log(error)); + // set temporary pseudo schema + this.schema = { type: "string" }; + this.setOrderedProperties(); + } + /** + * emit valueChange event and also any validation error + */ + emit(event) { + this.valueChange.emit(event); + if (this.isRoot) { + setTimeout(() => { + this.errorChange.emit(this.recursiveError()); + }, 10); + } + } + /** + * if the schema changes from the outside, + * reset the component state wrt. errors and the choices cache + */ + ngOnChanges(changes) { + if (changes.schema) { + if (changes.schema.previousValue) { + this.rootSchema = null; + if (this.widgetHost.viewContainerRef) { + this.widgetHost.viewContainerRef.clear(); + } + this.ngOnInit(); + } + } + if (changes.switch && !changes.switch.isFirstChange()) { + if (this.getLayout() === "custom") { + this.loadComponent(); + } + else { + if (this.widgetHost.viewContainerRef) { + this.widgetHost.viewContainerRef.clear(); + } + } + } + } + /** + * key method to instruct the display which HTML block to activate. + */ + getLayout() { + if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) { + return "none"; + } + if (this.schema.widget === "custom") { + return "custom"; + } + if (this.hideUndefined && this.value === undefined) { + return "none"; + } + if (this.schema.type === "object") { + if (this.schema.additionalProperties) { + if (this.schema.layout === "tab") { + return "additionalPropertiesTab"; + } + return "additionalProperties"; + } + return "object"; + } + if (this.schema.type === "array") { + if (this.schema.layout === "tab") { + return "tab"; + } + if (this.schema.layout === "table") { + return "table"; + } + if (this.schema.layout === "select") { + return "array-select"; + } + if (this.schema.layout === "chips") { + return "chips"; + } + return "array"; + } + if (this.schema.enum) { + return "enum"; + } + if (this.schema.widget === "date") { + return "date"; + } + if (this.schema.widget === "upload") { + return "upload"; + } + if (this.schema.widget === "textarea") { + return "textarea"; + } + if (this.schema.type === "boolean") { + return "checkbox"; + } + if (this.schema.choicesUrl) { + return "autocomplete"; + } + if (this.schema.choices) { + return "autocomplete"; + } + if (this.schema.displayWith) { + return "autocomplete"; + } + return "single"; + } + /** + * called from template in the "simple" type. If "type" is "number" or "integer", + * the HTML input type is "number" which avoids normal string input + */ + getInputType(schema) { + if (schema.type === "number") { + return "number"; + } + if (schema.type === "integer") { + return "number"; + } + return schema.widget; + } + /** + * event handler for object display. Catches the child component event and + * handle it by setting the value[key]. + * Also init null objects with {} + */ + onValueChange(key, value) { + if (!this.value) { + this.value = {}; + } + this.value[key] = value; + if (this.schema.computed) { + for (const field of Object.keys(this.schema.computed)) { + const expression = this.schema.computed[field]; + this.value[field] = jsonata(expression).evaluate(this.value); + } + } + this.emit(this.value); + } + /** + * add an element to an array. + * null arrays are initialized with [] + */ + add() { + if (!(this.value instanceof Array)) { + this.value = []; + } + if (this.schema.items.type === "array") { + this.value.push([]); + } + else if (this.schema.items.type === "object") { + this.value.push({}); + } + else { + this.value.push(null); + } + this.emit(this.value); + } + /** + * event handler for adding a field + */ + addField() { + if (!this.value) { + this.value = {}; + } + if (this.value[""]) { + return; + } + this.value[""] = null; + this.emit(this.value); + } + /** + * remove an element from an array + */ + remove(i) { + this.value.splice(i, 1); + this.emit(this.value); + } + /** + * remove a field + */ + removeField(key) { + delete this.value[key]; + this.emit(this.value); + } + /** + * event handler for changed field names with "additionalProperties" + */ + fieldNameChange(key, newvalue) { + this.value[newvalue] = this.value[key]; + delete this.value[key]; + this.emit(this.value); + } + /** + * returns the validation error on this level and call recursively for all children. + * returns null if the form contents is valid + */ + recursiveError() { + const e = this.error(); + if (e) { + return e; + } + if (this.child) { + return this.child.recursiveError(); + } + if (this.children) { + for (const c of this.children) { + const r = c.recursiveError(); + if (r) { + return r; + } + } + } + return null; + } + /** + * return the error message provided in the schema or the generic error message + * returned from the validation code + */ + e(error) { + if (this.schema.errorMessage) { + return this.schema.errorMessage; + } + return error; + } + /** + * return error string + */ + error() { + var _a; + if (this.schema.widget === "custom") { + return this.customError; + } + if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) { + return null; + } + if (this.value) { + if (this.schema.maxItems) { + if (!(this.value.length <= this.schema.maxItems)) { + return this.e("Only " + this.schema.maxItems + " array entries allowed"); + } + } + if (this.schema.uniqueItems) { + if (!(new Set(this.value).size === this.value.length)) { + return this.e("Array entries must be unique"); + } + } + if (this.schema.minItems) { + if (!(this.value.length >= this.schema.minItems)) { + return this.e("At least " + this.schema.minItems + " array entries required"); + } + } + if (this.schema.maxProperties) { + if (!(Object.keys(this.value).length <= this.schema.maxProperties)) { + return this.e("Only " + this.schema.maxProperties + " fields allowed"); + } + } + if (this.schema.propertyNames) { + for (const key of Object.keys(this.value)) { + const re = new RegExp(this.schema.propertyNames); + if (!re.test(key)) { + return this.e("illegal field name: " + key); + } + } + } + if (this.schema.dependencies) { + for (const dep of Object.keys(this.schema.dependencies)) { + if (this.value[dep]) { + for (const l of this.schema.dependencies[dep]) { + if (!this.value[l]) { + return this.e(dep + " depends on " + l); + } + } + } + } + } + if (this.schema.minProperties) { + if (!(Object.keys(this.value).length >= this.schema.minProperties)) { + return this.e("At least " + this.schema.minProperties + " fields required"); + } + } + if (this.schema.maxLength) { + if (!(("" + this.value).length <= this.schema.maxLength)) { + return this.e("Input is longer than " + this.schema.maxLength); + } + } + if (this.schema.minLength) { + if (!(("" + this.value).length >= this.schema.minLength)) { + return this.e("Input is shorter than " + this.schema.minLength); + } + } + if (this.schema.multipleOf) { + if (!Number.isInteger(Number(this.value) / this.schema.multipleOf)) { + return this.e("Must be multiple of " + this.schema.multipleOf); + } + } + if (this.schema.exclusiveMaximum) { + if (!(Number(this.value) < this.schema.exclusiveMaximum)) { + return this.e("Must be less than " + this.schema.exclusiveMaximum); + } + } + if (this.schema.maximum) { + if (!(Number(this.value) <= this.schema.maximum)) { + return this.e("Must be less than or equal " + this.schema.maximum); + } + } + if (this.schema.exclusiveMinimum) { + if (!(Number(this.value) > this.schema.exclusiveMinimum)) { + return this.e("Must greater than " + this.schema.exclusiveMinimum); + } + } + if (this.schema.minimum) { + if (!(Number(this.value) >= this.schema.minimum)) { + return this.e("Must greater than or equal " + this.schema.minimum); + } + } + } + if (this.required) { + if (this.value == null || Object.is(this.value, NaN)) { + return this.e("required"); + } + } + if (this.schema.required) { + for (const dep of this.schema.required) { + if (!this.value[dep] && + this.value[dep] !== false && + this.value[dep] !== 0) { + // ignore 'required' if dep is inactive due to switch / case + let inactive = false; + if (this.schema.switch) { + const switc = this.value[this.schema.switch]; + if (switc && ((_a = this.schema.properties[dep].case) === null || _a === void 0 ? void 0 : _a.indexOf(switc)) < 0) { + inactive = true; + } + } + if (!inactive) { + return this.e(dep + " is required"); + } + } + } + } + if (this.schema.pattern) { + const re = new RegExp(this.schema.pattern); + if (!this.value) { + return this.e("illegal string"); + } + if (!re.test(this.value)) { + return this.e("illegal string"); + } + } + if (this.schema.format && this.service.formats[this.schema.format]) { + const re = new RegExp(this.service.formats[this.schema.format]); + if (!this.value) { + return this.e("illegal string"); + } + if (!re.test(this.value)) { + return this.e("illegal string"); + } + } + return null; + } + /** + * use the element title if present, defaults to the label input or "" is both are null + */ + getLabel() { + if (this.schema.title) { + return this.schema.title; + } + if (this.label) { + return this.label; + } + return ""; + } + /** + * input element change handler. + * normalize the different kind of events, handle the datatypes, set the value and emit the change + */ + change(event) { + let eventTarget; + if (event instanceof MatSelectChange) { + event = event.value; + } + else if (event instanceof MatDatepickerInputEvent) { + event = this.serializeDate(event.value, this.schema.dateFormat, this.schema.type); + } + else if (event instanceof MatAutocompleteSelectedEvent) { + event = event.option.value; + } + else if (event instanceof MatCheckboxChange) { + event = event.checked; + } + else { + // save the event target in case the parsing changes the value + // (e.g. integer input 5.3 becomes 5, this is reflected on the UI via this handle) + eventTarget = event.target; + event = event.target.value; + } + if (event === "") { + event = null; + } + if (event == null) { + this.value = null; + } + if (this.schema.type === "number") { + this.value = parseFloat(event); + } + else if (this.schema.type === "integer") { + this.value = parseInt(event, 10); + } + else if (this.schema.type === "boolean") { + if (typeof event === "string") { + if (event === "true") { + this.value = true; + } + else if (event === "false") { + this.value = false; + } + else { + this.value = null; + } + } + else { + this.value = event; + } + } + else if (this.schema.type === "string") { + this.value = event; + } + else if (this.schema.type === "array") { + this.value = event; + } + else { + throw new Error("unknown type: " + this.schema.type); + } + this.emit(this.value); + } + /** + * allows for the result of a file upload to be written into a text form element + */ + handleFileInput(event) { + if (1024 * 1024 <= event.target.files.item(0).size) { + console.log("The file size is limited to 1MB"); + return; + } + const reader = new FileReader(); + reader.onload = () => { + this.value = reader.result; + this.emit(this.value); + }; + reader.readAsDataURL(event.target.files.item(0)); + } + /** + * get example values from example array and default + */ + example() { + if (this.schema.examples && this.schema.examples[0]) { + return this.schema.examples[0]; + } + if (this.schema.default) { + return this.schema.default; + } + return null; + } + /** + * load the dynamic custom widget + */ + loadComponent() { + const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.service.registry[this.schema.widgetType]); + const viewContainerRef = this.widgetHost.viewContainerRef; + viewContainerRef.clear(); + const componentRef = viewContainerRef.createComponent(componentFactory); + // input values + componentRef.instance.label = this.label; + componentRef.instance.value = this.value; + componentRef.instance.schema = this.schema; + componentRef.instance.rootSchema = this.rootSchema; + componentRef.instance.rootValue = this.rootValue; + // subscribe to value changes and forward them + componentRef.instance.valueChange.subscribe((data) => { + this.value = data; + this.emit(this.value); + }); + // subscribe to error changes and forward them + componentRef.instance.errorChange.subscribe((error) => { + this.customError = error; + this.errorChange.emit(error); + }); + } + /** + * used for expansion panels - set value and forward event + */ + setAndEmit(event) { + this.value = event; + this.emit(this.value); + } + /** + * set an array element and emit value change event + */ + setIndexAndEmit(i, event) { + this.value[i] = event; + this.emit(this.value); + } + /** + * set an array element's field and emit value change event (applies to table layout) + */ + setIndexAndEmitTable(i, field, event) { + this.value[i][field] = event; + this.emit(this.value); + } + /** + * used when hideUndefined is active. Called from the UI to + * show a property with undefined value (in order to be able to set if in the form) + */ + showProperty(prop) { + if (!this.value) { + this.value = {}; + } + if (this.value[prop] === undefined) { + this.value[prop] = null; + } + else if (this.value[prop] === null) { + this.value[prop] = undefined; + } + } + /** + * used when hideUndefined is active. Called from the UI + * to determine which properties are included in the "to add" list + */ + showPropertyList() { + if (this.schema.switch && this.value) { + const sw = this.value[this.schema.switch]; + const props = []; + for (const [k, v] of Object.entries(this.schema.properties)) { + if (v.case) { + if (v.case.includes(sw)) { + props.push(k); + } + } + else { + props.push(k); + } + } + return props.sort(); + } + else { + return Object.keys(this.schema.properties).sort(); + } + } + /** + * string to date + * @param date date string / number (millisecs since 1970) + * @param format date format + */ + parseDate(date, format) { + if (!date && date !== 0) { + return date; + } + if (typeof date === "number") { + return this.sameDate(new Date(date)); + } + if (!format) { + return date; + } + const pdate = date.split(this.getDelimiter(format)); + const pformat = format.split(this.getDelimiter(format)); + return this.sameDate(new Date(pdate[pformat.indexOf("yyyy")], pdate[pformat.indexOf("MM")] - 1, pdate[pformat.indexOf("dd")])); + } + /** + * make sure to return the same date object instance (cannot delete date #83) + */ + sameDate(nd) { + if (!this.date) { + this.date = nd; + } + if (this.date.getTime() !== nd.getTime()) { + this.date = nd; + } + return this.date; + } + /** + * date to string + * @param date the date to serialize + * @param format the date format (e.g. dd-MM-yyyy) + * @param type target datatype (allows serializing to millisecs since 1970) + */ + serializeDate(date, format, type) { + if (date == null) { + return ""; + } + if (type === "integer" || type === "number") { + return "" + date.valueOf(); + } + if (!format) { + return date.toISOString(); + } + const pformat = format.split(this.getDelimiter(format)); + const pdate = [null, null, null]; + pdate[pformat.indexOf("yyyy")] = date.getFullYear(); + pdate[pformat.indexOf("MM")] = date.getMonth() + 1; + pdate[pformat.indexOf("dd")] = date.getDate(); + return (pdate[0] + + this.getDelimiter(format) + + pdate[1] + + this.getDelimiter(format) + + pdate[2]); + } + /** + * find the first non letter character in a date format such as dd/MM/yyyy (returns /) + */ + getDelimiter(format) { + const delim = format.match(/\W/g); + if (!delim[0]) { + throw new Error("No delimiter found in date format: " + format); + } + return delim[0]; + } + /** + * new chip entered + */ + addChip(event) { + const input = event.input; + const value = event.value; + // Add our fruit + if ((value || "").trim()) { + if (!this.value) { + this.value = []; + } + this.value.push(value.trim()); + this.emit(this.value); + } + // Reset the input value + if (input) { + input.value = ""; + } + } + /** + * remove a chip + */ + removeChip(v) { + const index = this.value.indexOf(v); + if (index >= 0) { + this.value.splice(index, 1); + if (this.value.length === 0) { + this.value = null; + } + this.emit(this.value); + } + } + /** + * chips d&d handler + */ + dropChip(event) { + moveItemInArray(this.value, event.previousIndex, event.currentIndex); + this.emit(this.value); + } +} +JsonSchemaFormComponent.ɵfac = function JsonSchemaFormComponent_Factory(t) { return new (t || JsonSchemaFormComponent)(ɵɵdirectiveInject(HttpClient), ɵɵdirectiveInject(ComponentFactoryResolver), ɵɵdirectiveInject(JsonSchemaFormService), ɵɵdirectiveInject(MatDialog)); }; +JsonSchemaFormComponent.ɵcmp = ɵɵdefineComponent({ type: JsonSchemaFormComponent, selectors: [["lib-json-schema-form"]], viewQuery: function JsonSchemaFormComponent_Query(rf, ctx) { if (rf & 1) { + ɵɵviewQuery(_c0, 1); + ɵɵviewQuery(WidgetDirective, 3); + ɵɵviewQuery(_c1, 1); + } if (rf & 2) { + let _t; + ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.child = _t.first); + ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.widgetHost = _t.first); + ɵɵqueryRefresh(_t = ɵɵloadQuery()) && (ctx.children = _t); + } }, inputs: { name: "name", label: "label", value: "value", rootValue: "rootValue", schema: "schema", parentSchema: "parentSchema", rootSchema: "rootSchema", base: "base", switch: "switch", hideUndefined: "hideUndefined", inExpansion: "inExpansion", inArray: "inArray", required: "required" }, outputs: { valueChange: "valueChange", errorChange: "errorChange", schemaChange: "schemaChange" }, features: [ɵɵNgOnChangesFeature], decls: 3, vars: 2, consts: [[3, "ngStyle", "ngClass", "expanded", 4, "ngIf"], [3, "matTooltip", 4, "ngIf"], ["libWidgetHost", ""], [3, "ngStyle", "ngClass", "expanded"], [3, "label", "name", "value", "switch", "rootValue", "rootSchema", "schema", "inExpansion", "base", "valueChange", "schemaChange"], ["child", ""], [3, "matTooltip"], [4, "ngIf"], [3, "fxLayout", "ngStyle", "ngClass", 4, "ngIf"], ["animationDuration", "0ms", "style", "max-width: 96vw", 3, "ngStyle", "ngClass", 4, "ngIf"], [3, "ngStyle", "ngClass", 4, "ngIf"], ["style", "margin: 6px; margin-top: 12px;", 3, "ngStyle", "ngClass", 4, "ngIf"], [2, "cursor", "pointer", 3, "matMenuTriggerFor", "matTooltip"], ["menu", "matMenu"], ["mat-menu-item", "", 3, "click"], ["mat-menu-item", "", 3, "disabled", "matMenuTriggerFor"], ["mat-menu-item", "", 3, "disabled", "click"], ["madd", "matMenu"], ["mat-menu-item", "", 3, "click", 4, "ngFor", "ngForOf"], ["madd2", "matMenu"], [3, "fxLayout", "ngStyle", "ngClass"], [3, "fxLayout", 4, "ngFor", "ngForOf"], ["style", "margin-right: 20px;", 4, "ngIf"], [3, "fxLayout"], ["style", "display: flex; margin: 2px", 4, "ngFor", "ngForOf"], [2, "display", "flex", "margin", "2px"], [3, "name", "label", "value", "switch", "rootValue", "rootSchema", "schema", "parentSchema", "required", "hideUndefined", "base", "valueChange", "schemaChange"], ["children", ""], [2, "margin-right", "20px"], ["mat-icon-button", "", 3, "matMenuTriggerFor"], [4, "ngFor", "ngForOf"], [3, "disabled", "checked", "change"], ["style", "display: flex; margin: 2px; position: relative", 3, "mouseenter", "mouseleave", 4, "ngFor", "ngForOf"], ["mat-icon-button", "", 3, "matTooltip", "click", 4, "ngIf"], [2, "display", "flex", "margin", "2px", "position", "relative", 3, "mouseenter", "mouseleave"], ["autocomplete", "off", "matInput", "", 3, "disabled", "value", "change"], ["inArray", "true", 3, "label", "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], ["mat-icon-button", "", "class", "example-handle", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", 1, "example-handle", 3, "matTooltip", "click"], ["mat-icon-button", "", 3, "matTooltip", "click"], ["animationDuration", "0ms", 2, "max-width", "96vw", 3, "ngStyle", "ngClass"], ["style", "margin: 2px; position: relative", 4, "ngFor", "ngForOf"], [2, "margin", "2px", "position", "relative"], ["mat-tab-label", ""], ["inArray", "true", 3, "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], ["autocomplete", "off", "matInput", "", 3, "value", "change"], [3, "ngStyle", "ngClass"], ["aria-label", "Fruit selection", "cdkDropList", "", "cdkDropListOrientation", "horizontal", 3, "cdkDropListDropped"], ["chipList", ""], ["cdkDrag", "", 3, "removable", "removed", 4, "ngFor", "ngForOf"], ["autocomplete", "off", 3, "placeholder", "matChipInputFor", "matChipInputSeparatorKeyCodes", "disabled", "matChipInputTokenEnd"], ["cdkDrag", "", 3, "removable", "removed"], ["matChipRemove", ""], ["style", "margin: 2px; position: relative", 3, "label", 4, "ngFor", "ngForOf"], [2, "margin", "2px", "position", "relative", 3, "label"], ["summary", "Properties table"], ["scope", "col", 4, "ngFor", "ngForOf"], ["id", "remove_row"], ["scope", "col"], [3, "value", "rootValue", "rootSchema", "schema", "base", "valueChange", "schemaChange"], [3, "value", "disabled", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [1, "error", "mat-typography"], [3, "value"], [3, "matTooltip", "ngStyle", "ngClass"], ["multiple", "", 3, "value", "disabled", "focus", "selectionChange"], [3, "value", "matTooltip", 4, "ngFor", "ngForOf"], [3, "value", "matTooltip"], ["autocomplete", "off", "matInput", "", 2, "width", "100%", 3, "value", "matDatepicker", "disabled", "dateChange"], ["matSuffix", "", 3, "for"], ["picker", ""], [2, "margin", "6px", "margin-top", "12px", 3, "ngStyle", "ngClass"], [3, "checked", "disabled", "change"], [3, "value", "disabled", "focus", "selectionChange"], ["type", "text", "matInput", "", 3, "formControl", "matAutocomplete", "focus"], ["auto", "matAutocomplete"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "input", "focus", 4, "ngIf"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "change", 4, "ngIf"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "input", "focus"], ["autocomplete", "off", "matInput", "", 3, "disabled", "placeholder", "type", "value", "change"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "input", 4, "ngIf"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "change", 4, "ngIf"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "input"], ["matInput", "", 3, "disabled", "placeholder", "value", "ngStyle", "ngClass", "change"], ["type", "file", "id", "file", 3, "ngStyle", "ngClass", "disabled", "change"]], template: function JsonSchemaFormComponent_Template(rf, ctx) { if (rf & 1) { + ɵɵtemplate(0, JsonSchemaFormComponent_mat_expansion_panel_0_Template, 8, 14, "mat-expansion-panel", 0); + ɵɵtemplate(1, JsonSchemaFormComponent_div_1_Template, 17, 17, "div", 1); + ɵɵtemplate(2, JsonSchemaFormComponent_ng_template_2_Template, 0, 0, "ng-template", 2); + } if (rf & 2) { + ɵɵproperty("ngIf", (ctx.schema.expanded === true || ctx.schema.expanded === false) && !ctx.inExpansion); + ɵɵadvance(1); + ɵɵproperty("ngIf", ctx.schema.expanded === null || ctx.schema.expanded === undefined || ctx.inExpansion); + } }, directives: [NgIf, WidgetDirective, MatExpansionPanel, DefaultStyleDirective, NgStyle, DefaultClassDirective, NgClass, MatExpansionPanelHeader, MatExpansionPanelTitle, MatExpansionPanelDescription, JsonSchemaFormComponent, MatTooltip, MatIcon, MatMenuTrigger, MatMenu, MatMenuItem, NgForOf, DefaultLayoutDirective, MatButton, MatCheckbox, MatFormField, MatLabel, MatInput, MatTabGroup, MatTab, MatTabLabel, MatChipList, CdkDropList, MatChipInput, MatChip, CdkDrag, MatChipRemove, MatSelect, MatOption, MatDatepickerInput, MatDatepickerToggle, MatSuffix, MatDatepicker, DefaultValueAccessor, MatAutocompleteTrigger, NgControlStatus, FormControlDirective, MatAutocomplete], pipes: [KeyValuePipe, AsyncPipe], styles: [".example-handle[_ngcontent-%COMP%]{position:absolute;z-index:9;top:0;right:0}.error[_ngcontent-%COMP%]{font-size:small;color:red;position:relative;top:-18px}"] }); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(JsonSchemaFormComponent, [{ + type: Component, + args: [{ + selector: "lib-json-schema-form", + templateUrl: "./json-schema-form.component.html", + styleUrls: ["./json-schema-form.component.css"], + }] + }], function () { return [{ type: HttpClient }, { type: ComponentFactoryResolver }, { type: JsonSchemaFormService }, { type: MatDialog }]; }, { children: [{ + type: ViewChildren, + args: ["children"] + }], child: [{ + type: ViewChild, + args: ["child"] + }], name: [{ + type: Input + }], label: [{ + type: Input + }], value: [{ + type: Input + }], rootValue: [{ + type: Input + }], valueChange: [{ + type: Output + }], errorChange: [{ + type: Output + }], schemaChange: [{ + type: Output + }], schema: [{ + type: Input + }], parentSchema: [{ + type: Input + }], rootSchema: [{ + type: Input + }], base: [{ + type: Input + }], switch: [{ + type: Input + }], hideUndefined: [{ + type: Input + }], inExpansion: [{ + type: Input + }], inArray: [{ + type: Input + }], required: [{ + type: Input + }], widgetHost: [{ + type: ViewChild, + args: [WidgetDirective, { static: true }] + }] }); })(); + +class JsonSchemaFormModule { +} +JsonSchemaFormModule.ɵfac = function JsonSchemaFormModule_Factory(t) { return new (t || JsonSchemaFormModule)(); }; +JsonSchemaFormModule.ɵmod = ɵɵdefineNgModule({ type: JsonSchemaFormModule }); +JsonSchemaFormModule.ɵinj = ɵɵdefineInjector({ providers: [ + // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892 + { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } } + ], imports: [[ + MatCardModule, + FlexLayoutModule, + MatIconModule, + MatTooltipModule, + MatTableModule, + MatTabsModule, + MatFormFieldModule, + MatSelectModule, + MatDatepickerModule, + MatCheckboxModule, + MatAutocompleteModule, + HttpClientModule, + CommonModule, + MatInputModule, + MatNativeDateModule, + MatButtonModule, + MatExpansionModule, + MatMenuModule, + ReactiveFormsModule, + MatDialogModule, + MatChipsModule, + DragDropModule + ]] }); +(function () { (typeof ngJitMode === "undefined" || ngJitMode) && ɵɵsetNgModuleScope(JsonSchemaFormModule, { declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective], imports: [MatCardModule, + FlexLayoutModule, + MatIconModule, + MatTooltipModule, + MatTableModule, + MatTabsModule, + MatFormFieldModule, + MatSelectModule, + MatDatepickerModule, + MatCheckboxModule, + MatAutocompleteModule, + HttpClientModule, + CommonModule, + MatInputModule, + MatNativeDateModule, + MatButtonModule, + MatExpansionModule, + MatMenuModule, + ReactiveFormsModule, + MatDialogModule, + MatChipsModule, + DragDropModule], exports: [JsonSchemaFormComponent] }); })(); +(function () { (typeof ngDevMode === "undefined" || ngDevMode) && ɵsetClassMetadata(JsonSchemaFormModule, [{ + type: NgModule, + args: [{ + declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective], + imports: [ + MatCardModule, + FlexLayoutModule, + MatIconModule, + MatTooltipModule, + MatTableModule, + MatTabsModule, + MatFormFieldModule, + MatSelectModule, + MatDatepickerModule, + MatCheckboxModule, + MatAutocompleteModule, + HttpClientModule, + CommonModule, + MatInputModule, + MatNativeDateModule, + MatButtonModule, + MatExpansionModule, + MatMenuModule, + ReactiveFormsModule, + MatDialogModule, + MatChipsModule, + DragDropModule + ], + exports: [JsonSchemaFormComponent], + providers: [ + // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892 + { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } } + ] + }] + }], null, null); })(); +ɵɵsetComponentScope(EditElementDialogComponent, [MatDialogContent, JsonSchemaFormComponent, MatDialogActions, MatButton, MatDialogClose], []); + +/* + * Public API Surface of json-schema-form + */ + +/** + * Generated bundle index. Do not edit. + */ + +export { DefaultChoiceHandler, JsonSchemaFormComponent, JsonSchemaFormModule, JsonSchemaFormService }; +//# sourceMappingURL=dashjoin-json-schema-form.js.map diff --git a/dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js.map b/dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js.map new file mode 100644 index 0000000..2293c92 --- /dev/null +++ b/dist/dashjoin/json-schema-form/fesm2015/dashjoin-json-schema-form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashjoin-json-schema-form.js","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.service.ts","../../../../projects/dashjoin/json-schema-form/src/lib/widget.directive.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-pointer.ts","../../../../projects/dashjoin/json-schema-form/src/lib/choice.ts","../../../../projects/dashjoin/json-schema-form/src/lib/edit-element-dialog.component.ts","../../../../projects/dashjoin/json-schema-form/src/lib/edit-element-dialog.component.html","../../../../projects/dashjoin/json-schema-form/src/lib/edit.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.html","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts","../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.module.ts","../../../../projects/dashjoin/json-schema-form/src/public-api.ts","../../../../projects/dashjoin/json-schema-form/src/dashjoin-json-schema-form.ts"],"sourcesContent":["import { Injectable, Type } from '@angular/core';\r\nimport { ChoiceHandler } from './choice';\r\n\r\n/**\r\n * service for registering custom components\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JsonSchemaFormService {\r\n\r\n /**\r\n * layout editor mode\r\n */\r\n public editMode = false;\r\n\r\n /**\r\n * built-in formats\r\n */\r\n formats = {\r\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\r\n ipv4: /^(?!0)(?!.*\\.$)((1?\\d?\\d|25[0-5]|2[0-4]\\d)(\\.|$)){4}$/,\r\n url: /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$/,\r\n uri: /^\\w+:(\\/?\\/?)[^\\s]+$/\r\n };\r\n\r\n /**\r\n * registry of custom widgets. The keys are the values used in schema.widgetType, the values\r\n * are the Type of the custom widget component implementing WidgetComponent\r\n */\r\n registry = {};\r\n\r\n /**\r\n * registry of displayWith objects\r\n */\r\n displayWithRegistry: { [key: string]: ChoiceHandler } = {};\r\n\r\n /**\r\n * register custom component\r\n * @param key the name of the component which is used in schema extension: widget=custom, widgetType=key\r\n * @param value the implementation class\r\n */\r\n registerComponent(key: string, value: Type) {\r\n this.registry[key] = value;\r\n }\r\n\r\n /**\r\n * register displayWith implementations\r\n * @param key the name of the implementation which is used in schema extension: displayWith=key\r\n * @param value the implementation class\r\n */\r\n registerDisplayWith(key: string, value: ChoiceHandler) {\r\n this.displayWithRegistry[key] = value;\r\n }\r\n}\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n/**\r\n * directive for dynamically loading custom widgets\r\n */\r\n@Directive({\r\n selector: '[libWidgetHost]'\r\n})\r\nexport class WidgetDirective {\r\n\r\n /**\r\n * allow caller to dynamically insert custom component\r\n * @param viewContainerRef dynamic component handle\r\n */\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n}\r\n","/**\r\n * static JsonPointer implementation\r\n */\r\nexport class JsonPointer {\r\n\r\n /**\r\n * evaluate the JSON pointer on o\r\n */\r\n static jsonPointer(o: any, pointer: string): any {\r\n return JsonPointer.jsonPointer2(o, JsonPointer.split(pointer));\r\n }\r\n\r\n /**\r\n * evaluate the JSON pointer (parsed array of paths) on o\r\n */\r\n static jsonPointer2(o: any, paths: string[]): any {\r\n\r\n if (o === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (paths.length === 0) {\r\n return o;\r\n }\r\n\r\n const path = paths[0];\r\n const np = Object.assign([], paths);\r\n np.splice(0, 1);\r\n\r\n if (paths[0] === '*') {\r\n const res = [];\r\n for (const f of (typeof (o) === 'object' ? Object.values(o) : o)) {\r\n res.push(this.jsonPointer2(f, np));\r\n }\r\n return res;\r\n } else {\r\n return this.jsonPointer2(o[path], np);\r\n }\r\n }\r\n\r\n /**\r\n * strip leading / and split the JSON pointer\r\n */\r\n static split(s: string): string[] {\r\n if (s === '') {\r\n return [];\r\n }\r\n if (s.startsWith('/')) {\r\n s = s.substring(1);\r\n const arr = s.split('/');\r\n for (const a of arr) {\r\n if (a === '') {\r\n throw new Error('JSON Pointer must not contain an empty reference token');\r\n }\r\n }\r\n return arr;\r\n }\r\n throw new Error('JSON Pointer must start with /');\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { Schema } from './schema';\r\nimport { map, publishReplay, refCount, switchMap } from 'rxjs/operators';\r\nimport jsonata from 'jsonata';\r\n\r\n/**\r\n * class backing a select / autocomplete option\r\n */\r\nexport interface Choice {\r\n\r\n /**\r\n * select value\r\n */\r\n value: any;\r\n\r\n /**\r\n * display name\r\n */\r\n name: string;\r\n}\r\n\r\n/**\r\n * interface for choice handlers for select / autocomplete choices\r\n */\r\nexport interface ChoiceHandler {\r\n\r\n /**\r\n * loads the choices\r\n */\r\n load(value: any, schema: Schema): Observable;\r\n\r\n /**\r\n * user typed in autocomplete field\r\n */\r\n filter(value: any, schema: Schema, current: string, choices: Observable): Observable;\r\n\r\n /**\r\n * return a single choice (i.e. convert value to Choice)\r\n */\r\n choice(value: any, schema: Schema): Observable;\r\n\r\n /**\r\n * delay between keystrokes before new data is loaded\r\n */\r\n debounceTime(): number;\r\n}\r\n\r\n/**\r\n * default implementation that handles choices based on schema fields.\r\n * can be overriden via schema.displayWith\r\n */\r\nexport class DefaultChoiceHandler implements ChoiceHandler {\r\n\r\n /**\r\n * create default choice handler\r\n *\r\n * @param http http connection client\r\n */\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * http cache for REST request on config/Table (i.e. schema requests)\r\n */\r\n cache: Observable;\r\n\r\n /**\r\n * load choices\r\n */\r\n load(value: any, schema: Schema): Observable {\r\n\r\n if (!this.cache) {\r\n if (schema.choices) {\r\n // static choices are given, convert them to Choice and merge the result\r\n const arr: Observable[] = [];\r\n for (const s of schema.choices) {\r\n arr.push(this.choice(s, schema));\r\n }\r\n this.cache = forkJoin(arr);\r\n } else {\r\n // load choices from URL\r\n this.cache = this.getChoices(schema.choicesUrl, schema.choicesUrlArgs, schema.choicesVerb).pipe(\r\n switchMap(res => {\r\n if (schema.jsonata) {\r\n res = jsonata(schema.jsonata).evaluate(res);\r\n if (!Array.isArray(res)) {\r\n res = [res];\r\n\r\n // introduce jsonName, jsonValue\r\n }\r\n }\r\n const obs: Observable[] = [];\r\n for (const r of res) {\r\n obs.push(this.choice(r, schema));\r\n }\r\n return forkJoin(obs);\r\n }),\r\n\r\n // setup caching\r\n publishReplay(1),\r\n refCount()\r\n );\r\n }\r\n }\r\n return this.cache;\r\n }\r\n\r\n /**\r\n * filter after keystroke\r\n */\r\n filter(value: any, schema: Schema, current: string, choices: Observable): Observable {\r\n return choices.pipe(map(arr => {\r\n if (!current) {\r\n return arr;\r\n }\r\n const res = arr.filter(i => this.include(i, current));\r\n return res;\r\n }));\r\n }\r\n\r\n /**\r\n * called from filter, intended to allow subclasses to easily change filter algorithm\r\n */\r\n include(i: Choice, current: string): boolean {\r\n return i.name?.toLowerCase().includes(current.toLowerCase());\r\n }\r\n\r\n /**\r\n * default choice implementation: just reuse value as name\r\n * check for localName\r\n */\r\n choice(value: any, schema: Schema): Observable {\r\n if (schema.displayWith === 'localName') {\r\n for (const delimiter of ['/', '#', ':', '.']) {\r\n const parts = value.split(delimiter);\r\n if (parts.length > 1) {\r\n return of({ value, name: parts[parts.length - 1] });\r\n }\r\n }\r\n return of({ value, name: value });\r\n }\r\n if (schema.jsonata) {\r\n if (typeof value === 'object') {\r\n return of(value);\r\n } else {\r\n // initially, value is a simple string\r\n return of({ value, name: value });\r\n }\r\n }\r\n if (schema.displayWithChoices) {\r\n return of({ value, name: schema.displayWithChoices[schema.choices.indexOf(value)] });\r\n }\r\n return of({ value, name: value });\r\n }\r\n\r\n /**\r\n * handle GET / POST\r\n */\r\n getChoices(url: string, args: any, verb: string): Observable {\r\n if (verb === 'GET') {\r\n return this.http.get(url, args);\r\n } else {\r\n return this.http.post(url, args, {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n })\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * default: no delay\r\n */\r\n debounceTime() {\r\n return 0;\r\n }\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n/**\r\n * dialog to edit a JSON node in a layout structure\r\n */\r\n@Component({\r\n selector: 'lib-edit-element-dialog',\r\n templateUrl: './edit-element-dialog.component.html'\r\n})\r\nexport class EditElementDialogComponent {\r\n\r\n /**\r\n * dialog constrcutor\r\n * @param dialogRef disloag ref\r\n * @param data data to edit\r\n */\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.schema = {\r\n title: 'Edit form',\r\n layout: 'vertical',\r\n order: [\r\n ['widget', 'layout', 'itemlayout'],\r\n ['title', 'description'],\r\n ['example', 'readOnly'],\r\n ['required', 'format', 'errorMessage'],\r\n 'choices', 'class', 'style'\r\n ],\r\n static: true,\r\n type: 'object',\r\n properties: {\r\n // description, class, style are always applicable\r\n description: { type: 'string', static: true, title: 'Description / tooltip' },\r\n class: { type: 'array', items: { type: 'string' }, layout: 'chips', style: { width: '365px' }, static: true, title: 'CSS classes' },\r\n style: { type: 'object', additionalProperties: { type: 'string' }, static: true, title: 'CSS styles' }\r\n }\r\n };\r\n\r\n if (data.properties) {\r\n // only show required and error message for objects\r\n this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n this.schema.properties.required = {\r\n choices: Object.keys(data.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,\r\n title: 'Required fields'\r\n };\r\n this.schema.properties.layout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Screen layout' };\r\n } else {\r\n if (data.items) {\r\n this.schema.properties.layout = {\r\n type: 'string', enum: ['vertical', 'horizontal', 'select', 'tab', 'table', 'chips'],\r\n static: true, title: 'Screen Layout'\r\n };\r\n this.schema.properties.itemlayout = { type: 'string', enum: ['vertical', 'horizontal'], static: true, title: 'Item screen layout' };\r\n }\r\n if (data.items?.properties) {\r\n // array of objects\r\n this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n this.schema.properties.required = {\r\n choices: Object.keys(data.items.properties), type: 'array', layout: 'select', items: { type: 'string' }, static: true,\r\n title: 'Required fields'\r\n };\r\n } else {\r\n // array of simple types\r\n this.schema.properties.readOnly = {\r\n type: 'boolean', static: true, title: 'Read only value', style: { 'padding-top': '15px' }\r\n };\r\n this.schema.properties.errorMessage = { type: 'string', static: true, title: 'Validation error message' };\r\n this.schema.properties.format = {\r\n type: 'string', static: true, title: 'Format',\r\n widget: 'select', choices: [null, 'email', 'ipv4', 'url', 'uri']\r\n };\r\n this.schema.properties.example = { type: 'string', static: true, title: 'Example data' };\r\n this.schema.properties.title = { type: 'string', static: true, title: 'Title' };\r\n this.schema.properties.widget = {\r\n type: 'string', enum: ['text', 'select', 'date', 'textarea', 'password'], static: true,\r\n title: 'Form widget'\r\n };\r\n this.schema.properties.choices = {\r\n type: 'array', items: { type: 'string' }, style: { width: '365px' },\r\n layout: 'chips', static: true, title: 'Input choices'\r\n };\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * schema to edit input form fields\r\n */\r\n schema: any;\r\n}\r\n","\r\n \r\n\r\n\r\n \r\n \r\n","import { EventEmitter } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EditElementDialogComponent } from './edit-element-dialog.component';\r\nimport { Schema } from './schema';\r\n\r\n/**\r\n * form editor - has a 1:1 relationship to form node\r\n */\r\nexport class Edit {\r\n\r\n /**\r\n * get access to parent object's fields\r\n *\r\n * @param schemaChange signal a change\r\n * @param name the current property name (key)\r\n * @param schema the current schema\r\n * @param parent the parent's schema (required in order to change the order)\r\n * @param dialog dialog service\r\n */\r\n constructor(\r\n private schemaChange: EventEmitter, private name: string, private schema: Schema, private parent: Schema,\r\n private dialog: MatDialog) {\r\n }\r\n\r\n /**\r\n * can add if addable is not empty\r\n */\r\n canAdd(): boolean {\r\n return this.addable().length > 0;\r\n }\r\n\r\n /**\r\n * get the entries in \"properties\" that are not in \"order\"\r\n */\r\n addable(): string[] {\r\n let s: Schema;\r\n if (this.schema.properties) {\r\n s = this.schema;\r\n } else if (this.schema.items?.properties) {\r\n s = this.schema.items;\r\n } else if (this.schema.additionalProperties?.properties) {\r\n s = this.schema.additionalProperties;\r\n } else {\r\n return [];\r\n }\r\n if (s.order) {\r\n const set = new Set(Object.keys(s.properties));\r\n for (const p of s.order) {\r\n if (Array.isArray(p)) {\r\n for (const q of p) {\r\n set.delete(q);\r\n }\r\n } else {\r\n set.delete(p);\r\n }\r\n }\r\n return Array.from(set);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * add a hidden prop to the end of the list\r\n */\r\n addSub(prop: string) {\r\n const index = this.parent.order.indexOf(this.name);\r\n if (index >= 0) {\r\n this.parent.order[index] = [(this.parent.order[index] as string), prop];\r\n } else {\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n p.push(prop);\r\n }\r\n }\r\n }\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * can add if addable is not empty\r\n */\r\n canAddSub(): boolean {\r\n return this.subaddable().length > 0;\r\n }\r\n\r\n /**\r\n * get the entries in \"properties\" that are not in \"order\"\r\n */\r\n subaddable(): string[] {\r\n if (this.parent?.order) {\r\n const set = new Set(Object.keys(this.parent.properties));\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n for (const q of p) {\r\n set.delete(q);\r\n }\r\n } else {\r\n set.delete(p);\r\n }\r\n }\r\n return Array.from(set);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * add a hidden prop to the end of the list\r\n */\r\n add(prop: string) {\r\n if (this.schema.properties) {\r\n this.schema.order.push(prop);\r\n } else if (this.schema.items?.properties) {\r\n this.schema.items.order.push(prop);\r\n } else {\r\n this.schema.additionalProperties.order.push(prop);\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * edit simple schema fields like title and description\r\n */\r\n edit() {\r\n // deep clone object so we have the possibility to cancel editing\r\n const clone = JSON.parse(JSON.stringify(this.schema));\r\n\r\n // handle (array) example\r\n if (clone.items?.examples?.length > 0) {\r\n clone.example = clone.items.examples[0];\r\n }\r\n if (clone.examples?.length > 0) {\r\n clone.example = clone.examples[0];\r\n }\r\n\r\n // text is default\r\n if (!clone.widget) {\r\n clone.widget = 'text';\r\n }\r\n\r\n // horizontal is default\r\n if (!clone.layout) {\r\n clone.layout = 'horizontal';\r\n }\r\n\r\n // array: apply choices and widget to items\r\n if (clone.items) {\r\n clone.widget = clone.items.widget;\r\n clone.choices = clone.items.choices;\r\n clone.errorMessage = clone.items.errorMessage;\r\n clone.format = clone.items.format;\r\n clone.required = clone.items.required;\r\n clone.itemlayout = clone.items.layout;\r\n }\r\n\r\n const dialogRef = this.dialog.open(EditElementDialogComponent, { minWidth: '50%', data: clone });\r\n dialogRef.afterClosed().subscribe(data => {\r\n if (data) {\r\n this.schema.title = data.title;\r\n this.schema.description = data.description;\r\n this.schema.widget = data.widget;\r\n this.schema.layout = data.layout;\r\n this.schema.readOnly = data.readOnly;\r\n this.schema.errorMessage = data.errorMessage;\r\n if (data.example) {\r\n if (data.items) {\r\n this.schema.items.examples = [data.example];\r\n } else {\r\n this.schema.examples = [data.example];\r\n }\r\n }\r\n if (data.style) {\r\n delete data.style[''];\r\n }\r\n if (data.style && Object.keys(data.style).length > 0) {\r\n this.schema.style = data.style;\r\n }\r\n if (data.class) {\r\n data.class = data.class.filter(el => el != null);\r\n }\r\n if (data.class?.length > 0) {\r\n this.schema.class = data.class;\r\n }\r\n if (data.items) {\r\n if (data.choices?.length > 0) {\r\n this.schema.items.choices = data.choices;\r\n }\r\n this.schema.items.widget = data.widget;\r\n this.schema.items.format = data.format;\r\n this.schema.items.errorMessage = data.errorMessage;\r\n this.schema.items.required = data.required;\r\n this.schema.items.layout = data.itemlayout;\r\n } else {\r\n this.schema.choices = data.choices;\r\n this.schema.widget = data.widget;\r\n this.schema.format = data.format;\r\n this.schema.errorMessage = data.errorMessage;\r\n this.schema.required = data.required;\r\n }\r\n this.schemaChange.emit();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * can hide if I my parent is an object\r\n */\r\n canHide(): boolean {\r\n return this.parent ? true : false;\r\n }\r\n\r\n /**\r\n * hide this prop\r\n */\r\n hide() {\r\n if (!this.parent.order) {\r\n this.parent.order = Object.keys(this.parent.properties);\r\n }\r\n let index = 0;\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n p.splice(p.indexOf(this.name), 1);\r\n if (p.length === 1) {\r\n this.parent.order[index] = p[0];\r\n }\r\n }\r\n }\r\n index++;\r\n }\r\n if (this.parent.order.indexOf(this.name) >= 0) {\r\n this.parent.order.splice(this.parent.order.indexOf(this.name), 1);\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * can I go up\r\n */\r\n canUp(): boolean {\r\n if (!this.parent) {\r\n return false;\r\n }\r\n const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);\r\n const index = props.indexOf(this.name);\r\n if (index >= 0) {\r\n return index > 0;\r\n } else {\r\n for (const p of props) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n return p.indexOf(this.name) > 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * go up\r\n */\r\n up() {\r\n if (!this.parent.order) {\r\n this.parent.order = Object.keys(this.parent.properties);\r\n }\r\n let index = this.parent.order.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = this.parent.order[index - 1];\r\n this.parent.order[index - 1] = this.parent.order[index];\r\n this.parent.order[index] = tmp;\r\n } else {\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n index = p.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = p[index - 1];\r\n p[index - 1] = p[index];\r\n p[index] = tmp;\r\n }\r\n }\r\n }\r\n }\r\n this.schemaChange.emit();\r\n }\r\n\r\n /**\r\n * can I go down\r\n */\r\n canDown(): boolean {\r\n if (!this.parent) {\r\n return false;\r\n }\r\n const props = this.parent.order ? this.parent.order : Object.keys(this.parent.properties);\r\n const index = props.indexOf(this.name);\r\n if (index >= 0) {\r\n return index < props.length - 1;\r\n } else {\r\n for (const p of props) {\r\n if (Array.isArray(p)) {\r\n if (p.indexOf(this.name) >= 0) {\r\n return p.indexOf(this.name) < p.length - 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * go down\r\n */\r\n down() {\r\n if (!this.parent.order) {\r\n this.parent.order = Object.keys(this.parent.properties);\r\n }\r\n let index = this.parent.order.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = this.parent.order[index + 1];\r\n this.parent.order[index + 1] = this.parent.order[index];\r\n this.parent.order[index] = tmp;\r\n } else {\r\n for (const p of this.parent.order) {\r\n if (Array.isArray(p)) {\r\n index = p.indexOf(this.name);\r\n if (index >= 0) {\r\n const tmp = p[index + 1];\r\n p[index + 1] = p[index];\r\n p[index] = tmp;\r\n }\r\n }\r\n }\r\n }\r\n this.schemaChange.emit();\r\n }\r\n}\r\n","\r\n \r\n {{label}}\r\n {{schema.description}}\r\n \r\n \r\n \r\n\r\n\r\n
\r\n\r\n
\r\n \r\n more_vert\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n {{x}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n {{getLabel()}} key\r\n \r\n \r\n  \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{x.key}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n {{v}}\r\n cancel\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{x.value.title ? x.value.title : x.key}}
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n {{x}}\r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n \r\n {{label}}\r\n \r\n \r\n \r\n {{choice.name}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n {{label}}\r\n \r\n \r\n \r\n

{{error()}}

\r\n
\r\n\r\n \r\n
\r\n \r\n

{{error()}}

\r\n
\r\n
\r\n\r\n","import {\r\n Component,\r\n OnInit,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n SimpleChanges,\r\n OnChanges,\r\n ComponentFactoryResolver,\r\n ViewChild,\r\n ViewChildren,\r\n QueryList,\r\n} from \"@angular/core\";\r\nimport { MatSelectChange } from \"@angular/material/select\";\r\nimport { MatDatepickerInputEvent } from \"@angular/material/datepicker\";\r\nimport { MatCheckboxChange } from \"@angular/material/checkbox\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { forkJoin, Observable, ReplaySubject } from \"rxjs\";\r\nimport { KeyValue } from \"@angular/common\";\r\nimport { Schema } from \"./schema\";\r\nimport { WidgetComponent } from \"./widget.component\";\r\nimport { WidgetDirective } from \"./widget.directive\";\r\nimport { JsonSchemaFormService } from \"./json-schema-form.service\";\r\nimport { MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\r\nimport { JsonPointer } from \"./json-pointer\";\r\nimport { Choice, ChoiceHandler, DefaultChoiceHandler } from \"./choice\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport { debounceTime, startWith, switchMap } from \"rxjs/operators\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { Edit } from \"./edit\";\r\nimport { MatChipInputEvent } from \"@angular/material/chips\";\r\nimport { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\nimport { COMMA, ENTER, TAB } from \"@angular/cdk/keycodes\";\r\nimport jsonata from \"jsonata\";\r\n\r\n/**\r\n * generates an input form base on JSON schema and JSON object.\r\n * The component is used recursively.\r\n */\r\n@Component({\r\n selector: \"lib-json-schema-form\",\r\n templateUrl: \"./json-schema-form.component.html\",\r\n styleUrls: [\"./json-schema-form.component.css\"],\r\n})\r\nexport class JsonSchemaFormComponent implements OnInit, OnChanges {\r\n /**\r\n * component constructor\r\n * @param http http client\r\n * @param componentFactoryResolver allows dynamic components\r\n * @param service application service for registering components etc.\r\n * @param dialog dialog service\r\n */\r\n constructor(\r\n private http: HttpClient,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n public service: JsonSchemaFormService,\r\n private dialog: MatDialog\r\n ) {}\r\n\r\n /**\r\n * container children for event propagation\r\n */\r\n @ViewChildren(\"children\") children: QueryList;\r\n\r\n /**\r\n * container children for event propagation\r\n */\r\n @ViewChild(\"child\") child: JsonSchemaFormComponent;\r\n\r\n /**\r\n * if an array is displayed, indicates which array index is being hovered over in order to\r\n * display the \"-\" remove button\r\n */\r\n hover: number;\r\n\r\n /**\r\n * the name of the input field (only set if inside type: object)\r\n */\r\n @Input() name: string;\r\n\r\n /**\r\n * the label of the input field\r\n */\r\n @Input() label: string;\r\n\r\n /**\r\n * the input value\r\n */\r\n @Input() value: any;\r\n\r\n /**\r\n * root form value (can be used in custom components)\r\n */\r\n @Input() rootValue: any;\r\n\r\n /**\r\n * emit changes done by the user in the component\r\n */\r\n @Output() valueChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * emit whether this part of the form is valid\r\n */\r\n @Output() errorChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * indicate schema changes done via the layout editor\r\n */\r\n @Output() schemaChange: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * JSON schema to use\r\n */\r\n @Input() schema: Schema;\r\n\r\n /**\r\n * parent schema to edit required\r\n */\r\n @Input() parentSchema: Schema;\r\n\r\n /**\r\n * form editor\r\n */\r\n edit: Edit;\r\n\r\n /**\r\n * root JSON schema to use when looking up $ref (simply passed along the tree)\r\n */\r\n @Input() rootSchema: Schema;\r\n\r\n /**\r\n * base URL for resolving $ref\r\n */\r\n @Input() base: string;\r\n\r\n /**\r\n * indicates whether this is the root of the component tree\r\n */\r\n isRoot = false;\r\n\r\n /**\r\n * if present: value of the switch property that determines whether this component renders itself\r\n * (schema.case not present or schema.case === switch)\r\n */\r\n @Input() switch: string;\r\n\r\n /**\r\n * indicates to child components whether the parent object has hideUndefined set (i.e. do not render yourself\r\n * if your value is undefined)\r\n */\r\n @Input() hideUndefined: boolean;\r\n\r\n /**\r\n * are we already in the expansion panel?\r\n */\r\n @Input() inExpansion: boolean;\r\n\r\n /**\r\n * are we already in an array?\r\n */\r\n @Input() inArray: boolean;\r\n\r\n /**\r\n * required imported from parent\r\n */\r\n @Input() required: boolean;\r\n\r\n /**\r\n * hook for custom widgets\r\n */\r\n @ViewChild(WidgetDirective, { static: true }) widgetHost: WidgetDirective;\r\n\r\n /**\r\n * order field transforms properties into this structure.\r\n * allows omission, ordering and hierarchy\r\n */\r\n orderedProperties: { [key: string]: Schema }[];\r\n\r\n /**\r\n * make sure to return the same date object instance (cannot delete date #83)\r\n */\r\n date: Date;\r\n\r\n /**\r\n * choices that might be loaded async, initialized with current value and its potentially delayed toString value\r\n */\r\n choices: ReplaySubject;\r\n\r\n /**\r\n * autocomplete filtered choices\r\n */\r\n filteredOptions: Observable;\r\n\r\n /**\r\n * autocomplete form control for simpler change detection\r\n */\r\n control: FormControl;\r\n\r\n /**\r\n * implementation specified in displayWith\r\n */\r\n ch: ChoiceHandler;\r\n\r\n /**\r\n * complete chip entry with enter or comma\r\n */\r\n readonly separatorKeysCodes: number[] = [ENTER, COMMA, TAB];\r\n\r\n /**\r\n * readOnly if schema.readOnly or schema.createOnly and value set\r\n */\r\n readOnly: boolean;\r\n\r\n /**\r\n * error from a custom component\r\n */\r\n customError: string;\r\n\r\n /**\r\n * apply order, called anytime properties are set\r\n */\r\n setOrderedProperties() {\r\n if (this.schema.order) {\r\n this.orderedProperties = [];\r\n for (const p of this.schema.order) {\r\n const arr = Array.isArray(p) ? p : [p];\r\n const o = {};\r\n for (const q of arr) {\r\n o[q] = this.schema.properties[q];\r\n }\r\n this.orderedProperties.push(o);\r\n }\r\n } else if (this.schema.properties) {\r\n this.orderedProperties = [];\r\n for (const [key, value] of Object.entries(this.schema.properties)) {\r\n const o = {};\r\n o[key] = value;\r\n this.orderedProperties.push(o);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * initialize the comonent.\r\n * replace undefined with null and init autocomplete choices\r\n */\r\n ngOnInit(): void {\r\n this.readOnly =\r\n this.schema.readOnly || (this.schema.createOnly && this.value);\r\n\r\n if (!this.rootSchema) {\r\n this.rootSchema = this.schema;\r\n this.rootValue = this.value;\r\n this.isRoot = true;\r\n }\r\n\r\n if (!this.schema.type) {\r\n const p = this.schema.$ref;\r\n const parts = p.split(\"#\");\r\n if (parts.length === 1) {\r\n // URL only\r\n this.url(parts[0], null);\r\n } else {\r\n if (parts[0]) {\r\n // URL + anchor\r\n this.url(parts[0], parts[1]);\r\n } else {\r\n // local ref\r\n this.schema = JsonPointer.jsonPointer(this.rootSchema, parts[1]);\r\n this.setOrderedProperties();\r\n }\r\n }\r\n } else {\r\n this.setOrderedProperties();\r\n }\r\n\r\n if (typeof this.value === \"undefined\") {\r\n if (this.schema.default) {\r\n this.value = this.schema.default;\r\n setTimeout(() => this.emit(this.value), 500);\r\n } else {\r\n if (!this.hideUndefined) {\r\n this.value = null;\r\n }\r\n }\r\n }\r\n\r\n if (this.getLayout() === \"custom\") {\r\n this.loadComponent();\r\n }\r\n\r\n if (this.isRoot) {\r\n setTimeout(() => {\r\n this.errorChange.emit(this.recursiveError());\r\n }, 10);\r\n }\r\n\r\n this.ch = this.service.displayWithRegistry[this.schema.displayWith];\r\n if (!this.ch) {\r\n this.ch = new DefaultChoiceHandler(this.http);\r\n }\r\n this.control = new FormControl(this.value);\r\n this.choices = new ReplaySubject();\r\n if (Array.isArray(this.value)) {\r\n const arr = [];\r\n for (const i of this.value) {\r\n arr.push({ name: i, value: i });\r\n }\r\n this.choices.next(arr);\r\n } else {\r\n this.choices.next([{ name: this.value, value: this.value }]);\r\n }\r\n if (this.value || this.value === 0) {\r\n if (Array.isArray(this.value)) {\r\n const arr: Observable[] = [];\r\n for (const i of this.value) {\r\n arr.push(this.ch.choice(i, this.schema));\r\n }\r\n forkJoin(arr).subscribe((res) => this.choices.next(res));\r\n } else {\r\n this.ch\r\n .choice(this.value, this.schema)\r\n .subscribe((res) => this.choices.next([res]));\r\n }\r\n }\r\n this.filteredOptions = this.control.valueChanges.pipe(\r\n startWith(this.value),\r\n debounceTime(this.ch.debounceTime()),\r\n switchMap((x) => {\r\n this.change({ target: { value: x } });\r\n return this.ch.filter(this.value, this.schema, x, this.choices);\r\n })\r\n );\r\n\r\n this.edit = new Edit(\r\n this.schemaChange,\r\n this.name,\r\n this.schema,\r\n this.parentSchema,\r\n this.dialog\r\n );\r\n }\r\n\r\n /**\r\n * choice element activated - load values\r\n */\r\n focus() {\r\n this.ch.load(this.value, this.schema).subscribe((res) => {\r\n this.choices.next(res);\r\n });\r\n }\r\n\r\n /**\r\n * load schema from ref, apply pointer if needed\r\n */\r\n url(ref: string, pointer: string) {\r\n // URL + anchor\r\n this.base = this.base ? new URL(ref, this.base).href : ref;\r\n\r\n // check root schema referenced map\r\n if (this.rootSchema.referenced && this.rootSchema.referenced[this.base]) {\r\n const res = this.rootSchema.referenced[this.base];\r\n this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;\r\n this.setOrderedProperties();\r\n return;\r\n }\r\n\r\n this.http.get(this.base).subscribe(\r\n (res) => {\r\n this.schema = pointer ? JsonPointer.jsonPointer(res, pointer) : res;\r\n this.setOrderedProperties();\r\n },\r\n (error) => console.log(error)\r\n );\r\n\r\n // set temporary pseudo schema\r\n this.schema = { type: \"string\" };\r\n this.setOrderedProperties();\r\n }\r\n\r\n /**\r\n * emit valueChange event and also any validation error\r\n */\r\n emit(event: any) {\r\n this.valueChange.emit(event);\r\n if (this.isRoot) {\r\n setTimeout(() => {\r\n this.errorChange.emit(this.recursiveError());\r\n }, 10);\r\n }\r\n }\r\n\r\n /**\r\n * if the schema changes from the outside,\r\n * reset the component state wrt. errors and the choices cache\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.schema) {\r\n if (changes.schema.previousValue) {\r\n this.rootSchema = null;\r\n if (this.widgetHost.viewContainerRef) {\r\n this.widgetHost.viewContainerRef.clear();\r\n }\r\n this.ngOnInit();\r\n }\r\n }\r\n\r\n if (changes.switch && !changes.switch.isFirstChange()) {\r\n if (this.getLayout() === \"custom\") {\r\n this.loadComponent();\r\n } else {\r\n if (this.widgetHost.viewContainerRef) {\r\n this.widgetHost.viewContainerRef.clear();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * angular pipe sorting function for keyValue - keep the JSON order and do not\r\n * order alphabetically\r\n */\r\n originalOrder = (\r\n a: KeyValue,\r\n b: KeyValue\r\n ): number => {\r\n return 0;\r\n };\r\n\r\n /**\r\n * key method to instruct the display which HTML block to activate.\r\n */\r\n getLayout(): string {\r\n if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {\r\n return \"none\";\r\n }\r\n if (this.schema.widget === \"custom\") {\r\n return \"custom\";\r\n }\r\n if (this.hideUndefined && this.value === undefined) {\r\n return \"none\";\r\n }\r\n if (this.schema.type === \"object\") {\r\n if (this.schema.additionalProperties) {\r\n if (this.schema.layout === \"tab\") {\r\n return \"additionalPropertiesTab\";\r\n }\r\n return \"additionalProperties\";\r\n }\r\n return \"object\";\r\n }\r\n if (this.schema.type === \"array\") {\r\n if (this.schema.layout === \"tab\") {\r\n return \"tab\";\r\n }\r\n if (this.schema.layout === \"table\") {\r\n return \"table\";\r\n }\r\n if (this.schema.layout === \"select\") {\r\n return \"array-select\";\r\n }\r\n if (this.schema.layout === \"chips\") {\r\n return \"chips\";\r\n }\r\n return \"array\";\r\n }\r\n if (this.schema.enum) {\r\n return \"enum\";\r\n }\r\n if (this.schema.widget === \"date\") {\r\n return \"date\";\r\n }\r\n if (this.schema.widget === \"upload\") {\r\n return \"upload\";\r\n }\r\n if (this.schema.widget === \"textarea\") {\r\n return \"textarea\";\r\n }\r\n if (this.schema.type === \"boolean\") {\r\n return \"checkbox\";\r\n }\r\n if (this.schema.choicesUrl) {\r\n return \"autocomplete\";\r\n }\r\n if (this.schema.choices) {\r\n return \"autocomplete\";\r\n }\r\n if (this.schema.displayWith) {\r\n return \"autocomplete\";\r\n }\r\n return \"single\";\r\n }\r\n\r\n /**\r\n * called from template in the \"simple\" type. If \"type\" is \"number\" or \"integer\",\r\n * the HTML input type is \"number\" which avoids normal string input\r\n */\r\n getInputType(schema: Schema): string {\r\n if (schema.type === \"number\") {\r\n return \"number\";\r\n }\r\n if (schema.type === \"integer\") {\r\n return \"number\";\r\n }\r\n return schema.widget;\r\n }\r\n\r\n /**\r\n * event handler for object display. Catches the child component event and\r\n * handle it by setting the value[key].\r\n * Also init null objects with {}\r\n */\r\n onValueChange(key: string, value: any) {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n this.value[key] = value;\r\n\r\n if (this.schema.computed) {\r\n for (const field of Object.keys(this.schema.computed)) {\r\n const expression = this.schema.computed[field];\r\n this.value[field] = jsonata(expression).evaluate(this.value);\r\n }\r\n }\r\n\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * add an element to an array.\r\n * null arrays are initialized with []\r\n */\r\n add() {\r\n if (!(this.value instanceof Array)) {\r\n this.value = [];\r\n }\r\n if (this.schema.items.type === \"array\") {\r\n this.value.push([]);\r\n } else if (this.schema.items.type === \"object\") {\r\n this.value.push({});\r\n } else {\r\n this.value.push(null);\r\n }\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * event handler for adding a field\r\n */\r\n addField() {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n if (this.value[\"\"]) {\r\n return;\r\n }\r\n this.value[\"\"] = null;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * remove an element from an array\r\n */\r\n remove(i: number) {\r\n this.value.splice(i, 1);\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * remove a field\r\n */\r\n removeField(key: string) {\r\n delete this.value[key];\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * event handler for changed field names with \"additionalProperties\"\r\n */\r\n fieldNameChange(key: string, newvalue: any) {\r\n this.value[newvalue] = this.value[key];\r\n delete this.value[key];\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * returns the validation error on this level and call recursively for all children.\r\n * returns null if the form contents is valid\r\n */\r\n recursiveError(): string {\r\n const e = this.error();\r\n if (e) {\r\n return e;\r\n }\r\n if (this.child) {\r\n return this.child.recursiveError();\r\n }\r\n if (this.children) {\r\n for (const c of this.children) {\r\n const r = c.recursiveError();\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * return the error message provided in the schema or the generic error message\r\n * returned from the validation code\r\n */\r\n e(error: string): string {\r\n if (this.schema.errorMessage) {\r\n return this.schema.errorMessage;\r\n }\r\n return error;\r\n }\r\n\r\n /**\r\n * return error string\r\n */\r\n error(): string {\r\n if (this.schema.widget === \"custom\") {\r\n return this.customError;\r\n }\r\n if (this.schema.case && this.schema.case.indexOf(this.switch) < 0) {\r\n return null;\r\n }\r\n if (this.value) {\r\n if (this.schema.maxItems) {\r\n if (!(this.value.length <= this.schema.maxItems)) {\r\n return this.e(\r\n \"Only \" + this.schema.maxItems + \" array entries allowed\"\r\n );\r\n }\r\n }\r\n if (this.schema.uniqueItems) {\r\n if (!(new Set(this.value).size === this.value.length)) {\r\n return this.e(\"Array entries must be unique\");\r\n }\r\n }\r\n if (this.schema.minItems) {\r\n if (!(this.value.length >= this.schema.minItems)) {\r\n return this.e(\r\n \"At least \" + this.schema.minItems + \" array entries required\"\r\n );\r\n }\r\n }\r\n if (this.schema.maxProperties) {\r\n if (!(Object.keys(this.value).length <= this.schema.maxProperties)) {\r\n return this.e(\r\n \"Only \" + this.schema.maxProperties + \" fields allowed\"\r\n );\r\n }\r\n }\r\n if (this.schema.propertyNames) {\r\n for (const key of Object.keys(this.value)) {\r\n const re = new RegExp(this.schema.propertyNames);\r\n if (!re.test(key)) {\r\n return this.e(\"illegal field name: \" + key);\r\n }\r\n }\r\n }\r\n if (this.schema.dependencies) {\r\n for (const dep of Object.keys(this.schema.dependencies)) {\r\n if (this.value[dep]) {\r\n for (const l of this.schema.dependencies[dep]) {\r\n if (!this.value[l]) {\r\n return this.e(dep + \" depends on \" + l);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.schema.minProperties) {\r\n if (!(Object.keys(this.value).length >= this.schema.minProperties)) {\r\n return this.e(\r\n \"At least \" + this.schema.minProperties + \" fields required\"\r\n );\r\n }\r\n }\r\n if (this.schema.maxLength) {\r\n if (!((\"\" + this.value).length <= this.schema.maxLength)) {\r\n return this.e(\"Input is longer than \" + this.schema.maxLength);\r\n }\r\n }\r\n if (this.schema.minLength) {\r\n if (!((\"\" + this.value).length >= this.schema.minLength)) {\r\n return this.e(\"Input is shorter than \" + this.schema.minLength);\r\n }\r\n }\r\n if (this.schema.multipleOf) {\r\n if (!Number.isInteger(Number(this.value) / this.schema.multipleOf)) {\r\n return this.e(\"Must be multiple of \" + this.schema.multipleOf);\r\n }\r\n }\r\n if (this.schema.exclusiveMaximum) {\r\n if (!(Number(this.value) < this.schema.exclusiveMaximum)) {\r\n return this.e(\"Must be less than \" + this.schema.exclusiveMaximum);\r\n }\r\n }\r\n if (this.schema.maximum) {\r\n if (!(Number(this.value) <= this.schema.maximum)) {\r\n return this.e(\"Must be less than or equal \" + this.schema.maximum);\r\n }\r\n }\r\n if (this.schema.exclusiveMinimum) {\r\n if (!(Number(this.value) > this.schema.exclusiveMinimum)) {\r\n return this.e(\"Must greater than \" + this.schema.exclusiveMinimum);\r\n }\r\n }\r\n if (this.schema.minimum) {\r\n if (!(Number(this.value) >= this.schema.minimum)) {\r\n return this.e(\"Must greater than or equal \" + this.schema.minimum);\r\n }\r\n }\r\n }\r\n if (this.required) {\r\n if (this.value == null || Object.is(this.value, NaN)) {\r\n return this.e(\"required\");\r\n }\r\n }\r\n if (this.schema.required) {\r\n for (const dep of this.schema.required) {\r\n if (\r\n !this.value[dep] &&\r\n this.value[dep] !== false &&\r\n this.value[dep] !== 0\r\n ) {\r\n // ignore 'required' if dep is inactive due to switch / case\r\n let inactive = false;\r\n if (this.schema.switch) {\r\n const switc = this.value[this.schema.switch];\r\n if (switc && this.schema.properties[dep].case?.indexOf(switc) < 0) {\r\n inactive = true;\r\n }\r\n }\r\n if (!inactive) {\r\n return this.e(dep + \" is required\");\r\n }\r\n }\r\n }\r\n }\r\n if (this.schema.pattern) {\r\n const re = new RegExp(this.schema.pattern);\r\n if (!this.value) {\r\n return this.e(\"illegal string\");\r\n }\r\n if (!re.test(this.value)) {\r\n return this.e(\"illegal string\");\r\n }\r\n }\r\n if (this.schema.format && this.service.formats[this.schema.format]) {\r\n const re = new RegExp(this.service.formats[this.schema.format]);\r\n if (!this.value) {\r\n return this.e(\"illegal string\");\r\n }\r\n if (!re.test(this.value)) {\r\n return this.e(\"illegal string\");\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * use the element title if present, defaults to the label input or \"\" is both are null\r\n */\r\n getLabel(): string {\r\n if (this.schema.title) {\r\n return this.schema.title;\r\n }\r\n if (this.label) {\r\n return this.label;\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * input element change handler.\r\n * normalize the different kind of events, handle the datatypes, set the value and emit the change\r\n */\r\n change(event: any) {\r\n let eventTarget: any;\r\n\r\n if (event instanceof MatSelectChange) {\r\n event = event.value;\r\n } else if (event instanceof MatDatepickerInputEvent) {\r\n event = this.serializeDate(\r\n event.value,\r\n this.schema.dateFormat,\r\n this.schema.type\r\n );\r\n } else if (event instanceof MatAutocompleteSelectedEvent) {\r\n event = event.option.value;\r\n } else if (event instanceof MatCheckboxChange) {\r\n event = event.checked;\r\n } else {\r\n // save the event target in case the parsing changes the value\r\n // (e.g. integer input 5.3 becomes 5, this is reflected on the UI via this handle)\r\n eventTarget = event.target;\r\n event = event.target.value;\r\n }\r\n\r\n if (event === \"\") {\r\n event = null;\r\n }\r\n\r\n if (event == null) {\r\n this.value = null;\r\n }\r\n\r\n if (this.schema.type === \"number\") {\r\n this.value = parseFloat(event);\r\n } else if (this.schema.type === \"integer\") {\r\n this.value = parseInt(event, 10);\r\n } else if (this.schema.type === \"boolean\") {\r\n if (typeof event === \"string\") {\r\n if (event === \"true\") {\r\n this.value = true;\r\n } else if (event === \"false\") {\r\n this.value = false;\r\n } else {\r\n this.value = null;\r\n }\r\n } else {\r\n this.value = event;\r\n }\r\n } else if (this.schema.type === \"string\") {\r\n this.value = event;\r\n } else if (this.schema.type === \"array\") {\r\n this.value = event;\r\n } else {\r\n throw new Error(\"unknown type: \" + this.schema.type);\r\n }\r\n\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * allows for the result of a file upload to be written into a text form element\r\n */\r\n handleFileInput(event: any) {\r\n if (1024 * 1024 <= event.target.files.item(0).size) {\r\n console.log(\"The file size is limited to 1MB\");\r\n return;\r\n }\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.value = reader.result;\r\n this.emit(this.value);\r\n };\r\n \r\n reader.readAsDataURL(event.target.files.item(0));\r\n }\r\n\r\n /**\r\n * get example values from example array and default\r\n */\r\n example(): string {\r\n if (this.schema.examples && this.schema.examples[0]) {\r\n return this.schema.examples[0];\r\n }\r\n if (this.schema.default) {\r\n return this.schema.default;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * load the dynamic custom widget\r\n */\r\n loadComponent() {\r\n const componentFactory =\r\n this.componentFactoryResolver.resolveComponentFactory(\r\n this.service.registry[this.schema.widgetType]\r\n );\r\n const viewContainerRef = this.widgetHost.viewContainerRef;\r\n viewContainerRef.clear();\r\n const componentRef = viewContainerRef.createComponent(componentFactory);\r\n\r\n // input values\r\n (componentRef.instance as WidgetComponent).label = this.label;\r\n (componentRef.instance as WidgetComponent).value = this.value;\r\n (componentRef.instance as WidgetComponent).schema = this.schema;\r\n (componentRef.instance as WidgetComponent).rootSchema = this.rootSchema;\r\n (componentRef.instance as WidgetComponent).rootValue = this.rootValue;\r\n\r\n // subscribe to value changes and forward them\r\n (componentRef.instance as WidgetComponent).valueChange.subscribe((data) => {\r\n this.value = data;\r\n this.emit(this.value);\r\n });\r\n\r\n // subscribe to error changes and forward them\r\n (componentRef.instance as WidgetComponent).errorChange.subscribe(\r\n (error) => {\r\n this.customError = error;\r\n this.errorChange.emit(error);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * used for expansion panels - set value and forward event\r\n */\r\n setAndEmit(event: any) {\r\n this.value = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * set an array element and emit value change event\r\n */\r\n setIndexAndEmit(i: number, event: any) {\r\n this.value[i] = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * set an array element's field and emit value change event (applies to table layout)\r\n */\r\n setIndexAndEmitTable(i: number, field: string, event: any) {\r\n this.value[i][field] = event;\r\n this.emit(this.value);\r\n }\r\n\r\n /**\r\n * used when hideUndefined is active. Called from the UI to\r\n * show a property with undefined value (in order to be able to set if in the form)\r\n */\r\n showProperty(prop: string) {\r\n if (!this.value) {\r\n this.value = {};\r\n }\r\n if (this.value[prop] === undefined) {\r\n this.value[prop] = null;\r\n } else if (this.value[prop] === null) {\r\n this.value[prop] = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * used when hideUndefined is active. Called from the UI\r\n * to determine which properties are included in the \"to add\" list\r\n */\r\n showPropertyList(): string[] {\r\n if (this.schema.switch && this.value) {\r\n const sw = this.value[this.schema.switch];\r\n const props = [];\r\n for (const [k, v] of Object.entries(this.schema.properties)) {\r\n if (v.case) {\r\n if (v.case.includes(sw)) {\r\n props.push(k);\r\n }\r\n } else {\r\n props.push(k);\r\n }\r\n }\r\n return props.sort();\r\n } else {\r\n return Object.keys(this.schema.properties).sort();\r\n }\r\n }\r\n\r\n /**\r\n * string to date\r\n * @param date date string / number (millisecs since 1970)\r\n * @param format date format\r\n */\r\n parseDate(date: any, format: string): Date {\r\n if (!date && date !== 0) {\r\n return date;\r\n }\r\n if (typeof date === \"number\") {\r\n return this.sameDate(new Date(date));\r\n }\r\n if (!format) {\r\n return date;\r\n }\r\n const pdate = date.split(this.getDelimiter(format));\r\n const pformat = format.split(this.getDelimiter(format));\r\n return this.sameDate(\r\n new Date(\r\n pdate[pformat.indexOf(\"yyyy\")],\r\n pdate[pformat.indexOf(\"MM\")] - 1,\r\n pdate[pformat.indexOf(\"dd\")]\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * make sure to return the same date object instance (cannot delete date #83)\r\n */\r\n sameDate(nd: Date): Date {\r\n if (!this.date) {\r\n this.date = nd;\r\n }\r\n if (this.date.getTime() !== nd.getTime()) {\r\n this.date = nd;\r\n }\r\n return this.date;\r\n }\r\n\r\n /**\r\n * date to string\r\n * @param date the date to serialize\r\n * @param format the date format (e.g. dd-MM-yyyy)\r\n * @param type target datatype (allows serializing to millisecs since 1970)\r\n */\r\n serializeDate(date: Date, format: string, type: string): string {\r\n if (date == null) {\r\n return \"\";\r\n }\r\n if (type === \"integer\" || type === \"number\") {\r\n return \"\" + date.valueOf();\r\n }\r\n if (!format) {\r\n return date.toISOString();\r\n }\r\n const pformat = format.split(this.getDelimiter(format));\r\n const pdate = [null, null, null];\r\n pdate[pformat.indexOf(\"yyyy\")] = date.getFullYear();\r\n pdate[pformat.indexOf(\"MM\")] = date.getMonth() + 1;\r\n pdate[pformat.indexOf(\"dd\")] = date.getDate();\r\n return (\r\n pdate[0] +\r\n this.getDelimiter(format) +\r\n pdate[1] +\r\n this.getDelimiter(format) +\r\n pdate[2]\r\n );\r\n }\r\n\r\n /**\r\n * find the first non letter character in a date format such as dd/MM/yyyy (returns /)\r\n */\r\n getDelimiter(format: string): string {\r\n const delim = format.match(/\\W/g);\r\n if (!delim[0]) {\r\n throw new Error(\"No delimiter found in date format: \" + format);\r\n }\r\n return delim[0];\r\n }\r\n\r\n /**\r\n * new chip entered\r\n */\r\n addChip(event: MatChipInputEvent): void {\r\n const input = event.input;\r\n const value = event.value;\r\n\r\n // Add our fruit\r\n if ((value || \"\").trim()) {\r\n if (!this.value) {\r\n this.value = [];\r\n }\r\n this.value.push(value.trim());\r\n this.emit(this.value);\r\n }\r\n\r\n // Reset the input value\r\n if (input) {\r\n input.value = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * remove a chip\r\n */\r\n removeChip(v: string): void {\r\n const index = this.value.indexOf(v);\r\n if (index >= 0) {\r\n this.value.splice(index, 1);\r\n if (this.value.length === 0) {\r\n this.value = null;\r\n }\r\n this.emit(this.value);\r\n }\r\n }\r\n\r\n /**\r\n * chips d&d handler\r\n */\r\n dropChip(event: CdkDragDrop) {\r\n moveItemInArray(this.value, event.previousIndex, event.currentIndex);\r\n this.emit(this.value);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\r\n\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule, MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { WidgetDirective } from './widget.directive';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { EditElementDialogComponent } from './edit-element-dialog.component';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\n@NgModule({\r\n declarations: [JsonSchemaFormComponent, EditElementDialogComponent, WidgetDirective],\r\n imports: [\r\n MatCardModule,\r\n FlexLayoutModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatTabsModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatDatepickerModule,\r\n MatCheckboxModule,\r\n MatAutocompleteModule,\r\n HttpClientModule,\r\n CommonModule,\r\n MatInputModule,\r\n MatNativeDateModule,\r\n MatButtonModule,\r\n MatExpansionModule,\r\n MatMenuModule,\r\n ReactiveFormsModule,\r\n MatDialogModule,\r\n MatChipsModule,\r\n DragDropModule\r\n ],\r\n exports: [JsonSchemaFormComponent],\r\n providers: [\r\n // turn off tooltip gestures on mobile: https://github.com/angular/components/issues/4892\r\n { provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { touchGestures: 'off' } }\r\n ]\r\n\r\n})\r\nexport class JsonSchemaFormModule { }\r\n","/*\r\n * Public API Surface of json-schema-form\r\n */\r\nexport * from './lib/json-schema-form.service';\r\nexport * from './lib/json-schema-form.component';\r\nexport * from './lib/json-schema-form.module';\r\nexport * from './lib/schema';\r\nexport * from './lib/widget.component';\r\nexport * from './lib/choice';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i0.ɵɵelementStart","i0.ɵɵlistener","i0.ɵɵelementEnd","i0.ɵɵtext","i0.ɵɵadvance","i0.ɵɵproperty","i0.ɵɵtextInterpolate","i0.ɵɵtemplate","i0.ɵɵtextInterpolate1","i0.ɵɵpropertyInterpolate","i0.ɵɵelement"],"mappings":"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"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/choice.d.ts b/dist/dashjoin/json-schema-form/lib/choice.d.ts new file mode 100644 index 0000000..54fae90 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/choice.d.ts @@ -0,0 +1,80 @@ +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { Schema } from './schema'; +/** + * class backing a select / autocomplete option + */ +export interface Choice { + /** + * select value + */ + value: any; + /** + * display name + */ + name: string; +} +/** + * interface for choice handlers for select / autocomplete choices + */ +export interface ChoiceHandler { + /** + * loads the choices + */ + load(value: any, schema: Schema): Observable; + /** + * user typed in autocomplete field + */ + filter(value: any, schema: Schema, current: string, choices: Observable): Observable; + /** + * return a single choice (i.e. convert value to Choice) + */ + choice(value: any, schema: Schema): Observable; + /** + * delay between keystrokes before new data is loaded + */ + debounceTime(): number; +} +/** + * default implementation that handles choices based on schema fields. + * can be overriden via schema.displayWith + */ +export declare class DefaultChoiceHandler implements ChoiceHandler { + private http; + /** + * create default choice handler + * + * @param http http connection client + */ + constructor(http: HttpClient); + /** + * http cache for REST request on config/Table (i.e. schema requests) + */ + cache: Observable; + /** + * load choices + */ + load(value: any, schema: Schema): Observable; + /** + * filter after keystroke + */ + filter(value: any, schema: Schema, current: string, choices: Observable): Observable; + /** + * called from filter, intended to allow subclasses to easily change filter algorithm + */ + include(i: Choice, current: string): boolean; + /** + * default choice implementation: just reuse value as name + * check for localName + */ + choice(value: any, schema: Schema): Observable; + /** + * handle GET / POST + */ + getChoices(url: string, args: any, verb: string): Observable; + /** + * default: no delay + */ + debounceTime(): number; +} +//# sourceMappingURL=choice.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/choice.d.ts.map b/dist/dashjoin/json-schema-form/lib/choice.d.ts.map new file mode 100644 index 0000000..e1a339a --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/choice.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"choice.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/choice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAY,UAAU,EAAM,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;GAEG;AACH,MAAM,WAAW,MAAM;IAEnB;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE1B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzG;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEvD;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAO1C,OAAO,CAAC,IAAI;IALxB;;;;OAIG;gBACiB,IAAI,EAAE,UAAU;IAEpC;;OAEG;IACH,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAsCtD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAUxG;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAI5C;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAwBtD;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC;IAYjE;;OAEG;IACH,YAAY;CAGf"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts b/dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts new file mode 100644 index 0000000..214813d --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts @@ -0,0 +1,22 @@ +import { MatDialogRef } from '@angular/material/dialog'; +import * as i0 from "@angular/core"; +/** + * dialog to edit a JSON node in a layout structure + */ +export declare class EditElementDialogComponent { + dialogRef: MatDialogRef; + data: any; + /** + * dialog constrcutor + * @param dialogRef disloag ref + * @param data data to edit + */ + constructor(dialogRef: MatDialogRef, data: any); + /** + * schema to edit input form fields + */ + schema: any; + static ɵfac: i0.ɵɵFactoryDef; + static ɵcmp: i0.ɵɵComponentDefWithMeta; +} +//# sourceMappingURL=edit-element-dialog.component.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts.map b/dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts.map new file mode 100644 index 0000000..ca2efc2 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/edit-element-dialog.component.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"edit-element-dialog.component.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/edit-element-dialog.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAmB,MAAM,0BAA0B,CAAC;;AAEzE;;GAEG;AACH,qBAIa,0BAA0B;IAQ5B,SAAS,EAAE,YAAY,CAAC,0BAA0B,CAAC;IAC1B,IAAI,EAAE,GAAG;IAP3C;;;;OAIG;gBAEM,SAAS,EAAE,YAAY,CAAC,0BAA0B,CAAC,EAC1B,IAAI,EAAE,GAAG;IAoE3C;;OAEG;IACH,MAAM,EAAE,GAAG,CAAC;iCAhFD,0BAA0B;2CAA1B,0BAA0B;CAiFtC"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/edit.d.ts b/dist/dashjoin/json-schema-form/lib/edit.d.ts new file mode 100644 index 0000000..52227ba --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/edit.d.ts @@ -0,0 +1,76 @@ +import { EventEmitter } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { Schema } from './schema'; +/** + * form editor - has a 1:1 relationship to form node + */ +export declare class Edit { + private schemaChange; + private name; + private schema; + private parent; + private dialog; + /** + * get access to parent object's fields + * + * @param schemaChange signal a change + * @param name the current property name (key) + * @param schema the current schema + * @param parent the parent's schema (required in order to change the order) + * @param dialog dialog service + */ + constructor(schemaChange: EventEmitter, name: string, schema: Schema, parent: Schema, dialog: MatDialog); + /** + * can add if addable is not empty + */ + canAdd(): boolean; + /** + * get the entries in "properties" that are not in "order" + */ + addable(): string[]; + /** + * add a hidden prop to the end of the list + */ + addSub(prop: string): void; + /** + * can add if addable is not empty + */ + canAddSub(): boolean; + /** + * get the entries in "properties" that are not in "order" + */ + subaddable(): string[]; + /** + * add a hidden prop to the end of the list + */ + add(prop: string): void; + /** + * edit simple schema fields like title and description + */ + edit(): void; + /** + * can hide if I my parent is an object + */ + canHide(): boolean; + /** + * hide this prop + */ + hide(): void; + /** + * can I go up + */ + canUp(): boolean; + /** + * go up + */ + up(): void; + /** + * can I go down + */ + canDown(): boolean; + /** + * go down + */ + down(): void; +} +//# sourceMappingURL=edit.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/edit.d.ts.map b/dist/dashjoin/json-schema-form/lib/edit.d.ts.map new file mode 100644 index 0000000..7d2bd3d --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/edit.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,qBAAa,IAAI;IAYT,OAAO,CAAC,YAAY;IAAsB,OAAO,CAAC,IAAI;IAAU,OAAO,CAAC,MAAM;IAAU,OAAO,CAAC,MAAM;IACtG,OAAO,CAAC,MAAM;IAXlB;;;;;;;;OAQG;gBAES,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,EAAU,IAAI,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,EACtG,MAAM,EAAE,SAAS;IAG7B;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,OAAO,IAAI,MAAM,EAAE;IA4BnB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM;IAgBnB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAkBtB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM;IAWhB;;OAEG;IACH,IAAI;IAiFJ;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,IAAI;IAsBJ;;OAEG;IACH,KAAK,IAAI,OAAO;IAmBhB;;OAEG;IACH,EAAE;IAwBF;;OAEG;IACH,OAAO,IAAI,OAAO;IAmBlB;;OAEG;IACH,IAAI;CAuBP"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-pointer.d.ts b/dist/dashjoin/json-schema-form/lib/json-pointer.d.ts new file mode 100644 index 0000000..9ec715b --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-pointer.d.ts @@ -0,0 +1,18 @@ +/** + * static JsonPointer implementation + */ +export declare class JsonPointer { + /** + * evaluate the JSON pointer on o + */ + static jsonPointer(o: any, pointer: string): any; + /** + * evaluate the JSON pointer (parsed array of paths) on o + */ + static jsonPointer2(o: any, paths: string[]): any; + /** + * strip leading / and split the JSON pointer + */ + static split(s: string): string[]; +} +//# sourceMappingURL=json-pointer.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-pointer.d.ts.map b/dist/dashjoin/json-schema-form/lib/json-pointer.d.ts.map new file mode 100644 index 0000000..fdef8c6 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-pointer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"json-pointer.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/json-pointer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,WAAW;IAEpB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG;IAIhD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG;IAyBjD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;CAgBpC"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts b/dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts new file mode 100644 index 0000000..8ff563e --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts @@ -0,0 +1,322 @@ +import { OnInit, EventEmitter, SimpleChanges, OnChanges, ComponentFactoryResolver, QueryList } from "@angular/core"; +import { HttpClient } from "@angular/common/http"; +import { Observable, ReplaySubject } from "rxjs"; +import { KeyValue } from "@angular/common"; +import { Schema } from "./schema"; +import { WidgetDirective } from "./widget.directive"; +import { JsonSchemaFormService } from "./json-schema-form.service"; +import { Choice, ChoiceHandler } from "./choice"; +import { FormControl } from "@angular/forms"; +import { MatDialog } from "@angular/material/dialog"; +import { Edit } from "./edit"; +import { MatChipInputEvent } from "@angular/material/chips"; +import { CdkDragDrop } from "@angular/cdk/drag-drop"; +import * as i0 from "@angular/core"; +/** + * generates an input form base on JSON schema and JSON object. + * The component is used recursively. + */ +export declare class JsonSchemaFormComponent implements OnInit, OnChanges { + private http; + private componentFactoryResolver; + service: JsonSchemaFormService; + private dialog; + /** + * component constructor + * @param http http client + * @param componentFactoryResolver allows dynamic components + * @param service application service for registering components etc. + * @param dialog dialog service + */ + constructor(http: HttpClient, componentFactoryResolver: ComponentFactoryResolver, service: JsonSchemaFormService, dialog: MatDialog); + /** + * container children for event propagation + */ + children: QueryList; + /** + * container children for event propagation + */ + child: JsonSchemaFormComponent; + /** + * if an array is displayed, indicates which array index is being hovered over in order to + * display the "-" remove button + */ + hover: number; + /** + * the name of the input field (only set if inside type: object) + */ + name: string; + /** + * the label of the input field + */ + label: string; + /** + * the input value + */ + value: any; + /** + * root form value (can be used in custom components) + */ + rootValue: any; + /** + * emit changes done by the user in the component + */ + valueChange: EventEmitter; + /** + * emit whether this part of the form is valid + */ + errorChange: EventEmitter; + /** + * indicate schema changes done via the layout editor + */ + schemaChange: EventEmitter; + /** + * JSON schema to use + */ + schema: Schema; + /** + * parent schema to edit required + */ + parentSchema: Schema; + /** + * form editor + */ + edit: Edit; + /** + * root JSON schema to use when looking up $ref (simply passed along the tree) + */ + rootSchema: Schema; + /** + * base URL for resolving $ref + */ + base: string; + /** + * indicates whether this is the root of the component tree + */ + isRoot: boolean; + /** + * if present: value of the switch property that determines whether this component renders itself + * (schema.case not present or schema.case === switch) + */ + switch: string; + /** + * indicates to child components whether the parent object has hideUndefined set (i.e. do not render yourself + * if your value is undefined) + */ + hideUndefined: boolean; + /** + * are we already in the expansion panel? + */ + inExpansion: boolean; + /** + * are we already in an array? + */ + inArray: boolean; + /** + * required imported from parent + */ + required: boolean; + /** + * hook for custom widgets + */ + widgetHost: WidgetDirective; + /** + * order field transforms properties into this structure. + * allows omission, ordering and hierarchy + */ + orderedProperties: { + [key: string]: Schema; + }[]; + /** + * make sure to return the same date object instance (cannot delete date #83) + */ + date: Date; + /** + * choices that might be loaded async, initialized with current value and its potentially delayed toString value + */ + choices: ReplaySubject; + /** + * autocomplete filtered choices + */ + filteredOptions: Observable; + /** + * autocomplete form control for simpler change detection + */ + control: FormControl; + /** + * implementation specified in displayWith + */ + ch: ChoiceHandler; + /** + * complete chip entry with enter or comma + */ + readonly separatorKeysCodes: number[]; + /** + * readOnly if schema.readOnly or schema.createOnly and value set + */ + readOnly: boolean; + /** + * error from a custom component + */ + customError: string; + /** + * apply order, called anytime properties are set + */ + setOrderedProperties(): void; + /** + * initialize the comonent. + * replace undefined with null and init autocomplete choices + */ + ngOnInit(): void; + /** + * choice element activated - load values + */ + focus(): void; + /** + * load schema from ref, apply pointer if needed + */ + url(ref: string, pointer: string): void; + /** + * emit valueChange event and also any validation error + */ + emit(event: any): void; + /** + * if the schema changes from the outside, + * reset the component state wrt. errors and the choices cache + */ + ngOnChanges(changes: SimpleChanges): void; + /** + * angular pipe sorting function for keyValue - keep the JSON order and do not + * order alphabetically + */ + originalOrder: (a: KeyValue, b: KeyValue) => number; + /** + * key method to instruct the display which HTML block to activate. + */ + getLayout(): string; + /** + * called from template in the "simple" type. If "type" is "number" or "integer", + * the HTML input type is "number" which avoids normal string input + */ + getInputType(schema: Schema): string; + /** + * event handler for object display. Catches the child component event and + * handle it by setting the value[key]. + * Also init null objects with {} + */ + onValueChange(key: string, value: any): void; + /** + * add an element to an array. + * null arrays are initialized with [] + */ + add(): void; + /** + * event handler for adding a field + */ + addField(): void; + /** + * remove an element from an array + */ + remove(i: number): void; + /** + * remove a field + */ + removeField(key: string): void; + /** + * event handler for changed field names with "additionalProperties" + */ + fieldNameChange(key: string, newvalue: any): void; + /** + * returns the validation error on this level and call recursively for all children. + * returns null if the form contents is valid + */ + recursiveError(): string; + /** + * return the error message provided in the schema or the generic error message + * returned from the validation code + */ + e(error: string): string; + /** + * return error string + */ + error(): string; + /** + * use the element title if present, defaults to the label input or "" is both are null + */ + getLabel(): string; + /** + * input element change handler. + * normalize the different kind of events, handle the datatypes, set the value and emit the change + */ + change(event: any): void; + /** + * allows for the result of a file upload to be written into a text form element + */ + handleFileInput(event: any): void; + /** + * get example values from example array and default + */ + example(): string; + /** + * load the dynamic custom widget + */ + loadComponent(): void; + /** + * used for expansion panels - set value and forward event + */ + setAndEmit(event: any): void; + /** + * set an array element and emit value change event + */ + setIndexAndEmit(i: number, event: any): void; + /** + * set an array element's field and emit value change event (applies to table layout) + */ + setIndexAndEmitTable(i: number, field: string, event: any): void; + /** + * used when hideUndefined is active. Called from the UI to + * show a property with undefined value (in order to be able to set if in the form) + */ + showProperty(prop: string): void; + /** + * used when hideUndefined is active. Called from the UI + * to determine which properties are included in the "to add" list + */ + showPropertyList(): string[]; + /** + * string to date + * @param date date string / number (millisecs since 1970) + * @param format date format + */ + parseDate(date: any, format: string): Date; + /** + * make sure to return the same date object instance (cannot delete date #83) + */ + sameDate(nd: Date): Date; + /** + * date to string + * @param date the date to serialize + * @param format the date format (e.g. dd-MM-yyyy) + * @param type target datatype (allows serializing to millisecs since 1970) + */ + serializeDate(date: Date, format: string, type: string): string; + /** + * find the first non letter character in a date format such as dd/MM/yyyy (returns /) + */ + getDelimiter(format: string): string; + /** + * new chip entered + */ + addChip(event: MatChipInputEvent): void; + /** + * remove a chip + */ + removeChip(v: string): void; + /** + * chips d&d handler + */ + dropChip(event: CdkDragDrop): void; + static ɵfac: i0.ɵɵFactoryDef; + static ɵcmp: i0.ɵɵComponentDefWithMeta; +} +//# sourceMappingURL=json-schema-form.component.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts.map b/dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts.map new file mode 100644 index 0000000..00e5d2c --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-schema-form.component.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"json-schema-form.component.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.component.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts b/dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts new file mode 100644 index 0000000..abe0ba7 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts @@ -0,0 +1,32 @@ +import * as i0 from "@angular/core"; +import * as i1 from "./json-schema-form.component"; +import * as i2 from "./edit-element-dialog.component"; +import * as i3 from "./widget.directive"; +import * as i4 from "@angular/material/card"; +import * as i5 from "@angular/flex-layout"; +import * as i6 from "@angular/material/icon"; +import * as i7 from "@angular/material/tooltip"; +import * as i8 from "@angular/material/table"; +import * as i9 from "@angular/material/tabs"; +import * as i10 from "@angular/material/form-field"; +import * as i11 from "@angular/material/select"; +import * as i12 from "@angular/material/datepicker"; +import * as i13 from "@angular/material/checkbox"; +import * as i14 from "@angular/material/autocomplete"; +import * as i15 from "@angular/common/http"; +import * as i16 from "@angular/common"; +import * as i17 from "@angular/material/input"; +import * as i18 from "@angular/material/core"; +import * as i19 from "@angular/material/button"; +import * as i20 from "@angular/material/expansion"; +import * as i21 from "@angular/material/menu"; +import * as i22 from "@angular/forms"; +import * as i23 from "@angular/material/dialog"; +import * as i24 from "@angular/material/chips"; +import * as i25 from "@angular/cdk/drag-drop"; +export declare class JsonSchemaFormModule { + static ɵfac: i0.ɵɵFactoryDef; + static ɵmod: i0.ɵɵNgModuleDefWithMeta; + static ɵinj: i0.ɵɵInjectorDef; +} +//# sourceMappingURL=json-schema-form.module.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts.map b/dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts.map new file mode 100644 index 0000000..7b85483 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-schema-form.module.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"json-schema-form.module.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,qBAiCa,oBAAoB;iCAApB,oBAAoB;0CAApB,oBAAoB;kCAApB,oBAAoB;CAAI"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts b/dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts new file mode 100644 index 0000000..ddf87c0 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts @@ -0,0 +1,47 @@ +import { Type } from '@angular/core'; +import { ChoiceHandler } from './choice'; +import * as i0 from "@angular/core"; +/** + * service for registering custom components + */ +export declare class JsonSchemaFormService { + /** + * layout editor mode + */ + editMode: boolean; + /** + * built-in formats + */ + formats: { + email: RegExp; + ipv4: RegExp; + url: RegExp; + uri: RegExp; + }; + /** + * registry of custom widgets. The keys are the values used in schema.widgetType, the values + * are the Type of the custom widget component implementing WidgetComponent + */ + registry: {}; + /** + * registry of displayWith objects + */ + displayWithRegistry: { + [key: string]: ChoiceHandler; + }; + /** + * register custom component + * @param key the name of the component which is used in schema extension: widget=custom, widgetType=key + * @param value the implementation class + */ + registerComponent(key: string, value: Type): void; + /** + * register displayWith implementations + * @param key the name of the implementation which is used in schema extension: displayWith=key + * @param value the implementation class + */ + registerDisplayWith(key: string, value: ChoiceHandler): void; + static ɵfac: i0.ɵɵFactoryDef; + static ɵprov: i0.ɵɵInjectableDef; +} +//# sourceMappingURL=json-schema-form.service.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts.map b/dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts.map new file mode 100644 index 0000000..2bfc1e7 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/json-schema-form.service.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"json-schema-form.service.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/json-schema-form.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,IAAI,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;;AAEzC;;GAEG;AACH,qBAGa,qBAAqB;IAEhC;;OAEG;IACI,QAAQ,UAAS;IAExB;;OAEG;IACH,OAAO;;;;;MAKL;IAEF;;;OAGG;IACH,QAAQ,KAAM;IAEd;;OAEG;IACH,mBAAmB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAM;IAE3D;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;IAI/C;;;;OAIG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa;iCA1C1C,qBAAqB;qCAArB,qBAAqB;CA6CjC"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/schema.d.ts b/dist/dashjoin/json-schema-form/lib/schema.d.ts new file mode 100644 index 0000000..7fc24ba --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/schema.d.ts @@ -0,0 +1,261 @@ +/** + * simplified version of the JSON Meta Schema. + * This includes the optional definition keywords that instruct the + * form editor as to which input widgets are to be used and as to + * how the widget layout is to be performed + */ +export interface Schema { + /** + * schema property type + */ + type?: 'boolean' | 'string' | 'array' | 'number' | 'integer' | 'object'; + /** + * schema property reference + */ + '$ref'?: string; + /** + * referenced schemas can be embedded here, this key must be schema.$id + */ + referenced?: { + [key: string]: any; + }; + /** + * fixed property value range. + * if set, the editor uses a select element + */ + enum?: string[]; + /** + * indicates that the property is required (i.e. must be non null) + * https://json-schema.org/understanding-json-schema/reference/object.html#required + */ + required?: string[]; + /** + * string pattern + * https://json-schema.org/understanding-json-schema/reference/regular_expressions.html + */ + pattern?: string; + /** + * choose a pattern based on pre-defined identifiers such as email etc. + */ + format?: string; + /** + * Pattern to parse and serialize date strings. Bases on https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html + * but supports only year (yyyy), month (MM), and day (dd), Only applies to "widget: date" + */ + dateFormat?: string; + /** + * input must be multiple of x + */ + multipleOf?: number; + /** + * number < > <= >= + */ + maximum?: number; + /** + * number < > <= >= + */ + minimum?: number; + /** + * number < > <= >= + */ + exclusiveMaximum?: number; + /** + * number < > <= >= + */ + exclusiveMinimum?: number; + /** + * string must be shorter / longer than x + */ + maxLength?: number; + /** + * string must be shorter / longer than x + */ + minLength?: number; + /** + * restrict array length + */ + maxItems?: number; + /** + * restrict array length + */ + minItems?: number; + /** + * makes sure array items are unique + */ + uniqueItems?: boolean; + /** + * restrict object number of properties + */ + maxProperties?: number; + /** + * restrict object number of properties + */ + minProperties?: number; + /** + * field names must match this regular expression + */ + propertyNames?: string; + /** + * dependencies allows specifying a map of field names to the fields they depend on: + * "dependencies": {"credit_card": ["billing_address"]} states that a credit card + * can only be present if the billing address is present + */ + dependencies?: { + [key: string]: string[]; + }; + /** + * additional properties (with unknown name) have the following schema + */ + additionalProperties?: Schema; + /** + * field title + * https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.1 + */ + title?: string; + /** + * field description + * https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.1 + */ + description?: string; + /** + * https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5 + */ + examples?: string[]; + /** + * https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.2 + */ + default?: any; + /** + * https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.4 + */ + readOnly?: boolean; + /** + * like readonly but allows setting a value initially + */ + createOnly?: boolean; + /** + * defines types that can be ref'ed + */ + definitions?: { + [key: string]: Schema; + }; + /** + * defines the array element structure if type = array + */ + items?: Schema; + /** + * defines properties if type = object + */ + properties?: { + [key: string]: Schema; + }; + /** + * defines this property to be a URI. On the UI it will be displayed as a string. + * For instance, the implementation might decide to use the labelService to display nice names on the UI + */ + uri?: boolean; + /** + * defines which input widget is used for data display and entry. + * The implementation uses a mix of HTML input properties + * (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input) + * and native angular widgets such as https://material.angular.io/components/datepicker/overview + */ + widget?: 'select' | 'upload' | 'date' | 'textarea' | 'password' | 'color' | 'datetime-local' | 'email' | 'month' | 'tel' | 'time' | 'url' | 'week' | 'custom'; + /** + * if widget=custom, this fields indicates which entry from the widget registry is to be used + */ + widgetType?: string; + /** + * style applied to form element + */ + style?: any; + /** + * class applied to form element + */ + class?: string[]; + /** + * used in case the select / autocomplete options are gathered from a REST service URL. + * defines the REST service URL. + */ + choicesUrl?: string; + /** + * used in case the select / autocomplete options are gathered from a REST service URL. + * defines the HTTP verb to use for the REST service URL. The default is POST. + */ + choicesVerb?: string; + /** + * used in case the select / autocomplete options are gathered from a REST service URL. + * defines the REST service parameter. The convention is to have a single parameter. + * Multiple fields need to be wrapped into a single object + */ + choicesUrlArgs?: any; + /** + * used in case the select / autocomplete options are defined statically + */ + choices?: (string | number)[]; + /** + * name of the displayWith function + */ + displayWith?: string; + /** + * alternative to displayWith in case we have static options + */ + displayWithChoices?: string[]; + /** + * used in case the select / autocomplete options are gathered from a REST service URL. + * used to transform the REST result into a string array or an array of objects with name and value fields + */ + jsonata?: string; + /** + * input control layout: + * + * horizontal (default): input controls are arranged horizontally and flex-wrap if there is insufficient space + * vertical: input controls are arranged vertically + * tab: controls are shown in tabs (only applies to arrays) + * table: controls are shown in a table with the property names being the column names (only applies to an array of objects) + * select: array is shown as a multi-select (only applies to arrays of string) + */ + layout?: 'tab' | 'table' | 'vertical' | 'horizontal' | 'select' | 'chips'; + /** + * defines order, omission, and 2-level hierarchy (via nested lists) of the object properties. + * The top level layout is defined as either horizontal or vertical, sublists use the opposite direction + */ + order?: (string | string[])[]; + /** + * simplified version of conditionals (https://json-schema.org/draft/2019-09/json-schema-core.html#rfc.section.9.2.2). + * works in conjunction with 'case'. switch marks a property whose value determines whether other properties + * are shown or not + */ + switch?: string; + /** + * show the property if the switch property's value is one of case's values + */ + case?: string[]; + /** + * indicates whether the component should be located in an expansion panel + */ + expanded?: boolean; + /** + * hide undefined properties in object layouts + */ + hideUndefined?: boolean; + /** + * allows defining computed properties that are set when the value changes + */ + computed?: { + [key: string]: any; + }; + /** + * allows customizing the validation error message + */ + errorMessage?: string; + /** + * if true, indicates not to show form editor elements + */ + static?: boolean; + /** + * allows specifying the json schema version + */ + $schema?: string; +} +//# sourceMappingURL=schema.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/schema.d.ts.map b/dist/dashjoin/json-schema-form/lib/schema.d.ts.map new file mode 100644 index 0000000..5f84590 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/schema.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/schema.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/widget.component.d.ts b/dist/dashjoin/json-schema-form/lib/widget.component.d.ts new file mode 100644 index 0000000..f561ad4 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/widget.component.d.ts @@ -0,0 +1,36 @@ +import { EventEmitter } from '@angular/core'; +import { Schema } from './schema'; +/** + * interface that must be implemented by all custom components + */ +export interface WidgetComponent { + /** + * the name of the input field + */ + label: string; + /** + * the input value + */ + value: any; + /** + * root form value (can be used in custom components) + */ + rootValue: any; + /** + * JSON schema to use + */ + schema: Schema; + /** + * root JSON schema to use when looking up $ref (simply passed along the tree) + */ + rootSchema: Schema; + /** + * emit changes done by the user in the component + */ + valueChange: EventEmitter; + /** + * emit validation errors + */ + errorChange: EventEmitter; +} +//# sourceMappingURL=widget.component.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/widget.component.d.ts.map b/dist/dashjoin/json-schema-form/lib/widget.component.d.ts.map new file mode 100644 index 0000000..4ebd0b9 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/widget.component.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"widget.component.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/widget.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,eAAe;IAE5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAE/B;;OAEG;IACH,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CACrC"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/widget.directive.d.ts b/dist/dashjoin/json-schema-form/lib/widget.directive.d.ts new file mode 100644 index 0000000..8d93931 --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/widget.directive.d.ts @@ -0,0 +1,16 @@ +import { ViewContainerRef } from '@angular/core'; +import * as i0 from "@angular/core"; +/** + * directive for dynamically loading custom widgets + */ +export declare class WidgetDirective { + viewContainerRef: ViewContainerRef; + /** + * allow caller to dynamically insert custom component + * @param viewContainerRef dynamic component handle + */ + constructor(viewContainerRef: ViewContainerRef); + static ɵfac: i0.ɵɵFactoryDef; + static ɵdir: i0.ɵɵDirectiveDefWithMeta; +} +//# sourceMappingURL=widget.directive.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/lib/widget.directive.d.ts.map b/dist/dashjoin/json-schema-form/lib/widget.directive.d.ts.map new file mode 100644 index 0000000..4c3d59d --- /dev/null +++ b/dist/dashjoin/json-schema-form/lib/widget.directive.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"widget.directive.d.ts","sourceRoot":"","sources":["../../../../projects/dashjoin/json-schema-form/src/lib/widget.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,MAAM,eAAe,CAAC;;AAE5D;;GAEG;AACH,qBAGa,eAAe;IAML,gBAAgB,EAAE,gBAAgB;IAJrD;;;OAGG;gBACgB,gBAAgB,EAAE,gBAAgB;iCAN5C,eAAe;2CAAf,eAAe;CAO3B"} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/package.json b/dist/dashjoin/json-schema-form/package.json new file mode 100644 index 0000000..584bccc --- /dev/null +++ b/dist/dashjoin/json-schema-form/package.json @@ -0,0 +1,38 @@ +{ + "name": "@dashjoin/json-schema-form", + "version": "0.8.1", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git+https://github.com/dashjoin/json-schema-form" + }, + "bugs": { + "url": "https://github.com/dashjoin/json-schema-form/issues" + }, + "keywords": [ + "json-schema", + "angular", + "angular2", + "form-builder", + "autocomplete", + "json pointer" + ], + "peerDependencies": { + "@angular/common": "~11.2.12", + "@angular/core": "~11.2.12", + "jsonata": "^1.8.4" + }, + "dependencies": { + "tslib": "^2.0.0" + }, + "sideEffects": true, + "main": "bundles/dashjoin-json-schema-form.umd.js", + "module": "fesm2015/dashjoin-json-schema-form.js", + "es2015": "fesm2015/dashjoin-json-schema-form.js", + "esm2015": "esm2015/dashjoin-json-schema-form.js", + "fesm2015": "fesm2015/dashjoin-json-schema-form.js", + "typings": "dashjoin-json-schema-form.d.ts", + "scripts": { + "prepublishOnly": "node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by Ivy. This is not allowed.\\nPlease delete and rebuild the package, without compiling with Ivy, before attempting to publish.\\n')\" && exit 1" + } +} \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/public-api.d.ts b/dist/dashjoin/json-schema-form/public-api.d.ts new file mode 100644 index 0000000..c0bb71d --- /dev/null +++ b/dist/dashjoin/json-schema-form/public-api.d.ts @@ -0,0 +1,7 @@ +export * from './lib/json-schema-form.service'; +export * from './lib/json-schema-form.component'; +export * from './lib/json-schema-form.module'; +export * from './lib/schema'; +export * from './lib/widget.component'; +export * from './lib/choice'; +//# sourceMappingURL=public-api.d.ts.map \ No newline at end of file diff --git a/dist/dashjoin/json-schema-form/public-api.d.ts.map b/dist/dashjoin/json-schema-form/public-api.d.ts.map new file mode 100644 index 0000000..23a18ed --- /dev/null +++ b/dist/dashjoin/json-schema-form/public-api.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../projects/dashjoin/json-schema-form/src/public-api.ts"],"names":[],"mappings":"AAGA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC"} \ No newline at end of file