@stemy/ngx-dynamic-form 12.0.1 → 12.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/stemy-ngx-dynamic-form.umd.js +98 -81
- package/bundles/stemy-ngx-dynamic-form.umd.js.map +1 -1
- package/esm2015/ngx-dynamic-form/common-types.js +24 -8
- package/esm2015/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.js +13 -4
- package/esm2015/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.js +6 -13
- package/esm2015/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.js +9 -2
- package/esm2015/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.js +3 -10
- package/esm2015/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.js +12 -3
- package/esm2015/ngx-dynamic-form/directives/dynamic-form-group.directive.js +1 -3
- package/esm2015/public_api.js +3 -2
- package/esm2015/stemy-ngx-dynamic-form.js +1 -2
- package/fesm2015/stemy-ngx-dynamic-form.js +90 -66
- package/fesm2015/stemy-ngx-dynamic-form.js.map +1 -1
- package/ngx-dynamic-form/common-types.d.ts +14 -7
- package/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.d.ts +1 -4
- package/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.d.ts +3 -2
- package/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.d.ts +0 -3
- package/ngx-dynamic-form/directives/dynamic-form-group.directive.d.ts +1 -2
- package/package.json +1 -1
- package/public_api.d.ts +2 -1
- package/stemy-ngx-dynamic-form.d.ts +0 -1
- package/stemy-ngx-dynamic-form.metadata.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stemy-ngx-dynamic-form.js","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/services/form-utilities.ts","../../src/ngx-dynamic-form/services/open-api.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-control.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-template.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-form-base.component.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.ts","../../src/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.ts","../../src/ngx-dynamic-form/directives/dynamic-form-group.directive.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import { ChangeDetectorRef, EventEmitter, HostBinding, InjectionToken, Injector, TemplateRef, Type, ValueProvider, Directive } from \"@angular/core\";\r\nimport {AbstractControl, FormControl, FormGroup, ValidationErrors} from \"@angular/forms\";\r\nimport {\r\n IResolveFactory,\r\n ITimer,\r\n IAsyncMessage,\r\n ObjectUtils,\r\n ReflectUtils,\r\n TimerUtils,\r\n UniqueUtils,\r\n IRequestOptions\r\n} from \"@stemy/ngx-utils\";\r\n\r\nexport const FORM_GROUP_TYPE: InjectionToken<Type<IFormControlComponent>> = new InjectionToken<Type<IFormControlComponent>>(\"form-group-provider\");\r\nexport const FORM_CONTROL_PROVIDER: InjectionToken<IFormControlProvider> = new InjectionToken<IFormControlProvider>(\"form-control-provider\");\r\n\r\n// --- Basic form control interfaces ---\r\nexport interface IFormControlComponent {\r\n control: IDynamicFormControl;\r\n}\r\n\r\nexport interface IFormGroupComponent {\r\n form: IDynamicForm;\r\n control: IDynamicFormControl;\r\n}\r\n\r\n@Directive()\r\nexport abstract class FormControlComponent<T extends IFormControlData> implements IFormControlComponent {\r\n\r\n control: IDynamicFormControl;\r\n\r\n get form(): IDynamicFormBase {\r\n return !this.control ? null: this.control.form;\r\n }\r\n\r\n get data(): T {\r\n return <T>(!this.control ? {} : this.control.data);\r\n }\r\n\r\n get value(): any {\r\n return !this.control ? null : this.control.value;\r\n }\r\n\r\n get meta(): any {\r\n return !this.control ? null : this.control.meta;\r\n }\r\n\r\n get testId(): string {\r\n const prefix = this.form?.testId || \"form\";\r\n return `${prefix}-${this.control?.id || \"ctrl\"}`;\r\n }\r\n\r\n @HostBinding(\"class.form-input\")\r\n get inputClass(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport type IFormControlProviderAcceptor = (control: IDynamicFormControl) => boolean;\r\nexport type IFormControlProviderLoader = (control: IDynamicFormControl) => Promise<any>;\r\nexport type IFormControlOptions = (control: IDynamicFormControl) => Promise<IFormControlOption[]>;\r\nexport type IFormControlSerializer = (id: string, parent: IDynamicFormControl) => Promise<any>;\r\n\r\nexport interface IFormControlProvider {\r\n component: Type<IFormControlComponent>;\r\n priority: number;\r\n acceptor: IFormControlProviderAcceptor;\r\n loader: IFormControlProviderLoader;\r\n}\r\n\r\nexport interface IFormSerializer {\r\n id: string;\r\n func: IFormControlSerializer;\r\n}\r\n\r\nexport interface IFormSerializers {\r\n [id: string]: IFormControlSerializer | IResolveFactory | null\r\n}\r\n\r\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\r\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\r\n\r\nexport interface IDynamicFormControl {\r\n id: string;\r\n type: string;\r\n data: IFormControlData;\r\n visible: boolean;\r\n meta: any;\r\n form: IDynamicFormBase;\r\n injector: Injector;\r\n label: string;\r\n provider: IFormControlProvider;\r\n model: any;\r\n formId: string;\r\n\r\n errors: ValidationErrors;\r\n value: any;\r\n touched: boolean;\r\n disabled: boolean;\r\n updateOn: DynamicFormUpdateOn;\r\n\r\n setValue(value: any): void;\r\n\r\n getData<T extends IFormControlData>(): T;\r\n getControl(id: string): IDynamicFormControl;\r\n load(): Promise<any>;\r\n check(): Promise<any>;\r\n shouldSerialize(): Promise<boolean>;\r\n shouldValidate(): Promise<boolean>;\r\n serialize(): Promise<any>;\r\n onFocus(): void;\r\n onBlur(): void;\r\n showErrors(): void;\r\n}\r\n\r\nfunction createValidator(control: IDynamicFormControl): (control: AbstractControl) => Promise<ValidationErrors> {\r\n const data = control.data || {};\r\n const validators = [data.validator].concat(data.validators || []).filter(ObjectUtils.isDefined).map(v => {\r\n return ReflectUtils.resolve<FormControlValidator>(v, control.injector);\r\n });\r\n return (ctrl: any) => new Promise<ValidationErrors>((resolve) => {\r\n const control = <IDynamicFormControl>ctrl;\r\n control.shouldValidate().then(should => {\r\n if (!should) {\r\n resolve(null);\r\n return;\r\n }\r\n const validate = validators.map(v => v(control));\r\n const metaValidator = control.meta.validator;\r\n if (ObjectUtils.isFunction(metaValidator)) {\r\n validate.push(metaValidator(control));\r\n }\r\n Promise.all(validate).then(results => {\r\n results = results.filter(error => ObjectUtils.isObject(error) || ObjectUtils.isString(error));\r\n let result: ValidationErrors = null;\r\n if (results.length > 0) {\r\n result = {};\r\n results.forEach(error => {\r\n if (ObjectUtils.isString(error)) {\r\n result[error] = {};\r\n return;\r\n }\r\n result = Object.assign(result, error);\r\n });\r\n }\r\n resolve(result);\r\n });\r\n });\r\n });\r\n}\r\n\r\nclass DynamicFormControlHelper {\r\n\r\n get id(): string {\r\n return !this.control ? null : this.control.id;\r\n }\r\n\r\n get type(): string {\r\n return !this.control ? \"\" : this.control.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return !this.control ? this.dummyData : this.control.data || this.dummyData;\r\n }\r\n\r\n get visible(): boolean {\r\n return !this.hidden;\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.ctrlProvider;\r\n }\r\n\r\n public readonly formId: string;\r\n public readonly meta: any;\r\n\r\n private hidden: boolean;\r\n private ctrlProvider: IFormControlProvider;\r\n private readonly dummyData: IFormControlData;\r\n private readonly readonlyTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly hideTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly serializeTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly validateTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n\r\n constructor(private form: IDynamicFormBase, private control: IFormControl = null) {\r\n this.formId = UniqueUtils.uuid();\r\n this.meta = {};\r\n this.hidden = false;\r\n this.dummyData = {};\r\n this.readonlyTester = this.createTester(\"readonly\");\r\n this.hideTester = this.createTester(\"hidden\");\r\n this.serializeTester = this.createTester(\"shouldSerialize\", (control: IDynamicFormControl) => {\r\n return Promise.resolve(control.visible);\r\n });\r\n this.validateTester = this.createTester(\"shouldValidate\", (control: IDynamicFormControl) => {\r\n return Promise.resolve(control.visible);\r\n });\r\n }\r\n\r\n load(control: IDynamicFormControl): Promise<any> {\r\n return !this.ctrlProvider ? Promise.resolve(null) : this.ctrlProvider.loader(control);\r\n }\r\n\r\n check(control: IDynamicFormControl): Promise<boolean> {\r\n return new Promise<any>(resolve => {\r\n this.hideTester(control).then(hide => {\r\n this.hidden = hide;\r\n this.readonlyTester(control).then(readonly => {\r\n resolve(control.form.readonly || readonly);\r\n });\r\n });\r\n });\r\n }\r\n\r\n shouldSerialize(control: IDynamicFormControl): Promise<boolean> {\r\n return this.serializeTester(control);\r\n }\r\n\r\n shouldValidate(control: IDynamicFormControl): Promise<boolean> {\r\n return this.validateTester(control);\r\n }\r\n\r\n findProvider(control: IDynamicFormControl): void {\r\n this.ctrlProvider = !this.control || !this.control.type ? null : this.form.findProvider(control);\r\n }\r\n\r\n private createTester(test: string, defaultFunc: FormControlTester = null): (control: IDynamicFormControl) => Promise<boolean> {\r\n const tester: FormControlTester = this.data[test]\r\n ? ReflectUtils.resolve<FormControlTester>(this.data[test], this.form.injector)\r\n : (defaultFunc || (() => Promise.resolve(false)));\r\n return (control: IDynamicFormControl): Promise<boolean> => tester(control);\r\n }\r\n}\r\n\r\nexport class DynamicFormGroup extends FormGroup implements IDynamicFormControl {\r\n\r\n get id(): string {\r\n return this.helper.id;\r\n }\r\n\r\n get type(): string {\r\n return this.helper.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return this.helper.data;\r\n }\r\n\r\n get visible(): boolean {\r\n return this.helper.visible;\r\n }\r\n\r\n get meta(): any {\r\n return this.helper.meta;\r\n }\r\n\r\n get injector(): Injector {\r\n return this.form.injector;\r\n }\r\n\r\n get label(): string {\r\n return this.data.label !== \"\" ? `${this.prefix}${this.data.label}` : \"\";\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.helper.provider;\r\n }\r\n\r\n get model(): any {\r\n return this.mModel;\r\n }\r\n\r\n get formId(): string {\r\n return this.helper.formId;\r\n }\r\n\r\n get formControls(): IDynamicFormControl[] {\r\n return this.mControls || [];\r\n }\r\n\r\n get formFields(): IDynamicFormFieldSets {\r\n return this.mFieldSets || {};\r\n }\r\n\r\n get prefix(): string {\r\n return !this.name ? \"\" : `${this.name}.`;\r\n }\r\n\r\n get name(): string {\r\n return this.mName;\r\n }\r\n\r\n get state(): DynamicFormState {\r\n return <DynamicFormState>(this.loading ? \"LOADING\" : this.status);\r\n }\r\n\r\n private helper: DynamicFormControlHelper;\r\n private mName: string;\r\n private mModel: any;\r\n private mControls: IDynamicFormControl[];\r\n private mSerializers: IFormSerializer[];\r\n private mFieldSets: IDynamicFormFieldSets;\r\n private initialized: boolean;\r\n private loading: boolean;\r\n private changeTimer: ITimer;\r\n\r\n private static createFormControls(group: DynamicFormGroup, controls: IFormControl[]): IDynamicFormControl[] {\r\n if (!controls && ObjectUtils.isObject(group.model)) {\r\n const props = Object.keys(group.model);\r\n controls = props.map(id => {\r\n return getFormControl(group.model, id);\r\n }).filter(ObjectUtils.isDefined);\r\n }\r\n if (!controls) return [];\r\n return controls.map(ctrl => {\r\n if (ctrl.type == \"model\") {\r\n const subGroup = new DynamicFormGroup(group.form, ctrl);\r\n const model = group.model[ctrl.id] || {};\r\n const data = subGroup.getData<IFormModelData>();\r\n data.name = data.name || group.name;\r\n subGroup.setup(model, data);\r\n group.model[ctrl.id] = model;\r\n group.addControl(subGroup.id, subGroup);\r\n return subGroup;\r\n }\r\n return new DynamicFormControl(ctrl, group);\r\n });\r\n }\r\n\r\n private static createFormSerializers(group: DynamicFormGroup, serializers: IFormSerializers): IFormSerializer[] {\r\n if (!serializers && ObjectUtils.isObject(group.model)) {\r\n const props = Object.keys(group.model);\r\n serializers = props.reduce((result, id) => {\r\n const serializer = getFormSerializer(group.model, id);\r\n if (!serializer) return result;\r\n result[id] = serializer;\r\n return result;\r\n }, {});\r\n }\r\n if (!serializers) return [];\r\n return Object.keys(serializers).map(id => {\r\n const serializer = serializers[id] || defaultSerializer;\r\n return !serializer ? null : {\r\n id: id,\r\n func: ReflectUtils.resolve<IFormControlSerializer>(serializer, group.injector)\r\n };\r\n });\r\n }\r\n\r\n constructor(public readonly form: IDynamicFormBase, control: IFormControl = null) {\r\n super({}, {updateOn: ((!control || !control.data) ? null : control.data.updateOn) || form.updateOn || \"blur\"});\r\n this.mName = \"\";\r\n this.mModel = {};\r\n this.mControls = [];\r\n this.mSerializers = [];\r\n this.mFieldSets = {};\r\n this.helper = new DynamicFormControlHelper(form, control);\r\n this.helper.findProvider(this);\r\n this.initialized = false;\r\n this.loading = false;\r\n this.changeTimer = TimerUtils.createTimeout();\r\n this.statusChanges.subscribe(() => {\r\n const root = this.form.root;\r\n root.onStatusChange.emit(root);\r\n });\r\n this.setAsyncValidators(createValidator(this));\r\n }\r\n\r\n getData<T extends IFormControlData>(): T {\r\n return <T>this.data;\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return <any>this.get(id);\r\n }\r\n\r\n load(): Promise<any> {\r\n const promises = this.mControls.map(c => c.load());\r\n promises.push(this.helper.load(this));\r\n return Promise.all(promises);\r\n }\r\n\r\n check(): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n this.helper.check(this).then(readonly => {\r\n if (readonly) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\r\n const promises = this.mControls.map(c => c.check());\r\n Promise.all(promises).then(resolve);\r\n })\r\n });\r\n }\r\n\r\n shouldSerialize(): Promise<boolean> {\r\n return this.helper.shouldSerialize(this);\r\n }\r\n\r\n shouldValidate(): Promise<boolean> {\r\n return this.helper.shouldValidate(this);\r\n }\r\n\r\n serialize(): Promise<any> {\r\n return new Promise<any>((resolve) => {\r\n const result = {};\r\n const serializers = this.mSerializers.map(s => {\r\n return new Promise<any>(resolve => {\r\n s.func(s.id, this).then(res => {\r\n const ctrl = this.getControl(s.id);\r\n const promise = !ctrl ? Promise.resolve(true) : ctrl.shouldSerialize();\r\n promise.then(should => {\r\n if (should) result[s.id] = res;\r\n resolve(null);\r\n });\r\n });\r\n });\r\n });\r\n Promise.all(serializers).then(() => resolve(result));\r\n });\r\n }\r\n\r\n onFocus(): void {\r\n this.markAsUntouched({onlySelf: true});\r\n }\r\n\r\n onBlur(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n\r\n showErrors(): void {\r\n this.markAsTouched({onlySelf: true});\r\n this.mControls.forEach(ctrl => ctrl.showErrors());\r\n }\r\n\r\n reloadControls(): Promise<any> {\r\n let callback = () => {};\r\n if (this.initialized === false) {\r\n this.initialized = true;\r\n this.loading = true;\r\n callback = () => {\r\n this.loading = false;\r\n // this.cdr.detectChanges();\r\n const root = this.form.root;\r\n root.onInit.emit(root);\r\n root.onStatusChange.emit(root);\r\n // https://github.com/angular/angular/issues/14542\r\n const statusTimer = TimerUtils.createInterval();\r\n statusTimer.set(() => {\r\n if (this.status == \"PENDING\") return;\r\n statusTimer.clear();\r\n root.onStatusChange.emit(root);\r\n }, 50);\r\n setTimeout(statusTimer.clear, 5000);\r\n };\r\n }\r\n const promise = new Promise<any>(resolve => {\r\n this.load().then(() => this.check().then(resolve));\r\n });\r\n promise.then(callback, callback);\r\n return promise;\r\n }\r\n\r\n setup(model: any, info: IDynamicFormInfo): void {\r\n this.mName = info.name || \"\";\r\n this.mModel = model;\r\n this.mControls.forEach(ctrl => this.removeControl(ctrl.id));\r\n this.mControls = DynamicFormGroup.createFormControls(this, info.controls);\r\n this.mControls.forEach((ctrl: any) => this.addControl(ctrl.id, ctrl));\r\n this.mSerializers = DynamicFormGroup.createFormSerializers(this, info.serializers);\r\n this.mFieldSets = info.fieldSets ? info.fieldSets.reduce((result, fs) => {\r\n result[fs.id] = fs;\r\n return result;\r\n }, {}) : getFormFieldSets(Object.getPrototypeOf(model).constructor);\r\n }\r\n\r\n updateModel(control: IDynamicFormControl): void {\r\n this.model[control.id] = control.value;\r\n this.changeTimer.clear();\r\n this.changeTimer.set(() => {\r\n this.check().then(() => this.reloadControlsFrom(control, new Set<IDynamicFormControl>()).then(() => {\r\n this.form.root.onChange.emit(control);\r\n }));\r\n }, 250);\r\n }\r\n\r\n private reloadControlsFrom(control: IDynamicFormControl, controls?: Set<IDynamicFormControl>): Promise<any> {\r\n const data = control.data;\r\n if (!data || !data.reload) return Promise.resolve(null);\r\n const reload = ObjectUtils.isArray(data.reload) ? data.reload : [data.reload];\r\n return Promise.all(reload.map(id => {\r\n const nextControl = this.getControl(id);\r\n if (!nextControl || controls.has(nextControl)) return Promise.resolve(null);\r\n controls.add(nextControl);\r\n return new Promise<any>(resolve => {\r\n nextControl.load().then(() => {\r\n this.reloadControlsFrom(nextControl, controls).then(resolve);\r\n });\r\n })\r\n }))\r\n }\r\n}\r\n\r\nexport class DynamicFormControl extends FormControl implements IDynamicFormControl {\r\n\r\n get id(): string {\r\n return this.helper.id;\r\n }\r\n\r\n get type(): string {\r\n return this.helper.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return this.helper.data;\r\n }\r\n\r\n get visible(): boolean {\r\n return this.helper.visible;\r\n }\r\n\r\n get meta(): any {\r\n return this.helper.meta;\r\n }\r\n\r\n get form(): IDynamicFormBase {\r\n return this.group.form;\r\n }\r\n\r\n get injector(): Injector {\r\n return this.form.injector;\r\n }\r\n\r\n get label(): string {\r\n return this.data.label !== \"\" ? `${this.group.prefix}${this.data.label}` : \"\";\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.helper.provider;\r\n }\r\n\r\n get model(): any {\r\n return this.group.model;\r\n }\r\n\r\n get formId(): string {\r\n return this.helper.formId;\r\n }\r\n\r\n private helper: DynamicFormControlHelper;\r\n\r\n constructor(private control: IFormControl, public readonly group: DynamicFormGroup) {\r\n super(group.model[control.id], {updateOn: control.data.updateOn || group.updateOn});\r\n this.group.addControl(control.id, this);\r\n this.helper = new DynamicFormControlHelper(this.form, control);\r\n this.helper.findProvider(this);\r\n this.valueChanges.subscribe(() => this.group.updateModel(this));\r\n this.setAsyncValidators(createValidator(this));\r\n }\r\n\r\n getData<T extends IFormControlData>(): T {\r\n return <T>this.data;\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return null;\r\n }\r\n\r\n load(): Promise<any> {\r\n return this.helper.load(this);\r\n }\r\n\r\n check(): Promise<any> {\r\n const check = this.helper.check(this);\r\n check.then(readonly => {\r\n if (readonly || this.group.disabled) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\r\n });\r\n return check;\r\n }\r\n\r\n shouldSerialize(): Promise<boolean> {\r\n return this.helper.shouldSerialize(this);\r\n }\r\n\r\n shouldValidate(): Promise<boolean> {\r\n return this.helper.shouldValidate(this);\r\n }\r\n\r\n serialize(): Promise<any> {\r\n return Promise.resolve(this.value);\r\n }\r\n\r\n onFocus(): void {\r\n this.markAsUntouched({onlySelf: true});\r\n }\r\n\r\n onBlur(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n\r\n showErrors(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n}\r\n\r\nexport interface IFormControl {\r\n id: string;\r\n type: string;\r\n visible?: boolean;\r\n data?: IFormControlData;\r\n}\r\n\r\nexport interface IFormControlData {\r\n label?: string;\r\n labelAlign?: string;\r\n fieldSet?: string;\r\n classes?: string;\r\n readonly?: FormControlTesterFactory;\r\n hidden?: FormControlTesterFactory;\r\n shouldSerialize?: FormControlTesterFactory;\r\n shouldValidate?: FormControlTesterFactory;\r\n validator?: FormControlValidatorFactory;\r\n validators?: FormControlValidatorFactory[];\r\n updateOn?: DynamicFormUpdateOn;\r\n reload?: string | string[];\r\n}\r\n\r\nexport interface IFormInputData extends IFormControlData {\r\n type?: string;\r\n autocomplete?: string;\r\n placeholder?: string;\r\n useLanguage?: boolean;\r\n step?: number;\r\n min?: number;\r\n max?: number;\r\n}\r\n\r\nexport interface IFormSelectData extends IFormControlData {\r\n options?: IFormControlOptions | IResolveFactory;\r\n emptyOption?: boolean;\r\n type?: string;\r\n multi?: boolean;\r\n}\r\n\r\nexport interface IFormStaticData extends IFormControlData {\r\n properties?: string[];\r\n style?: string;\r\n}\r\n\r\nexport interface IFormFileData extends IFormControlData {\r\n accept?: string;\r\n multi?: boolean;\r\n baseUrl?: string;\r\n asFile?: boolean;\r\n asDataUrl?: boolean;\r\n uploadUrl?: string;\r\n uploadOptions?: IRequestOptions;\r\n createUploadData?: (file: File) => any;\r\n}\r\n\r\nexport interface IFormModelData extends IFormControlData, IDynamicFormInfo {\r\n\r\n}\r\n\r\nexport interface IFormFieldSet {\r\n id: string;\r\n classes?: string;\r\n title?: string;\r\n titleClasses?: string;\r\n setClasses?: string;\r\n controlClasses?: string;\r\n}\r\n\r\nexport interface IFormControlOption {\r\n id: any;\r\n label: string;\r\n selectable?: boolean;\r\n}\r\n\r\n// --- Basic form interfaces ---\r\n\r\nexport interface IDynamicFormTemplates {\r\n [id: string]: TemplateRef<any>;\r\n}\r\n\r\nexport interface IDynamicFormConfig {\r\n path?: string | number | Array<string | number>;\r\n name?: string;\r\n testId?: string;\r\n classes?: string;\r\n formClasses?: string;\r\n innerFormClasses?: string;\r\n id: string;\r\n}\r\n\r\nexport interface IDynamicSingleFormConfig extends IDynamicFormConfig, IDynamicFormInfo {\r\n data: any;\r\n controlData?: IFormControlData;\r\n multi?: false;\r\n}\r\n\r\nexport interface IDynamicMultiFormConfig extends IDynamicFormConfig {\r\n data: IDynamicFormsConfigs;\r\n multi: true;\r\n}\r\n\r\nexport type IDynamicFormsConfigs = Array<IDynamicSingleFormConfig | IDynamicMultiFormConfig>;\r\n\r\nexport interface IDynamicFormBase {\r\n\r\n name?: string;\r\n testId?: string;\r\n readonly?: boolean;\r\n updateOn?: \"change\" | \"blur\" | \"submit\";\r\n classes: string;\r\n parent: IDynamicFormBase;\r\n\r\n wrapperTemplate: TemplateRef<any>;\r\n fieldSetTemplate: TemplateRef<any>;\r\n controlTemplate: TemplateRef<any>;\r\n\r\n controlTemplates: IDynamicFormTemplates;\r\n labelTemplates: IDynamicFormTemplates;\r\n inputTemplates: IDynamicFormTemplates;\r\n prefixTemplates: IDynamicFormTemplates;\r\n suffixTemplates: IDynamicFormTemplates;\r\n setPrefixTemplates: IDynamicFormTemplates;\r\n setSuffixTemplates: IDynamicFormTemplates;\r\n\r\n onChange: EventEmitter<IDynamicFormControl>;\r\n onStatusChange: EventEmitter<IDynamicFormBase>;\r\n onInit: EventEmitter<IDynamicFormBase>;\r\n onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n root?: IDynamicFormBase;\r\n status: DynamicFormState;\r\n injector?: Injector;\r\n cdr?: ChangeDetectorRef;\r\n\r\n validate(showErrors?: boolean): Promise<any>;\r\n\r\n serialize(validate?: boolean): Promise<any>;\r\n\r\n check(): Promise<any>;\r\n\r\n getControl(id: string): IDynamicFormControl;\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider;\r\n}\r\n\r\nexport declare type AsyncSubmitMethod = (form: IDynamicFormBase) => Promise<IAsyncMessage>;\r\n\r\nexport interface IDynamicFormInfo {\r\n group?: DynamicFormGroup;\r\n name?: string;\r\n controls?: IFormControl[];\r\n serializers?: IFormSerializers;\r\n fieldSets?: IFormFieldSet[];\r\n}\r\n\r\nexport interface IDynamicForm extends IDynamicFormBase, IDynamicFormInfo {\r\n data: any;\r\n}\r\n\r\nexport interface IDynamicFormFieldSets {\r\n [id: string]: IFormFieldSet\r\n}\r\n\r\n// --- Basic form types ---\r\nexport type FormControlTester = (control: IDynamicFormControl) => Promise<boolean>;\r\nexport type FormControlTesterFactory = FormControlTester | IResolveFactory;\r\nexport type FormControlValidator = (control: IDynamicFormControl) => Promise<string | ValidationErrors>;\r\nexport type FormControlValidatorFactory = FormControlValidator | IResolveFactory;\r\n\r\n// --- Decorator functions ---\r\nconst emptyArray: any = [];\r\nconst emptyTester: FormControlTester = () => {\r\n return Promise.resolve(false);\r\n};\r\n\r\nexport function defaultSerializer(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const control = parent.getControl(id);\r\n return !control ? Promise.resolve(parent.model[id]) : control.serialize();\r\n}\r\n\r\nexport function FormSerializable(serializer?: IFormControlSerializer | IResolveFactory): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n ReflectUtils.defineMetadata(\"dynamicFormSerializer\", serializer || defaultSerializer, target, propertyKey);\r\n };\r\n}\r\n\r\nexport function FormInput(data?: IFormInputData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, propertyKey);\r\n const type = meta ? meta.name : \"\";\r\n let inputType = propertyKey.indexOf(\"password\") < 0 ? \"text\" : \"password\";\r\n switch (type) {\r\n case \"Number\":\r\n inputType = \"number\";\r\n break;\r\n case \"Boolean\":\r\n inputType = \"checkbox\";\r\n break;\r\n }\r\n defineFormControl(target, propertyKey, createFormInput(propertyKey, data, inputType));\r\n };\r\n}\r\n\r\nexport function FormSelect(data?: IFormSelectData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormSelect(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormStatic(data?: IFormStaticData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormStatic(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormModel(data?: IFormModelData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormModel(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFile(data?: IFormFileData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormFile(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFieldSet(data: IFormFieldSet): ClassDecorator {\r\n return (target: any): void => {\r\n const sets = getFormFieldSets(target);\r\n data.classes = data.classes || \"\";\r\n sets[data.id] = data;\r\n ReflectUtils.defineMetadata(\"dynamicFormFieldSets\", sets, target);\r\n };\r\n}\r\n\r\nexport interface FormGroupProvider extends ValueProvider {\r\n provide: InjectionToken<Type<IFormGroupComponent>>;\r\n multi?: boolean;\r\n useValue: Type<IFormGroupComponent>;\r\n}\r\n\r\nexport function provideFormGroup(component: Type<IFormGroupComponent>): FormGroupProvider {\r\n return {\r\n provide: FORM_GROUP_TYPE,\r\n useValue: component\r\n };\r\n}\r\n\r\nexport interface FormControlProvider {\r\n provide: InjectionToken<IFormControlProvider>;\r\n multi?: boolean;\r\n useValue: IFormControlProvider;\r\n}\r\n\r\nexport function provideFormControl(component: Type<IFormControlComponent>, acceptor: IFormControlProviderAcceptor, loader: IFormControlProviderLoader, priority: number = 0): FormControlProvider {\r\n return {\r\n provide: FORM_CONTROL_PROVIDER,\r\n multi: true,\r\n useValue: {\r\n component: component,\r\n priority: priority,\r\n acceptor: acceptor,\r\n loader: loader\r\n }\r\n };\r\n}\r\n\r\nexport function defineFormControl(target: any, propertyKey: string, control: IFormControl): void {\r\n ReflectUtils.defineMetadata(\"dynamicFormControl\", control, target, propertyKey);\r\n}\r\n\r\nexport function getFormFieldSets(target: any): IDynamicFormFieldSets {\r\n return ReflectUtils.getMetadata(\"dynamicFormFieldSets\", target) || {};\r\n}\r\n\r\nexport function getFormControl(target: any, propertyKey: string): IFormControl {\r\n return ReflectUtils.getMetadata(\"dynamicFormControl\", target, propertyKey);\r\n}\r\n\r\nexport function getFormSerializer(target: any, propertyKey: string): IFormControlSerializer | IResolveFactory {\r\n return ReflectUtils.getMetadata(\"dynamicFormSerializer\", target, propertyKey);\r\n}\r\n\r\nexport function createFormControl(id: string, type: string, data?: IFormControlData): IFormControl {\r\n data = data || {};\r\n data.label = ObjectUtils.isNullOrUndefined(data.label) ? id : data.label;\r\n data.labelAlign = data.labelAlign || \"left\";\r\n data.fieldSet = data.fieldSet || UniqueUtils.uuid();\r\n data.classes = data.classes || \"\";\r\n data.readonly = data.readonly || emptyTester;\r\n data.hidden = data.hidden || emptyTester;\r\n data.validators = data.validators || emptyArray;\r\n return {\r\n id: id,\r\n type: type,\r\n data: data\r\n };\r\n}\r\n\r\nexport function createFormInput(id: string, data: IFormInputData, type: string = \"text\"): IFormControl {\r\n const control = createFormControl(id, \"input\", data);\r\n data = control.data;\r\n data.type = data.type || type;\r\n data.classes = !data.classes ? `form-group-${data.type}` : `${data.classes} form-group-${data.type}`;\r\n data.placeholder = data.placeholder || \"\";\r\n data.step = data.step || 1;\r\n return control;\r\n}\r\n\r\nexport function createFormSelect(id: string, data: IFormSelectData): IFormControl {\r\n const control = createFormControl(id, \"select\", data);\r\n data = control.data;\r\n data.options = data.options || (() => Promise.resolve([]));\r\n data.type = data.type || \"select\";\r\n const classType = data.type == \"select\" ? \"select\" : `select-${data.type}`;\r\n data.classes = !data.classes ? `form-group-${classType}` : `${data.classes} form-group-${classType}`;\r\n return control;\r\n}\r\n\r\nexport function createFormStatic(id: string, data: IFormStaticData): IFormControl {\r\n const control = createFormControl(id, \"static\", data);\r\n data = control.data;\r\n data.style = data.style || \"table\";\r\n return control;\r\n}\r\n\r\nexport function createFormModel(id: string, data: IFormModelData): IFormControl {\r\n const control = createFormControl(id, \"model\", data);\r\n data = control.data;\r\n data.name = data.name || \"\";\r\n return control;\r\n}\r\n\r\nexport function createFormFile(id: string, data: IFormFileData): IFormControl {\r\n const control = createFormControl(id, \"file\", data);\r\n data = control.data;\r\n data.accept = data.accept || \".jpg,.jpeg,.png\";\r\n data.multi = data.multi || false;\r\n data.baseUrl = ObjectUtils.isString(data.baseUrl) ? data.baseUrl : \"assets/\";\r\n data.uploadUrl = ObjectUtils.isString(data.uploadUrl) ? data.uploadUrl : \"assets\";\r\n data.createUploadData = data.createUploadData || ((file: File) => {\r\n const form = new FormData();\r\n form.append(\"file\", file);\r\n return form;\r\n });\r\n return control;\r\n}\r\n","import {ComponentFactoryResolver, Inject, Injectable, Injector, Type, ViewContainerRef} from \"@angular/core\";\r\nimport {\r\n FORM_CONTROL_PROVIDER, FORM_GROUP_TYPE,\r\n IDynamicFormControl,\r\n IFormControlComponent,\r\n IFormControlProvider,\r\n IFormGroupComponent\r\n} from \"../common-types\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\n\r\n@Injectable()\r\nexport class DynamicFormService {\r\n\r\n constructor(@Inject(FORM_CONTROL_PROVIDER) private components: IFormControlProvider[],\r\n @Inject(FORM_GROUP_TYPE) private groupType: Type<IFormGroupComponent>,\r\n private resolver: ComponentFactoryResolver,\r\n public readonly injector: Injector) {\r\n }\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider {\r\n if (!control) return null;\r\n const providers = this.components.filter(p => p.acceptor(control));\r\n if (providers.length == 0) {\r\n throw new Error(`No component provider for control: ${JSON.stringify({\r\n id: control.id,\r\n type: control.type,\r\n data: control.data\r\n })}`);\r\n }\r\n // Sort providers\r\n providers.sort((a, b) => ObjectUtils.compare(a.priority, b.priority))\r\n return providers[0];\r\n }\r\n\r\n createComponent(vcr: ViewContainerRef, provider: IFormControlProvider): IFormControlComponent {\r\n vcr.clear();\r\n if (!provider) return null;\r\n const factory = this.resolver.resolveComponentFactory(provider.component);\r\n return vcr.createComponent(factory).instance;\r\n }\r\n\r\n createGroup(vcr: ViewContainerRef): IFormGroupComponent {\r\n vcr.clear();\r\n const factory = this.resolver.resolveComponentFactory(this.groupType);\r\n return vcr.createComponent(factory).instance;\r\n }\r\n}\r\n","import {DatePipe} from \"@angular/common\";\r\nimport {FactoryDependencies, FileUtils, ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {FormControlTester, FormControlValidator, IDynamicFormControl, IFormControlSerializer} from \"../common-types\";\r\n\r\nexport class FormUtilities {\r\n\r\n static checkField(expression: string = `true`): FormControlTester {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl): Promise<boolean> => {\r\n return Promise.resolve(ObjectUtils.evaluate(expression, {control: control}));\r\n };\r\n return lambda;\r\n }\r\n\r\n static checkReadonly(control: IDynamicFormControl): Promise<boolean> {\r\n return Promise.resolve(control.visible && !control.disabled);\r\n }\r\n\r\n static readonly(): Promise<boolean> {\r\n return Promise.resolve(true);\r\n }\r\n\r\n static validateJSON(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n try {\r\n JSON.parse(value);\r\n return Promise.resolve(null);\r\n } catch (e) {\r\n return Promise.resolve(\"error.not-valid-json\")\r\n }\r\n }\r\n\r\n static validateRequired(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n return Promise.resolve(!ObjectUtils.isNumber(value) && !value ? \"error.required\" : null);\r\n }\r\n\r\n static validateMinLength(length: number): FormControlValidator {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl) => {\r\n const value = control.value;\r\n if (!ObjectUtils.isString(value) || value.length < length) {\r\n return Promise.resolve({\"error.min-length\": {length: length}});\r\n }\r\n return Promise.resolve(null);\r\n };\r\n return lambda;\r\n }\r\n\r\n static validateMaxLength(length: number): FormControlValidator {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl) => {\r\n const value = control.value;\r\n if (!ObjectUtils.isString(value) || value.length > length) {\r\n return Promise.resolve({\"error.max-length\": {length: length}});\r\n }\r\n return Promise.resolve(null);\r\n };\r\n return lambda;\r\n }\r\n\r\n static validateRequiredTranslation(control: IDynamicFormControl): Promise<string> {\r\n const value: any[] = control.value;\r\n if (!value || value.length == 0) return Promise.resolve(\"error.required\");\r\n return Promise.resolve(value.findIndex(t => (t.lang == \"de\" || t.lang == \"en\") && !t.translation) < 0 ? null : \"error.required\");\r\n }\r\n\r\n static validateEmail(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const emailRegexp = /^(([^<>()\\[\\]\\\\.,;:\\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 return Promise.resolve(emailRegexp.test(value) ? null : \"error.invalid-email\");\r\n }\r\n\r\n static validatePhone(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const phoneRegexp = /^(?:\\d){10,12}$/;\r\n return Promise.resolve(phoneRegexp.test(value) ? null : \"error.invalid-phone\");\r\n }\r\n\r\n static serializeLogo(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value || value.length == 0 ? null : value);\r\n }\r\n\r\n static serializeFile(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: any = parent.model[id];\r\n if (ObjectUtils.isBlob(value)) return Promise.resolve(value);\r\n return Promise.resolve(!ObjectUtils.isString(value) || !value.startsWith(\"data:\") ? null : FileUtils.dataToBlob(value));\r\n }\r\n\r\n static serializeNumber(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value || value.length == 0 ? 0 : parseFloat(value));\r\n }\r\n\r\n static serializeJSON(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value ? {} : JSON.parse(value));\r\n }\r\n\r\n @FactoryDependencies(DatePipe)\r\n static serializeDate(date: DatePipe, format: string = \"yyyy-MM-dd\", defaultValue: string = \"\"): IFormControlSerializer {\r\n // @dynamic\r\n const lambda = (id: string, parent: IDynamicFormControl): Promise<any> => {\r\n const value: any = parent.model[id];\r\n if (!ObjectUtils.isDate(value)) return Promise.resolve(value || defaultValue);\r\n return Promise.resolve(!format ? value : date.transform(value, format));\r\n };\r\n return lambda;\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {ApiService, StringUtils} from \"@stemy/ngx-utils\";\r\n\r\nimport {FormUtilities} from \"./form-utilities\";\r\n\r\nimport {\r\n createFormFile,\r\n createFormInput,\r\n createFormSelect,\r\n FormControlValidatorFactory,\r\n IDynamicFormControl,\r\n IFormControl,\r\n IFormControlData,\r\n IFormFileData,\r\n IFormInputData,\r\n IFormSelectData,\r\n IFormSerializers\r\n} from \"../common-types\";\r\n\r\nexport interface IOpenApiSchemaProperty {\r\n id: string;\r\n type: string;\r\n format: string;\r\n column: boolean;\r\n additionalProperties: any;\r\n $ref: string;\r\n enum: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IOpenApiSchema {\r\n properties: { [name: string]: IOpenApiSchemaProperty };\r\n required: string[];\r\n}\r\n\r\nexport interface IDynamicFormInputs {\r\n controls?: IFormControl[];\r\n serializers?: IFormSerializers;\r\n schema?: IOpenApiSchema;\r\n}\r\n\r\n@Injectable()\r\nexport class OpenApiService {\r\n\r\n private schemasPromise: Promise<any>;\r\n private schemas: any;\r\n\r\n constructor(private api: ApiService) {\r\n const baseUrl = this.api.url(\"\").replace(\"api/\", \"api-docs\");\r\n this.schemas = {};\r\n this.schemasPromise = new Promise<any>((resolve => {\r\n this.api.client.get(baseUrl).subscribe((res: any) => {\r\n this.schemas = res.definitions || {};\r\n resolve(this.schemas);\r\n }, () => {\r\n resolve({});\r\n });\r\n }));\r\n }\r\n\r\n getFormInputsForSchema(name: string): Promise<IDynamicFormInputs> {\r\n this.api.cache = {};\r\n return this.schemasPromise.then(schemas => {\r\n const schema: IOpenApiSchema = schemas[name];\r\n const inputs = this.getFormInputsForSchemaDef(schema);\r\n return inputs;\r\n });\r\n }\r\n\r\n private getFormInputsForSchemaDef(schema: IOpenApiSchema): IDynamicFormInputs {\r\n const inputs: IDynamicFormInputs = {};\r\n if (!schema) return inputs;\r\n inputs.schema = schema;\r\n inputs.serializers = {};\r\n inputs.controls = Object.keys(schema.properties || {}).map(p => {\r\n const property = schema.properties[p];\r\n property.id = p;\r\n inputs.serializers[p] = (id: string, parent: IDynamicFormControl) => {\r\n return Promise.resolve(parent.model[id]);\r\n };\r\n return this.getFormControlForProperty(property, schema);\r\n }).filter(t => null !== t);\r\n return inputs;\r\n }\r\n\r\n private getFormControlForProperty(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControl {\r\n if (Array.isArray(property.enum)) {\r\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\r\n }\r\n switch (property.type) {\r\n case \"string\":\r\n case \"number\":\r\n case \"boolean\":\r\n case \"textarea\":\r\n return createFormInput(property.id, this.getFormInputData(property, schema));\r\n case \"list\":\r\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\r\n case \"file\":\r\n return createFormFile(property.id, this.getFormFileData(property, schema));\r\n }\r\n return null;\r\n }\r\n\r\n private getBaseFormData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControlData {\r\n return {\r\n readonly: property.readonly ? FormUtilities.readonly : null,\r\n shouldSerialize: FormUtilities.checkReadonly,\r\n validators: this.getValidators(property, schema)\r\n }\r\n }\r\n\r\n private getFormInputData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormInputData {\r\n let type = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : property.type;\r\n switch (property.type) {\r\n case \"boolean\":\r\n type = \"checkbox\";\r\n break;\r\n case \"textarea\":\r\n type = \"textarea\";\r\n break;\r\n }\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n type\r\n };\r\n }\r\n\r\n private getFormSelectData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormSelectData {\r\n const options = Array.isArray(property.enum)\r\n ? () => {\r\n return Promise.resolve(property.enum.map(id => ({ id, label: `${property.id}.${id}` })));\r\n }\r\n : () => {\r\n this.api.cache[property.endpoint] = this.api.cache[property.endpoint] || this.api.list(property.endpoint, this.api.makeListParams(1, -1)).then(result => {\r\n return result.items.map(i => {\r\n return { id: i._id, label: i.name };\r\n });\r\n });\r\n return this.api.cache[property.endpoint];\r\n };\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n options,\r\n };\r\n }\r\n\r\n private getFormFileData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormFileData {\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n multi: property.multi\r\n };\r\n }\r\n\r\n private getValidators(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): FormControlValidatorFactory[] {\r\n const validators: FormControlValidatorFactory[] = [];\r\n if (schema.required.indexOf(property.id) >= 0) {\r\n validators.push(FormUtilities.validateRequired);\r\n }\r\n if (property.minLength) {\r\n validators.push({\r\n type: FormUtilities,\r\n func: FormUtilities.validateMinLength,\r\n params: [property.minLength]\r\n });\r\n }\r\n if (property.maxLength) {\r\n validators.push({\r\n type: FormUtilities,\r\n func: FormUtilities.validateMaxLength,\r\n params: [property.maxLength]\r\n });\r\n }\r\n switch (property.format) {\r\n case \"email\":\r\n validators.push(FormUtilities.validateEmail);\r\n break;\r\n }\r\n return validators;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2\r\n} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\nimport {AsyncSubmitMethod, IDynamicFormBase} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"[async-submit]\",\r\n exportAs: \"async-submit\"\r\n})\r\nexport class AsyncSubmitDirective implements OnInit, OnDestroy {\r\n\r\n @Input(\"async-submit\") method: AsyncSubmitMethod;\r\n @Input() form: IDynamicFormBase;\r\n\r\n @Output() onSuccess: EventEmitter<IAsyncMessage>;\r\n @Output() onError: EventEmitter<IAsyncMessage>;\r\n\r\n private loading: boolean;\r\n private disabled: boolean;\r\n private callback: Function;\r\n private onStatusChange: Subscription;\r\n private onSubmit: Subscription;\r\n\r\n @HostBinding(\"class.disabled\")\r\n get isDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n @HostBinding(\"class.loading\")\r\n get isLoading(): boolean {\r\n return this.loading;\r\n }\r\n\r\n constructor(@Inject(TOASTER_SERVICE) private toaster: IToasterService, private cdr: ChangeDetectorRef, elem: ElementRef, renderer: Renderer2) {\r\n this.onSuccess = new EventEmitter<IAsyncMessage>();\r\n this.onError = new EventEmitter<IAsyncMessage>();\r\n if (elem.nativeElement.tagName !== \"BUTTON\") return;\r\n renderer.setAttribute(elem.nativeElement, \"type\", \"button\");\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.form) return;\r\n this.disabled = this.form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n this.onStatusChange = this.form.onStatusChange.subscribe(form => {\r\n this.disabled = form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n if (!this.callback || form.status == \"PENDING\") return;\r\n if (!this.disabled) {\r\n this.callback();\r\n }\r\n this.callback = null;\r\n });\r\n this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.onStatusChange) this.onStatusChange.unsubscribe();\r\n if (this.onSubmit) this.onSubmit.unsubscribe();\r\n }\r\n\r\n @HostListener(\"click\")\r\n click(): void {\r\n this.callback = () => this.callMethod();\r\n if (this.form.status !== \"VALID\" && this.form.status !== \"INVALID\") return;\r\n this.callback();\r\n this.callback = null;\r\n }\r\n\r\n callMethod(): void {\r\n if (this.loading) return;\r\n this.loading = true;\r\n this.method(this.form).then(result => {\r\n this.loading = false;\r\n if (result) {\r\n this.onSuccess.emit(result);\r\n this.toaster.success(result.message, result.context);\r\n }\r\n }, reason => {\r\n if (!reason || !reason.message)\r\n throw new Error(\"Reason must implement IAsyncMessage interface\");\r\n this.loading = false;\r\n this.onError.emit(reason);\r\n this.toaster.error(reason.message, reason.context);\r\n });\r\n }\r\n}\r\n","import {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\r\nimport {IDynamicFormControl, IFormControlComponent} from \"../common-types\";\r\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\r\n\r\n@Directive({\r\n selector: \"[form-control]\",\r\n})\r\nexport class DynamicFormControlDirective implements OnChanges {\r\n\r\n @Input(\"form-control\") control: IDynamicFormControl;\r\n\r\n get component(): IFormControlComponent {\r\n return this.comp;\r\n }\r\n\r\n private comp: IFormControlComponent;\r\n\r\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.control) {\r\n this.comp = this.forms.createComponent(this.vcr, this.control.provider);\r\n }\r\n if (!this.comp) return;\r\n this.comp.control = this.control;\r\n }\r\n}\r\n","import {Directive, Input, TemplateRef} from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: `ng-template[control],\r\n ng-template[label],\r\n ng-template[input],\r\n ng-template[prefix],\r\n ng-template[suffix],\r\n ng-template[setPrefix],\r\n ng-template[setSuffix],\r\n ng-template[formPrefix],\r\n ng-template[formSuffix],\r\n ng-template[innerFormPrefix],\r\n ng-template[innerFormSuffix]`\r\n})\r\nexport class DynamicFormTemplateDirective {\r\n\r\n @Input() control: string;\r\n @Input() label: string;\r\n @Input() input: string;\r\n @Input() prefix: string;\r\n @Input() suffix: string;\r\n @Input() setPrefix: string;\r\n @Input() setSuffix: string;\r\n @Input() formPrefix: string;\r\n @Input() formSuffix: string;\r\n @Input() innerFormPrefix: string;\r\n @Input() innerFormSuffix: string;\r\n\r\n constructor(public template: TemplateRef<any>) {\r\n }\r\n}\r\n","import { AfterContentInit, ChangeDetectorRef, ContentChild, ContentChildren, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, Directive } from \"@angular/core\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControl, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormTemplates,\r\n IFormControlProvider\r\n} from \"../../common-types\";\r\nimport {DynamicFormTemplateDirective} from \"../../directives/dynamic-form-template.directive\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\n@Directive()\r\nexport abstract class DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit {\r\n\r\n @Input() name: string;\r\n @Input() testId: string;\r\n @Input() readonly: boolean;\r\n @Input() updateOn: \"change\" | \"blur\" | \"submit\";\r\n @Input() classes: any;\r\n @Input() parent: IDynamicFormBase;\r\n\r\n @Input() wrapperTemplate: TemplateRef<any>;\r\n @Input() fieldSetTemplate: TemplateRef<any>;\r\n @Input() controlTemplate: TemplateRef<any>;\r\n\r\n @Input() controlTemplates: IDynamicFormTemplates;\r\n @Input() labelTemplates: IDynamicFormTemplates;\r\n @Input() inputTemplates: IDynamicFormTemplates;\r\n @Input() prefixTemplates: IDynamicFormTemplates;\r\n @Input() suffixTemplates: IDynamicFormTemplates;\r\n @Input() setPrefixTemplates: IDynamicFormTemplates;\r\n @Input() setSuffixTemplates: IDynamicFormTemplates;\r\n\r\n @Output() onChange: EventEmitter<IDynamicFormControl>;\r\n @Output() onStatusChange: EventEmitter<IDynamicFormBase>;\r\n @Output() onInit: EventEmitter<IDynamicFormBase>;\r\n @Output() onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n @ContentChild(\"prefixTemplate\")\r\n prefixTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"suffixTemplate\")\r\n suffixTemplate: TemplateRef<any>;\r\n\r\n get root(): IDynamicFormBase {\r\n let form: IDynamicFormBase = this;\r\n while (ObjectUtils.isDefined(form.parent)) {\r\n form = form.parent;\r\n }\r\n return form;\r\n }\r\n\r\n abstract status: DynamicFormState;\r\n readonly injector: Injector;\r\n readonly cdr: ChangeDetectorRef;\r\n\r\n @ContentChildren(DynamicFormTemplateDirective)\r\n protected templates: QueryList<DynamicFormTemplateDirective>;\r\n\r\n @ContentChild(\"wrapperTemplate\")\r\n protected cWrapperTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"fieldSetTemplate\")\r\n protected cFieldSetTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"controlTemplate\")\r\n protected cControlTemplate: TemplateRef<any>;\r\n\r\n protected constructor(cdr: ChangeDetectorRef, private formService: DynamicFormService) {\r\n this.name = \"\";\r\n this.testId = \"form\";\r\n this.controlTemplates = {};\r\n this.labelTemplates = {};\r\n this.inputTemplates = {};\r\n this.prefixTemplates = {};\r\n this.suffixTemplates = {};\r\n\r\n this.onChange = new EventEmitter<DynamicFormControl>();\r\n this.onStatusChange = new EventEmitter<IDynamicFormBase>();\r\n this.onInit = new EventEmitter<IDynamicFormBase>();\r\n this.onSubmit = new EventEmitter<IDynamicFormBase>();\r\n this.injector = formService.injector;\r\n this.cdr = cdr;\r\n }\r\n\r\n // --- IDynamicFormBase\r\n\r\n abstract validate(showErrors?: boolean): Promise<any>;\r\n abstract serialize(validate?: boolean): Promise<any>;\r\n abstract check(): Promise<any>;\r\n abstract getControl(id: string): IDynamicFormControl;\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider {\r\n return this.formService.findProvider(control);\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngAfterContentInit(): void {\r\n this.wrapperTemplate = this.wrapperTemplate || this.cWrapperTemplate;\r\n this.fieldSetTemplate = this.fieldSetTemplate || this.cFieldSetTemplate;\r\n this.controlTemplate = this.controlTemplate || this.cControlTemplate;\r\n this.controlTemplates = this.filterTemplates(this.controlTemplates, \"control\");\r\n this.labelTemplates = this.filterTemplates(this.labelTemplates, \"label\");\r\n this.inputTemplates = this.filterTemplates(this.inputTemplates , \"input\");\r\n this.prefixTemplates = this.filterTemplates(this.prefixTemplates, \"prefix\");\r\n this.suffixTemplates = this.filterTemplates(this.suffixTemplates, \"suffix\");\r\n this.setPrefixTemplates = this.filterTemplates(this.setPrefixTemplates, \"setPrefix\");\r\n this.setSuffixTemplates = this.filterTemplates(this.setSuffixTemplates, \"setSuffix\");\r\n }\r\n\r\n protected filterTemplates(templates: IDynamicFormTemplates, type: string): IDynamicFormTemplates {\r\n if (ObjectUtils.isObject(templates) && Object.keys(templates).length > 0) return templates;\r\n return this.templates.filter(t => !!t[type]).reduce((result, directive) => {\r\n result[directive[type]] = directive.template;\r\n return result;\r\n }, {});\r\n }\r\n}\r\n","import {AfterContentInit, ChangeDetectorRef, Component, Input, OnChanges, SimpleChanges} from \"@angular/core\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormGroup,\r\n DynamicFormState,\r\n IDynamicForm,\r\n IDynamicFormControl,\r\n IFormControl,\r\n IFormFieldSet,\r\n IFormSerializers\r\n} from \"../../common-types\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form, [dynamic-form]\",\r\n templateUrl: \"./dynamic-form.component.html\",\r\n providers: [{provide: DynamicFormBaseComponent, useExisting: DynamicFormComponent}]\r\n})\r\nexport class DynamicFormComponent extends DynamicFormBaseComponent implements IDynamicForm, AfterContentInit, OnChanges {\r\n\r\n @Input() group: DynamicFormGroup;\r\n @Input() controls: IFormControl[];\r\n @Input() serializers: IFormSerializers;\r\n @Input() fieldSets: IFormFieldSet[];\r\n @Input() data: any;\r\n\r\n defaultFieldSet: IFormFieldSet;\r\n\r\n get status(): DynamicFormState {\r\n return this.group.state;\r\n }\r\n\r\n get formControls(): IDynamicFormControl[] {\r\n return this.group.formControls;\r\n }\r\n\r\n constructor(cdr: ChangeDetectorRef, forms: DynamicFormService) {\r\n super(cdr, forms);\r\n this.group = new DynamicFormGroup(this);\r\n this.defaultFieldSet = {\r\n id: \"\",\r\n title: \"\",\r\n classes: \"\"\r\n };\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.data) return;\r\n if (changes.data || changes.controls || changes.serializers || changes.formGroup) {\r\n if (this.group.id) return;\r\n this.group.setup(this.data, this);\r\n this.group.reloadControls();\r\n }\r\n }\r\n\r\n // --- Custom ---\r\n\r\n onFormSubmit(): void {\r\n const root = this.root;\r\n root.validate().then(() => root.onSubmit.emit(this), () => {});\r\n }\r\n\r\n // --- IDynamicForm ---\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n this.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\r\n if (showErrors) this.group.showErrors();\r\n if (status == \"VALID\") {\r\n resolve(null);\r\n return;\r\n }\r\n reject(null);\r\n });\r\n this.group.updateValueAndValidity();\r\n });\r\n }\r\n\r\n serialize(validate?: boolean): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n const serialize = () => {\r\n this.group.serialize().then(resolve);\r\n };\r\n if (validate) {\r\n this.validate().then(serialize, reject);\r\n return;\r\n }\r\n serialize();\r\n });\r\n }\r\n\r\n check(): Promise<any> {\r\n return this.group.check();\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return this.group.getControl(id);\r\n }\r\n}\r\n","import {\r\n AfterContentInit, ChangeDetectorRef, Component, ContentChild, Input, OnChanges, QueryList, SimpleChanges,\r\n TemplateRef, ViewChildren\r\n} from \"@angular/core\";\r\nimport {ObjectUtils, UniqueUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormGroup, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormsConfigs,\r\n IDynamicFormTemplates, IDynamicSingleFormConfig\r\n} from \"../../common-types\";\r\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\nconst statusPriority: DynamicFormState[] = [\"LOADING\", \"PENDING\", \"DISABLED\", \"INVALID\"];\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-forms, [dynamic-forms]\",\r\n templateUrl: \"./dynamic-forms.component.html\",\r\n providers: [{provide: DynamicFormBaseComponent, useExisting: DynamicFormsComponent}]\r\n})\r\nexport class DynamicFormsComponent extends DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit, OnChanges {\r\n\r\n @Input() data: IDynamicFormsConfigs;\r\n\r\n @Input() containerTemplate: TemplateRef<any>;\r\n\r\n @Input() formPrefixTemplates: IDynamicFormTemplates;\r\n @Input() formSuffixTemplates: IDynamicFormTemplates;\r\n @Input() innerFormPrefixTemplates: IDynamicFormTemplates;\r\n @Input() innerFormSuffixTemplates: IDynamicFormTemplates;\r\n\r\n get status(): DynamicFormState {\r\n for (let i = 0; i < statusPriority.length; i++) {\r\n const status = statusPriority[i];\r\n if (this.checkForms(f => f.status == status)) return status;\r\n }\r\n return \"VALID\";\r\n }\r\n\r\n public configs: IDynamicFormsConfigs;\r\n\r\n @ContentChild(\"containerTemplate\")\r\n protected cContainerTemplate: TemplateRef<any>;\r\n\r\n @ViewChildren(DynamicFormBaseComponent)\r\n private forms: QueryList<IDynamicFormBase>;\r\n\r\n constructor(cdr: ChangeDetectorRef, formService: DynamicFormService) {\r\n super(cdr, formService);\r\n this.formPrefixTemplates = {};\r\n this.formSuffixTemplates = {};\r\n this.innerFormPrefixTemplates = {};\r\n this.innerFormSuffixTemplates = {};\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngAfterContentInit(): void {\r\n super.ngAfterContentInit();\r\n this.containerTemplate = this.containerTemplate || this.cContainerTemplate;\r\n this.formPrefixTemplates = this.filterTemplates(this.formPrefixTemplates, \"formPrefix\");\r\n this.formSuffixTemplates = this.filterTemplates(this.formSuffixTemplates, \"formSuffix\");\r\n this.innerFormPrefixTemplates = this.filterTemplates(this.innerFormPrefixTemplates, \"innerFormPrefix\");\r\n this.innerFormSuffixTemplates = this.filterTemplates(this.innerFormSuffixTemplates, \"innerFormSuffix\");\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.configs = this.createFormGroups(this.data);\r\n }\r\n\r\n // --- IDynamicFormBase ---\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n if (!this.forms) return Promise.reject(null);\r\n return Promise.all(this.forms.map(f => f.validate(showErrors)));\r\n }\r\n\r\n serialize(validate?: boolean): Promise<any> {\r\n if (!this.forms) return validate ? Promise.reject(null) : Promise.resolve({});\r\n return new Promise<any>((resolve, reject) => {\r\n const promises = this.forms.map(f => f.serialize(validate));\r\n Promise.all(promises).then(results => {\r\n let result = {};\r\n results.forEach((data, ix) => {\r\n const config = this.data[ix];\r\n let path: Array<string | number> = null;\r\n if (ObjectUtils.isArray(config.path) && config.path.length > 0) {\r\n path = config.path;\r\n } else if (ObjectUtils.isString(config.path) && config.path.length > 0) {\r\n path = config.path.split(\".\");\r\n } else if (ObjectUtils.isNumber(config.path)) {\r\n path = [config.path];\r\n }\r\n if (!path) {\r\n result = ObjectUtils.assign(result, data);\r\n return;\r\n }\r\n result = ObjectUtils.mapToPath(result, data, path.map(p => `${p}`));\r\n });\r\n resolve(result);\r\n }, reject);\r\n });\r\n }\r\n\r\n check(): Promise<any> {\r\n if (!this.forms) return Promise.resolve(null);\r\n return Promise.all(this.forms.map(t => t.check()));\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return this.getFromValue(f => f.getControl(id));\r\n }\r\n\r\n private checkForms(check: (form: IDynamicFormBase) => boolean): boolean {\r\n this.cdr.detectChanges();\r\n if (!this.forms) return false;\r\n return ObjectUtils.isDefined(this.forms.find(check));\r\n }\r\n\r\n private getFromValue<T>(check: (form: IDynamicFormBase) => T): T {\r\n if (!this.forms) return null;\r\n let value: T = null;\r\n this.forms.find(f => {\r\n value = check(f);\r\n return ObjectUtils.isDefined(value);\r\n });\r\n return value;\r\n }\r\n\r\n private createFormGroups(configs: IDynamicFormsConfigs): IDynamicFormsConfigs {\r\n return (configs || []).map((c: any) => {\r\n if (c.multi) return c;\r\n const config = <IDynamicSingleFormConfig>c;\r\n const group = new DynamicFormGroup(this, {\r\n id: config.id || UniqueUtils.uuid(),\r\n type: \"model\",\r\n data: config.controlData\r\n });\r\n config.group = group;\r\n config.name = config.name || this.name;\r\n group.setup(config.data, config);\r\n group.reloadControls();\r\n return config;\r\n });\r\n }\r\n}\r\n","import {Component, HostBinding} from \"@angular/core\";\r\nimport {IDynamicForm, IDynamicFormControl, IFormGroupComponent} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"div[dynamic-form-group]\",\r\n templateUrl: \"./dynamic-form-group.component.html\"\r\n})\r\nexport class DynamicFormGroupComponent implements IFormGroupComponent {\r\n form: IDynamicForm;\r\n control: IDynamicFormControl;\r\n\r\n @HostBinding(\"class\")\r\n get classes(): string {\r\n if (!this.control) return \"form-group\";\r\n return [\"form-group\", \"form-group-\" + this.control.id, this.control.data.classes, this.control.errors && this.control.touched ? \"form-group-invalid\" : \"\"].join(\" \");\r\n }\r\n}\r\n","import {Component, Inject} from \"@angular/core\";\r\nimport {FormControlComponent, IDynamicFormControl, IFormFileData} from \"../../common-types\";\r\nimport {ApiService, ArrayUtils, FileUtils, IToasterService, ObjectUtils, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\n\r\n@Component({\r\n selector: \"dynamic-form-file\",\r\n styleUrls: [\"./dynamic-form-file.component.scss\"],\r\n templateUrl: \"./dynamic-form-file.component.html\"\r\n})\r\nexport class DynamicFormFileComponent extends FormControlComponent<IFormFileData> {\r\n\r\n private fileImageCache: any[];\r\n\r\n // Acceptor for provider\r\n static acceptor(control: IDynamicFormControl): boolean {\r\n return control.type == \"file\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n\r\n constructor(readonly api: ApiService, @Inject(TOASTER_SERVICE) readonly toaster: IToasterService) {\r\n super();\r\n this.fileImageCache = [];\r\n }\r\n\r\n onSelect(input: HTMLInputElement): void {\r\n this.processFiles(input.files);\r\n input.value = \"\";\r\n }\r\n\r\n protected processFiles(fileList: FileList): void {\r\n const files: File[] = [];\r\n const accept = this.data.accept;\r\n const types: string[] = ObjectUtils.isString(accept) && accept.length > 0 ? accept.toLowerCase().split(\",\") : null;\r\n if (fileList.length == 0) return;\r\n for (let i = 0; i < fileList.length; i++) {\r\n const file = fileList.item(i);\r\n const type = file.type.toLowerCase();\r\n const ext = FileUtils.getExtension(file);\r\n if (types && !ArrayUtils.has(types, type, ext)) continue;\r\n files.push(file);\r\n }\r\n if (files.length == 0) {\r\n this.toaster.error(\"message.error.wrong-files\");\r\n return;\r\n }\r\n this.upload(files);\r\n }\r\n\r\n protected upload(files: File[]): void {\r\n const single = !this.data.multi;\r\n if (single) files.length = Math.min(files.length , 1);\r\n const promises = [];\r\n files.forEach((file, ix) => {\r\n if (this.data.asDataUrl) {\r\n promises.push(FileUtils.readFileAsDataURL(file));\r\n return;\r\n }\r\n if (this.data.asFile) {\r\n promises.push(Promise.resolve(file));\r\n return;\r\n }\r\n promises.push(\r\n this.api.upload(\r\n this.data.uploadUrl,\r\n this.data.createUploadData(file),\r\n console.log,\r\n this.data.uploadOptions\r\n ).then(asset => asset._id || asset, () => null)\r\n );\r\n });\r\n Promise.all(promises).then(assets => {\r\n if (single) {\r\n this.control.setValue(assets[0]);\r\n return;\r\n }\r\n const current = this.value || [];\r\n this.control.setValue(current.concat(assets.filter(t => !!t)));\r\n });\r\n }\r\n\r\n delete(index?: number): void {\r\n if (this.data.multi) {\r\n const current = Array.from(this.value || []);\r\n current.splice(index, 1);\r\n this.control.setValue(current);\r\n return;\r\n }\r\n this.control.setValue(null);\r\n }\r\n\r\n getUrl(image: any): string {\r\n return `url('${this.getImgUrl(image)}')`;\r\n }\r\n\r\n private getImgUrl(image: any): string {\r\n if (ObjectUtils.isBlob(image)) {\r\n let cache = this.fileImageCache.find(t => t.file == image);\r\n if (!cache) {\r\n cache = {file: image, url: URL.createObjectURL(image)};\r\n this.fileImageCache.push(cache);\r\n }\r\n return cache.url;\r\n }\r\n const url = !image ? null : image.imageUrl || image;\r\n if (!ObjectUtils.isString(url)) return null;\r\n if (url.startsWith(\"data:\")) return url;\r\n if (!this.data.baseUrl) {\r\n const subUrl = url.startsWith(\"/\") ? url.substr(1) : url;\r\n return this.api.url(subUrl);\r\n }\r\n return this.api.url(`${this.data.baseUrl}${url}`);\r\n }\r\n}\r\n","import {Component, HostBinding, Inject} from \"@angular/core\";\r\nimport {ILanguageService, ITranslation, LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {DynamicFormControl, FormControlComponent, IFormInputData} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-input\",\r\n templateUrl: \"./dynamic-form-input.component.html\"\r\n})\r\nexport class DynamicFormInputComponent extends FormControlComponent<IFormInputData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"input\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n\r\n @HostBinding(\"class.checked\")\r\n get isChecked(): boolean {\r\n return this.data.type == \"checkbox\" && this.value;\r\n }\r\n\r\n constructor(@Inject(LANGUAGE_SERVICE) private language: ILanguageService) {\r\n super();\r\n }\r\n\r\n onDateChange(value: string): void {\r\n const date = new Date(value);\r\n const dateValue = <number>date.valueOf();\r\n if (isNaN(dateValue) || dateValue < -30610224000000) return;\r\n this.control.setValue(date)\r\n }\r\n\r\n onTextChange(value: string): void {\r\n if (!this.data.useLanguage) {\r\n this.control.setValue(value);\r\n return;\r\n }\r\n const translations: ITranslation[] = ObjectUtils.isArray(this.value) ? Array.from(this.value) : [];\r\n const translation = translations.find(t => t.lang == this.language.editLanguage);\r\n if (translation) {\r\n translation.translation = value;\r\n } else {\r\n translations.push({\r\n lang: this.language.editLanguage,\r\n translation: value\r\n });\r\n }\r\n this.control.setValue(translations);\r\n }\r\n\r\n onNumberBlur(): void {\r\n const value = this.value;\r\n if (ObjectUtils.isNumber(this.data.max) && this.data.max < value) {\r\n this.control.setValue(this.data.max);\r\n } else if (ObjectUtils.isNumber(this.data.min) && this.data.min > value) {\r\n this.control.setValue(this.data.min);\r\n }\r\n this.control.onBlur();\r\n }\r\n}\r\n","import {Component} from \"@angular/core\";\r\nimport {ObjectUtils, ReflectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControl,\r\n FormControlComponent,\r\n IDynamicForm, IDynamicFormControl,\r\n IFormControl, IFormControlOption,\r\n IFormControlOptions,\r\n IFormSelectData\r\n} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-select\",\r\n templateUrl: \"./dynamic-form-select.component.html\"\r\n})\r\nexport class DynamicFormSelectComponent extends FormControlComponent<IFormSelectData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"select\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(control: IDynamicFormControl): Promise<any> {\r\n const data = control.getData<IFormSelectData>();\r\n if (data.type == \"radio\" && data.multi) {\r\n return Promise.reject(\"Radio group doesn't support multi select!\");\r\n }\r\n return new Promise<any>(resolve => {\r\n const getOptions = ReflectUtils.resolve<IFormControlOptions>(data.options, control.form.injector);\r\n getOptions(control).then(options => {\r\n if (data.emptyOption) options.unshift({id: null, label: \"\"});\r\n control.meta.options = options;\r\n DynamicFormSelectComponent.fillOptions(control, options);\r\n resolve(options);\r\n });\r\n });\r\n }\r\n\r\n static fillOptions(control: IDynamicFormControl, options: IFormControlOption[]): void {\r\n const data = control.getData<IFormSelectData>();\r\n const selected = control.value;\r\n if (data.multi || options.length == 0 || options.findIndex(t => t.id == selected) >= 0) return;\r\n control.setValue(options[0].id);\r\n }\r\n\r\n onSelectChange(value: any): void {\r\n const isArray = ObjectUtils.isArray(value);\r\n const current = this.value;\r\n if (this.data.multi) {\r\n if (isArray) {\r\n this.control.setValue(value);\r\n return;\r\n }\r\n if (ObjectUtils.isArray(current)) {\r\n this.control.setValue(\r\n current.indexOf(value) < 0\r\n ? current.concat([value])\r\n : current.filter(c => c !== value)\r\n );\r\n return;\r\n }\r\n this.control.setValue([value]);\r\n return;\r\n }\r\n if (isArray) value = value[0];\r\n if (current == value) {\r\n const option = this.meta.options.find(o => o.id !== value);\r\n value = option ? option.id : null;\r\n }\r\n this.control.setValue(value);\r\n }\r\n\r\n checkValue(option: IFormControlOption): boolean {\r\n const value = this.value;\r\n return ObjectUtils.isArray(value) ? value.indexOf(option.id) >= 0 : option.id == value;\r\n }\r\n\r\n findOption(option: IFormControlOption, index: number, id: string): boolean {\r\n return option.id == id;\r\n }\r\n}\r\n","import {Component} from \"@angular/core\";\r\nimport {\r\n DynamicFormControl,\r\n FormControlComponent,\r\n IDynamicForm,\r\n IFormControl,\r\n IFormStaticData\r\n} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-static\",\r\n templateUrl: \"./dynamic-form-static.component.html\"\r\n})\r\nexport class DynamicFormStaticComponent extends FormControlComponent<IFormStaticData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"static\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n}\r\n","import {Component, ViewChild} from \"@angular/core\";\r\nimport {DynamicFormControl, FormControlComponent, IDynamicForm, IFormModelData} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-model\",\r\n templateUrl: \"./dynamic-form-model.component.html\"\r\n})\r\nexport class DynamicFormModelComponent extends FormControlComponent<IFormModelData> {\r\n\r\n @ViewChild(\"subForm\")\r\n private subForm: IDynamicForm;\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"model\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n}\r\n","import {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\r\nimport {IDynamicForm, IDynamicFormControl, IFormControlComponent, IFormGroupComponent} from \"../common-types\";\r\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\r\n\r\n@Directive({\r\n selector: \"[form-group]\",\r\n})\r\nexport class DynamicFormGroupDirective implements OnChanges {\r\n\r\n @Input(\"form-group\") control: IDynamicFormControl;\r\n @Input() form: IDynamicForm;\r\n @Input() visible: boolean;\r\n\r\n get component(): IFormControlComponent {\r\n return this.comp;\r\n }\r\n\r\n private comp: IFormGroupComponent;\r\n\r\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.control || changes.form || changes.visible) {\r\n if (!this.visible) {\r\n this.vcr.clear();\r\n this.comp = null;\r\n return;\r\n }\r\n this.comp = this.forms.createGroup(this.vcr);\r\n }\r\n if (!this.comp) return;\r\n this.comp.form = this.form;\r\n this.comp.control = this.control;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\r\nimport {FormControlProvider, FormGroupProvider, provideFormControl, provideFormGroup} from \"./common-types\";\r\n\r\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\r\nimport {OpenApiService} from \"./services/open-api.service\";\r\n\r\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\r\nimport {DynamicFormControlDirective} from \"./directives/dynamic-form-control.directive\";\r\nimport {DynamicFormGroupDirective} from \"./directives/dynamic-form-group.directive\";\r\nimport {DynamicFormTemplateDirective} from \"./directives/dynamic-form-template.directive\";\r\nimport {DynamicFormsComponent} from \"./components/dynamic-forms/dynamic-forms.component\";\r\nimport {DynamicFormComponent} from \"./components/dynamic-form/dynamic-form.component\";\r\n\r\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\r\nimport {DynamicFormFileComponent} from \"./components/dynamic-form-file/dynamic-form-file.component\";\r\nimport {DynamicFormInputComponent} from \"./components/dynamic-form-input/dynamic-form-input.component\";\r\nimport {DynamicFormSelectComponent} from \"./components/dynamic-form-select/dynamic-form-select.component\";\r\nimport {DynamicFormStaticComponent} from \"./components/dynamic-form-static/dynamic-form-static.component\";\r\nimport {DynamicFormModelComponent} from \"./components/dynamic-form-model/dynamic-form-model.component\";\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicFormsComponent,\r\n DynamicFormComponent,\r\n DynamicFormGroupComponent,\r\n DynamicFormFileComponent,\r\n DynamicFormInputComponent,\r\n DynamicFormSelectComponent,\r\n DynamicFormStaticComponent,\r\n DynamicFormModelComponent\r\n];\r\n\r\n// --- Directives ---\r\nexport const directives = [\r\n AsyncSubmitDirective,\r\n DynamicFormControlDirective,\r\n DynamicFormGroupDirective,\r\n DynamicFormTemplateDirective\r\n];\r\n\r\n// --- Pipes ---\r\nexport const pipes = [];\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ...directives,\r\n ...pipes\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n exports: [\r\n ...components,\r\n ...directives,\r\n ...pipes,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n entryComponents: components,\r\n providers: pipes\r\n})\r\nexport class NgxDynamicFormModule {\r\n\r\n static forRoot(controlProviders?: Array<FormControlProvider>, groupProvider?: FormGroupProvider): ModuleWithProviders<NgxDynamicFormModule> {\r\n return {\r\n ngModule: NgxDynamicFormModule,\r\n providers: [\r\n DynamicFormService,\r\n OpenApiService,\r\n provideFormControl(DynamicFormFileComponent, DynamicFormFileComponent.acceptor, DynamicFormFileComponent.loader),\r\n provideFormControl(DynamicFormInputComponent, DynamicFormInputComponent.acceptor, DynamicFormInputComponent.loader),\r\n provideFormControl(DynamicFormSelectComponent, DynamicFormSelectComponent.acceptor, DynamicFormSelectComponent.loader),\r\n provideFormControl(DynamicFormStaticComponent, DynamicFormStaticComponent.acceptor, DynamicFormStaticComponent.loader),\r\n provideFormControl(DynamicFormModelComponent, DynamicFormModelComponent.acceptor, DynamicFormModelComponent.loader),\r\n ...(controlProviders || []),\r\n groupProvider || provideFormGroup(DynamicFormGroupComponent)\r\n ]\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {FORM_GROUP_TYPE as ɵa} from './ngx-dynamic-form/common-types';\nexport {DynamicFormGroupDirective as ɵe} from './ngx-dynamic-form/directives/dynamic-form-group.directive';\nexport {components as ɵb,directives as ɵc,pipes as ɵd} from './ngx-dynamic-form/ngx-dynamic-form.module';"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stemy-ngx-dynamic-form.js","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/services/form-utilities.ts","../../src/ngx-dynamic-form/services/open-api.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-control.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-template.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-group.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-form-base.component.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.ts","../../src/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {\r\n ChangeDetectorRef,\r\n EventEmitter,\r\n HostBinding,\r\n InjectionToken,\r\n Injector,\r\n TemplateRef,\r\n Type,\r\n ValueProvider,\r\n Directive,\r\n Inject, OnInit\r\n} from \"@angular/core\";\r\nimport {AbstractControl, FormControl, FormGroup, ValidationErrors} from \"@angular/forms\";\r\nimport {\r\n IResolveFactory,\r\n ITimer,\r\n IAsyncMessage,\r\n ObjectUtils,\r\n ReflectUtils,\r\n TimerUtils,\r\n UniqueUtils,\r\n IRequestOptions, ApiService, TOASTER_SERVICE, IToasterService, LANGUAGE_SERVICE, ILanguageService\r\n} from \"@stemy/ngx-utils\";\r\n\r\nexport const FORM_GROUP_TYPE: InjectionToken<Type<IFormControlComponent>> = new InjectionToken<Type<IFormControlComponent>>(\"form-group-provider\");\r\nexport const FORM_CONTROL_PROVIDER: InjectionToken<IFormControlProvider> = new InjectionToken<IFormControlProvider>(\"form-control-provider\");\r\n\r\n// --- Basic form control interfaces ---\r\nexport interface IFormControlComponent {\r\n control: IDynamicFormControl;\r\n}\r\n\r\nexport interface IFormGroupComponent {\r\n form: IDynamicFormBase;\r\n control: IDynamicFormControl;\r\n}\r\n\r\nexport const DYNAMIC_FORM: InjectionToken<IDynamicFormBase> = new InjectionToken<IDynamicFormBase>(\"dynamic-form-base\");\r\n\r\n@Directive()\r\nexport abstract class FormControlComponent<T extends IFormControlData> implements IFormControlComponent, OnInit {\r\n\r\n control: IDynamicFormControl;\r\n\r\n constructor(readonly api: ApiService,\r\n @Inject(DYNAMIC_FORM) readonly form: IDynamicFormBase,\r\n @Inject(LANGUAGE_SERVICE) readonly language: ILanguageService,\r\n @Inject(TOASTER_SERVICE) readonly toaster: IToasterService) {\r\n this.ctrInit();\r\n }\r\n\r\n ctrInit(): void {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.control) return;\r\n this.control.form = this.form;\r\n }\r\n\r\n get data(): T {\r\n return <T>(!this.control ? {} : this.control.data);\r\n }\r\n\r\n get value(): any {\r\n return !this.control ? null : this.control.value;\r\n }\r\n\r\n get meta(): any {\r\n return !this.control ? null : this.control.meta;\r\n }\r\n\r\n get testId(): string {\r\n const prefix = this.form?.testId || \"form\";\r\n return `${prefix}-${this.control?.id || \"ctrl\"}`;\r\n }\r\n\r\n @HostBinding(\"class.form-input\")\r\n get inputClass(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport type IFormControlProviderAcceptor = (control: IDynamicFormControl) => boolean;\r\nexport type IFormControlProviderLoader = (control: IDynamicFormControl) => Promise<any>;\r\nexport type IFormControlOptions = (control: IDynamicFormControl) => Promise<IFormControlOption[]>;\r\nexport type IFormControlSerializer = (id: string, parent: IDynamicFormControl) => Promise<any>;\r\n\r\nexport interface IFormControlProvider {\r\n component: Type<IFormControlComponent>;\r\n priority: number;\r\n acceptor: IFormControlProviderAcceptor;\r\n loader: IFormControlProviderLoader;\r\n}\r\n\r\nexport interface IFormSerializer {\r\n id: string;\r\n func: IFormControlSerializer;\r\n}\r\n\r\nexport interface IFormSerializers {\r\n [id: string]: IFormControlSerializer | IResolveFactory | null\r\n}\r\n\r\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\r\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\r\n\r\nexport interface IDynamicFormControl {\r\n id: string;\r\n type: string;\r\n data: IFormControlData;\r\n visible: boolean;\r\n meta: any;\r\n form: IDynamicFormBase;\r\n injector: Injector;\r\n label: string;\r\n provider: IFormControlProvider;\r\n model: any;\r\n formId: string;\r\n\r\n errors: ValidationErrors;\r\n value: any;\r\n touched: boolean;\r\n disabled: boolean;\r\n updateOn: DynamicFormUpdateOn;\r\n\r\n setValue(value: any): void;\r\n\r\n getData<T extends IFormControlData>(): T;\r\n getControl(id: string): IDynamicFormControl;\r\n load(): Promise<any>;\r\n check(): Promise<any>;\r\n shouldSerialize(): Promise<boolean>;\r\n shouldValidate(): Promise<boolean>;\r\n serialize(): Promise<any>;\r\n onFocus(): void;\r\n onBlur(): void;\r\n showErrors(): void;\r\n}\r\n\r\nfunction createValidator(control: IDynamicFormControl): (control: AbstractControl) => Promise<ValidationErrors> {\r\n const data = control.data || {};\r\n const validators = [data.validator].concat(data.validators || []).filter(ObjectUtils.isDefined).map(v => {\r\n return ReflectUtils.resolve<FormControlValidator>(v, control.injector);\r\n });\r\n return (ctrl: any) => new Promise<ValidationErrors>((resolve) => {\r\n const control = <IDynamicFormControl>ctrl;\r\n control.shouldValidate().then(should => {\r\n if (!should) {\r\n resolve(null);\r\n return;\r\n }\r\n const validate = validators.map(v => v(control));\r\n const metaValidator = control.meta.validator;\r\n if (ObjectUtils.isFunction(metaValidator)) {\r\n validate.push(metaValidator(control));\r\n }\r\n Promise.all(validate).then(results => {\r\n results = results.filter(error => ObjectUtils.isObject(error) || ObjectUtils.isString(error));\r\n let result: ValidationErrors = null;\r\n if (results.length > 0) {\r\n result = {};\r\n results.forEach(error => {\r\n if (ObjectUtils.isString(error)) {\r\n result[error] = {};\r\n return;\r\n }\r\n result = Object.assign(result, error);\r\n });\r\n }\r\n resolve(result);\r\n });\r\n });\r\n });\r\n}\r\n\r\nclass DynamicFormControlHelper {\r\n\r\n get id(): string {\r\n return !this.control ? null : this.control.id;\r\n }\r\n\r\n get type(): string {\r\n return !this.control ? \"\" : this.control.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return !this.control ? this.dummyData : this.control.data || this.dummyData;\r\n }\r\n\r\n get visible(): boolean {\r\n return !this.hidden;\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.ctrlProvider;\r\n }\r\n\r\n public readonly formId: string;\r\n public readonly meta: any;\r\n\r\n private hidden: boolean;\r\n private ctrlProvider: IFormControlProvider;\r\n private readonly dummyData: IFormControlData;\r\n private readonly readonlyTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly hideTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly serializeTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly validateTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n\r\n constructor(private form: IDynamicFormBase, private control: IFormControl = null) {\r\n this.formId = UniqueUtils.uuid();\r\n this.meta = {};\r\n this.hidden = false;\r\n this.dummyData = {};\r\n this.readonlyTester = this.createTester(\"readonly\");\r\n this.hideTester = this.createTester(\"hidden\");\r\n this.serializeTester = this.createTester(\"shouldSerialize\", (control: IDynamicFormControl) => {\r\n return Promise.resolve(control.visible);\r\n });\r\n this.validateTester = this.createTester(\"shouldValidate\", (control: IDynamicFormControl) => {\r\n return Promise.resolve(control.visible);\r\n });\r\n }\r\n\r\n load(control: IDynamicFormControl): Promise<any> {\r\n return !this.ctrlProvider ? Promise.resolve(null) : this.ctrlProvider.loader(control);\r\n }\r\n\r\n check(control: IDynamicFormControl): Promise<boolean> {\r\n return new Promise<any>(resolve => {\r\n this.hideTester(control).then(hide => {\r\n this.hidden = hide;\r\n this.readonlyTester(control).then(readonly => {\r\n resolve(control.form.readonly || readonly);\r\n });\r\n });\r\n });\r\n }\r\n\r\n shouldSerialize(control: IDynamicFormControl): Promise<boolean> {\r\n return this.serializeTester(control);\r\n }\r\n\r\n shouldValidate(control: IDynamicFormControl): Promise<boolean> {\r\n return this.validateTester(control);\r\n }\r\n\r\n findProvider(control: IDynamicFormControl): void {\r\n this.ctrlProvider = !this.control || !this.control.type ? null : this.form.findProvider(control);\r\n }\r\n\r\n private createTester(test: string, defaultFunc: FormControlTester = null): (control: IDynamicFormControl) => Promise<boolean> {\r\n const tester: FormControlTester = this.data[test]\r\n ? ReflectUtils.resolve<FormControlTester>(this.data[test], this.form.injector)\r\n : (defaultFunc || (() => Promise.resolve(false)));\r\n return (control: IDynamicFormControl): Promise<boolean> => tester(control);\r\n }\r\n}\r\n\r\nexport class DynamicFormGroup extends FormGroup implements IDynamicFormControl {\r\n\r\n get id(): string {\r\n return this.helper.id;\r\n }\r\n\r\n get type(): string {\r\n return this.helper.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return this.helper.data;\r\n }\r\n\r\n get visible(): boolean {\r\n return this.helper.visible;\r\n }\r\n\r\n get meta(): any {\r\n return this.helper.meta;\r\n }\r\n\r\n get injector(): Injector {\r\n return this.form.injector;\r\n }\r\n\r\n get label(): string {\r\n return this.data.label !== \"\" ? `${this.prefix}${this.data.label}` : \"\";\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.helper.provider;\r\n }\r\n\r\n get model(): any {\r\n return this.mModel;\r\n }\r\n\r\n get formId(): string {\r\n return this.helper.formId;\r\n }\r\n\r\n get formControls(): IDynamicFormControl[] {\r\n return this.mControls || [];\r\n }\r\n\r\n get formFields(): IDynamicFormFieldSets {\r\n return this.mFieldSets || {};\r\n }\r\n\r\n get prefix(): string {\r\n return !this.name ? \"\" : `${this.name}.`;\r\n }\r\n\r\n get name(): string {\r\n return this.mName;\r\n }\r\n\r\n get state(): DynamicFormState {\r\n return <DynamicFormState>(this.loading ? \"LOADING\" : this.status);\r\n }\r\n\r\n private helper: DynamicFormControlHelper;\r\n private mName: string;\r\n private mModel: any;\r\n private mControls: IDynamicFormControl[];\r\n private mSerializers: IFormSerializer[];\r\n private mFieldSets: IDynamicFormFieldSets;\r\n private initialized: boolean;\r\n private loading: boolean;\r\n private changeTimer: ITimer;\r\n\r\n private static createFormControls(group: DynamicFormGroup, controls: IFormControl[]): IDynamicFormControl[] {\r\n if (!controls && ObjectUtils.isObject(group.model)) {\r\n const props = Object.keys(group.model);\r\n controls = props.map(id => {\r\n return getFormControl(group.model, id);\r\n }).filter(ObjectUtils.isDefined);\r\n }\r\n if (!controls) return [];\r\n return controls.map(ctrl => {\r\n if (ctrl.type == \"model\") {\r\n const subGroup = new DynamicFormGroup(group.form, ctrl);\r\n const model = group.model[ctrl.id] || {};\r\n const data = subGroup.getData<IFormModelData>();\r\n data.name = data.name || group.name;\r\n subGroup.setup(model, data);\r\n group.model[ctrl.id] = model;\r\n group.addControl(subGroup.id, subGroup);\r\n return subGroup;\r\n }\r\n return new DynamicFormControl(ctrl, group);\r\n });\r\n }\r\n\r\n private static createFormSerializers(group: DynamicFormGroup, serializers: IFormSerializers): IFormSerializer[] {\r\n if (!serializers && ObjectUtils.isObject(group.model)) {\r\n const props = Object.keys(group.model);\r\n serializers = props.reduce((result, id) => {\r\n const serializer = getFormSerializer(group.model, id);\r\n if (!serializer) return result;\r\n result[id] = serializer;\r\n return result;\r\n }, {});\r\n }\r\n if (!serializers) return [];\r\n return Object.keys(serializers).map(id => {\r\n const serializer = serializers[id] || defaultSerializer;\r\n return !serializer ? null : {\r\n id: id,\r\n func: ReflectUtils.resolve<IFormControlSerializer>(serializer, group.injector)\r\n };\r\n });\r\n }\r\n\r\n constructor(public form: IDynamicFormBase, control: IFormControl = null) {\r\n super({}, {updateOn: ((!control || !control.data) ? null : control.data.updateOn) || form.updateOn || \"blur\"});\r\n this.mName = \"\";\r\n this.mModel = {};\r\n this.mControls = [];\r\n this.mSerializers = [];\r\n this.mFieldSets = {};\r\n this.helper = new DynamicFormControlHelper(form, control);\r\n this.helper.findProvider(this);\r\n this.initialized = false;\r\n this.loading = false;\r\n this.changeTimer = TimerUtils.createTimeout();\r\n this.statusChanges.subscribe(() => {\r\n const root = this.form.root;\r\n root.onStatusChange.emit(root);\r\n });\r\n this.setAsyncValidators(createValidator(this));\r\n }\r\n\r\n getData<T extends IFormControlData>(): T {\r\n return <T>this.data;\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return <any>this.get(id);\r\n }\r\n\r\n load(): Promise<any> {\r\n const promises = this.mControls.map(c => c.load());\r\n promises.push(this.helper.load(this));\r\n return Promise.all(promises);\r\n }\r\n\r\n check(): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n this.helper.check(this).then(readonly => {\r\n if (readonly) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\r\n const promises = this.mControls.map(c => c.check());\r\n Promise.all(promises).then(resolve);\r\n })\r\n });\r\n }\r\n\r\n shouldSerialize(): Promise<boolean> {\r\n return this.helper.shouldSerialize(this);\r\n }\r\n\r\n shouldValidate(): Promise<boolean> {\r\n return this.helper.shouldValidate(this);\r\n }\r\n\r\n serialize(): Promise<any> {\r\n return new Promise<any>((resolve) => {\r\n const result = {};\r\n const serializers = this.mSerializers.map(s => {\r\n return new Promise<any>(resolve => {\r\n s.func(s.id, this).then(res => {\r\n const ctrl = this.getControl(s.id);\r\n const promise = !ctrl ? Promise.resolve(true) : ctrl.shouldSerialize();\r\n promise.then(should => {\r\n if (should) result[s.id] = res;\r\n resolve(null);\r\n });\r\n });\r\n });\r\n });\r\n Promise.all(serializers).then(() => resolve(result));\r\n });\r\n }\r\n\r\n onFocus(): void {\r\n this.markAsUntouched({onlySelf: true});\r\n }\r\n\r\n onBlur(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n\r\n showErrors(): void {\r\n this.markAsTouched({onlySelf: true});\r\n this.mControls.forEach(ctrl => ctrl.showErrors());\r\n }\r\n\r\n reloadControls(): Promise<any> {\r\n let callback = () => {};\r\n if (this.initialized === false) {\r\n this.initialized = true;\r\n this.loading = true;\r\n callback = () => {\r\n this.loading = false;\r\n // this.cdr.detectChanges();\r\n const root = this.form.root;\r\n root.onInit.emit(root);\r\n root.onStatusChange.emit(root);\r\n // https://github.com/angular/angular/issues/14542\r\n const statusTimer = TimerUtils.createInterval();\r\n statusTimer.set(() => {\r\n if (this.status == \"PENDING\") return;\r\n statusTimer.clear();\r\n root.onStatusChange.emit(root);\r\n }, 50);\r\n setTimeout(statusTimer.clear, 5000);\r\n };\r\n }\r\n const promise = new Promise<any>(resolve => {\r\n this.load().then(() => this.check().then(resolve));\r\n });\r\n promise.then(callback, callback);\r\n return promise;\r\n }\r\n\r\n setup(model: any, info: IDynamicFormInfo): void {\r\n this.mName = info.name || \"\";\r\n this.mModel = model;\r\n this.mControls.forEach(ctrl => this.removeControl(ctrl.id));\r\n this.mControls = DynamicFormGroup.createFormControls(this, info.controls);\r\n this.mControls.forEach((ctrl: any) => this.addControl(ctrl.id, ctrl));\r\n this.mSerializers = DynamicFormGroup.createFormSerializers(this, info.serializers);\r\n this.mFieldSets = info.fieldSets ? info.fieldSets.reduce((result, fs) => {\r\n result[fs.id] = fs;\r\n return result;\r\n }, {}) : getFormFieldSets(Object.getPrototypeOf(model).constructor);\r\n }\r\n\r\n updateModel(control: IDynamicFormControl): void {\r\n this.model[control.id] = control.value;\r\n this.changeTimer.clear();\r\n this.changeTimer.set(() => {\r\n this.check().then(() => this.reloadControlsFrom(control, new Set<IDynamicFormControl>()).then(() => {\r\n this.form.root.onChange.emit(control);\r\n }));\r\n }, 250);\r\n }\r\n\r\n private reloadControlsFrom(control: IDynamicFormControl, controls?: Set<IDynamicFormControl>): Promise<any> {\r\n const data = control.data;\r\n if (!data || !data.reload) return Promise.resolve(null);\r\n const reload = ObjectUtils.isArray(data.reload) ? data.reload : [data.reload];\r\n return Promise.all(reload.map(id => {\r\n const nextControl = this.getControl(id);\r\n if (!nextControl || controls.has(nextControl)) return Promise.resolve(null);\r\n controls.add(nextControl);\r\n return new Promise<any>(resolve => {\r\n nextControl.load().then(() => {\r\n this.reloadControlsFrom(nextControl, controls).then(resolve);\r\n });\r\n })\r\n }))\r\n }\r\n}\r\n\r\nexport class DynamicFormControl extends FormControl implements IDynamicFormControl {\r\n\r\n get id(): string {\r\n return this.helper.id;\r\n }\r\n\r\n get type(): string {\r\n return this.helper.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return this.helper.data;\r\n }\r\n\r\n get visible(): boolean {\r\n return this.helper.visible;\r\n }\r\n\r\n get meta(): any {\r\n return this.helper.meta;\r\n }\r\n\r\n get injector(): Injector {\r\n return this.form.injector;\r\n }\r\n\r\n get label(): string {\r\n return this.data.label !== \"\" ? `${this.group.prefix}${this.data.label}` : \"\";\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.helper.provider;\r\n }\r\n\r\n get model(): any {\r\n return this.group.model;\r\n }\r\n\r\n get formId(): string {\r\n return this.helper.formId;\r\n }\r\n\r\n form: IDynamicFormBase;\r\n\r\n private helper: DynamicFormControlHelper;\r\n\r\n constructor(private control: IFormControl, public readonly group: DynamicFormGroup) {\r\n super(group.model[control.id], {updateOn: control.data.updateOn || group.updateOn});\r\n this.group.addControl(control.id, this);\r\n this.form = this.group.form;\r\n this.helper = new DynamicFormControlHelper(this.form, control);\r\n this.helper.findProvider(this);\r\n this.valueChanges.subscribe(() => this.group.updateModel(this));\r\n this.setAsyncValidators(createValidator(this));\r\n }\r\n\r\n getData<T extends IFormControlData>(): T {\r\n return <T>this.data;\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return null;\r\n }\r\n\r\n load(): Promise<any> {\r\n return this.helper.load(this);\r\n }\r\n\r\n check(): Promise<any> {\r\n const check = this.helper.check(this);\r\n check.then(readonly => {\r\n if (readonly || this.group.disabled) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\r\n });\r\n return check;\r\n }\r\n\r\n shouldSerialize(): Promise<boolean> {\r\n return this.helper.shouldSerialize(this);\r\n }\r\n\r\n shouldValidate(): Promise<boolean> {\r\n return this.helper.shouldValidate(this);\r\n }\r\n\r\n serialize(): Promise<any> {\r\n return Promise.resolve(this.value);\r\n }\r\n\r\n onFocus(): void {\r\n this.markAsUntouched({onlySelf: true});\r\n }\r\n\r\n onBlur(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n\r\n showErrors(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n}\r\n\r\nexport interface IFormControl {\r\n id: string;\r\n type: string;\r\n visible?: boolean;\r\n data?: IFormControlData;\r\n}\r\n\r\nexport interface IFormControlData {\r\n label?: string;\r\n labelAlign?: string;\r\n fieldSet?: string;\r\n classes?: string;\r\n readonly?: FormControlTesterFactory;\r\n hidden?: FormControlTesterFactory;\r\n shouldSerialize?: FormControlTesterFactory;\r\n shouldValidate?: FormControlTesterFactory;\r\n validator?: FormControlValidatorFactory;\r\n validators?: FormControlValidatorFactory[];\r\n updateOn?: DynamicFormUpdateOn;\r\n reload?: string | string[];\r\n}\r\n\r\nexport interface IFormInputData extends IFormControlData {\r\n type?: string;\r\n autocomplete?: string;\r\n placeholder?: string;\r\n useLanguage?: boolean;\r\n step?: number;\r\n min?: number;\r\n max?: number;\r\n}\r\n\r\nexport interface IFormSelectData extends IFormControlData {\r\n options?: IFormControlOptions | IResolveFactory;\r\n emptyOption?: boolean;\r\n type?: string;\r\n multi?: boolean;\r\n}\r\n\r\nexport interface IFormStaticData extends IFormControlData {\r\n properties?: string[];\r\n style?: string;\r\n}\r\n\r\nexport interface IFormFileData extends IFormControlData {\r\n accept?: string;\r\n multi?: boolean;\r\n baseUrl?: string;\r\n asFile?: boolean;\r\n asDataUrl?: boolean;\r\n uploadUrl?: string;\r\n uploadOptions?: IRequestOptions;\r\n createUploadData?: (file: File) => any;\r\n}\r\n\r\nexport interface IFormModelData extends IFormControlData, IDynamicFormInfo {\r\n\r\n}\r\n\r\nexport interface IFormFieldSet {\r\n id: string;\r\n classes?: string;\r\n title?: string;\r\n titleClasses?: string;\r\n setClasses?: string;\r\n controlClasses?: string;\r\n}\r\n\r\nexport interface IFormControlOption {\r\n id: any;\r\n label: string;\r\n selectable?: boolean;\r\n}\r\n\r\n// --- Basic form interfaces ---\r\n\r\nexport interface IDynamicFormTemplates {\r\n [id: string]: TemplateRef<any>;\r\n}\r\n\r\nexport interface IDynamicFormConfig {\r\n path?: string | number | Array<string | number>;\r\n name?: string;\r\n testId?: string;\r\n classes?: string;\r\n formClasses?: string;\r\n innerFormClasses?: string;\r\n id: string;\r\n}\r\n\r\nexport interface IDynamicSingleFormConfig extends IDynamicFormConfig, IDynamicFormInfo {\r\n data: any;\r\n controlData?: IFormControlData;\r\n multi?: false;\r\n}\r\n\r\nexport interface IDynamicMultiFormConfig extends IDynamicFormConfig {\r\n data: IDynamicFormsConfigs;\r\n multi: true;\r\n}\r\n\r\nexport type IDynamicFormsConfigs = Array<IDynamicSingleFormConfig | IDynamicMultiFormConfig>;\r\n\r\nexport interface IDynamicFormBase {\r\n\r\n name?: string;\r\n testId?: string;\r\n readonly?: boolean;\r\n updateOn?: \"change\" | \"blur\" | \"submit\";\r\n classes: string;\r\n parent: IDynamicFormBase;\r\n\r\n wrapperTemplate: TemplateRef<any>;\r\n fieldSetTemplate: TemplateRef<any>;\r\n controlTemplate: TemplateRef<any>;\r\n\r\n controlTemplates: IDynamicFormTemplates;\r\n labelTemplates: IDynamicFormTemplates;\r\n inputTemplates: IDynamicFormTemplates;\r\n prefixTemplates: IDynamicFormTemplates;\r\n suffixTemplates: IDynamicFormTemplates;\r\n setPrefixTemplates: IDynamicFormTemplates;\r\n setSuffixTemplates: IDynamicFormTemplates;\r\n\r\n onChange: EventEmitter<IDynamicFormControl>;\r\n onStatusChange: EventEmitter<IDynamicFormBase>;\r\n onInit: EventEmitter<IDynamicFormBase>;\r\n onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n root?: IDynamicFormBase;\r\n status: DynamicFormState;\r\n injector?: Injector;\r\n cdr?: ChangeDetectorRef;\r\n\r\n validate(showErrors?: boolean): Promise<any>;\r\n\r\n serialize(validate?: boolean): Promise<any>;\r\n\r\n check(): Promise<any>;\r\n\r\n getControl(id: string): IDynamicFormControl;\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider;\r\n}\r\n\r\nexport declare type AsyncSubmitMethod = (form: IDynamicFormBase) => Promise<IAsyncMessage>;\r\n\r\nexport interface IDynamicFormInfo {\r\n group?: DynamicFormGroup;\r\n name?: string;\r\n controls?: IFormControl[];\r\n serializers?: IFormSerializers;\r\n fieldSets?: IFormFieldSet[];\r\n}\r\n\r\nexport interface IDynamicForm extends IDynamicFormBase, IDynamicFormInfo {\r\n data: any;\r\n}\r\n\r\nexport interface IDynamicFormFieldSets {\r\n [id: string]: IFormFieldSet\r\n}\r\n\r\n// --- Basic form types ---\r\nexport type FormControlTester = (control: IDynamicFormControl) => Promise<boolean>;\r\nexport type FormControlTesterFactory = FormControlTester | IResolveFactory;\r\nexport type FormControlValidator = (control: IDynamicFormControl) => Promise<string | ValidationErrors>;\r\nexport type FormControlValidatorFactory = FormControlValidator | IResolveFactory;\r\n\r\n// --- Decorator functions ---\r\nconst emptyArray: any = [];\r\nconst emptyTester: FormControlTester = () => {\r\n return Promise.resolve(false);\r\n};\r\n\r\nexport function defaultSerializer(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const control = parent.getControl(id);\r\n return !control ? Promise.resolve(parent.model[id]) : control.serialize();\r\n}\r\n\r\nexport function FormSerializable(serializer?: IFormControlSerializer | IResolveFactory): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n ReflectUtils.defineMetadata(\"dynamicFormSerializer\", serializer || defaultSerializer, target, propertyKey);\r\n };\r\n}\r\n\r\nexport function FormInput(data?: IFormInputData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, propertyKey);\r\n const type = meta ? meta.name : \"\";\r\n let inputType = propertyKey.indexOf(\"password\") < 0 ? \"text\" : \"password\";\r\n switch (type) {\r\n case \"Number\":\r\n inputType = \"number\";\r\n break;\r\n case \"Boolean\":\r\n inputType = \"checkbox\";\r\n break;\r\n }\r\n defineFormControl(target, propertyKey, createFormInput(propertyKey, data, inputType));\r\n };\r\n}\r\n\r\nexport function FormSelect(data?: IFormSelectData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormSelect(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormStatic(data?: IFormStaticData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormStatic(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormModel(data?: IFormModelData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormModel(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFile(data?: IFormFileData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormFile(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFieldSet(data: IFormFieldSet): ClassDecorator {\r\n return (target: any): void => {\r\n const sets = getFormFieldSets(target);\r\n data.classes = data.classes || \"\";\r\n sets[data.id] = data;\r\n ReflectUtils.defineMetadata(\"dynamicFormFieldSets\", sets, target);\r\n };\r\n}\r\n\r\nexport interface FormGroupProvider extends ValueProvider {\r\n provide: InjectionToken<Type<IFormGroupComponent>>;\r\n multi?: boolean;\r\n useValue: Type<IFormGroupComponent>;\r\n}\r\n\r\nexport function provideFormGroup(component: Type<IFormGroupComponent>): FormGroupProvider {\r\n return {\r\n provide: FORM_GROUP_TYPE,\r\n useValue: component\r\n };\r\n}\r\n\r\nexport interface FormControlProvider {\r\n provide: InjectionToken<IFormControlProvider>;\r\n multi?: boolean;\r\n useValue: IFormControlProvider;\r\n}\r\n\r\nexport function provideFormControl(component: Type<IFormControlComponent>, acceptor: IFormControlProviderAcceptor, loader: IFormControlProviderLoader, priority: number = 0): FormControlProvider {\r\n return {\r\n provide: FORM_CONTROL_PROVIDER,\r\n multi: true,\r\n useValue: {\r\n component: component,\r\n priority: priority,\r\n acceptor: acceptor,\r\n loader: loader\r\n }\r\n };\r\n}\r\n\r\nexport function defineFormControl(target: any, propertyKey: string, control: IFormControl): void {\r\n ReflectUtils.defineMetadata(\"dynamicFormControl\", control, target, propertyKey);\r\n}\r\n\r\nexport function getFormFieldSets(target: any): IDynamicFormFieldSets {\r\n return ReflectUtils.getMetadata(\"dynamicFormFieldSets\", target) || {};\r\n}\r\n\r\nexport function getFormControl(target: any, propertyKey: string): IFormControl {\r\n return ReflectUtils.getMetadata(\"dynamicFormControl\", target, propertyKey);\r\n}\r\n\r\nexport function getFormSerializer(target: any, propertyKey: string): IFormControlSerializer | IResolveFactory {\r\n return ReflectUtils.getMetadata(\"dynamicFormSerializer\", target, propertyKey);\r\n}\r\n\r\nexport function createFormControl(id: string, type: string, data?: IFormControlData): IFormControl {\r\n data = data || {};\r\n data.label = ObjectUtils.isNullOrUndefined(data.label) ? id : data.label;\r\n data.labelAlign = data.labelAlign || \"left\";\r\n data.fieldSet = data.fieldSet || UniqueUtils.uuid();\r\n data.classes = data.classes || \"\";\r\n data.readonly = data.readonly || emptyTester;\r\n data.hidden = data.hidden || emptyTester;\r\n data.validators = data.validators || emptyArray;\r\n return {\r\n id: id,\r\n type: type,\r\n data: data\r\n };\r\n}\r\n\r\nexport function createFormInput(id: string, data: IFormInputData, type: string = \"text\"): IFormControl {\r\n const control = createFormControl(id, \"input\", data);\r\n data = control.data;\r\n data.type = data.type || type;\r\n data.classes = !data.classes ? `form-group-${data.type}` : `${data.classes} form-group-${data.type}`;\r\n data.placeholder = data.placeholder || \"\";\r\n data.step = data.step || 1;\r\n return control;\r\n}\r\n\r\nexport function createFormSelect(id: string, data: IFormSelectData): IFormControl {\r\n const control = createFormControl(id, \"select\", data);\r\n data = control.data;\r\n data.options = data.options || (() => Promise.resolve([]));\r\n data.type = data.type || \"select\";\r\n const classType = data.type == \"select\" ? \"select\" : `select-${data.type}`;\r\n data.classes = !data.classes ? `form-group-${classType}` : `${data.classes} form-group-${classType}`;\r\n return control;\r\n}\r\n\r\nexport function createFormStatic(id: string, data: IFormStaticData): IFormControl {\r\n const control = createFormControl(id, \"static\", data);\r\n data = control.data;\r\n data.style = data.style || \"table\";\r\n return control;\r\n}\r\n\r\nexport function createFormModel(id: string, data: IFormModelData): IFormControl {\r\n const control = createFormControl(id, \"model\", data);\r\n data = control.data;\r\n data.name = data.name || \"\";\r\n return control;\r\n}\r\n\r\nexport function createFormFile(id: string, data: IFormFileData): IFormControl {\r\n const control = createFormControl(id, \"file\", data);\r\n data = control.data;\r\n data.accept = data.accept || \".jpg,.jpeg,.png\";\r\n data.multi = data.multi || false;\r\n data.baseUrl = ObjectUtils.isString(data.baseUrl) ? data.baseUrl : \"assets/\";\r\n data.uploadUrl = ObjectUtils.isString(data.uploadUrl) ? data.uploadUrl : \"assets\";\r\n data.createUploadData = data.createUploadData || ((file: File) => {\r\n const form = new FormData();\r\n form.append(\"file\", file);\r\n return form;\r\n });\r\n return control;\r\n}\r\n","import {ComponentFactoryResolver, Inject, Injectable, Injector, Type, ViewContainerRef} from \"@angular/core\";\r\nimport {\r\n FORM_CONTROL_PROVIDER, FORM_GROUP_TYPE,\r\n IDynamicFormControl,\r\n IFormControlComponent,\r\n IFormControlProvider,\r\n IFormGroupComponent\r\n} from \"../common-types\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\n\r\n@Injectable()\r\nexport class DynamicFormService {\r\n\r\n constructor(@Inject(FORM_CONTROL_PROVIDER) private components: IFormControlProvider[],\r\n @Inject(FORM_GROUP_TYPE) private groupType: Type<IFormGroupComponent>,\r\n private resolver: ComponentFactoryResolver,\r\n public readonly injector: Injector) {\r\n }\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider {\r\n if (!control) return null;\r\n const providers = this.components.filter(p => p.acceptor(control));\r\n if (providers.length == 0) {\r\n throw new Error(`No component provider for control: ${JSON.stringify({\r\n id: control.id,\r\n type: control.type,\r\n data: control.data\r\n })}`);\r\n }\r\n // Sort providers\r\n providers.sort((a, b) => ObjectUtils.compare(a.priority, b.priority))\r\n return providers[0];\r\n }\r\n\r\n createComponent(vcr: ViewContainerRef, provider: IFormControlProvider): IFormControlComponent {\r\n vcr.clear();\r\n if (!provider) return null;\r\n const factory = this.resolver.resolveComponentFactory(provider.component);\r\n return vcr.createComponent(factory).instance;\r\n }\r\n\r\n createGroup(vcr: ViewContainerRef): IFormGroupComponent {\r\n vcr.clear();\r\n const factory = this.resolver.resolveComponentFactory(this.groupType);\r\n return vcr.createComponent(factory).instance;\r\n }\r\n}\r\n","import {DatePipe} from \"@angular/common\";\r\nimport {FactoryDependencies, FileUtils, ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {FormControlTester, FormControlValidator, IDynamicFormControl, IFormControlSerializer} from \"../common-types\";\r\n\r\nexport class FormUtilities {\r\n\r\n static checkField(expression: string = `true`): FormControlTester {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl): Promise<boolean> => {\r\n return Promise.resolve(ObjectUtils.evaluate(expression, {control: control}));\r\n };\r\n return lambda;\r\n }\r\n\r\n static checkReadonly(control: IDynamicFormControl): Promise<boolean> {\r\n return Promise.resolve(control.visible && !control.disabled);\r\n }\r\n\r\n static readonly(): Promise<boolean> {\r\n return Promise.resolve(true);\r\n }\r\n\r\n static validateJSON(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n try {\r\n JSON.parse(value);\r\n return Promise.resolve(null);\r\n } catch (e) {\r\n return Promise.resolve(\"error.not-valid-json\")\r\n }\r\n }\r\n\r\n static validateRequired(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n return Promise.resolve(!ObjectUtils.isNumber(value) && !value ? \"error.required\" : null);\r\n }\r\n\r\n static validateMinLength(length: number): FormControlValidator {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl) => {\r\n const value = control.value;\r\n if (!ObjectUtils.isString(value) || value.length < length) {\r\n return Promise.resolve({\"error.min-length\": {length: length}});\r\n }\r\n return Promise.resolve(null);\r\n };\r\n return lambda;\r\n }\r\n\r\n static validateMaxLength(length: number): FormControlValidator {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl) => {\r\n const value = control.value;\r\n if (!ObjectUtils.isString(value) || value.length > length) {\r\n return Promise.resolve({\"error.max-length\": {length: length}});\r\n }\r\n return Promise.resolve(null);\r\n };\r\n return lambda;\r\n }\r\n\r\n static validateRequiredTranslation(control: IDynamicFormControl): Promise<string> {\r\n const value: any[] = control.value;\r\n if (!value || value.length == 0) return Promise.resolve(\"error.required\");\r\n return Promise.resolve(value.findIndex(t => (t.lang == \"de\" || t.lang == \"en\") && !t.translation) < 0 ? null : \"error.required\");\r\n }\r\n\r\n static validateEmail(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const emailRegexp = /^(([^<>()\\[\\]\\\\.,;:\\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 return Promise.resolve(emailRegexp.test(value) ? null : \"error.invalid-email\");\r\n }\r\n\r\n static validatePhone(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const phoneRegexp = /^(?:\\d){10,12}$/;\r\n return Promise.resolve(phoneRegexp.test(value) ? null : \"error.invalid-phone\");\r\n }\r\n\r\n static serializeLogo(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value || value.length == 0 ? null : value);\r\n }\r\n\r\n static serializeFile(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: any = parent.model[id];\r\n if (ObjectUtils.isBlob(value)) return Promise.resolve(value);\r\n return Promise.resolve(!ObjectUtils.isString(value) || !value.startsWith(\"data:\") ? null : FileUtils.dataToBlob(value));\r\n }\r\n\r\n static serializeNumber(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value || value.length == 0 ? 0 : parseFloat(value));\r\n }\r\n\r\n static serializeJSON(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value ? {} : JSON.parse(value));\r\n }\r\n\r\n @FactoryDependencies(DatePipe)\r\n static serializeDate(date: DatePipe, format: string = \"yyyy-MM-dd\", defaultValue: string = \"\"): IFormControlSerializer {\r\n // @dynamic\r\n const lambda = (id: string, parent: IDynamicFormControl): Promise<any> => {\r\n const value: any = parent.model[id];\r\n if (!ObjectUtils.isDate(value)) return Promise.resolve(value || defaultValue);\r\n return Promise.resolve(!format ? value : date.transform(value, format));\r\n };\r\n return lambda;\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {ApiService, StringUtils} from \"@stemy/ngx-utils\";\r\n\r\nimport {FormUtilities} from \"./form-utilities\";\r\n\r\nimport {\r\n createFormFile,\r\n createFormInput,\r\n createFormSelect,\r\n FormControlValidatorFactory,\r\n IDynamicFormControl,\r\n IFormControl,\r\n IFormControlData,\r\n IFormFileData,\r\n IFormInputData,\r\n IFormSelectData,\r\n IFormSerializers\r\n} from \"../common-types\";\r\n\r\nexport interface IOpenApiSchemaProperty {\r\n id: string;\r\n type: string;\r\n format: string;\r\n column: boolean;\r\n additionalProperties: any;\r\n $ref: string;\r\n enum: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IOpenApiSchema {\r\n properties: { [name: string]: IOpenApiSchemaProperty };\r\n required: string[];\r\n}\r\n\r\nexport interface IDynamicFormInputs {\r\n controls?: IFormControl[];\r\n serializers?: IFormSerializers;\r\n schema?: IOpenApiSchema;\r\n}\r\n\r\n@Injectable()\r\nexport class OpenApiService {\r\n\r\n private schemasPromise: Promise<any>;\r\n private schemas: any;\r\n\r\n constructor(private api: ApiService) {\r\n const baseUrl = this.api.url(\"\").replace(\"api/\", \"api-docs\");\r\n this.schemas = {};\r\n this.schemasPromise = new Promise<any>((resolve => {\r\n this.api.client.get(baseUrl).subscribe((res: any) => {\r\n this.schemas = res.definitions || {};\r\n resolve(this.schemas);\r\n }, () => {\r\n resolve({});\r\n });\r\n }));\r\n }\r\n\r\n getFormInputsForSchema(name: string): Promise<IDynamicFormInputs> {\r\n this.api.cache = {};\r\n return this.schemasPromise.then(schemas => {\r\n const schema: IOpenApiSchema = schemas[name];\r\n const inputs = this.getFormInputsForSchemaDef(schema);\r\n return inputs;\r\n });\r\n }\r\n\r\n private getFormInputsForSchemaDef(schema: IOpenApiSchema): IDynamicFormInputs {\r\n const inputs: IDynamicFormInputs = {};\r\n if (!schema) return inputs;\r\n inputs.schema = schema;\r\n inputs.serializers = {};\r\n inputs.controls = Object.keys(schema.properties || {}).map(p => {\r\n const property = schema.properties[p];\r\n property.id = p;\r\n inputs.serializers[p] = (id: string, parent: IDynamicFormControl) => {\r\n return Promise.resolve(parent.model[id]);\r\n };\r\n return this.getFormControlForProperty(property, schema);\r\n }).filter(t => null !== t);\r\n return inputs;\r\n }\r\n\r\n private getFormControlForProperty(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControl {\r\n if (Array.isArray(property.enum)) {\r\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\r\n }\r\n switch (property.type) {\r\n case \"string\":\r\n case \"number\":\r\n case \"boolean\":\r\n case \"textarea\":\r\n return createFormInput(property.id, this.getFormInputData(property, schema));\r\n case \"list\":\r\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\r\n case \"file\":\r\n return createFormFile(property.id, this.getFormFileData(property, schema));\r\n }\r\n return null;\r\n }\r\n\r\n private getBaseFormData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControlData {\r\n return {\r\n readonly: property.readonly ? FormUtilities.readonly : null,\r\n shouldSerialize: FormUtilities.checkReadonly,\r\n validators: this.getValidators(property, schema)\r\n }\r\n }\r\n\r\n private getFormInputData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormInputData {\r\n let type = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : property.type;\r\n switch (property.type) {\r\n case \"boolean\":\r\n type = \"checkbox\";\r\n break;\r\n case \"textarea\":\r\n type = \"textarea\";\r\n break;\r\n }\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n type\r\n };\r\n }\r\n\r\n private getFormSelectData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormSelectData {\r\n const options = Array.isArray(property.enum)\r\n ? () => {\r\n return Promise.resolve(property.enum.map(id => ({ id, label: `${property.id}.${id}` })));\r\n }\r\n : () => {\r\n this.api.cache[property.endpoint] = this.api.cache[property.endpoint] || this.api.list(property.endpoint, this.api.makeListParams(1, -1)).then(result => {\r\n return result.items.map(i => {\r\n return { id: i._id, label: i.name };\r\n });\r\n });\r\n return this.api.cache[property.endpoint];\r\n };\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n options,\r\n };\r\n }\r\n\r\n private getFormFileData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormFileData {\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n multi: property.multi\r\n };\r\n }\r\n\r\n private getValidators(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): FormControlValidatorFactory[] {\r\n const validators: FormControlValidatorFactory[] = [];\r\n if (schema.required.indexOf(property.id) >= 0) {\r\n validators.push(FormUtilities.validateRequired);\r\n }\r\n if (property.minLength) {\r\n validators.push({\r\n type: FormUtilities,\r\n func: FormUtilities.validateMinLength,\r\n params: [property.minLength]\r\n });\r\n }\r\n if (property.maxLength) {\r\n validators.push({\r\n type: FormUtilities,\r\n func: FormUtilities.validateMaxLength,\r\n params: [property.maxLength]\r\n });\r\n }\r\n switch (property.format) {\r\n case \"email\":\r\n validators.push(FormUtilities.validateEmail);\r\n break;\r\n }\r\n return validators;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2\r\n} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\nimport {AsyncSubmitMethod, IDynamicFormBase} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"[async-submit]\",\r\n exportAs: \"async-submit\"\r\n})\r\nexport class AsyncSubmitDirective implements OnInit, OnDestroy {\r\n\r\n @Input(\"async-submit\") method: AsyncSubmitMethod;\r\n @Input() form: IDynamicFormBase;\r\n\r\n @Output() onSuccess: EventEmitter<IAsyncMessage>;\r\n @Output() onError: EventEmitter<IAsyncMessage>;\r\n\r\n private loading: boolean;\r\n private disabled: boolean;\r\n private callback: Function;\r\n private onStatusChange: Subscription;\r\n private onSubmit: Subscription;\r\n\r\n @HostBinding(\"class.disabled\")\r\n get isDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n @HostBinding(\"class.loading\")\r\n get isLoading(): boolean {\r\n return this.loading;\r\n }\r\n\r\n constructor(@Inject(TOASTER_SERVICE) private toaster: IToasterService, private cdr: ChangeDetectorRef, elem: ElementRef, renderer: Renderer2) {\r\n this.onSuccess = new EventEmitter<IAsyncMessage>();\r\n this.onError = new EventEmitter<IAsyncMessage>();\r\n if (elem.nativeElement.tagName !== \"BUTTON\") return;\r\n renderer.setAttribute(elem.nativeElement, \"type\", \"button\");\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.form) return;\r\n this.disabled = this.form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n this.onStatusChange = this.form.onStatusChange.subscribe(form => {\r\n this.disabled = form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n if (!this.callback || form.status == \"PENDING\") return;\r\n if (!this.disabled) {\r\n this.callback();\r\n }\r\n this.callback = null;\r\n });\r\n this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.onStatusChange) this.onStatusChange.unsubscribe();\r\n if (this.onSubmit) this.onSubmit.unsubscribe();\r\n }\r\n\r\n @HostListener(\"click\")\r\n click(): void {\r\n this.callback = () => this.callMethod();\r\n if (this.form.status !== \"VALID\" && this.form.status !== \"INVALID\") return;\r\n this.callback();\r\n this.callback = null;\r\n }\r\n\r\n callMethod(): void {\r\n if (this.loading) return;\r\n this.loading = true;\r\n this.method(this.form).then(result => {\r\n this.loading = false;\r\n if (result) {\r\n this.onSuccess.emit(result);\r\n this.toaster.success(result.message, result.context);\r\n }\r\n }, reason => {\r\n if (!reason || !reason.message)\r\n throw new Error(\"Reason must implement IAsyncMessage interface\");\r\n this.loading = false;\r\n this.onError.emit(reason);\r\n this.toaster.error(reason.message, reason.context);\r\n });\r\n }\r\n}\r\n","import {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\r\nimport {IDynamicFormControl, IFormControlComponent} from \"../common-types\";\r\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\r\n\r\n@Directive({\r\n selector: \"[form-control]\",\r\n})\r\nexport class DynamicFormControlDirective implements OnChanges {\r\n\r\n @Input(\"form-control\") control: IDynamicFormControl;\r\n\r\n get component(): IFormControlComponent {\r\n return this.comp;\r\n }\r\n\r\n private comp: IFormControlComponent;\r\n\r\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.control) {\r\n this.comp = this.forms.createComponent(this.vcr, this.control.provider);\r\n }\r\n if (!this.comp) return;\r\n this.comp.control = this.control;\r\n }\r\n}\r\n","import {Directive, Input, TemplateRef} from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: `ng-template[control],\r\n ng-template[label],\r\n ng-template[input],\r\n ng-template[prefix],\r\n ng-template[suffix],\r\n ng-template[setPrefix],\r\n ng-template[setSuffix],\r\n ng-template[formPrefix],\r\n ng-template[formSuffix],\r\n ng-template[innerFormPrefix],\r\n ng-template[innerFormSuffix]`\r\n})\r\nexport class DynamicFormTemplateDirective {\r\n\r\n @Input() control: string;\r\n @Input() label: string;\r\n @Input() input: string;\r\n @Input() prefix: string;\r\n @Input() suffix: string;\r\n @Input() setPrefix: string;\r\n @Input() setSuffix: string;\r\n @Input() formPrefix: string;\r\n @Input() formSuffix: string;\r\n @Input() innerFormPrefix: string;\r\n @Input() innerFormSuffix: string;\r\n\r\n constructor(public template: TemplateRef<any>) {\r\n }\r\n}\r\n","import {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\r\nimport {IDynamicFormControl, IFormControlComponent, IFormGroupComponent} from \"../common-types\";\r\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\r\n\r\n@Directive({\r\n selector: \"[form-group]\",\r\n})\r\nexport class DynamicFormGroupDirective implements OnChanges {\r\n\r\n @Input(\"form-group\") control: IDynamicFormControl;\r\n @Input() visible: boolean;\r\n\r\n get component(): IFormControlComponent {\r\n return this.comp;\r\n }\r\n\r\n private comp: IFormGroupComponent;\r\n\r\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.control || changes.form || changes.visible) {\r\n if (!this.visible) {\r\n this.vcr.clear();\r\n this.comp = null;\r\n return;\r\n }\r\n this.comp = this.forms.createGroup(this.vcr);\r\n }\r\n if (!this.comp) return;\r\n this.comp.control = this.control;\r\n }\r\n}\r\n","import { AfterContentInit, ChangeDetectorRef, ContentChild, ContentChildren, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, Directive } from \"@angular/core\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControl, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormTemplates,\r\n IFormControlProvider\r\n} from \"../../common-types\";\r\nimport {DynamicFormTemplateDirective} from \"../../directives/dynamic-form-template.directive\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\n@Directive()\r\nexport abstract class DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit {\r\n\r\n @Input() name: string;\r\n @Input() testId: string;\r\n @Input() readonly: boolean;\r\n @Input() updateOn: \"change\" | \"blur\" | \"submit\";\r\n @Input() classes: any;\r\n @Input() parent: IDynamicFormBase;\r\n\r\n @Input() wrapperTemplate: TemplateRef<any>;\r\n @Input() fieldSetTemplate: TemplateRef<any>;\r\n @Input() controlTemplate: TemplateRef<any>;\r\n\r\n @Input() controlTemplates: IDynamicFormTemplates;\r\n @Input() labelTemplates: IDynamicFormTemplates;\r\n @Input() inputTemplates: IDynamicFormTemplates;\r\n @Input() prefixTemplates: IDynamicFormTemplates;\r\n @Input() suffixTemplates: IDynamicFormTemplates;\r\n @Input() setPrefixTemplates: IDynamicFormTemplates;\r\n @Input() setSuffixTemplates: IDynamicFormTemplates;\r\n\r\n @Output() onChange: EventEmitter<IDynamicFormControl>;\r\n @Output() onStatusChange: EventEmitter<IDynamicFormBase>;\r\n @Output() onInit: EventEmitter<IDynamicFormBase>;\r\n @Output() onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n @ContentChild(\"prefixTemplate\")\r\n prefixTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"suffixTemplate\")\r\n suffixTemplate: TemplateRef<any>;\r\n\r\n get root(): IDynamicFormBase {\r\n let form: IDynamicFormBase = this;\r\n while (ObjectUtils.isDefined(form.parent)) {\r\n form = form.parent;\r\n }\r\n return form;\r\n }\r\n\r\n abstract status: DynamicFormState;\r\n readonly injector: Injector;\r\n readonly cdr: ChangeDetectorRef;\r\n\r\n @ContentChildren(DynamicFormTemplateDirective)\r\n protected templates: QueryList<DynamicFormTemplateDirective>;\r\n\r\n @ContentChild(\"wrapperTemplate\")\r\n protected cWrapperTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"fieldSetTemplate\")\r\n protected cFieldSetTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"controlTemplate\")\r\n protected cControlTemplate: TemplateRef<any>;\r\n\r\n protected constructor(cdr: ChangeDetectorRef, private formService: DynamicFormService) {\r\n this.name = \"\";\r\n this.testId = \"form\";\r\n this.controlTemplates = {};\r\n this.labelTemplates = {};\r\n this.inputTemplates = {};\r\n this.prefixTemplates = {};\r\n this.suffixTemplates = {};\r\n\r\n this.onChange = new EventEmitter<DynamicFormControl>();\r\n this.onStatusChange = new EventEmitter<IDynamicFormBase>();\r\n this.onInit = new EventEmitter<IDynamicFormBase>();\r\n this.onSubmit = new EventEmitter<IDynamicFormBase>();\r\n this.injector = formService.injector;\r\n this.cdr = cdr;\r\n }\r\n\r\n // --- IDynamicFormBase\r\n\r\n abstract validate(showErrors?: boolean): Promise<any>;\r\n abstract serialize(validate?: boolean): Promise<any>;\r\n abstract check(): Promise<any>;\r\n abstract getControl(id: string): IDynamicFormControl;\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider {\r\n return this.formService.findProvider(control);\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngAfterContentInit(): void {\r\n this.wrapperTemplate = this.wrapperTemplate || this.cWrapperTemplate;\r\n this.fieldSetTemplate = this.fieldSetTemplate || this.cFieldSetTemplate;\r\n this.controlTemplate = this.controlTemplate || this.cControlTemplate;\r\n this.controlTemplates = this.filterTemplates(this.controlTemplates, \"control\");\r\n this.labelTemplates = this.filterTemplates(this.labelTemplates, \"label\");\r\n this.inputTemplates = this.filterTemplates(this.inputTemplates , \"input\");\r\n this.prefixTemplates = this.filterTemplates(this.prefixTemplates, \"prefix\");\r\n this.suffixTemplates = this.filterTemplates(this.suffixTemplates, \"suffix\");\r\n this.setPrefixTemplates = this.filterTemplates(this.setPrefixTemplates, \"setPrefix\");\r\n this.setSuffixTemplates = this.filterTemplates(this.setSuffixTemplates, \"setSuffix\");\r\n }\r\n\r\n protected filterTemplates(templates: IDynamicFormTemplates, type: string): IDynamicFormTemplates {\r\n if (ObjectUtils.isObject(templates) && Object.keys(templates).length > 0) return templates;\r\n return this.templates.filter(t => !!t[type]).reduce((result, directive) => {\r\n result[directive[type]] = directive.template;\r\n return result;\r\n }, {});\r\n }\r\n}\r\n","import {AfterContentInit, ChangeDetectorRef, Component, Input, OnChanges, SimpleChanges} from \"@angular/core\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {\r\n DYNAMIC_FORM,\r\n DynamicFormGroup,\r\n DynamicFormState,\r\n IDynamicForm,\r\n IDynamicFormControl,\r\n IFormControl,\r\n IFormFieldSet,\r\n IFormSerializers\r\n} from \"../../common-types\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form, [dynamic-form]\",\r\n templateUrl: \"./dynamic-form.component.html\",\r\n providers: [\r\n {\r\n provide: DynamicFormBaseComponent,\r\n useExisting: DynamicFormComponent\r\n },\r\n {\r\n provide: DYNAMIC_FORM,\r\n useExisting: DynamicFormComponent\r\n }\r\n ]\r\n})\r\nexport class DynamicFormComponent extends DynamicFormBaseComponent implements IDynamicForm, AfterContentInit, OnChanges {\r\n\r\n @Input() group: DynamicFormGroup;\r\n @Input() controls: IFormControl[];\r\n @Input() serializers: IFormSerializers;\r\n @Input() fieldSets: IFormFieldSet[];\r\n @Input() data: any;\r\n\r\n defaultFieldSet: IFormFieldSet;\r\n\r\n get status(): DynamicFormState {\r\n return this.group.state;\r\n }\r\n\r\n get formControls(): IDynamicFormControl[] {\r\n return this.group.formControls;\r\n }\r\n\r\n constructor(cdr: ChangeDetectorRef, forms: DynamicFormService) {\r\n super(cdr, forms);\r\n this.group = new DynamicFormGroup(this);\r\n this.defaultFieldSet = {\r\n id: \"\",\r\n title: \"\",\r\n classes: \"\"\r\n };\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.data) return;\r\n if (changes.data || changes.controls || changes.serializers || changes.formGroup) {\r\n if (this.group.id) return;\r\n this.group.setup(this.data, this);\r\n this.group.reloadControls();\r\n }\r\n }\r\n\r\n // --- Custom ---\r\n\r\n onFormSubmit(): void {\r\n const root = this.root;\r\n root.validate().then(() => root.onSubmit.emit(this), () => {});\r\n }\r\n\r\n // --- IDynamicForm ---\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n this.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\r\n if (showErrors) this.group.showErrors();\r\n if (status == \"VALID\") {\r\n resolve(null);\r\n return;\r\n }\r\n reject(null);\r\n });\r\n this.group.updateValueAndValidity();\r\n });\r\n }\r\n\r\n serialize(validate?: boolean): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n const serialize = () => {\r\n this.group.serialize().then(resolve);\r\n };\r\n if (validate) {\r\n this.validate().then(serialize, reject);\r\n return;\r\n }\r\n serialize();\r\n });\r\n }\r\n\r\n check(): Promise<any> {\r\n return this.group.check();\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return this.group.getControl(id);\r\n }\r\n}\r\n","import {\r\n AfterContentInit, ChangeDetectorRef, Component, ContentChild, Input, OnChanges, QueryList, SimpleChanges,\r\n TemplateRef, ViewChildren\r\n} from \"@angular/core\";\r\nimport {ObjectUtils, UniqueUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DYNAMIC_FORM,\r\n DynamicFormGroup, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormsConfigs,\r\n IDynamicFormTemplates, IDynamicSingleFormConfig\r\n} from \"../../common-types\";\r\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\nconst statusPriority: DynamicFormState[] = [\"LOADING\", \"PENDING\", \"DISABLED\", \"INVALID\"];\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-forms, [dynamic-forms]\",\r\n templateUrl: \"./dynamic-forms.component.html\",\r\n providers: [\r\n {\r\n provide: DynamicFormBaseComponent,\r\n useExisting: DynamicFormsComponent\r\n },\r\n {\r\n provide: DYNAMIC_FORM,\r\n useExisting: DynamicFormsComponent\r\n }\r\n ]\r\n})\r\nexport class DynamicFormsComponent extends DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit, OnChanges {\r\n\r\n @Input() data: IDynamicFormsConfigs;\r\n\r\n @Input() containerTemplate: TemplateRef<any>;\r\n\r\n @Input() formPrefixTemplates: IDynamicFormTemplates;\r\n @Input() formSuffixTemplates: IDynamicFormTemplates;\r\n @Input() innerFormPrefixTemplates: IDynamicFormTemplates;\r\n @Input() innerFormSuffixTemplates: IDynamicFormTemplates;\r\n\r\n get status(): DynamicFormState {\r\n for (let i = 0; i < statusPriority.length; i++) {\r\n const status = statusPriority[i];\r\n if (this.checkForms(f => f.status == status)) return status;\r\n }\r\n return \"VALID\";\r\n }\r\n\r\n public configs: IDynamicFormsConfigs;\r\n\r\n @ContentChild(\"containerTemplate\")\r\n protected cContainerTemplate: TemplateRef<any>;\r\n\r\n @ViewChildren(DynamicFormBaseComponent)\r\n private forms: QueryList<IDynamicFormBase>;\r\n\r\n constructor(cdr: ChangeDetectorRef, formService: DynamicFormService) {\r\n super(cdr, formService);\r\n this.formPrefixTemplates = {};\r\n this.formSuffixTemplates = {};\r\n this.innerFormPrefixTemplates = {};\r\n this.innerFormSuffixTemplates = {};\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngAfterContentInit(): void {\r\n super.ngAfterContentInit();\r\n this.containerTemplate = this.containerTemplate || this.cContainerTemplate;\r\n this.formPrefixTemplates = this.filterTemplates(this.formPrefixTemplates, \"formPrefix\");\r\n this.formSuffixTemplates = this.filterTemplates(this.formSuffixTemplates, \"formSuffix\");\r\n this.innerFormPrefixTemplates = this.filterTemplates(this.innerFormPrefixTemplates, \"innerFormPrefix\");\r\n this.innerFormSuffixTemplates = this.filterTemplates(this.innerFormSuffixTemplates, \"innerFormSuffix\");\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.configs = this.createFormGroups(this.data);\r\n }\r\n\r\n // --- IDynamicFormBase ---\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n if (!this.forms) return Promise.reject(null);\r\n return Promise.all(this.forms.map(f => f.validate(showErrors)));\r\n }\r\n\r\n serialize(validate?: boolean): Promise<any> {\r\n if (!this.forms) return validate ? Promise.reject(null) : Promise.resolve({});\r\n return new Promise<any>((resolve, reject) => {\r\n const promises = this.forms.map(f => f.serialize(validate));\r\n Promise.all(promises).then(results => {\r\n let result = {};\r\n results.forEach((data, ix) => {\r\n const config = this.data[ix];\r\n let path: Array<string | number> = null;\r\n if (ObjectUtils.isArray(config.path) && config.path.length > 0) {\r\n path = config.path;\r\n } else if (ObjectUtils.isString(config.path) && config.path.length > 0) {\r\n path = config.path.split(\".\");\r\n } else if (ObjectUtils.isNumber(config.path)) {\r\n path = [config.path];\r\n }\r\n if (!path) {\r\n result = ObjectUtils.assign(result, data);\r\n return;\r\n }\r\n result = ObjectUtils.mapToPath(result, data, path.map(p => `${p}`));\r\n });\r\n resolve(result);\r\n }, reject);\r\n });\r\n }\r\n\r\n check(): Promise<any> {\r\n if (!this.forms) return Promise.resolve(null);\r\n return Promise.all(this.forms.map(t => t.check()));\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return this.getFromValue(f => f.getControl(id));\r\n }\r\n\r\n private checkForms(check: (form: IDynamicFormBase) => boolean): boolean {\r\n this.cdr.detectChanges();\r\n if (!this.forms) return false;\r\n return ObjectUtils.isDefined(this.forms.find(check));\r\n }\r\n\r\n private getFromValue<T>(check: (form: IDynamicFormBase) => T): T {\r\n if (!this.forms) return null;\r\n let value: T = null;\r\n this.forms.find(f => {\r\n value = check(f);\r\n return ObjectUtils.isDefined(value);\r\n });\r\n return value;\r\n }\r\n\r\n private createFormGroups(configs: IDynamicFormsConfigs): IDynamicFormsConfigs {\r\n return (configs || []).map((c: any) => {\r\n if (c.multi) return c;\r\n const config = <IDynamicSingleFormConfig>c;\r\n const group = new DynamicFormGroup(this, {\r\n id: config.id || UniqueUtils.uuid(),\r\n type: \"model\",\r\n data: config.controlData\r\n });\r\n config.group = group;\r\n config.name = config.name || this.name;\r\n group.setup(config.data, config);\r\n group.reloadControls();\r\n return config;\r\n });\r\n }\r\n}\r\n","import {Component, HostBinding, Inject} from \"@angular/core\";\r\nimport {\r\n DYNAMIC_FORM,\r\n IDynamicForm,\r\n IDynamicFormBase,\r\n IDynamicFormControl,\r\n IFormGroupComponent\r\n} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"div[dynamic-form-group]\",\r\n templateUrl: \"./dynamic-form-group.component.html\"\r\n})\r\nexport class DynamicFormGroupComponent implements IFormGroupComponent {\r\n\r\n control: IDynamicFormControl;\r\n\r\n constructor(@Inject(DYNAMIC_FORM) readonly form: IDynamicFormBase) {\r\n }\r\n\r\n @HostBinding(\"class\")\r\n get classes(): string {\r\n if (!this.control) return \"form-group\";\r\n return [\"form-group\", \"form-group-\" + this.control.id, this.control.data.classes, this.control.errors && this.control.touched ? \"form-group-invalid\" : \"\"].join(\" \");\r\n }\r\n}\r\n","import {Component, Inject} from \"@angular/core\";\r\nimport {FormControlComponent, IDynamicFormControl, IFormFileData} from \"../../common-types\";\r\nimport {ApiService, ArrayUtils, FileUtils, IToasterService, ObjectUtils, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\n\r\n@Component({\r\n selector: \"dynamic-form-file\",\r\n styleUrls: [\"./dynamic-form-file.component.scss\"],\r\n templateUrl: \"./dynamic-form-file.component.html\"\r\n})\r\nexport class DynamicFormFileComponent extends FormControlComponent<IFormFileData> {\r\n\r\n private fileImageCache: any[];\r\n\r\n // Acceptor for provider\r\n static acceptor(control: IDynamicFormControl): boolean {\r\n return control.type == \"file\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n\r\n ctrInit() {\r\n this.fileImageCache = [];\r\n }\r\n\r\n onSelect(input: HTMLInputElement): void {\r\n this.processFiles(input.files);\r\n input.value = \"\";\r\n }\r\n\r\n protected processFiles(fileList: FileList): void {\r\n const files: File[] = [];\r\n const accept = this.data.accept;\r\n const types: string[] = ObjectUtils.isString(accept) && accept.length > 0 ? accept.toLowerCase().split(\",\") : null;\r\n if (fileList.length == 0) return;\r\n for (let i = 0; i < fileList.length; i++) {\r\n const file = fileList.item(i);\r\n const type = file.type.toLowerCase();\r\n const ext = FileUtils.getExtension(file);\r\n if (types && !ArrayUtils.has(types, type, ext)) continue;\r\n files.push(file);\r\n }\r\n if (files.length == 0) {\r\n this.toaster.error(\"message.error.wrong-files\");\r\n return;\r\n }\r\n this.upload(files);\r\n }\r\n\r\n protected upload(files: File[]): void {\r\n const single = !this.data.multi;\r\n if (single) files.length = Math.min(files.length , 1);\r\n const promises = [];\r\n files.forEach((file, ix) => {\r\n if (this.data.asDataUrl) {\r\n promises.push(FileUtils.readFileAsDataURL(file));\r\n return;\r\n }\r\n if (this.data.asFile) {\r\n promises.push(Promise.resolve(file));\r\n return;\r\n }\r\n promises.push(\r\n this.api.upload(\r\n this.data.uploadUrl,\r\n this.data.createUploadData(file),\r\n console.log,\r\n this.data.uploadOptions\r\n ).then(asset => asset._id || asset, () => null)\r\n );\r\n });\r\n Promise.all(promises).then(assets => {\r\n if (single) {\r\n this.control.setValue(assets[0]);\r\n return;\r\n }\r\n const current = this.value || [];\r\n this.control.setValue(current.concat(assets.filter(t => !!t)));\r\n });\r\n }\r\n\r\n delete(index?: number): void {\r\n if (this.data.multi) {\r\n const current = Array.from(this.value || []);\r\n current.splice(index, 1);\r\n this.control.setValue(current);\r\n return;\r\n }\r\n this.control.setValue(null);\r\n }\r\n\r\n getUrl(image: any): string {\r\n return `url('${this.getImgUrl(image)}')`;\r\n }\r\n\r\n private getImgUrl(image: any): string {\r\n if (ObjectUtils.isBlob(image)) {\r\n let cache = this.fileImageCache.find(t => t.file == image);\r\n if (!cache) {\r\n cache = {file: image, url: URL.createObjectURL(image)};\r\n this.fileImageCache.push(cache);\r\n }\r\n return cache.url;\r\n }\r\n const url = !image ? null : image.imageUrl || image;\r\n if (!ObjectUtils.isString(url)) return null;\r\n if (url.startsWith(\"data:\")) return url;\r\n if (!this.data.baseUrl) {\r\n const subUrl = url.startsWith(\"/\") ? url.substr(1) : url;\r\n return this.api.url(subUrl);\r\n }\r\n return this.api.url(`${this.data.baseUrl}${url}`);\r\n }\r\n}\r\n","import {Component, HostBinding, Inject} from \"@angular/core\";\r\nimport {ILanguageService, ITranslation, LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {DynamicFormControl, FormControlComponent, IFormInputData} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-input\",\r\n templateUrl: \"./dynamic-form-input.component.html\"\r\n})\r\nexport class DynamicFormInputComponent extends FormControlComponent<IFormInputData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"input\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n\r\n @HostBinding(\"class.checked\")\r\n get isChecked(): boolean {\r\n return this.data.type == \"checkbox\" && this.value;\r\n }\r\n\r\n onDateChange(value: string): void {\r\n const date = new Date(value);\r\n const dateValue = <number>date.valueOf();\r\n if (isNaN(dateValue) || dateValue < -30610224000000) return;\r\n this.control.setValue(date)\r\n }\r\n\r\n onTextChange(value: string): void {\r\n if (!this.data.useLanguage) {\r\n this.control.setValue(value);\r\n return;\r\n }\r\n const translations: ITranslation[] = ObjectUtils.isArray(this.value) ? Array.from(this.value) : [];\r\n const translation = translations.find(t => t.lang == this.language.editLanguage);\r\n if (translation) {\r\n translation.translation = value;\r\n } else {\r\n translations.push({\r\n lang: this.language.editLanguage,\r\n translation: value\r\n });\r\n }\r\n this.control.setValue(translations);\r\n }\r\n\r\n onNumberBlur(): void {\r\n const value = this.value;\r\n if (ObjectUtils.isNumber(this.data.max) && this.data.max < value) {\r\n this.control.setValue(this.data.max);\r\n } else if (ObjectUtils.isNumber(this.data.min) && this.data.min > value) {\r\n this.control.setValue(this.data.min);\r\n }\r\n this.control.onBlur();\r\n }\r\n}\r\n","import {Component} from \"@angular/core\";\r\nimport {ObjectUtils, ReflectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControl,\r\n FormControlComponent,\r\n IDynamicForm, IDynamicFormControl,\r\n IFormControl, IFormControlOption,\r\n IFormControlOptions,\r\n IFormSelectData\r\n} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-select\",\r\n templateUrl: \"./dynamic-form-select.component.html\"\r\n})\r\nexport class DynamicFormSelectComponent extends FormControlComponent<IFormSelectData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"select\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(control: IDynamicFormControl): Promise<any> {\r\n const data = control.getData<IFormSelectData>();\r\n if (data.type == \"radio\" && data.multi) {\r\n return Promise.reject(\"Radio group doesn't support multi select!\");\r\n }\r\n return new Promise<any>(resolve => {\r\n const getOptions = ReflectUtils.resolve<IFormControlOptions>(data.options, control.form.injector);\r\n getOptions(control).then(options => {\r\n if (data.emptyOption) options.unshift({id: null, label: \"\"});\r\n control.meta.options = options;\r\n DynamicFormSelectComponent.fillOptions(control, options);\r\n resolve(options);\r\n });\r\n });\r\n }\r\n\r\n static fillOptions(control: IDynamicFormControl, options: IFormControlOption[]): void {\r\n const data = control.getData<IFormSelectData>();\r\n const selected = control.value;\r\n if (data.multi || options.length == 0 || options.findIndex(t => t.id == selected) >= 0) return;\r\n control.setValue(options[0].id);\r\n }\r\n\r\n onSelectChange(value: any): void {\r\n const isArray = ObjectUtils.isArray(value);\r\n const current = this.value;\r\n if (this.data.multi) {\r\n if (isArray) {\r\n this.control.setValue(value);\r\n return;\r\n }\r\n if (ObjectUtils.isArray(current)) {\r\n this.control.setValue(\r\n current.indexOf(value) < 0\r\n ? current.concat([value])\r\n : current.filter(c => c !== value)\r\n );\r\n return;\r\n }\r\n this.control.setValue([value]);\r\n return;\r\n }\r\n if (isArray) value = value[0];\r\n if (current == value) {\r\n const option = this.meta.options.find(o => o.id !== value);\r\n value = option ? option.id : null;\r\n }\r\n this.control.setValue(value);\r\n }\r\n\r\n checkValue(option: IFormControlOption): boolean {\r\n const value = this.value;\r\n return ObjectUtils.isArray(value) ? value.indexOf(option.id) >= 0 : option.id == value;\r\n }\r\n\r\n findOption(option: IFormControlOption, index: number, id: string): boolean {\r\n return option.id == id;\r\n }\r\n}\r\n","import {Component} from \"@angular/core\";\r\nimport {\r\n DynamicFormControl,\r\n FormControlComponent,\r\n IDynamicForm,\r\n IFormControl,\r\n IFormStaticData\r\n} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-static\",\r\n templateUrl: \"./dynamic-form-static.component.html\"\r\n})\r\nexport class DynamicFormStaticComponent extends FormControlComponent<IFormStaticData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"static\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n}\r\n","import {Component, ViewChild} from \"@angular/core\";\r\nimport {DynamicFormControl, FormControlComponent, IDynamicForm, IFormModelData} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-model\",\r\n templateUrl: \"./dynamic-form-model.component.html\"\r\n})\r\nexport class DynamicFormModelComponent extends FormControlComponent<IFormModelData> {\r\n\r\n @ViewChild(\"subForm\")\r\n private subForm: IDynamicForm;\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"model\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\r\nimport {FormControlProvider, FormGroupProvider, provideFormControl, provideFormGroup} from \"./common-types\";\r\n\r\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\r\nimport {OpenApiService} from \"./services/open-api.service\";\r\n\r\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\r\nimport {DynamicFormControlDirective} from \"./directives/dynamic-form-control.directive\";\r\nimport {DynamicFormGroupDirective} from \"./directives/dynamic-form-group.directive\";\r\nimport {DynamicFormTemplateDirective} from \"./directives/dynamic-form-template.directive\";\r\nimport {DynamicFormsComponent} from \"./components/dynamic-forms/dynamic-forms.component\";\r\nimport {DynamicFormComponent} from \"./components/dynamic-form/dynamic-form.component\";\r\n\r\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\r\nimport {DynamicFormFileComponent} from \"./components/dynamic-form-file/dynamic-form-file.component\";\r\nimport {DynamicFormInputComponent} from \"./components/dynamic-form-input/dynamic-form-input.component\";\r\nimport {DynamicFormSelectComponent} from \"./components/dynamic-form-select/dynamic-form-select.component\";\r\nimport {DynamicFormStaticComponent} from \"./components/dynamic-form-static/dynamic-form-static.component\";\r\nimport {DynamicFormModelComponent} from \"./components/dynamic-form-model/dynamic-form-model.component\";\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicFormsComponent,\r\n DynamicFormComponent,\r\n DynamicFormGroupComponent,\r\n DynamicFormFileComponent,\r\n DynamicFormInputComponent,\r\n DynamicFormSelectComponent,\r\n DynamicFormStaticComponent,\r\n DynamicFormModelComponent\r\n];\r\n\r\n// --- Directives ---\r\nexport const directives = [\r\n AsyncSubmitDirective,\r\n DynamicFormControlDirective,\r\n DynamicFormGroupDirective,\r\n DynamicFormTemplateDirective\r\n];\r\n\r\n// --- Pipes ---\r\nexport const pipes = [];\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ...directives,\r\n ...pipes\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n exports: [\r\n ...components,\r\n ...directives,\r\n ...pipes,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n entryComponents: components,\r\n providers: pipes\r\n})\r\nexport class NgxDynamicFormModule {\r\n\r\n static forRoot(controlProviders?: Array<FormControlProvider>, groupProvider?: FormGroupProvider): ModuleWithProviders<NgxDynamicFormModule> {\r\n return {\r\n ngModule: NgxDynamicFormModule,\r\n providers: [\r\n DynamicFormService,\r\n OpenApiService,\r\n provideFormControl(DynamicFormFileComponent, DynamicFormFileComponent.acceptor, DynamicFormFileComponent.loader),\r\n provideFormControl(DynamicFormInputComponent, DynamicFormInputComponent.acceptor, DynamicFormInputComponent.loader),\r\n provideFormControl(DynamicFormSelectComponent, DynamicFormSelectComponent.acceptor, DynamicFormSelectComponent.loader),\r\n provideFormControl(DynamicFormStaticComponent, DynamicFormStaticComponent.acceptor, DynamicFormStaticComponent.loader),\r\n provideFormControl(DynamicFormModelComponent, DynamicFormModelComponent.acceptor, DynamicFormModelComponent.loader),\r\n ...(controlProviders || []),\r\n groupProvider || provideFormGroup(DynamicFormGroupComponent)\r\n ]\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {FORM_GROUP_TYPE as ɵa} from './ngx-dynamic-form/common-types';\nexport {components as ɵb,directives as ɵc,pipes as ɵd} from './ngx-dynamic-form/ngx-dynamic-form.module';"],"names":[],"mappings":";;;;;;;MAwBa,eAAe,GAAgD,IAAI,cAAc,CAA8B,qBAAqB,EAAE;MACtI,qBAAqB,GAAyC,IAAI,cAAc,CAAuB,uBAAuB,EAAE;MAYhI,YAAY,GAAqC,IAAI,cAAc,CAAmB,mBAAmB,EAAE;MAGlG,oBAAoB,CAAA;AAItC,IAAA,WAAA,CAAqB,GAAe,EACO,IAAsB,EAClB,QAA0B,EAC3B,OAAwB,EAAA;QAHjD,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;QACO,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;QAClB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAiB;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;IAED,OAAO,GAAA;KAEN;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;KACjC;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,QAAW,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;KACtD;AAED,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KACpD;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;KACnD;AAED,IAAA,IAAI,MAAM,GAAA;;QACN,MAAM,MAAM,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,MAAM,CAAC;AAC3C,QAAA,OAAO,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAE,KAAI,MAAM,EAAE,CAAC;KACpD;AAED,IAAA,IACI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC;KACf;;;YAzCJ,SAAS,EAAA;;;YAlBW,UAAU,EAAA;AAwBd,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAM,SAAC,YAAY,EAAA,EAAA,CAAA,EAAA;AACnB,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAM,SAAC,gBAAgB,EAAA,EAAA,CAAA,EAAA;AACvB,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAM,SAAC,eAAe,EAAA,EAAA,CAAA,EAAA;;;AA8BlC,IAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAW,SAAC,kBAAkB,EAAA,EAAA,CAAA;;AA+DnC,SAAS,eAAe,CAAC,OAA4B,EAAA;AACjD,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;AAChC,IAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;QACpG,OAAO,YAAY,CAAC,OAAO,CAAuB,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3E,KAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAS,KAAK,IAAI,OAAO,CAAmB,CAAC,OAAO,KAAI;QAC5D,MAAM,OAAO,GAAwB,IAAI,CAAC;QAC1C,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,MAAM,IAAG;YACnC,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;AACV,aAAA;AACD,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,YAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,YAAA,IAAI,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;gBACvC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACzC,aAAA;YACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;gBACjC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9F,IAAI,MAAM,GAAqB,IAAI,CAAC;AACpC,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,MAAM,GAAG,EAAE,CAAC;AACZ,oBAAA,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;AACpB,wBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC7B,4BAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;4BACnB,OAAO;AACV,yBAAA;wBACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC1C,qBAAC,CAAC,CAAC;AACN,iBAAA;gBACD,OAAO,CAAC,MAAM,CAAC,CAAC;AACpB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACP,KAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,wBAAwB,CAAA;IAiC1B,WAAoB,CAAA,IAAsB,EAAU,OAAA,GAAwB,IAAI,EAAA;QAA5D,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAqB;AAC5E,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,OAA4B,KAAI;YACzF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,OAA4B,KAAI;YACvF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC;KACN;AA5CD,IAAA,IAAI,EAAE,GAAA;AACF,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;KACjD;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;KACjD;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC;KAC/E;AAED,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACvB;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;AA4BD,IAAA,IAAI,CAAC,OAA4B,EAAA;QAC7B,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACzF;AAED,IAAA,KAAK,CAAC,OAA4B,EAAA;AAC9B,QAAA,OAAO,IAAI,OAAO,CAAM,OAAO,IAAG;YAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAG;AACjC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAG;oBACzC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;AAC/C,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;AAED,IAAA,eAAe,CAAC,OAA4B,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;KACxC;AAED,IAAA,cAAc,CAAC,OAA4B,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;KACvC;AAED,IAAA,YAAY,CAAC,OAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KACpG;AAEO,IAAA,YAAY,CAAC,IAAY,EAAE,WAAA,GAAiC,IAAI,EAAA;AACpE,QAAA,MAAM,MAAM,GAAsB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,cAAE,YAAY,CAAC,OAAO,CAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9E,eAAG,WAAW,KAAK,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,OAA4B,KAAuB,MAAM,CAAC,OAAO,CAAC,CAAC;KAC9E;AACJ,CAAA;AAEK,MAAO,gBAAiB,SAAQ,SAAS,CAAA;IAmH3C,WAAmB,CAAA,IAAsB,EAAE,OAAA,GAAwB,IAAI,EAAA;AACnE,QAAA,KAAK,CAAC,EAAE,EAAE,EAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAC,CAAC,CAAC;QADhG,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;AAErC,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;KAClD;AAlID,IAAA,IAAI,EAAE,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KACzB;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AAED,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;KAC9B;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AAED,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC7B;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAE,GAAG,EAAE,CAAC;KAC3E;AAED,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC/B;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;KAC7B;AAED,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;KAC/B;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;KAChC;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,CAAG,EAAA,IAAI,CAAC,IAAI,GAAG,CAAC;KAC5C;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;AAED,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,QAA0B,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;KACrE;AAYO,IAAA,OAAO,kBAAkB,CAAC,KAAuB,EAAE,QAAwB,EAAA;QAC/E,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvC,YAAA,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAG;gBACtB,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aAC1C,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACpC,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE,CAAC;AACzB,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAG;AACvB,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE;gBACtB,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxD,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AACzC,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAkB,CAAC;gBAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;AACpC,gBAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC5B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;gBAC7B,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACxC,gBAAA,OAAO,QAAQ,CAAC;AACnB,aAAA;AACD,YAAA,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,OAAO,qBAAqB,CAAC,KAAuB,EAAE,WAA6B,EAAA;QACvF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,KAAI;gBACtC,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACtD,gBAAA,IAAI,CAAC,UAAU;AAAE,oBAAA,OAAO,MAAM,CAAC;AAC/B,gBAAA,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;AACxB,gBAAA,OAAO,MAAM,CAAC;aACjB,EAAE,EAAE,CAAC,CAAC;AACV,SAAA;AACD,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,IAAG;YACrC,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC;YACxD,OAAO,CAAC,UAAU,GAAG,IAAI,GAAG;AACxB,gBAAA,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,YAAY,CAAC,OAAO,CAAyB,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;aACjF,CAAC;AACN,SAAC,CAAC,CAAC;KACN;IAqBD,OAAO,GAAA;QACH,OAAU,IAAI,CAAC,IAAI,CAAC;KACvB;AAED,IAAA,UAAU,CAAC,EAAU,EAAA;AACjB,QAAA,OAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC5B;IAED,IAAI,GAAA;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACnD,QAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KAChC;IAED,KAAK,GAAA;AACD,QAAA,OAAO,IAAI,OAAO,CAAM,OAAO,IAAG;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAG;AACpC,gBAAA,IAAI,QAAQ;oBAAE,IAAI,CAAC,OAAO,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;;oBAAM,IAAI,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;AACrF,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,aAAC,CAAC,CAAA;AACN,SAAC,CAAC,CAAC;KACN;IAED,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC5C;IAED,cAAc,GAAA;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAC3C;IAED,SAAS,GAAA;AACL,QAAA,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,KAAI;YAChC,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAG;AAC1C,gBAAA,OAAO,IAAI,OAAO,CAAM,OAAO,IAAG;AAC9B,oBAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;wBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnC,MAAM,OAAO,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACvE,wBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,IAAG;AAClB,4BAAA,IAAI,MAAM;AAAE,gCAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;4BAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;AAClB,yBAAC,CAAC,CAAC;AACP,qBAAC,CAAC,CAAC;AACP,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,SAAC,CAAC,CAAC;KACN;IAED,OAAO,GAAA;QACH,IAAI,CAAC,eAAe,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;KAC1C;IAED,MAAM,GAAA;QACF,IAAI,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;KACxC;IAED,UAAU,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;KACrD;IAED,cAAc,GAAA;AACV,QAAA,IAAI,QAAQ,GAAG,MAAK,GAAG,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,QAAQ,GAAG,MAAK;AACZ,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;;AAErB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAE/B,gBAAA,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;AAChD,gBAAA,WAAW,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;wBAAE,OAAO;oBACrC,WAAW,CAAC,KAAK,EAAE,CAAC;AACpB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClC,EAAE,EAAE,CAAC,CAAC;AACP,gBAAA,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxC,aAAC,CAAC;AACL,SAAA;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAM,OAAO,IAAG;AACvC,YAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACvD,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjC,QAAA,OAAO,OAAO,CAAC;KAClB;IAED,KAAK,CAAC,KAAU,EAAE,IAAsB,EAAA;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,KAAI;AACpE,YAAA,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AACnB,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;KACvE;AAED,IAAA,WAAW,CAAC,OAA4B,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAK;YACtB,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,GAAG,EAAuB,CAAC,CAAC,IAAI,CAAC,MAAK;gBAC/F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACzC,CAAC,CAAC,CAAC;SACP,EAAE,GAAG,CAAC,CAAC;KACX;IAEO,kBAAkB,CAAC,OAA4B,EAAE,QAAmC,EAAA;AACxF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9E,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAG;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAAE,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5E,YAAA,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC1B,YAAA,OAAO,IAAI,OAAO,CAAM,OAAO,IAAG;AAC9B,gBAAA,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAK;AACzB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjE,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAA;SACL,CAAC,CAAC,CAAA;KACN;AACJ,CAAA;AAEK,MAAO,kBAAmB,SAAQ,WAAW,CAAA;IA8C/C,WAAoB,CAAA,OAAqB,EAAkB,KAAuB,EAAA;QAC9E,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAC,CAAC,CAAC;QADpE,IAAO,CAAA,OAAA,GAAP,OAAO,CAAc;QAAkB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;QAE9E,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;KAClD;AApDD,IAAA,IAAI,EAAE,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KACzB;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AAED,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;KAC9B;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AAED,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC7B;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA,CAAE,GAAG,EAAE,CAAC;KACjF;AAED,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC/B;AAED,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KAC3B;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;KAC7B;IAgBD,OAAO,GAAA;QACH,OAAU,IAAI,CAAC,IAAI,CAAC;KACvB;AAED,IAAA,UAAU,CAAC,EAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC;KACf;IAED,IAAI,GAAA;QACA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAED,KAAK,GAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAG;AAClB,YAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAAE,IAAI,CAAC,OAAO,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;;gBAAM,IAAI,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;AAChH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,KAAK,CAAC;KAChB;IAED,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC5C;IAED,cAAc,GAAA;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAC3C;IAED,SAAS,GAAA;QACL,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,OAAO,GAAA;QACH,IAAI,CAAC,eAAe,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;KAC1C;IAED,MAAM,GAAA;QACF,IAAI,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;KACxC;IAED,UAAU,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;KACxC;AACJ,CAAA;AA2KD;AACA,MAAM,UAAU,GAAQ,EAAE,CAAC;AAC3B,MAAM,WAAW,GAAsB,MAAK;AACxC,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC,CAAC;;AAEc,SAAA,iBAAiB,CAAC,EAAU,EAAE,MAA2B,EAAA;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;AAC9E,CAAC;AAEK,SAAU,gBAAgB,CAAC,UAAqD,EAAA;AAClF,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAU;AAC9C,QAAA,YAAY,CAAC,cAAc,CAAC,uBAAuB,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/G,KAAC,CAAC;AACN,CAAC;AAEK,SAAU,SAAS,CAAC,IAAqB,EAAA;AAC3C,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAU;AAC9C,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC7E,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnC,QAAA,IAAI,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC;AAC1E,QAAA,QAAQ,IAAI;AACR,YAAA,KAAK,QAAQ;gBACT,SAAS,GAAG,QAAQ,CAAC;gBACrB,MAAM;AACV,YAAA,KAAK,SAAS;gBACV,SAAS,GAAG,UAAU,CAAC;gBACvB,MAAM;AACb,SAAA;AACD,QAAA,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1F,KAAC,CAAC;AACN,CAAC;AAEK,SAAU,UAAU,CAAC,IAAsB,EAAA;AAC7C,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAU;AAC9C,QAAA,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAChF,KAAC,CAAC;AACN,CAAC;AAEK,SAAU,UAAU,CAAC,IAAsB,EAAA;AAC7C,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAU;AAC9C,QAAA,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAChF,KAAC,CAAC;AACN,CAAC;AAEK,SAAU,SAAS,CAAC,IAAqB,EAAA;AAC3C,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAU;AAC9C,QAAA,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,KAAC,CAAC;AACN,CAAC;AAEK,SAAU,QAAQ,CAAC,IAAoB,EAAA;AACzC,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAU;AAC9C,QAAA,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9E,KAAC,CAAC;AACN,CAAC;AAEK,SAAU,YAAY,CAAC,IAAmB,EAAA;IAC5C,OAAO,CAAC,MAAW,KAAU;AACzB,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACrB,YAAY,CAAC,cAAc,CAAC,sBAAsB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACtE,KAAC,CAAC;AACN,CAAC;AAQK,SAAU,gBAAgB,CAAC,SAAoC,EAAA;IACjE,OAAO;AACH,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,QAAQ,EAAE,SAAS;KACtB,CAAC;AACN,CAAC;AAQK,SAAU,kBAAkB,CAAC,SAAsC,EAAE,QAAsC,EAAE,MAAkC,EAAE,QAAA,GAAmB,CAAC,EAAA;IACvK,OAAO;AACH,QAAA,OAAO,EAAE,qBAAqB;AAC9B,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE;AACN,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,MAAM,EAAE,MAAM;AACjB,SAAA;KACJ,CAAC;AACN,CAAC;SAEe,iBAAiB,CAAC,MAAW,EAAE,WAAmB,EAAE,OAAqB,EAAA;IACrF,YAAY,CAAC,cAAc,CAAC,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACpF,CAAC;AAEK,SAAU,gBAAgB,CAAC,MAAW,EAAA;IACxC,OAAO,YAAY,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC1E,CAAC;AAEe,SAAA,cAAc,CAAC,MAAW,EAAE,WAAmB,EAAA;IAC3D,OAAO,YAAY,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/E,CAAC;AAEe,SAAA,iBAAiB,CAAC,MAAW,EAAE,WAAmB,EAAA;IAC9D,OAAO,YAAY,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAClF,CAAC;SAEe,iBAAiB,CAAC,EAAU,EAAE,IAAY,EAAE,IAAuB,EAAA;AAC/E,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAClB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;IACzE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;IAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC;IAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC;IACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC;IAChD,OAAO;AACH,QAAA,EAAE,EAAE,EAAE;AACN,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,IAAI;KACb,CAAC;AACN,CAAC;AAEK,SAAU,eAAe,CAAC,EAAU,EAAE,IAAoB,EAAE,OAAe,MAAM,EAAA;IACnF,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACrD,IAAA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IAC9B,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;IACrG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAC3B,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAEe,SAAA,gBAAgB,CAAC,EAAU,EAAE,IAAqB,EAAA;IAC9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtD,IAAA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACpB,IAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;AAClC,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3E,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAA,WAAA,EAAc,SAAS,CAAE,CAAA,GAAG,CAAG,EAAA,IAAI,CAAC,OAAO,CAAA,YAAA,EAAe,SAAS,CAAA,CAAE,CAAC;AACrG,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAEe,SAAA,gBAAgB,CAAC,EAAU,EAAE,IAAqB,EAAA;IAC9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtD,IAAA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;AACnC,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAEe,SAAA,eAAe,CAAC,EAAU,EAAE,IAAoB,EAAA;IAC5D,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACrD,IAAA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AAC5B,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAEe,SAAA,cAAc,CAAC,EAAU,EAAE,IAAmB,EAAA;IAC1D,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACpD,IAAA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC;IAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IACjC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7E,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAClF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAU,KAAI;AAC7D,QAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,OAAO,CAAC;AACnB;;MCl8Ba,kBAAkB,CAAA;AAE3B,IAAA,WAAA,CAAmD,UAAkC,EACxC,SAAoC,EAC7D,QAAkC,EAC1B,QAAkB,EAAA;QAHK,IAAU,CAAA,UAAA,GAAV,UAAU,CAAwB;QACxC,IAAS,CAAA,SAAA,GAAT,SAAS,CAA2B;QAC7D,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAA0B;QAC1B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;KAC7C;AAED,IAAA,YAAY,CAAC,OAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,QAAA,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC;gBACjE,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;aACrB,CAAC,CAAA,CAAE,CAAC,CAAC;AACT,SAAA;;QAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;AACrE,QAAA,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;KACvB;IAED,eAAe,CAAC,GAAqB,EAAE,QAA8B,EAAA;QACjE,GAAG,CAAC,KAAK,EAAE,CAAC;AACZ,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;KAChD;AAED,IAAA,WAAW,CAAC,GAAqB,EAAA;QAC7B,GAAG,CAAC,KAAK,EAAE,CAAC;AACZ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;KAChD;;;YAnCJ,UAAU,EAAA;;;AAGM,IAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAM,SAAC,qBAAqB,EAAA,EAAA,CAAA,EAAA;YAbmB,IAAI,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAcnD,MAAM,EAAA,IAAA,EAAA,CAAC,eAAe,EAAA,EAAA,CAAA,EAAA;YAd/B,wBAAwB,EAAA;YAAsB,QAAQ,EAAA;;;MCIjD,aAAa,CAAA;AAEtB,IAAA,OAAO,UAAU,CAAC,UAAA,GAAqB,CAAM,IAAA,CAAA,EAAA;;AAEzC,QAAA,MAAM,MAAM,GAAG,CAAC,OAA4B,KAAsB;AAC9D,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC,CAAC;AACjF,SAAC,CAAC;AACF,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,OAAO,aAAa,CAAC,OAA4B,EAAA;AAC7C,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;KAChE;AAED,IAAA,OAAO,QAAQ,GAAA;AACX,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAChC;IAED,OAAO,YAAY,CAAC,OAA4B,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClB,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;AACjD,SAAA;KACJ;IAED,OAAO,gBAAgB,CAAC,OAA4B,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,gBAAgB,GAAG,IAAI,CAAC,CAAC;KAC5F;IAED,OAAO,iBAAiB,CAAC,MAAc,EAAA;;AAEnC,QAAA,MAAM,MAAM,GAAG,CAAC,OAA4B,KAAI;AAC5C,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE;AACvD,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAC,kBAAkB,EAAE,EAAC,MAAM,EAAE,MAAM,EAAC,EAAC,CAAC,CAAC;AAClE,aAAA;AACD,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjC,SAAC,CAAC;AACF,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,OAAO,iBAAiB,CAAC,MAAc,EAAA;;AAEnC,QAAA,MAAM,MAAM,GAAG,CAAC,OAA4B,KAAI;AAC5C,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE;AACvD,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAC,kBAAkB,EAAE,EAAC,MAAM,EAAE,MAAM,EAAC,EAAC,CAAC,CAAC;AAClE,aAAA;AACD,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjC,SAAC,CAAC;AACF,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,OAAO,2BAA2B,CAAC,OAA4B,EAAA;AAC3D,QAAA,MAAM,KAAK,GAAU,OAAO,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1E,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,gBAAgB,CAAC,CAAC;KACpI;IAED,OAAO,aAAa,CAAC,OAA4B,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,wJAAwJ,CAAC;AAC7K,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,qBAAqB,CAAC,CAAC;KAClF;IAED,OAAO,aAAa,CAAC,OAA4B,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,iBAAiB,CAAC;AACtC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,qBAAqB,CAAC,CAAC;KAClF;AAED,IAAA,OAAO,aAAa,CAAC,EAAU,EAAE,MAA2B,EAAA;QACxD,MAAM,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;KACtE;AAED,IAAA,OAAO,aAAa,CAAC,EAAU,EAAE,MAA2B,EAAA;QACxD,MAAM,KAAK,GAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7D,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3H;AAED,IAAA,OAAO,eAAe,CAAC,EAAU,EAAE,MAA2B,EAAA;QAC1D,MAAM,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KAC/E;AAED,IAAA,OAAO,aAAa,CAAC,EAAU,EAAE,MAA2B,EAAA;QACxD,MAAM,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3D;IAGD,OAAO,aAAa,CAAC,IAAc,EAAE,MAAiB,GAAA,YAAY,EAAE,YAAA,GAAuB,EAAE,EAAA;;AAEzF,QAAA,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,MAA2B,KAAkB;YACrE,MAAM,KAAK,GAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;YAC9E,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5E,SAAC,CAAC;AACF,QAAA,OAAO,MAAM,CAAC;KACjB;AACJ,CAAA;AATG,UAAA,CAAA;IADC,mBAAmB,CAAC,QAAQ,CAAC;AAS7B,CAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,CAAA;;MCtEQ,cAAc,CAAA;AAKvB,IAAA,WAAA,CAAoB,GAAe,EAAA;QAAf,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAO,OAAO,IAAG;AAC9C,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;gBAChD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AACrC,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACzB,EAAE,MAAK;gBACJ,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,aAAC,CAAC,CAAC;SACN,EAAE,CAAC;KACP;AAED,IAAA,sBAAsB,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,IAAG;AACtC,YAAA,MAAM,MAAM,GAAmB,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AACtD,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,yBAAyB,CAAC,MAAsB,EAAA;QACpD,MAAM,MAAM,GAAuB,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,MAAM,CAAC;AAC3B,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,QAAA,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;AACxB,QAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,YAAA,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YAChB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAU,EAAE,MAA2B,KAAI;gBAChE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,aAAC,CAAC;YACF,OAAO,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC5D,SAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;AAC3B,QAAA,OAAO,MAAM,CAAC;KACjB;IAEO,yBAAyB,CAAC,QAAgC,EAAE,MAAsB,EAAA;QACtF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC9B,YAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAClF,SAAA;QACD,QAAQ,QAAQ,CAAC,IAAI;AACjB,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,UAAU;AACX,gBAAA,OAAO,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACjF,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACnF,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAClF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAEO,eAAe,CAAC,QAAgC,EAAE,MAAsB,EAAA;QAC5E,OAAO;AACH,YAAA,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,GAAG,IAAI;YAC3D,eAAe,EAAE,aAAa,CAAC,aAAa;YAC5C,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC;SACnD,CAAA;KACJ;IAEO,gBAAgB,CAAC,QAAgC,EAAE,MAAsB,EAAA;QAC7E,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC7F,QAAQ,QAAQ,CAAC,IAAI;AACjB,YAAA,KAAK,SAAS;gBACV,IAAI,GAAG,UAAU,CAAC;gBAClB,MAAM;AACV,YAAA,KAAK,UAAU;gBACX,IAAI,GAAG,UAAU,CAAC;gBAClB,MAAM;AACb,SAAA;QACD,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CACzC,EAAA,EAAA,IAAI,EACN,CAAA,CAAA;KACL;IAEO,iBAAiB,CAAC,QAAgC,EAAE,MAAsB,EAAA;QAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;cACtC,MAAK;AACH,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA,EAAG,QAAQ,CAAC,EAAE,CAAI,CAAA,EAAA,EAAE,CAAE,CAAA,EAAE,CAAC,CAAC,CAAC,CAAC;aAC5F;cACC,MAAK;gBACH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAG;oBACpJ,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG;AACxB,wBAAA,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,qBAAC,CAAC,CAAC;AACP,iBAAC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7C,aAAC,CAAC;QACN,OACO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CACzC,EAAA,EAAA,OAAO,EACT,CAAA,CAAA;KACL;IAEO,eAAe,CAAC,QAAgC,EAAE,MAAsB,EAAA;AAC5E,QAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA,EAAA,EACzC,KAAK,EAAE,QAAQ,CAAC,KAAK,EACvB,CAAA,CAAA;KACL;IAEO,aAAa,CAAC,QAAgC,EAAE,MAAsB,EAAA;QAC1E,MAAM,UAAU,GAAkC,EAAE,CAAC;AACrD,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,YAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;AACnD,SAAA;QACD,IAAI,QAAQ,CAAC,SAAS,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,aAAa,CAAC,iBAAiB;AACrC,gBAAA,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/B,aAAA,CAAC,CAAC;AACN,SAAA;QACD,IAAI,QAAQ,CAAC,SAAS,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,aAAa,CAAC,iBAAiB;AACrC,gBAAA,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/B,aAAA,CAAC,CAAC;AACN,SAAA;QACD,QAAQ,QAAQ,CAAC,MAAM;AACnB,YAAA,KAAK,OAAO;AACR,gBAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC7C,MAAM;AACb,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACrB;;;YAzIJ,UAAU,EAAA;;;YAxCH,UAAU,EAAA;;;MCqBL,oBAAoB,CAAA;AAwB7B,IAAA,WAAA,CAA6C,OAAwB,EAAU,GAAsB,EAAE,IAAgB,EAAE,QAAmB,EAAA;QAA/F,IAAO,CAAA,OAAA,GAAP,OAAO,CAAiB;QAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AACjG,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,EAAiB,CAAC;AACjD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO;QACpD,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;KAC/D;AAfD,IAAA,IACI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AAED,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IASD,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;AAC7C,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,IAAG;YAC5D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;gBAAE,OAAO;AACvD,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;AACnB,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;KACzE;IAED,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,cAAc;AAAE,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAC3D,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KAClD;IAGD,KAAK,GAAA;QACD,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACxB;IAED,UAAU,GAAA;QACN,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAG;AACjC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACxD,aAAA;SACJ,EAAE,MAAM,IAAG;AACR,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;AAC1B,gBAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACvD,SAAC,CAAC,CAAC;KACN;;;AAhFJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;AACP,gBAAA,QAAQ,EAAE,gBAAgB;AAC1B,gBAAA,QAAQ,EAAE,cAAc;AAC3B,aAAA,EAAA,EAAA;;;AAyBgB,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAM,SAAC,eAAe,EAAA,EAAA,CAAA,EAAA;YA7CnC,iBAAiB,EAAA;YAEjB,UAAU,EAAA;YASV,SAAS,EAAA;;;AAYR,IAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAK,SAAC,cAAc,EAAA,EAAA,CAAA;mBACpB,KAAK,EAAA,CAAA;wBAEL,MAAM,EAAA,CAAA;sBACN,MAAM,EAAA,CAAA;AAQN,IAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAW,SAAC,gBAAgB,EAAA,EAAA,CAAA;AAK5B,IAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAW,SAAC,eAAe,EAAA,EAAA,CAAA;AAiC3B,IAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,OAAO,EAAA,EAAA,CAAA;;;MCnEZ,2BAA2B,CAAA;IAUpC,WAAoB,CAAA,GAAqB,EAAU,KAAyB,EAAA;QAAxD,IAAG,CAAA,GAAA,GAAH,GAAG,CAAkB;QAAU,IAAK,CAAA,KAAA,GAAL,KAAK,CAAoB;KAC3E;AAPD,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;AAOD,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3E,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KACpC;;;AAtBJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;AACP,gBAAA,QAAQ,EAAE,gBAAgB;AAC7B,aAAA,EAAA,EAAA;;;YANmD,gBAAgB,EAAA;YAE5D,kBAAkB,EAAA;;;AAOrB,IAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAK,SAAC,cAAc,EAAA,EAAA,CAAA;;;MCMZ,4BAA4B,CAAA;AAcrC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;KAC5C;;;AA5BJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;AACP,gBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAU+B,4CAAA,CAAA;AAC5C,aAAA,EAAA,EAAA;;;YAdyB,WAAW,EAAA;;;sBAiBhC,KAAK,EAAA,CAAA;oBACL,KAAK,EAAA,CAAA;oBACL,KAAK,EAAA,CAAA;qBACL,KAAK,EAAA,CAAA;qBACL,KAAK,EAAA,CAAA;wBACL,KAAK,EAAA,CAAA;wBACL,KAAK,EAAA,CAAA;yBACL,KAAK,EAAA,CAAA;yBACL,KAAK,EAAA,CAAA;8BACL,KAAK,EAAA,CAAA;8BACL,KAAK,EAAA,CAAA;;;MCpBG,yBAAyB,CAAA;IAWlC,WAAoB,CAAA,GAAqB,EAAU,KAAyB,EAAA;QAAxD,IAAG,CAAA,GAAA,GAAH,GAAG,CAAkB;QAAU,IAAK,CAAA,KAAA,GAAL,KAAK,CAAoB;KAC3E;AAPD,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;AAOD,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;AACpD,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACjB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,OAAO;AACV,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KACpC;;;AA5BJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;AACP,gBAAA,QAAQ,EAAE,cAAc;AAC3B,aAAA,EAAA,EAAA;;;YANmD,gBAAgB,EAAA;YAE5D,kBAAkB,EAAA;;;AAOrB,IAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAK,SAAC,YAAY,EAAA,EAAA,CAAA;sBAClB,KAAK,EAAA,CAAA;;;MCAY,wBAAwB,CAAA;IAwD1C,WAAsB,CAAA,GAAsB,EAAU,WAA+B,EAAA;QAA/B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAoB;AACjF,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAE1B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAsB,CAAC;AACvD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAoB,CAAC;AAC3D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAoB,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAoB,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;KAClB;AAvCD,IAAA,IAAI,IAAI,GAAA;QACJ,IAAI,IAAI,GAAqB,IAAI,CAAC;QAClC,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACvC,YAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AA0CD,IAAA,YAAY,CAAC,OAA4B,EAAA;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KACjD;;IAID,kBAAkB,GAAA;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,CAAC;QACrE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,CAAC;QACxE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,CAAC;AACrE,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAG,OAAO,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,eAAe,GAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,kBAAkB,GAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;KACzF;IAES,eAAe,CAAC,SAAgC,EAAE,IAAY,EAAA;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;QAC3F,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,KAAI;YACtE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC;AAC7C,YAAA,OAAO,MAAM,CAAC;SACjB,EAAE,EAAE,CAAC,CAAC;KACV;;;YA1GJ,SAAS,EAAA;;;YATiB,iBAAiB,EAAA;YAOpC,kBAAkB,EAAA;;;mBAKrB,KAAK,EAAA,CAAA;qBACL,KAAK,EAAA,CAAA;uBACL,KAAK,EAAA,CAAA;uBACL,KAAK,EAAA,CAAA;sBACL,KAAK,EAAA,CAAA;qBACL,KAAK,EAAA,CAAA;8BAEL,KAAK,EAAA,CAAA;+BACL,KAAK,EAAA,CAAA;8BACL,KAAK,EAAA,CAAA;+BAEL,KAAK,EAAA,CAAA;6BACL,KAAK,EAAA,CAAA;6BACL,KAAK,EAAA,CAAA;8BACL,KAAK,EAAA,CAAA;8BACL,KAAK,EAAA,CAAA;iCACL,KAAK,EAAA,CAAA;iCACL,KAAK,EAAA,CAAA;uBAEL,MAAM,EAAA,CAAA;6BACN,MAAM,EAAA,CAAA;qBACN,MAAM,EAAA,CAAA;uBACN,MAAM,EAAA,CAAA;AAEN,IAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,gBAAgB,EAAA,EAAA,CAAA;AAG7B,IAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,gBAAgB,EAAA,EAAA,CAAA;AAe7B,IAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,eAAe,SAAC,4BAA4B,EAAA,EAAA,CAAA;AAG5C,IAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,iBAAiB,EAAA,EAAA,CAAA;AAG9B,IAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,kBAAkB,EAAA,EAAA,CAAA;AAG/B,IAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,iBAAiB,EAAA,EAAA,CAAA;;;ACjC7B,MAAO,oBAAqB,SAAQ,wBAAwB,CAAA;IAkB9D,WAAY,CAAA,GAAsB,EAAE,KAAyB,EAAA;AACzD,QAAA,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG;AACnB,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,OAAO,EAAE,EAAE;SACd,CAAC;KACL;AAhBD,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KAC3B;AAED,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;KAClC;;AAcD,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;AACvB,QAAA,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE;AAC9E,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO;YAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,SAAA;KACJ;;IAID,YAAY,GAAA;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAK,GAAG,CAAC,CAAC;KAClE;;IAID,QAAQ,CAAC,aAAsB,IAAI,EAAA;QAC/B,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;YACxC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAG;AACxG,gBAAA,IAAI,UAAU;AAAE,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gBACxC,IAAI,MAAM,IAAI,OAAO,EAAE;oBACnB,OAAO,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO;AACV,iBAAA;gBACD,MAAM,CAAC,IAAI,CAAC,CAAC;AACjB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;KACN;AAED,IAAA,SAAS,CAAC,QAAkB,EAAA;QACxB,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;YACxC,MAAM,SAAS,GAAG,MAAK;gBACnB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,aAAC,CAAC;AACF,YAAA,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACxC,OAAO;AACV,aAAA;AACD,YAAA,SAAS,EAAE,CAAC;AAChB,SAAC,CAAC,CAAC;KACN;IAED,KAAK,GAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KAC7B;AAED,IAAA,UAAU,CAAC,EAAU,EAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;KACpC;;;AAhGJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,QAAQ,EAAE,8BAA8B;gBACxC,QAA4C,EAAA,i9FAAA;AAC5C,gBAAA,SAAS,EAAE;AACP,oBAAA;AACI,wBAAA,OAAO,EAAE,wBAAwB;AACjC,wBAAA,WAAW,EAAE,oBAAoB;AACpC,qBAAA;AACD,oBAAA;AACI,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,WAAW,EAAE,oBAAoB;AACpC,qBAAA;AACJ,iBAAA;AACJ,aAAA,EAAA,EAAA;;;YA7ByB,iBAAiB,EAAA;YAYnC,kBAAkB,EAAA;;;oBAoBrB,KAAK,EAAA,CAAA;uBACL,KAAK,EAAA,CAAA;0BACL,KAAK,EAAA,CAAA;wBACL,KAAK,EAAA,CAAA;mBACL,KAAK,EAAA,CAAA;;;ACvBV,MAAM,cAAc,GAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAiBnF,MAAO,qBAAsB,SAAQ,wBAAwB,CAAA;IA2B/D,WAAY,CAAA,GAAsB,EAAE,WAA+B,EAAA;AAC/D,QAAA,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;KACtC;AAtBD,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC;AAC/D,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;;IAoBD,kBAAkB,GAAA;QACd,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,CAAC;AAC3E,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAAC;AACvG,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAAC;KAC1G;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnD;;IAID,QAAQ,CAAC,aAAsB,IAAI,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACnE;AAED,IAAA,SAAS,CAAC,QAAkB,EAAA;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;AACxC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;gBACjC,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,KAAI;oBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC7B,IAAI,IAAI,GAA2B,IAAI,CAAC;AACxC,oBAAA,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,wBAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACtB,qBAAA;AAAM,yBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,qBAAA;yBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC1C,wBAAA,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,qBAAA;oBACD,IAAI,CAAC,IAAI,EAAE;wBACP,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;wBAC1C,OAAO;AACV,qBAAA;oBACD,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC;AACxE,iBAAC,CAAC,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,CAAC;aACnB,EAAE,MAAM,CAAC,CAAC;AACf,SAAC,CAAC,CAAC;KACN;IAED,KAAK,GAAA;QACD,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACtD;AAED,IAAA,UAAU,CAAC,EAAU,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KACnD;AAEO,IAAA,UAAU,CAAC,KAA0C,EAAA;AACzD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC;AAC9B,QAAA,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACxD;AAEO,IAAA,YAAY,CAAI,KAAoC,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;QAC7B,IAAI,KAAK,GAAM,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAG;AAChB,YAAA,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,KAAK,CAAC;KAChB;AAEO,IAAA,gBAAgB,CAAC,OAA6B,EAAA;QAClD,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,KAAI;YAClC,IAAI,CAAC,CAAC,KAAK;AAAE,gBAAA,OAAO,CAAC,CAAC;YACtB,MAAM,MAAM,GAA6B,CAAC,CAAC;AAC3C,YAAA,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE;gBACrC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE;AACnC,gBAAA,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM,CAAC,WAAW;AAC3B,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;YACvC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,CAAC,CAAC;KACN;;;AA3IJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,QAAQ,EAAE,gCAAgC;gBAC1C,QAA6C,EAAA,g+KAAA;AAC7C,gBAAA,SAAS,EAAE;AACP,oBAAA;AACI,wBAAA,OAAO,EAAE,wBAAwB;AACjC,wBAAA,WAAW,EAAE,qBAAqB;AACrC,qBAAA;AACD,oBAAA;AACI,wBAAA,OAAO,EAAE,YAAY;AACrB,wBAAA,WAAW,EAAE,qBAAqB;AACrC,qBAAA;AACJ,iBAAA;AACJ,aAAA,EAAA,EAAA;;;YA5BqB,iBAAiB,EAAA;YAU/B,kBAAkB,EAAA;;;mBAqBrB,KAAK,EAAA,CAAA;gCAEL,KAAK,EAAA,CAAA;kCAEL,KAAK,EAAA,CAAA;kCACL,KAAK,EAAA,CAAA;uCACL,KAAK,EAAA,CAAA;uCACL,KAAK,EAAA,CAAA;AAYL,IAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,mBAAmB,EAAA,EAAA,CAAA;AAGhC,IAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,YAAY,SAAC,wBAAwB,EAAA,EAAA,CAAA;;;MCxC7B,yBAAyB,CAAA;AAIlC,IAAA,WAAA,CAA2C,IAAsB,EAAA;QAAtB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAkB;KAChE;AAED,IAAA,IACI,OAAO,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,YAAY,CAAC;QACvC,OAAO,CAAC,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,oBAAoB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACxK;;;AAhBJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,QAAQ,EAAE,yBAAyB;gBACnC,QAAkD,EAAA,kpFAAA;AACrD,aAAA,EAAA,EAAA;;;AAKgB,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAM,SAAC,YAAY,EAAA,EAAA,CAAA,EAAA;;;AAG/B,IAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAW,SAAC,OAAO,EAAA,EAAA,CAAA;;;ACZlB,MAAO,wBAAyB,SAAQ,oBAAmC,CAAA;;IAK7E,OAAO,QAAQ,CAAC,OAA4B,EAAA;AACxC,QAAA,OAAO,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;KACjC;;AAGD,IAAA,OAAO,MAAM,GAAA;AACT,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;KAC5B;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;AAED,IAAA,QAAQ,CAAC,KAAuB,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;KACpB;AAES,IAAA,YAAY,CAAC,QAAkB,EAAA;QACrC,MAAM,KAAK,GAAW,EAAE,CAAC;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,QAAA,MAAM,KAAK,GAAa,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACnH,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACzC,YAAA,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;gBAAE,SAAS;AACzD,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAChD,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACtB;AAES,IAAA,MAAM,CAAC,KAAa,EAAA;QAC1B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,MAAM;AAAE,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAG,CAAC,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,KAAI;AACvB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACrB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjD,OAAO;AACV,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAClB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrC,OAAO;AACV,aAAA;YACD,QAAQ,CAAC,IAAI,CACT,IAAI,CAAC,GAAG,CAAC,MAAM,CACX,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAChC,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,IAAI,CAAC,aAAa,CAC1B,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE,MAAM,IAAI,CAAC,CAClD,CAAC;AACN,SAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,IAAG;AAChC,YAAA,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,OAAO;AACV,aAAA;AACD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,SAAC,CAAC,CAAC;KACN;AAED,IAAA,MAAM,CAAC,KAAc,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC7C,YAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO;AACV,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC/B;AAED,IAAA,MAAM,CAAC,KAAU,EAAA;QACb,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;KAC5C;AAEO,IAAA,SAAS,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,EAAE;AACR,gBAAA,KAAK,GAAG,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,EAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,aAAA;YACD,OAAO,KAAK,CAAC,GAAG,CAAC;AACpB,SAAA;AACD,QAAA,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAC5C,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACpB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACzD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC,CAAC;KACrD;;;AA9GJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;AACP,gBAAA,QAAQ,EAAE,mBAAmB;gBAE7B,QAAiD,EAAA,2vBAAA;;AACpD,aAAA,EAAA,EAAA;;;ACCK,MAAO,yBAA0B,SAAQ,oBAAoC,CAAA;;IAG/E,OAAO,QAAQ,CAAC,OAA2B,EAAA;AACvC,QAAA,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;KAClC;;AAGD,IAAA,OAAO,MAAM,GAAA;AACT,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;KAC5B;AAED,IAAA,IACI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC;KACrD;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,MAAM,SAAS,GAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,cAAc;YAAE,OAAO;AAC5D,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;KAC9B;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO;AACV,SAAA;QACD,MAAM,YAAY,GAAmB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACnG,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACjF,QAAA,IAAI,WAAW,EAAE;AACb,YAAA,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;AACnC,SAAA;AAAM,aAAA;YACH,YAAY,CAAC,IAAI,CAAC;AACd,gBAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;AAChC,gBAAA,WAAW,EAAE,KAAK;AACrB,aAAA,CAAC,CAAC;AACN,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KACvC;IAED,YAAY,GAAA;AACR,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,EAAE;YAC9D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,SAAA;AAAM,aAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,EAAE;YACrE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KACzB;;;AAvDJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,QAAQ,EAAE,oBAAoB;gBAC9B,QAAkD,EAAA,80IAAA;AACrD,aAAA,EAAA,EAAA;;;AAaI,IAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAW,SAAC,eAAe,EAAA,EAAA,CAAA;;;ACL1B,MAAO,0BAA2B,SAAQ,oBAAqC,CAAA;;IAGjF,OAAO,QAAQ,CAAC,OAA2B,EAAA;AACvC,QAAA,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;KACnC;;IAGD,OAAO,MAAM,CAAC,OAA4B,EAAA;AACtC,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAmB,CAAC;QAChD,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE;AACpC,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;AACtE,SAAA;AACD,QAAA,OAAO,IAAI,OAAO,CAAM,OAAO,IAAG;AAC9B,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;gBAC/B,IAAI,IAAI,CAAC,WAAW;AAAE,oBAAA,OAAO,CAAC,OAAO,CAAC,EAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAC,CAAC,CAAC;AAC7D,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,gBAAA,0BAA0B,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzD,OAAO,CAAC,OAAO,CAAC,CAAC;AACrB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;AAED,IAAA,OAAO,WAAW,CAAC,OAA4B,EAAE,OAA6B,EAAA;AAC1E,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAmB,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/B,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QAC/F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KACnC;AAED,IAAA,cAAc,CAAC,KAAU,EAAA;QACrB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7B,OAAO;AACV,aAAA;AACD,YAAA,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CACjB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;sBACpB,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AACzB,sBAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CACzC,CAAC;gBACF,OAAO;AACV,aAAA;YACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,OAAO;AACV,SAAA;AACD,QAAA,IAAI,OAAO;AAAE,YAAA,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,OAAO,IAAI,KAAK,EAAE;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;AAC3D,YAAA,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;AACrC,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAChC;AAED,IAAA,UAAU,CAAC,MAA0B,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC;KAC1F;AAED,IAAA,UAAU,CAAC,MAA0B,EAAE,KAAa,EAAE,EAAU,EAAA;AAC5D,QAAA,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;KAC1B;;;AAtEJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,QAAQ,EAAE,qBAAqB;gBAC/B,QAAmD,EAAA,81GAAA;AACtD,aAAA,EAAA,EAAA;;;ACDK,MAAO,0BAA2B,SAAQ,oBAAqC,CAAA;;IAGjF,OAAO,QAAQ,CAAC,OAA2B,EAAA;AACvC,QAAA,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;KACnC;;AAGD,IAAA,OAAO,MAAM,GAAA;AACT,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;KAC5B;;;AAfJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,QAAQ,EAAE,qBAAqB;gBAC/B,QAAmD,EAAA,0dAAA;AACtD,aAAA,EAAA,EAAA;;;ACLK,MAAO,yBAA0B,SAAQ,oBAAoC,CAAA;;IAM/E,OAAO,QAAQ,CAAC,OAA2B,EAAA;AACvC,QAAA,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;KAClC;;AAGD,IAAA,OAAO,MAAM,GAAA;AACT,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;KAC5B;;;AAlBJ,IAAA,EAAA,IAAA,EAAA,SAAS,EAAC,IAAA,EAAA,CAAA;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,QAAQ,EAAE,oBAAoB;gBAC9B,QAAkD,EAAA,2jCAAA;AACrD,aAAA,EAAA,EAAA;;;AAGI,IAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,SAAS,SAAC,SAAS,EAAA,EAAA,CAAA;;;ACaxB;AACa,MAAA,UAAU,GAAG;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB;IACxB,yBAAyB;IACzB,0BAA0B;IAC1B,0BAA0B;IAC1B,yBAAyB;EAC3B;AAEF;AACa,MAAA,UAAU,GAAG;IACtB,oBAAoB;IACpB,2BAA2B;IAC3B,yBAAyB;IACzB,4BAA4B;EAC9B;AAEF;AACO,MAAM,KAAK,GAAG,GAAG;MAyBX,oBAAoB,CAAA;AAE7B,IAAA,OAAO,OAAO,CAAC,gBAA6C,EAAE,aAAiC,EAAA;QAC3F,OAAO;AACH,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE;gBACP,kBAAkB;gBAClB,cAAc;gBACd,kBAAkB,CAAC,wBAAwB,EAAE,wBAAwB,CAAC,QAAQ,EAAE,wBAAwB,CAAC,MAAM,CAAC;gBAChH,kBAAkB,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,QAAQ,EAAE,yBAAyB,CAAC,MAAM,CAAC;gBACnH,kBAAkB,CAAC,0BAA0B,EAAE,0BAA0B,CAAC,QAAQ,EAAE,0BAA0B,CAAC,MAAM,CAAC;gBACtH,kBAAkB,CAAC,0BAA0B,EAAE,0BAA0B,CAAC,QAAQ,EAAE,0BAA0B,CAAC,MAAM,CAAC;gBACtH,kBAAkB,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,QAAQ,EAAE,yBAAyB,CAAC,MAAM,CAAC;AACnH,gBAAA,IAAI,gBAAgB,IAAI,EAAE,CAAC;AAC3B,gBAAA,aAAa,IAAI,gBAAgB,CAAC,yBAAyB,CAAC;AAC/D,aAAA;SACJ,CAAA;KACJ;;;AAxCJ,IAAA,EAAA,IAAA,EAAA,QAAQ,EAAC,IAAA,EAAA,CAAA;AACN,gBAAA,YAAY,EAAE;AACV,oBAAA,GAAG,UAAU;AACb,oBAAA,GAAG,UAAU;AACb,oBAAA,GAAG,KAAK;AACX,iBAAA;AACD,gBAAA,OAAO,EAAE;oBACL,YAAY;oBACZ,WAAW;oBACX,mBAAmB;oBACnB,cAAc;AACjB,iBAAA;AACD,gBAAA,OAAO,EAAE;AACL,oBAAA,GAAG,UAAU;AACb,oBAAA,GAAG,UAAU;AACb,oBAAA,GAAG,KAAK;oBACR,WAAW;oBACX,mBAAmB;oBACnB,cAAc;AACjB,iBAAA;AACD,gBAAA,eAAe,EAAE,UAAU;AAC3B,gBAAA,SAAS,EAAE,KAAK;AACnB,aAAA,EAAA,EAAA;;;ACpED;;AAEG;;;;"}
|