@maro-tech/form 0.1.6 → 0.1.8
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maro-tech-form.mjs","sources":["../../../src/lib/context/form-context.service.ts","../../../src/lib/forms-api.service.ts","../../../src/lib/dynamic/ui-dynamic-form.models.ts","../../../src/lib/dynamic/form-lookup.service.ts","../../../src/lib/inputs/field-frame/ui-field-frame.component.ts","../../../src/lib/inputs/field-frame/ui-field-frame.component.html","../../../src/lib/inputs/text/ui-text-input-control.component.ts","../../../src/lib/inputs/text/ui-text-input-control.component.html","../../../src/lib/inputs/barcode/ui-barcode-scanner-input.component.ts","../../../src/lib/inputs/barcode/ui-barcode-scanner-input.wrapper.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input-control.component.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.html","../../../src/lib/inputs/form-control.validator.ts","../../../src/lib/inputs/color/ui-color-input-control.component.ts","../../../src/lib/inputs/color/ui-color-input.component.ts","../../../src/lib/inputs/color/ui-color-input.component.html","../../../src/lib/popup/ui-popup.service.ts","../../../src/lib/inputs/date/ui-date-input.component.ts","../../../src/lib/inputs/date/ui-date-input.component.html","../../../src/lib/inputs/date/ui-date-input.component.wrapper.ts","../../../src/lib/inputs/date/ui-date-input.component.wrapper.html","../../../src/lib/inputs/datetime/ui-datetime-input.component.ts","../../../src/lib/inputs/datetime/ui-datetime-input.component.html","../../../src/lib/inputs/datetime/ui-datetime-input.component.wrapper.ts","../../../src/lib/inputs/datetime/ui-datetime-input.component.wrapper.html","../../../src/lib/inputs/email/ui-email-input-control.component.ts","../../../src/lib/inputs/email/ui-email-input.component.ts","../../../src/lib/inputs/email/ui-email-input.component.html","../../../src/lib/inputs/number/ui-number-input-control.component.ts","../../../src/lib/inputs/number/ui-number-input.component.ts","../../../src/lib/inputs/number/ui-number-input.component.html","../../../src/lib/inputs/password/ui-password-input-control.component.ts","../../../src/lib/inputs/password/ui-password-input.component.ts","../../../src/lib/inputs/password/ui-password-input.component.html","../../../src/lib/inputs/text/ui-text-input.component.ts","../../../src/lib/inputs/text/ui-text-input.component.html","../../../src/lib/inputs/textarea/ui-textarea-input-control.component.ts","../../../src/lib/inputs/textarea/ui-textarea-input.component.ts","../../../src/lib/inputs/textarea/ui-textarea-input.component.html","../../../src/lib/inputs/file/ui-file-input-control.component.ts","../../../src/lib/inputs/file/ui-file-input-control.component.html","../../../src/lib/inputs/file/ui-file-input.component.ts","../../../src/lib/inputs/file/ui-file-input.component.html","../../../src/lib/inputs/photo/ui-photo-input-control.component.ts","../../../src/lib/inputs/photo/ui-photo-input-control.component.html","../../../src/lib/inputs/photo/ui-photo-input.component.ts","../../../src/lib/inputs/photo/ui-photo-input.component.html","../../../src/lib/inputs/select/ui-select.component.ts","../../../src/lib/inputs/select/ui-select.component.html","../../../src/lib/inputs/select/ui-select-input.component.ts","../../../src/lib/inputs/select/ui-select-input.component.html","../../../src/lib/inputs/slug/ui-slug-input-control.component.ts","../../../src/lib/inputs/slug/ui-slug-input.component.ts","../../../src/lib/inputs/slug/ui-slug-input.component.html","../../../src/lib/inputs/form-input.registry.ts","../../../src/lib/inputs/form-input-host.component.ts","../../../src/lib/dynamic/form-condition.parser.ts","../../../src/lib/dynamic/ui-dynamic-form.component.ts","../../../src/lib/dynamic/ui-dynamic-form.component.html","../../../src/lib/form/ui-form-modal.component.ts","../../../src/lib/form/ui-form-modal.component.html","../../../src/lib/inputs/input/ui-input-control.component.ts","../../../src/lib/inputs/input/ui-input.component.ts","../../../src/lib/inputs/input/ui-input.component.html","../../../src/lib/inputs/photo-gallery/ui-photo-gallery-field.component.ts","../../../src/lib/inputs/photo-gallery/ui-photo-gallery-field.component.html","../../../src/lib/inputs/range-slider/ui-range-slider.component.ts","../../../src/maro-tech-form.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { UiFormErrors, UiFormValue } from './form.models';\n\n@Injectable()\nexport class UiFormContext {\n readonly value = signal<UiFormValue>({});\n readonly errors = signal<UiFormErrors>({});\n readonly loading = signal(false);\n readonly disabled = signal(false);\n\n setValue(value: UiFormValue): void {\n this.value.set({ ...value });\n }\n\n patchValue(value: UiFormValue): void {\n this.value.update((current) => ({ ...current, ...value }));\n }\n\n setErrors(errors: UiFormErrors): void {\n this.errors.set({ ...errors });\n }\n\n reset(value: UiFormValue = {}): void {\n this.value.set({ ...value });\n this.errors.set({});\n this.loading.set(false);\n }\n}\n\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MaroFormsApiService {\n private readonly http = inject(HttpClient);\n\n getSuggestByName(name: string, query = ''): Observable<Array<Record<string, unknown>>> {\n const suffix = query ? `?q=${encodeURIComponent(query)}` : '';\n return this.http.get<Array<Record<string, unknown>>>(`/api/suggest/${encodeURIComponent(name)}${suffix}`);\n }\n}\n","import { UiSelectOption } from '../inputs/select/ui-select.component';\n\nexport type ApiPluginMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\nexport const ACTION_PRINT = 'ACTION_PRINT' as const;\nexport const ACTION_FORM = 'ACTION_FORM' as const;\nexport const ACTION_API = 'ACTION_API' as const;\nexport const ACTION_SUBMIT = 'ACTION_SUBMIT' as const;\nexport type ActionType = typeof ACTION_PRINT | typeof ACTION_FORM | typeof ACTION_API | typeof ACTION_SUBMIT;\n\nexport type UiDynamicFieldType =\n | 'text'\n | 'number'\n | 'date'\n | 'datetime'\n | 'email'\n | 'password'\n | 'textarea'\n | 'select'\n | 'barcode'\n | 'checkbox'\n | 'color'\n | 'range'\n | 'slug'\n | 'file'\n | 'photo'\n | 'container'\n | 'template';\n\nexport interface UiDynamicFormFieldAction {\n id: string;\n type: ActionType;\n label: string;\n icon?: string;\n formId?: string;\n size?: 'sm' | 'md' | 'lg';\n api?: string;\n method?: ApiPluginMethod;\n title?: string;\n text?: string;\n submit?: boolean | string;\n payload?: Record<string, unknown>;\n condition?: string;\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n}\n\nexport interface UiDynamicFormCommonField {\n id: string;\n label?: string;\n title?: string;\n placeholder?: string;\n hint?: string;\n required?: boolean;\n disabled?: boolean;\n col?: number;\n hidden?: boolean | string;\n default?: string | number | boolean | string[] | null;\n actions?: UiDynamicFormFieldAction[];\n className?: string;\n}\n\nexport interface UiDynamicFormTextField extends UiDynamicFormCommonField {\n type?: Exclude<UiDynamicFieldType, 'select' | 'barcode' | 'checkbox' | 'color' | 'range' | 'file' | 'photo' | 'container' | 'template'>;\n rows?: number;\n pattern?: string;\n}\n\nexport interface UiDynamicFormSelectField extends UiDynamicFormCommonField {\n type: 'select';\n data?: string;\n dataParams?: Record<string, string>;\n options?: UiSelectOption[];\n searchable?: boolean;\n multiple?: boolean;\n lookupApi?: string;\n lookupMap?: Record<string, string>;\n lookupErrorField?: string;\n}\n\nexport interface UiDynamicFormFileField extends UiDynamicFormCommonField {\n type: 'file';\n accept?: string;\n multiple?: boolean;\n}\n\nexport interface UiDynamicFormPhotoField extends UiDynamicFormCommonField {\n type: 'photo';\n accept?: string;\n multiple?: boolean;\n limit?: number;\n}\n\nexport interface UiDynamicFormBarcodeField extends UiDynamicFormCommonField {\n type: 'barcode';\n lookupApi?: string;\n lookupMap?: Record<string, string>;\n lookupErrorField?: string;\n}\n\nexport interface UiDynamicFormCheckboxField extends UiDynamicFormCommonField {\n type: 'checkbox';\n}\n\nexport interface UiDynamicFormColorField extends UiDynamicFormCommonField {\n type: 'color';\n}\n\nexport interface UiDynamicFormRangeField extends UiDynamicFormCommonField {\n type: 'range';\n}\n\nexport interface UiDynamicFormContainerField extends UiDynamicFormCommonField {\n type: 'container';\n fields: UiDynamicFormField[];\n layout?: 'grid' | 'stack';\n title?: string;\n hint?: string;\n contentClassName?: string;\n tag?: 'div' | 'section' | 'aside' | 'fieldset';\n}\n\nexport interface UiDynamicFormTemplateField extends UiDynamicFormCommonField {\n type: 'template';\n template: string;\n templateContext?: Record<string, unknown>;\n tag?: 'div' | 'section' | 'aside' | 'fieldset';\n}\n\nexport type UiDynamicFormField =\n | UiDynamicFormTextField\n | UiDynamicFormSelectField\n | UiDynamicFormFileField\n | UiDynamicFormPhotoField\n | UiDynamicFormBarcodeField\n | UiDynamicFormCheckboxField\n | UiDynamicFormColorField\n | UiDynamicFormRangeField\n | UiDynamicFormContainerField\n | UiDynamicFormTemplateField;\n\nexport type UiDynamicFormValue = Record<string, string | number | boolean | string[] | File | File[] | null | undefined>;\n\nexport const isDynamicFormContainerField = (field: UiDynamicFormField): field is UiDynamicFormContainerField =>\n field.type === 'container';\n\nexport const isDynamicFormTemplateField = (field: UiDynamicFormField): field is UiDynamicFormTemplateField =>\n field.type === 'template';\n\nexport const isDynamicFormLookupField = (\n field: UiDynamicFormField,\n): field is UiDynamicFormSelectField | UiDynamicFormBarcodeField =>\n field.type === 'select' || field.type === 'barcode';\n\nexport const flattenDynamicFormFields = (fields: UiDynamicFormField[]): UiDynamicFormField[] => {\n const result: UiDynamicFormField[] = [];\n\n for (const field of fields || []) {\n if (!field) {\n continue;\n }\n\n result.push(field);\n\n if (isDynamicFormContainerField(field) && Array.isArray(field.fields) && field.fields.length) {\n result.push(...flattenDynamicFormFields(field.fields));\n }\n }\n\n return result;\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { UiDynamicFormField, isDynamicFormLookupField } from './ui-dynamic-form.models';\n\n@Injectable()\nexport class UiFormLookupService {\n private readonly http = inject(HttpClient);\n\n lookup(field: UiDynamicFormField, value: string): Observable<Record<string, unknown>> {\n if (!isDynamicFormLookupField(field)) {\n return throwError(() => new Error('Lookup is not supported for this field type'));\n }\n const api = String(field.lookupApi || '').trim();\n const endpoint = api\n .replace(/:value/g, encodeURIComponent(value))\n .replace(new RegExp(`:${field.id}\\\\b`, 'g'), encodeURIComponent(value));\n if (/^https?:\\/\\//i.test(endpoint)) {\n return this.http.get<Record<string, unknown>>(endpoint);\n }\n const path = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n const requestUrl = path.startsWith('/api/') || path === '/api'\n ? path\n : `/api${path}`;\n return this.http.get<Record<string, unknown>>(requestUrl);\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\n@Component({\n selector: 'field-frame',\n standalone: true,\n imports: [CommonModule, UiButtonComponent],\n templateUrl: './ui-field-frame.component.html',\n styles: [\n ':host(.field-error) ::ng-deep [data-field-control] { border-color: rgb(252 165 165); box-shadow: 0 0 0 2px rgb(254 226 226); }',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FieldFrameComponent {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() forId?: string;\n @Input() disabled = false;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n @HostBinding('class.field-error')\n get hasError(): boolean {\n return !!String(this.error || '').trim();\n }\n\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n}\n","<div class=\"relative w-full flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\">\n @if (label) {\n <label class=\"text-[0.7rem] font-semibold text-slate-600\" [attr.for]=\"forId\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </label>\n }\n\n <div class=\"flex items-end gap-2\">\n <div class=\"min-w-0 flex-1\">\n <ng-content />\n </div>\n\n @if (actions.length) {\n <div class=\"flex flex-none items-center gap-2 pb-0.5\">\n @for (action of actions; track action.id) {\n <ui-button\n type=\"button\"\n [variant]=\"action.variant ?? 'secondary'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"actionTriggered.emit(action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </div>\n\n @if (hint) {\n <p class=\"text-[0.5rem] text-slate-500\">{{ hint }}</p>\n }\n @if (error) {\n <p class=\"absolute left-0 top-full z-10 mt-1 text-[0.5rem] text-red-500\">{{ error }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'input-text-control',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-text-input-control.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputTextControlComponent {\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() type = 'text';\n @Input() element: 'input' | 'textarea' = 'input';\n @Input() rows = 4;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() disabled = false;\n @Input() value: string | number | null = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n @Output() enterPressed = new EventEmitter<void>();\n}\n","@if (element === 'textarea') {\n <textarea\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [disabled]=\"disabled\"\n data-field-control\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [value]=\"value\"\n (input)=\"valueChange.emit($any($event.target).value)\"\n (keydown.enter)=\"enterPressed.emit()\"\n (blur)=\"touched.emit()\"\n ></textarea>\n} @else {\n <input\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [disabled]=\"disabled\"\n data-field-control\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [attr.id]=\"id\"\n [value]=\"value\"\n (input)=\"valueChange.emit($any($event.target).value)\"\n (keydown.enter)=\"enterPressed.emit()\"\n (blur)=\"touched.emit()\"\n />\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Camera, CameraOff } from 'lucide-angular';\nimport { BrowserMultiFormatOneDReader, type IScannerControls } from '@zxing/browser';\nimport { BarcodeFormat, DecodeHintType } from '@zxing/library';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\ntype NativeBarcodeDetector = {\n detect(source: HTMLVideoElement): Promise<Array<{ rawValue?: string }>>;\n};\n\ntype NativeBarcodeDetectorConstructor = {\n new (options?: { formats?: string[] }): NativeBarcodeDetector;\n getSupportedFormats?: () => Promise<string[]>;\n};\n\n@Component({\n selector: 'input-barcode-control',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, InputTextControlComponent],\n template: `\n\n <div class=\"relative flex items-start gap-2\">\n <div class=\"min-w-0 flex-1\">\n <input-text-control\n id=\"barcode-scanner-input\"\n type=\"text\"\n autocomplete=\"off\"\n [disabled]=\"disabled()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n (valueChange)=\"onValueChange($event)\"\n (enterPressed)=\"requestSearch()\"\n />\n </div>\n\n <div class=\"mt-0.5 flex flex-row flex-wrap items-center gap-2\">\n <ui-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"disabled()\"\n (click)=\"requestSearch()\"\n >\n Знайти\n </ui-button>\n <ui-button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [icon]=\"isCameraOpen() ? cameraOffIcon : cameraIcon\"\n [ariaLabel]=\"isCameraOpen() ? 'Закрити камеру' : 'Відкрити камеру'\"\n [disabled]=\"disabled() || isCameraStarting()\"\n (click)=\"isCameraOpen() ? closeCamera() : openCamera()\"\n ></ui-button>\n </div>\n </div>\n\n @if (hint()) {\n <p class=\"mt-2 text-[0.5rem] text-slate-500\">{{ hint() }}</p>\n }\n @if (isCameraStarting()) {\n <div class=\"rounded-xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm text-slate-500\">\n Запускаємо камеру…\n </div>\n }\n\n @if (isCameraOpen()) {\n <section class=\"mt-3 space-y-3 rounded-3xl border border-slate-200 bg-slate-950 p-3 text-white\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <p class=\"text-xs font-semibold uppercase tracking-[0.22em] text-slate-300\">Камера</p>\n <p class=\"text-sm text-slate-200\">{{ cameraStatus() }}</p>\n </div>\n <button\n type=\"button\"\n class=\"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold text-slate-200 transition hover:border-slate-500 hover:text-white\"\n (click)=\"closeCamera()\"\n >\n Закрити камеру\n </button>\n </div>\n\n <div class=\"overflow-hidden rounded-xl bg-black\">\n <video #cameraVideo class=\"h-[260px] w-full object-cover\" autoplay muted playsinline></video>\n </div>\n\n <p class=\"text-xs text-slate-300\">\n Наведіть камеру на штрихкод.\n </p>\n </section>\n }\n\n @if (cameraError()) {\n <div class=\"rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\">\n {{ cameraError() }}\n </div>\n }\n\n `,\n})\nexport class InputBarcodeControlComponent implements OnChanges, AfterViewInit, OnDestroy {\n readonly cameraIcon = Camera;\n readonly cameraOffIcon = CameraOff;\n\n readonly value = input('');\n readonly label = input('Штрихкод');\n readonly placeholder = input('Відскануйте або введіть штрихкод');\n readonly hint = input('Сканер може просто ввести код і натиснути Enter.');\n readonly error = input('');\n readonly required = input(false);\n readonly disabled = input(false);\n\n readonly valueChange = output<string>();\n readonly scanned = output<string>();\n readonly searchRequested = output<void>();\n readonly cameraStateChange = output<'idle' | 'starting' | 'open' | 'error'>();\n\n readonly isCameraOpen = signal(false);\n readonly isCameraStarting = signal(false);\n readonly cameraError = signal('');\n readonly cameraStatus = signal('Камеру не відкрито');\n\n @ViewChild('cameraVideo') private cameraVideo?: ElementRef<HTMLVideoElement>;\n\n private readonly barcodeReader = new BrowserMultiFormatOneDReader(\n new Map([[DecodeHintType.POSSIBLE_FORMATS, [BarcodeFormat.CODE_128]]]),\n {\n delayBetweenScanAttempts: 75,\n delayBetweenScanSuccess: 250,\n tryPlayVideoTimeout: 5000,\n }\n );\n private nativeBarcodeDetector: NativeBarcodeDetector | null = null;\n private cameraControls: IScannerControls | null = null;\n private cameraStream: MediaStream | null = null;\n private scanLoopId: number | null = null;\n private autoOpenQueued = false;\n private openToken = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['disabled']?.currentValue === true) {\n this.stopCamera();\n this.autoOpenQueued = false;\n return;\n }\n\n if (!this.disabled()) this.scheduleAutoOpen();\n }\n\n ngAfterViewInit(): void {\n this.scheduleAutoOpen();\n }\n\n ngOnDestroy(): void {\n this.stopCamera();\n }\n\n onValueChange(nextValue: string): void {\n this.valueChange.emit(String(nextValue ?? ''));\n }\n\n requestSearch(): void {\n this.searchRequested.emit();\n }\n\n async openCamera(): Promise<void> {\n if (this.disabled() || this.isCameraStarting() || this.isCameraOpen()) {\n return;\n }\n\n this.cameraError.set('');\n this.cameraStatus.set('Запускаємо камеру…');\n this.isCameraStarting.set(true);\n this.cameraStateChange.emit('starting');\n this.isCameraOpen.set(true);\n const token = ++this.openToken;\n\n try {\n await new Promise<void>((resolve) => {\n window.requestAnimationFrame(() => resolve());\n });\n\n if (token !== this.openToken) {\n return;\n }\n\n const video = this.cameraVideo?.nativeElement;\n if (!video) {\n throw new Error('Не вдалося підготувати камеру');\n }\n\n if (await this.tryOpenNativeCamera(token, video)) {\n this.isCameraOpen.set(true);\n this.cameraStatus.set('Камера відкрита, наведіть на штрихкод');\n this.cameraStateChange.emit('open');\n return;\n }\n\n await this.openZxingCamera(token, video);\n\n if (token !== this.openToken) {\n this.cameraControls?.stop();\n this.cameraControls = null;\n return;\n }\n\n this.isCameraOpen.set(true);\n this.cameraStatus.set('Камера відкрита, наведіть на штрихкод');\n this.cameraStateChange.emit('open');\n } catch (error: any) {\n if (token !== this.openToken) {\n return;\n }\n\n this.cameraError.set(error?.message || 'Не вдалося відкрити камеру');\n this.cameraStatus.set('Камеру не відкрито');\n this.cameraStateChange.emit('error');\n this.stopCamera();\n } finally {\n if (token === this.openToken) {\n this.isCameraStarting.set(false);\n }\n }\n }\n\n closeCamera(): void {\n this.stopCamera();\n }\n\n private scheduleAutoOpen(): void {\n if (typeof window === 'undefined' || this.disabled() || this.isCameraOpen() || this.isCameraStarting() || this.autoOpenQueued) {\n return;\n }\n\n this.autoOpenQueued = true;\n window.requestAnimationFrame(() => {\n this.autoOpenQueued = false;\n if (this.disabled() || this.isCameraOpen() || this.isCameraStarting()) {\n return;\n }\n\n void this.openCamera();\n });\n }\n\n private onBarcodeDetected(value: string): void {\n this.valueChange.emit(value);\n this.scanned.emit(value);\n this.cameraStatus.set('Штрихкод знайдено');\n this.cameraControls?.stop();\n this.cameraControls = null;\n this.stopCamera();\n }\n\n private stopCamera(): void {\n this.openToken += 1;\n if (this.scanLoopId != null) {\n window.cancelAnimationFrame(this.scanLoopId);\n this.scanLoopId = null;\n }\n\n this.cameraControls?.stop();\n this.cameraControls = null;\n\n if (this.cameraStream) {\n for (const track of this.cameraStream.getTracks()) {\n track.stop();\n }\n this.cameraStream = null;\n }\n\n const video = this.cameraVideo?.nativeElement;\n if (video) {\n video.pause();\n video.srcObject = null;\n }\n\n this.nativeBarcodeDetector = null;\n this.isCameraOpen.set(false);\n this.isCameraStarting.set(false);\n this.cameraStateChange.emit(this.cameraError() ? 'error' : 'idle');\n if (!this.cameraError()) {\n this.cameraStatus.set('Камеру зупинено');\n }\n }\n\n private async tryOpenNativeCamera(token: number, video: HTMLVideoElement): Promise<boolean> {\n const detector = await this.createNativeBarcodeDetector();\n if (!detector) {\n return false;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: false,\n video: {\n facingMode: { ideal: 'environment' },\n width: { ideal: 1280 },\n height: { ideal: 720 },\n },\n });\n\n if (token !== this.openToken) {\n stream.getTracks().forEach((track) => track.stop());\n return true;\n }\n\n this.nativeBarcodeDetector = detector;\n this.cameraStream = stream;\n video.srcObject = stream;\n await video.play().catch(() => undefined);\n this.scheduleNativeScan(token);\n return true;\n } catch {\n return false;\n }\n }\n\n private async openZxingCamera(token: number, video: HTMLVideoElement): Promise<void> {\n this.cameraControls = await this.barcodeReader.decodeFromConstraints(\n {\n audio: false,\n video: {\n facingMode: { ideal: 'environment' },\n width: { ideal: 960 },\n height: { ideal: 540 },\n },\n },\n video,\n (result, error) => {\n if (token !== this.openToken) {\n return;\n }\n\n if (error || !result) {\n return;\n }\n\n const value = String(result.getText()).trim();\n if (value) {\n this.onBarcodeDetected(value);\n }\n }\n );\n }\n\n private scheduleNativeScan(token: number): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const loop = async (): Promise<void> => {\n if (token !== this.openToken) {\n return;\n }\n\n const video = this.cameraVideo?.nativeElement;\n const detector = this.nativeBarcodeDetector;\n if (!video || !detector || video.readyState < HTMLMediaElement.HAVE_CURRENT_DATA) {\n this.scanLoopId = window.requestAnimationFrame(() => {\n void loop();\n });\n return;\n }\n\n try {\n const barcodes = await detector.detect(video);\n const value = String(barcodes?.[0]?.rawValue || '').trim();\n if (value) {\n this.onBarcodeDetected(value);\n return;\n }\n } catch {\n // Native detection can fail on a frame; keep scanning.\n }\n\n this.scanLoopId = window.requestAnimationFrame(() => {\n void loop();\n });\n };\n\n this.scanLoopId = window.requestAnimationFrame(() => {\n void loop();\n });\n }\n\n private async createNativeBarcodeDetector(): Promise<NativeBarcodeDetector | null> {\n if (typeof window === 'undefined') {\n return null;\n }\n\n const detectorCtor = (window as Window & { BarcodeDetector?: NativeBarcodeDetectorConstructor }).BarcodeDetector;\n if (!detectorCtor) {\n return null;\n }\n\n try {\n if (detectorCtor.getSupportedFormats) {\n const supportedFormats = await detectorCtor.getSupportedFormats();\n if (!supportedFormats.includes('code_128')) {\n return null;\n }\n }\n\n return new detectorCtor({ formats: ['code_128'] });\n } catch {\n return null;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputBarcodeControlComponent } from './ui-barcode-scanner-input.component';\n\n@Component({\n selector: 'input-barcode',\n standalone: true,\n imports: [FieldFrameComponent, InputBarcodeControlComponent],\n template: `\n <field-frame [label]=\"label\" [error]=\"error\" [required]=\"required\" [forId]=\"'barcode-scanner-input'\" [disabled]=\"disabled\">\n <input-barcode-control [value]=\"value\" [label]=\"label\" [placeholder]=\"placeholder\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [disabled]=\"disabled\" (valueChange)=\"valueChange.emit($event)\" (scanned)=\"scanned.emit($event)\" (searchRequested)=\"searchRequested.emit()\" (cameraStateChange)=\"cameraStateChange.emit($event)\" />\n </field-frame>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputBarcodeComponent {\n @Input() value = '';\n @Input() label = 'Штрихкод';\n @Input() placeholder = 'Відскануйте або введіть штрихкод';\n @Input() hint = 'Сканер може просто ввести код і натиснути Enter.';\n @Input() error = '';\n @Input() required = false;\n @Input() disabled = false;\n @Output() valueChange = new EventEmitter<string>();\n @Output() scanned = new EventEmitter<string>();\n @Output() searchRequested = new EventEmitter<void>();\n @Output() cameraStateChange = new EventEmitter<'idle' | 'starting' | 'open' | 'error'>();\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-checkbox-control',\n standalone: true,\n template: `<input data-field-control type=\"checkbox\" class=\"h-4 w-4 rounded border-slate-300 text-slate-900 focus:ring-slate-400\" [checked]=\"value\" [disabled]=\"disabled\" (change)=\"onValueChange($event)\" (blur)=\"touched.emit()\" />`,\n})\nexport class InputCheckboxControlComponent {\n @Input() value = false;\n @Input() disabled = false;\n @Output() valueChange = new EventEmitter<boolean>();\n @Output() touched = new EventEmitter<void>();\n\n onValueChange(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).checked);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputCheckboxControlComponent } from './ui-checkbox-input-control.component';\n\n@Component({\n selector: 'input-checkbox',\n standalone: true,\n imports: [CommonModule, FieldFrameComponent, InputCheckboxControlComponent],\n templateUrl: './ui-checkbox-input.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputCheckboxComponent), multi: true }],\n})\nexport class InputCheckboxComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() disabled = false;\n value = false;\n private onChange: (value: boolean) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: boolean | null): void { this.value = !!value; }\n registerOnChange(fn: (value: boolean) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n onValueChange(event: Event): void {\n const value = (event.target as HTMLInputElement).checked;\n this.value = value;\n this.onChange(value);\n }\n\n handleValueChange(value: boolean): void {\n this.value = value;\n this.onChange(value);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <input-checkbox-control [value]=\"value\" [disabled]=\"disabled\" (valueChange)=\"handleValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nconst EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport const validateFormControl = (\n control: AbstractControl,\n required: boolean,\n pattern?: string,\n email = false,\n): ValidationErrors | null => {\n const value = control.value;\n const empty = value == null || (typeof value === 'string' && value.trim() === '') || (Array.isArray(value) && value.length === 0);\n\n if (required && empty) return { required: true };\n if (empty) return null;\n if (email && (typeof value !== 'string' || !EMAIL_PATTERN.test(value.trim()))) return { email: true };\n if (pattern) {\n try {\n if (!new RegExp(pattern).test(String(value))) return { pattern: true };\n } catch {\n return null;\n }\n }\n return null;\n};\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-color-control',\n standalone: true,\n template: `\n <div class=\"flex items-center gap-3\">\n <label data-field-control class=\"relative inline-flex h-11 w-11 cursor-pointer items-center justify-center rounded-full border border-slate-200 bg-white shadow-sm transition hover:border-slate-300\" [class.cursor-not-allowed]=\"disabled\" [class.opacity-60]=\"disabled\" [attr.for]=\"id\">\n <span class=\"block h-9 w-9 rounded-full border border-black/10\" [style.backgroundColor]=\"pickerValue\"></span>\n <input class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\" type=\"color\" [attr.id]=\"id\" [attr.name]=\"name ? name + '-picker' : null\" [disabled]=\"disabled\" [value]=\"pickerValue\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />\n </label>\n <input data-field-control class=\"min-w-[110px] rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-xs font-semibold uppercase text-slate-700 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200 disabled:cursor-not-allowed disabled:opacity-60\" type=\"text\" [attr.name]=\"name\" [disabled]=\"disabled\" [value]=\"value\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />\n </div>\n `,\n})\nexport class InputColorControlComponent {\n @Input() id?: string;\n @Input() name?: string;\n @Input() disabled = false;\n @Input() value = '#000000';\n @Input() pickerValue = '#000000';\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { validateFormControl } from '../form-control.validator';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputColorControlComponent } from './ui-color-input-control.component';\n\n@Component({\n selector: 'input-color',\n standalone: true,\n imports: [CommonModule, FormsModule, FieldFrameComponent, InputColorControlComponent],\n templateUrl: './ui-color-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputColorComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputColorComponent), multi: true },\n ],\n})\nexport class InputColorComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() required = false;\n @Input() error?: string;\n\n disabled = false;\n value = '#000000';\n\n private static nextId = 0;\n private readonly generatedId = `input-color-${InputColorComponent.nextId++}`;\n private onChange: (value: string) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n\n get pickerValue(): string {\n return this.isColorValue(this.value) ? this.value : '#000000';\n }\n\n writeValue(value: string | null): void {\n this.value = value?.trim() || '#000000';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onPickerChange(value: string): void {\n this.value = value;\n this.onChange(value);\n }\n\n onHexInput(value: string): void {\n this.value = this.normalizeHexInput(value);\n this.onChange(this.value);\n }\n\n handleValueChange(value: string): void {\n this.value = value;\n this.onChange(value);\n }\n\n markTouched(): void {\n this.onTouched();\n }\n\n private normalizeHexInput(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return '';\n }\n return trimmed.startsWith('#') ? trimmed : `#${trimmed}`;\n }\n\n private isColorValue(value: string): boolean {\n return /^#([0-9a-fA-F]{6})$/.test(value.trim());\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\">\n <input-color-control [id]=\"controlId\" [name]=\"name\" [disabled]=\"disabled\" [value]=\"value\" [pickerValue]=\"pickerValue\" (valueChange)=\"handleValueChange($event)\" (touched)=\"markTouched()\" />\n</field-frame>\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class UiPopupService {\n private activeClose: (() => void) | null = null;\n\n open(close: () => void): void {\n const previousClose = this.activeClose;\n this.activeClose = close;\n if (previousClose && previousClose !== close) {\n previousClose();\n }\n }\n\n close(close: () => void): void {\n if (this.activeClose === close) {\n this.activeClose = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostListener, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { ChevronLeft, ChevronRight, CalendarDays, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { UiPopupService } from '../../popup/ui-popup.service';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\ninterface CalendarDay {\n date: string;\n day: number;\n currentMonth: boolean;\n}\n\ntype CalendarView = 'days' | 'months' | 'years';\n\n@Component({\n selector: 'input-date-control',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule, CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './ui-date-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputDateControlComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDateControlComponent), multi: true },\n ],\n})\nexport class InputDateControlComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly popupService = inject(UiPopupService);\n private readonly closeActivePopup = () => this.closeCalendar();\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'date';\n readonly element: UiInputElement = 'input';\n readonly calendarIcon = CalendarDays;\n readonly previousMonthIcon = ChevronLeft;\n readonly nextMonthIcon = ChevronRight;\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete = 'off';\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n @Input() disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-date-${InputDateControlComponent.nextId++}`;\n visibleMonth = this.startOfMonth(new Date());\n calendarView: CalendarView = 'days';\n isCalendarOpen = false;\n readonly popupViewportMargin = 16;\n readonly popupOffset = 8;\n readonly calendarPositions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: this.popupOffset },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -this.popupOffset },\n ];\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n const selectedDate = this.parseDate(this.value);\n if (selectedDate) {\n this.visibleMonth = this.startOfMonth(selectedDate);\n }\n this.cdr.markForCheck();\n }\n\n get monthLabel(): string {\n return this.visibleMonth.toLocaleDateString('uk-UA', { month: 'long', year: 'numeric' });\n }\n\n get monthName(): string {\n return this.visibleMonth.toLocaleDateString('uk-UA', { month: 'long' });\n }\n\n get yearLabel(): number {\n return this.visibleMonth.getFullYear();\n }\n\n get monthOptions(): Array<{ value: number; label: string }> {\n return Array.from({ length: 12 }, (_, value) => ({\n value,\n label: new Date(2000, value, 1).toLocaleDateString('uk-UA', { month: 'long' }),\n }));\n }\n\n get yearOptions(): number[] {\n const year = this.visibleMonth.getFullYear();\n return Array.from({ length: 12 }, (_, index) => year - 5 + index);\n }\n\n get calendarDays(): CalendarDay[] {\n const firstDay = this.startOfMonth(this.visibleMonth);\n const mondayOffset = (firstDay.getDay() + 6) % 7;\n const firstGridDay = new Date(firstDay);\n firstGridDay.setDate(firstGridDay.getDate() - mondayOffset);\n\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(firstGridDay);\n date.setDate(firstGridDay.getDate() + index);\n return {\n date: this.toDateValue(date),\n day: date.getDate(),\n currentMonth: date.getMonth() === this.visibleMonth.getMonth(),\n };\n });\n }\n\n get displayValue(): string {\n const date = this.selectedDate;\n return date ? date.toLocaleDateString('uk-UA') : String(this.value ?? '');\n }\n\n get selectedDate(): Date | null {\n return this.parseDate(this.value);\n }\n\n openCalendar(event: Event): void {\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.isCalendarOpen = true;\n this.popupService.open(this.closeActivePopup);\n this.calendarView = 'days';\n this.cdr.markForCheck();\n }\n\n closeCalendar(): void {\n this.isCalendarOpen = false;\n this.popupService.close(this.closeActivePopup);\n this.cdr.markForCheck();\n }\n\n showMonthPicker(event: Event): void {\n event.stopPropagation();\n this.calendarView = 'months';\n this.cdr.markForCheck();\n }\n\n showYearPicker(event: Event): void {\n event.stopPropagation();\n this.calendarView = 'years';\n this.cdr.markForCheck();\n }\n\n selectMonth(month: number, event: Event): void {\n event.stopPropagation();\n this.visibleMonth = new Date(this.visibleMonth.getFullYear(), month, 1);\n this.calendarView = 'days';\n this.cdr.markForCheck();\n }\n\n selectYear(year: number, event: Event): void {\n event.stopPropagation();\n this.visibleMonth = new Date(year, this.visibleMonth.getMonth(), 1);\n this.calendarView = 'months';\n this.cdr.markForCheck();\n }\n\n changeMonth(offset: number, event: Event): void {\n event.stopPropagation();\n if (this.calendarView === 'years') {\n this.visibleMonth = new Date(this.visibleMonth.getFullYear() + offset * 12, this.visibleMonth.getMonth(), 1);\n } else if (this.calendarView === 'months') {\n this.visibleMonth = new Date(this.visibleMonth.getFullYear() + offset, this.visibleMonth.getMonth(), 1);\n } else {\n this.visibleMonth = new Date(this.visibleMonth.getFullYear(), this.visibleMonth.getMonth() + offset, 1);\n }\n this.cdr.markForCheck();\n }\n\n selectDate(dateValue: string, event: Event): void {\n event.stopPropagation();\n this.visibleMonth = this.startOfMonth(this.parseDate(dateValue)!);\n this.value = dateValue;\n this.onChange(dateValue);\n this.closeCalendar();\n this.onTouched();\n this.cdr.markForCheck();\n }\n\n isSelected(dateValue: string): boolean {\n return this.value === dateValue;\n }\n\n isSelectedMonth(month: number): boolean {\n return this.selectedDate?.getMonth() === month && this.selectedDate?.getFullYear() === this.visibleMonth.getFullYear();\n }\n\n isSelectedYear(year: number): boolean {\n return this.selectedDate?.getFullYear() === year;\n }\n\n @HostListener('document:click')\n onDocumentClick(): void {\n if (this.isCalendarOpen) {\n this.closeCalendar();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.isCalendarOpen) {\n this.closeCalendar();\n }\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const maskedValue = this.applyDateMask(value);\n const date = this.parseInputDate(maskedValue);\n this.value = date ? this.toDateValue(date) : maskedValue;\n this.onChange(this.value);\n if (date) {\n this.visibleMonth = this.startOfMonth(date);\n }\n this.cdr.markForCheck();\n }\n\n allowDateKey(event: KeyboardEvent): void {\n if (event.ctrlKey || event.metaKey || ['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n if (!/^\\d$/.test(event.key)) event.preventDefault();\n }\n\n private applyDateMask(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n const day = digits.slice(0, 2);\n const month = digits.slice(2, 4);\n const year = digits.slice(4, 8);\n return [day, month, year].filter(Boolean).join('.');\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n\n private startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n\n private parseDate(value: string | number | null): Date | null {\n if (!value) {\n return null;\n }\n const [year, month, day] = String(value).slice(0, 10).split('-').map(Number);\n if (!year || !month || !day) {\n return null;\n }\n return new Date(year, month - 1, day);\n }\n\n private parseInputDate(value: string): Date | null {\n const normalized = value.trim();\n const isoDate = this.parseDate(normalized);\n if (isoDate) {\n return isoDate;\n }\n\n const match = normalized.match(/^(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})$/);\n if (!match) {\n return null;\n }\n\n const [, day, month, year] = match;\n const date = new Date(Number(year), Number(month) - 1, Number(day));\n return date.getFullYear() === Number(year) && date.getMonth() === Number(month) - 1 && date.getDate() === Number(day)\n ? date\n : null;\n }\n\n private toDateValue(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n}\n","\n <div class=\"flex items-end gap-2\">\n <div class=\"min-w-0 flex-1\">\n @if (element === 'textarea') {\n <textarea\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.id]=\"controlId\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n ></textarea>\n } @else {\n <div class=\"relative\" cdkOverlayOrigin #calendarOrigin=\"cdkOverlayOrigin\">\n <input\n data-field-control\n type=\"text\"\n [attr.placeholder]=\"placeholder ?? 'ДД.ММ.РРРР'\"\n maxlength=\"10\"\n inputmode=\"numeric\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 pr-10 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [attr.id]=\"controlId\"\n [value]=\"displayValue\"\n (click)=\"openCalendar($event)\"\n (keydown)=\"allowDateKey($event)\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n <lucide-icon\n [img]=\"calendarIcon\"\n class=\"pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400\"\n aria-hidden=\"true\"\n ></lucide-icon>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"calendarOrigin\"\n [cdkConnectedOverlayOpen]=\"isCalendarOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPositions]=\"calendarPositions\"\n [cdkConnectedOverlayViewportMargin]=\"popupViewportMargin\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n (detach)=\"closeCalendar()\"\n >\n <div\n class=\"z-50 w-[min(20rem,calc(100vw-2rem))] max-w-[calc(100vw-2rem)] rounded-xl border border-slate-200 bg-white p-4 shadow-xl\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"mb-4 flex items-center justify-between\" [class.justify-center]=\"calendarView === 'months'\">\n @if (calendarView !== 'months') {\n <button\n type=\"button\"\n class=\"rounded-lg p-2 text-slate-500 transition hover:bg-slate-100 hover:text-slate-900\"\n aria-label=\"Попередній місяць\"\n (click)=\"changeMonth(-1, $event)\"\n >\n <lucide-icon [img]=\"previousMonthIcon\" class=\"h-4 w-4\"></lucide-icon>\n </button>\n }\n <div class=\"flex items-center gap-1\">\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-1 text-sm font-semibold capitalize text-slate-900 transition hover:bg-slate-100\"\n (click)=\"showMonthPicker($event)\"\n >\n {{ monthName }}\n </button>\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-1 text-sm font-semibold text-slate-900 transition hover:bg-slate-100\"\n (click)=\"showYearPicker($event)\"\n >\n {{ yearLabel }}\n </button>\n </div>\n @if (calendarView !== 'months') {\n <button\n type=\"button\"\n class=\"rounded-lg p-2 text-slate-500 transition hover:bg-slate-100 hover:text-slate-900\"\n aria-label=\"Наступний місяць\"\n (click)=\"changeMonth(1, $event)\"\n >\n <lucide-icon [img]=\"nextMonthIcon\" class=\"h-4 w-4\"></lucide-icon>\n </button>\n }\n </div>\n\n @if (calendarView === 'days') {\n <div class=\"mb-2 grid grid-cols-7 text-center text-xs font-medium text-slate-400\">\n @for (weekday of ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Нд']; track weekday) {\n <span class=\"py-1\">{{ weekday }}</span>\n }\n </div>\n\n <div class=\"grid grid-cols-7 gap-1\">\n @for (day of calendarDays; track day.date) {\n <button\n type=\"button\"\n class=\"aspect-square rounded-lg text-sm transition hover:bg-slate-100 hover:text-slate-900\"\n [class.text-slate-300]=\"!day.currentMonth\"\n [class.text-slate-700]=\"day.currentMonth && !isSelected(day.date)\"\n [class.bg-slate-900]=\"isSelected(day.date)\"\n [class.text-white]=\"isSelected(day.date)\"\n (click)=\"selectDate(day.date, $event)\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n } @else if (calendarView === 'months') {\n <div class=\"grid grid-cols-3 gap-2\">\n @for (month of monthOptions; track month.value) {\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-3 text-sm capitalize text-slate-700 transition hover:bg-slate-100 hover:text-slate-900\"\n [class.bg-slate-900]=\"isSelectedMonth(month.value)\"\n [class.text-white]=\"isSelectedMonth(month.value)\"\n (click)=\"selectMonth(month.value, $event)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n } @else {\n <div class=\"grid grid-cols-3 gap-2\">\n @for (year of yearOptions; track year) {\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-3 text-sm text-slate-700 transition hover:bg-slate-100 hover:text-slate-900\"\n [class.bg-slate-900]=\"isSelectedYear(year)\"\n [class.text-white]=\"isSelectedYear(year)\"\n (click)=\"selectYear(year, $event)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n </div>\n }\n </div>\n\n </div>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputDateControlComponent } from './ui-date-input.component';\nimport { validateFormControl } from '../form-control.validator';\n\n@Component({\n selector: 'input-date', standalone: true, imports: [FieldFrameComponent, InputDateControlComponent], templateUrl: './ui-date-input.component.wrapper.html', changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputDateComponent), multi: true }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDateComponent), multi: true }],\n})\nexport class InputDateComponent implements ControlValueAccessor, Validator, AfterViewInit {\n @ViewChild(InputDateControlComponent) private control?: InputDateControlComponent;\n @Input() label?: string; @Input() hint?: string; @Input() error?: string; @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() required = false; @Input() disabled = false; @Input() autocomplete = 'off'; @Input() pattern?: string; @Input() rows = 4; @Input() actions: UiDynamicFormFieldAction[] = [];\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n private pendingValue: string | number | null = ''; private onChange: (value: string | number | null) => void = () => undefined; private onTouched: () => void = () => undefined;\n ngAfterViewInit(): void { this.control?.registerOnChange((value) => this.onChange(value)); this.control?.registerOnTouched(() => this.onTouched()); this.control?.writeValue(this.pendingValue); }\n writeValue(value: string | number | null): void { this.pendingValue = value; this.control?.writeValue(value); }\n registerOnChange(fn: (value: string | number | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(value: boolean): void { this.disabled = value; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"id\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"actionTriggered.emit($event)\">\n <input-date-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" [required]=\"required\" [disabled]=\"disabled\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [rows]=\"rows\" />\n</field-frame>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostListener, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { CalendarDays, ChevronLeft, ChevronRight, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { UiPopupService } from '../../popup/ui-popup.service';\nimport { validateFormControl } from '../form-control.validator';\n\ninterface CalendarDay { date: string; day: number; currentMonth: boolean; }\ntype CalendarView = 'days' | 'months' | 'years';\n\n@Component({\n selector: 'input-datetime-control',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule, CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './ui-datetime-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputDatetimeControlComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDatetimeControlComponent), multi: true },\n ],\n})\nexport class InputDatetimeControlComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly popupService = inject(UiPopupService);\n private readonly closeActivePopup = () => this.closeCalendar();\n @Input() label?: string; @Input() hint?: string; @Input() placeholder?: string; @Input() name?: string; @Input() id?: string;\n @Input() rows = 4; @Input() required = false; @Input() autocomplete = 'off';\n @Input() pattern?: string; @Input() error?: string; @Input() actions: UiDynamicFormFieldAction[] = [];\n readonly type = 'datetime-local'; readonly calendarIcon = CalendarDays; readonly previousMonthIcon = ChevronLeft; readonly nextMonthIcon = ChevronRight;\n @Input() disabled = false; value: string | number | null = ''; isCalendarOpen = false; calendarView: CalendarView = 'days'; visibleMonth = this.startOfMonth(new Date());\n readonly popupViewportMargin = 16; readonly popupOffset = 8;\n readonly calendarPositions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: this.popupOffset },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -this.popupOffset },\n ];\n selectedHour = 12; selectedMinute = 0;\n private static nextId = 0; private readonly generatedId = `input-datetime-${InputDatetimeControlComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n private onChange: (value: string | number | null) => void = () => undefined; onTouched: () => void = () => undefined;\n get controlId(): string { return this.id ?? this.generatedId; }\n get selectedDate(): Date | null { const match = String(this.value ?? '').match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})/); return match ? new Date(+match[1], +match[2] - 1, +match[3]) : null; }\n get displayValue(): string { const match = String(this.value ?? '').match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})/); return match ? `${match[3]}.${match[2]}.${match[1]} ${match[4]}:${match[5]}` : String(this.value ?? ''); }\n get monthName(): string { return this.visibleMonth.toLocaleDateString('uk-UA', { month: 'long' }); }\n get yearLabel(): number { return this.visibleMonth.getFullYear(); }\n get monthOptions(): Array<{ value: number; label: string }> { return Array.from({ length: 12 }, (_, value) => ({ value, label: new Date(2000, value, 1).toLocaleDateString('uk-UA', { month: 'long' }) })); }\n get yearOptions(): number[] { const year = this.visibleMonth.getFullYear(); return Array.from({ length: 12 }, (_, index) => year - 5 + index); }\n get calendarDays(): CalendarDay[] {\n const first = this.startOfMonth(this.visibleMonth); const offset = (first.getDay() + 6) % 7; const start = new Date(first); start.setDate(start.getDate() - offset);\n return Array.from({ length: 42 }, (_, index) => { const date = new Date(start); date.setDate(start.getDate() + index); return { date: this.toDateValue(date), day: date.getDate(), currentMonth: date.getMonth() === this.visibleMonth.getMonth() }; });\n }\n writeValue(value: string | number | null): void { this.value = value ?? ''; const date = this.selectedDate; if (date) { this.visibleMonth = this.startOfMonth(date); this.selectedHour = +(String(value).slice(11, 13)); this.selectedMinute = +(String(value).slice(14, 16)); } this.cdr.markForCheck(); }\n registerOnChange(fn: (value: string | number | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n setDisabledState(disabled: boolean): void { this.disabled = disabled; this.cdr.markForCheck(); }\n openCalendar(event: Event): void { event.stopPropagation(); if (this.disabled) return; this.isCalendarOpen = true; this.calendarView = 'days'; this.popupService.open(this.closeActivePopup); this.cdr.markForCheck(); }\n closeCalendar(): void { this.isCalendarOpen = false; this.popupService.close(this.closeActivePopup); this.cdr.markForCheck(); }\n changeMonth(offset: number, event: Event): void { event.stopPropagation(); const year = this.visibleMonth.getFullYear(); const month = this.visibleMonth.getMonth(); this.visibleMonth = this.calendarView === 'years' ? new Date(year + offset * 12, month, 1) : new Date(year + (this.calendarView === 'months' ? offset : 0), month + (this.calendarView === 'days' ? offset : 0), 1); this.cdr.markForCheck(); }\n showMonthPicker(event: Event): void { event.stopPropagation(); this.calendarView = 'months'; this.cdr.markForCheck(); }\n showYearPicker(event: Event): void { event.stopPropagation(); this.calendarView = 'years'; this.cdr.markForCheck(); }\n selectMonth(month: number, event: Event): void { event.stopPropagation(); this.visibleMonth = new Date(this.visibleMonth.getFullYear(), month, 1); this.calendarView = 'days'; this.cdr.markForCheck(); }\n selectYear(year: number, event: Event): void { event.stopPropagation(); this.visibleMonth = new Date(year, this.visibleMonth.getMonth(), 1); this.calendarView = 'months'; this.cdr.markForCheck(); }\n selectDate(dateValue: string, event: Event): void { event.stopPropagation(); const date = this.parseDate(dateValue)!; this.visibleMonth = this.startOfMonth(date); this.setDateTime(dateValue); }\n setDateTime(dateValue: string, close = true): void { const hour = String(this.selectedHour).padStart(2, '0'); const minute = String(this.selectedMinute).padStart(2, '0'); this.value = `${dateValue}T${hour}:${minute}`; this.onChange(this.value); if (close) this.closeCalendar(); if (close) this.onTouched(); this.cdr.markForCheck(); }\n onTimeChange(): void { const date = this.selectedDate; if (date) { this.setDateTime(this.toDateValue(date), false); } }\n onValueChange(input: string): void { const masked = this.applyMask(input); const match = masked.match(/^(\\d{2})\\.(\\d{2})\\.(\\d{4}) (\\d{2}):(\\d{2})$/); if (match) { const date = new Date(+match[3], +match[2] - 1, +match[1]); if (date.getFullYear() === +match[3] && date.getMonth() === +match[2] - 1 && date.getDate() === +match[1] && +match[4] < 24 && +match[5] < 60) { this.value = `${match[3]}-${match[2]}-${match[1]}T${match[4]}:${match[5]}`; this.visibleMonth = this.startOfMonth(date); this.selectedHour = +match[4]; this.selectedMinute = +match[5]; } else this.value = masked; } else this.value = masked; this.onChange(this.value); this.cdr.markForCheck(); }\n allowDateKey(event: KeyboardEvent): void { if (event.ctrlKey || event.metaKey || ['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return; if (!/^\\d$/.test(event.key)) event.preventDefault(); }\n private applyMask(value: string): string { const digits = value.replace(/\\D/g, '').slice(0, 12); const date = [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 8)].filter(Boolean).join('.'); const time = [digits.slice(8, 10), digits.slice(10, 12)].filter(Boolean).join(':'); return [date, time].filter(Boolean).join(' '); }\n isSelected(date: string): boolean { return this.selectedDate ? this.toDateValue(this.selectedDate) === date : false; }\n isSelectedMonth(month: number): boolean { return this.selectedDate?.getMonth() === month && this.selectedDate?.getFullYear() === this.visibleMonth.getFullYear(); }\n isSelectedYear(year: number): boolean { return this.selectedDate?.getFullYear() === year; }\n @HostListener('document:click') onDocumentClick(): void { if (this.isCalendarOpen) this.closeCalendar(); }\n @HostListener('document:keydown.escape') onEscape(): void { if (this.isCalendarOpen) this.closeCalendar(); }\n triggerAction(action: UiDynamicFormFieldAction): void { this.actionTriggered.emit(action); }\n private startOfMonth(date: Date): Date { return new Date(date.getFullYear(), date.getMonth(), 1); }\n private parseDate(value: string): Date | null { const [year, month, day] = value.split('-').map(Number); return year && month && day ? new Date(year, month - 1, day) : null; }\n private toDateValue(date: Date): string { return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; }\n}\n"," <div class=\"flex items-end gap-2\"><div class=\"min-w-0 flex-1\"><div class=\"relative\" cdkOverlayOrigin #calendarOrigin=\"cdkOverlayOrigin\">\n <input data-field-control type=\"text\" [attr.placeholder]=\"placeholder ?? 'ДД.ММ.РРРР ГГ:ХХ'\" maxlength=\"16\" inputmode=\"numeric\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [disabled]=\"disabled\" class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 pr-10 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.id]=\"controlId\" [value]=\"displayValue\" (click)=\"openCalendar($event)\" (keydown)=\"allowDateKey($event)\" (input)=\"onValueChange($any($event.target).value)\" (blur)=\"onTouched()\" />\n <lucide-icon [img]=\"calendarIcon\" class=\"pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400\"></lucide-icon>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"calendarOrigin\" [cdkConnectedOverlayOpen]=\"isCalendarOpen\" [cdkConnectedOverlayHasBackdrop]=\"false\" [cdkConnectedOverlayPositions]=\"calendarPositions\" [cdkConnectedOverlayViewportMargin]=\"popupViewportMargin\" [cdkConnectedOverlayFlexibleDimensions]=\"true\" [cdkConnectedOverlayPush]=\"true\" (detach)=\"closeCalendar()\"><div class=\"z-50 w-[min(22rem,calc(100vw-2rem))] max-w-[calc(100vw-2rem)] rounded-xl border border-slate-200 bg-white p-4 shadow-xl\" (click)=\"$event.stopPropagation()\">\n <div class=\"mb-4 flex items-center justify-between\" [class.justify-center]=\"calendarView === 'months'\">\n @if (calendarView !== 'months') { <button type=\"button\" class=\"rounded-lg p-2 text-slate-500 hover:bg-slate-100\" aria-label=\"Попередній період\" (click)=\"changeMonth(-1, $event)\"><lucide-icon [img]=\"previousMonthIcon\" class=\"h-4 w-4\"></lucide-icon></button> }\n <div class=\"flex items-center gap-1\"><button type=\"button\" class=\"rounded-lg px-2 py-1 text-sm font-semibold capitalize text-slate-900 hover:bg-slate-100\" (click)=\"showMonthPicker($event)\">{{ monthName }}</button><button type=\"button\" class=\"rounded-lg px-2 py-1 text-sm font-semibold text-slate-900 hover:bg-slate-100\" (click)=\"showYearPicker($event)\">{{ yearLabel }}</button></div>\n @if (calendarView !== 'months') { <button type=\"button\" class=\"rounded-lg p-2 text-slate-500 hover:bg-slate-100\" aria-label=\"Наступний період\" (click)=\"changeMonth(1, $event)\"><lucide-icon [img]=\"nextMonthIcon\" class=\"h-4 w-4\"></lucide-icon></button> }\n </div>\n @if (calendarView === 'days') {\n <div class=\"mb-2 grid grid-cols-7 text-center text-xs font-medium text-slate-400\">@for (weekday of ['Пн','Вт','Ср','Чт','Пт','Сб','Нд']; track weekday) { <span class=\"py-1\">{{ weekday }}</span> }</div>\n <div class=\"grid grid-cols-7 gap-1\">@for (day of calendarDays; track day.date) { <button type=\"button\" class=\"aspect-square rounded-lg text-sm hover:bg-slate-100 hover:text-slate-900\" [class.text-slate-300]=\"!day.currentMonth\" [class.text-slate-700]=\"day.currentMonth && !isSelected(day.date)\" [class.bg-slate-900]=\"isSelected(day.date)\" [class.text-white]=\"isSelected(day.date)\" (click)=\"selectDate(day.date, $event)\">{{ day.day }}</button> }</div>\n <div class=\"mt-4 grid grid-cols-2 gap-2 border-t border-slate-100 pt-3\"><label class=\"text-[0.65rem] font-medium text-slate-500\">Години<input type=\"number\" min=\"0\" max=\"23\" [value]=\"selectedHour\" (input)=\"selectedHour = +$any($event.target).value; onTimeChange()\" class=\"mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" /></label><label class=\"text-[0.65rem] font-medium text-slate-500\">Хвилини<input type=\"number\" min=\"0\" max=\"59\" [value]=\"selectedMinute\" (input)=\"selectedMinute = +$any($event.target).value; onTimeChange()\" class=\"mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" /></label></div>\n } @else if (calendarView === 'months') { <div class=\"grid grid-cols-3 gap-2\">@for (month of monthOptions; track month.value) { <button type=\"button\" class=\"rounded-lg px-2 py-3 text-sm capitalize text-slate-700 hover:bg-slate-100 hover:text-slate-900\" [class.bg-slate-900]=\"isSelectedMonth(month.value)\" [class.text-white]=\"isSelectedMonth(month.value)\" (click)=\"selectMonth(month.value, $event)\">{{ month.label }}</button> }</div>\n } @else { <div class=\"grid grid-cols-3 gap-2\">@for (year of yearOptions; track year) { <button type=\"button\" class=\"rounded-lg px-2 py-3 text-sm text-slate-700 hover:bg-slate-100 hover:text-slate-900\" [class.bg-slate-900]=\"isSelectedYear(year)\" [class.text-white]=\"isSelectedYear(year)\" (click)=\"selectYear(year, $event)\">{{ year }}</button> }</div> }\n </div></ng-template>\n </div></div>\n </div>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputDatetimeControlComponent } from './ui-datetime-input.component';\nimport { validateFormControl } from '../form-control.validator';\n\n@Component({\n selector: 'input-datetime', standalone: true, imports: [FieldFrameComponent, InputDatetimeControlComponent], templateUrl: './ui-datetime-input.component.wrapper.html', changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputDatetimeComponent), multi: true }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDatetimeComponent), multi: true }],\n})\nexport class InputDatetimeComponent implements ControlValueAccessor, Validator, AfterViewInit {\n @ViewChild(InputDatetimeControlComponent) private control?: InputDatetimeControlComponent;\n @Input() label?: string; @Input() hint?: string; @Input() error?: string; @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() required = false; @Input() disabled = false; @Input() autocomplete = 'off'; @Input() pattern?: string; @Input() rows = 4; @Input() actions: UiDynamicFormFieldAction[] = [];\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n private pendingValue: string | number | null = ''; private onChange: (value: string | number | null) => void = () => undefined; private onTouched: () => void = () => undefined;\n ngAfterViewInit(): void { this.control?.registerOnChange((value) => this.onChange(value)); this.control?.registerOnTouched(() => this.onTouched()); this.control?.writeValue(this.pendingValue); }\n writeValue(value: string | number | null): void { this.pendingValue = value; this.control?.writeValue(value); }\n registerOnChange(fn: (value: string | number | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(value: boolean): void { this.disabled = value; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"id\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"actionTriggered.emit($event)\">\n <input-datetime-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" [required]=\"required\" [disabled]=\"disabled\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [rows]=\"rows\" />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-email-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" type=\"email\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputEmailControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() autocomplete?: string; @Input() pattern?: string; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputEmailControlComponent } from './ui-email-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-email',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputEmailControlComponent],\n templateUrl: './ui-email-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputEmailComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputEmailComponent), multi: true },\n ],\n})\nexport class InputEmailComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'email';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-email-${InputEmailComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern, true); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-email-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-number-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" type=\"number\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputNumberControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputNumberControlComponent } from './ui-number-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-number',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputNumberControlComponent],\n templateUrl: './ui-number-input.component.html',\n styles: [\n 'input[type=\"number\"]::-webkit-inner-spin-button, input[type=\"number\"]::-webkit-outer-spin-button { appearance: none; -webkit-appearance: none; margin: 0; }',\n 'input[type=\"number\"] { -moz-appearance: textfield; }',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputNumberComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputNumberComponent), multi: true },\n ],\n})\nexport class InputNumberComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'number';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() disabled = false;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-number-${InputNumberComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value === '' ? null : Number(value);\n this.value = parsed;\n this.onChange(parsed);\n }\n\n preventWheelChange(event: WheelEvent): void {\n event.preventDefault();\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-number-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Eye, EyeOff, LucideAngularModule } from 'lucide-angular';\n\n@Component({\n selector: 'input-password-control',\n standalone: true,\n imports: [CommonModule, LucideAngularModule],\n template: `\n <div class=\"relative\">\n <input data-field-control [attr.type]=\"visible ? 'text' : 'password'\" [attr.placeholder]=\"placeholder\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [attr.pattern]=\"pattern\" [disabled]=\"disabled\" class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 pr-10 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.id]=\"id\" [value]=\"value\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />\n <button type=\"button\" class=\"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 transition hover:text-slate-700 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.aria-label]=\"visible ? 'Сховати пароль' : 'Показати пароль'\" [disabled]=\"disabled\" (mousedown)=\"$event.preventDefault()\" (click)=\"visible = !visible\">\n <lucide-icon [img]=\"visible ? hideIcon : showIcon\" class=\"h-4 w-4\" aria-hidden=\"true\"></lucide-icon>\n </button>\n </div>\n `,\n})\nexport class InputPasswordControlComponent {\n readonly showIcon = Eye;\n readonly hideIcon = EyeOff;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() disabled = false;\n @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n visible = false;\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { Eye, EyeOff, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputPasswordControlComponent } from './ui-password-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-password',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule, FieldFrameComponent, InputPasswordControlComponent],\n templateUrl: './ui-password-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputPasswordComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputPasswordComponent), multi: true },\n ],\n})\nexport class InputPasswordComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'password';\n readonly showPasswordIcon = Eye;\n readonly hidePasswordIcon = EyeOff;\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n isPasswordVisible = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-password-${InputPasswordComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n togglePassword(event: Event): void {\n event.stopPropagation();\n this.isPasswordVisible = !this.isPasswordVisible;\n this.cdr.markForCheck();\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-password-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { validateFormControl } from '../form-control.validator';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from './ui-text-input-control.component';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-text',\n standalone: true,\n imports: [CommonModule, FormsModule, FieldFrameComponent, InputTextControlComponent],\n templateUrl: './ui-text-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputTextComponent), multi: true },\n ],\n})\nexport class InputTextComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'text';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-text-${InputTextComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame\n [label]=\"label\"\n [hint]=\"hint\"\n [error]=\"error\"\n [required]=\"required\"\n [forId]=\"controlId\"\n [disabled]=\"disabled\"\n [actions]=\"actions\"\n (actionTriggered)=\"triggerAction($event)\"\n>\n <input-text-control\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [id]=\"controlId\"\n [type]=\"type\"\n [element]=\"element\"\n [rows]=\"rows\"\n [autocomplete]=\"autocomplete\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n (touched)=\"onTouched()\"\n />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-textarea-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" element=\"textarea\" [rows]=\"rows\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputTextareaControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() rows = 4; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputTextareaControlComponent } from './ui-textarea-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-textarea',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputTextareaControlComponent],\n templateUrl: './ui-textarea-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextareaComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputTextareaComponent), multi: true },\n ],\n})\nexport class InputTextareaComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'text';\n readonly element: UiInputElement = 'textarea';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-textarea-${InputTextareaComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-textarea-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [rows]=\"rows\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-file-control',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-file-input-control.component.html',\n})\nexport class InputFileControlComponent {\n @Input() accept?: string;\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() selectedFiles: File[] = [];\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() removeFile = new EventEmitter<number>();\n @Output() touched = new EventEmitter<void>();\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filesSelected.emit(Array.from(input.files ?? []));\n input.value = '';\n }\n}\n","<input data-field-control type=\"file\" class=\"rounded-xl border border-slate-200 bg-white px-3 py-2 text-sm normal-case tracking-normal text-slate-800 file:mr-3 file:rounded-lg file:border-0 file:bg-slate-900 file:px-3 file:py-2 file:text-sm file:font-medium file:text-white\" [attr.accept]=\"accept ?? null\" [attr.multiple]=\"multiple ? '' : null\" [disabled]=\"disabled\" (change)=\"onFilesSelected($event)\" (blur)=\"touched.emit()\" />\n@if (selectedFiles.length) {\n <div class=\"mt-1 flex flex-col gap-1 text-[0.7rem] font-normal normal-case tracking-normal text-slate-700\">\n @for (file of selectedFiles; track file.name + file.size; let i = $index) {\n <div class=\"flex items-center justify-between rounded border border-slate-200 bg-slate-50 px-2 py-1\">\n <span class=\"truncate pr-2\">{{ file.name }}</span>\n <button type=\"button\" class=\"text-rose-600\" [disabled]=\"disabled\" (click)=\"removeFile.emit(i)\">Видалити</button>\n </div>\n }\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputFileControlComponent } from './ui-file-input-control.component';\n\n@Component({\n selector: 'input-file',\n standalone: true,\n imports: [CommonModule, FieldFrameComponent, InputFileControlComponent],\n templateUrl: './ui-file-input.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputFileComponent), multi: true }],\n})\nexport class InputFileComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() accept?: string;\n @Input() multiple = false;\n @Input() disabled = false;\n @Output() filesChange = new EventEmitter<File[]>();\n value: File | File[] | null = null;\n private onChange: (value: File | File[] | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: File | File[] | null): void { this.value = value; }\n registerOnChange(fn: (value: File | File[] | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n get selectedFiles(): File[] {\n if (this.value instanceof File) return [this.value];\n return Array.isArray(this.value) ? this.value.filter((item): item is File => item instanceof File) : [];\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n const value = this.multiple ? files : (files[0] ?? null);\n this.value = value;\n this.onChange(value);\n this.filesChange.emit(files);\n input.value = '';\n }\n\n handleFilesSelected(files: File[]): void {\n const value = this.multiple ? files : (files[0] ?? null);\n this.value = value;\n this.onChange(value);\n this.filesChange.emit(files);\n }\n\n remove(index: number): void {\n const files = this.selectedFiles.filter((_file, fileIndex) => fileIndex !== index);\n const value = this.multiple ? files : (files[0] ?? null);\n this.value = value;\n this.onChange(value);\n this.filesChange.emit(files);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <input-file-control [accept]=\"accept\" [multiple]=\"multiple\" [disabled]=\"disabled\" [selectedFiles]=\"selectedFiles\" (filesSelected)=\"handleFilesSelected($event)\" (removeFile)=\"remove($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport type { UiPhotoPreview } from './ui-photo-input.component';\n\n@Component({\n selector: 'input-photo-control',\n standalone: true,\n imports: [CommonModule, DragDropModule],\n templateUrl: './ui-photo-input-control.component.html',\n})\nexport class InputPhotoControlComponent {\n @Input() accept = 'image/*';\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() canSelectMore = true;\n @Input() previews: UiPhotoPreview[] = [];\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() removed = new EventEmitter<number>();\n @Output() dropped = new EventEmitter<CdkDragDrop<UiPhotoPreview[]>>();\n @Output() touched = new EventEmitter<void>();\n\n selectFiles(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filesSelected.emit(Array.from(input.files ?? []));\n input.value = '';\n this.touched.emit();\n }\n}\n","<button data-field-control type=\"button\" class=\"flex min-h-24 w-full items-center justify-center rounded-xl border border-dashed border-slate-300 bg-slate-50 px-4 py-3 text-xs font-semibold uppercase tracking-[0.15em] text-slate-600 transition hover:bg-slate-100 disabled:opacity-60\" [disabled]=\"disabled || !canSelectMore\" (click)=\"photoInput.click()\">\n {{ previews.length ? 'Додати ще файл' : 'Обрати файл' }}\n</button>\n<input #photoInput type=\"file\" class=\"hidden\" [attr.accept]=\"accept\" [attr.multiple]=\"multiple && canSelectMore ? '' : null\" [disabled]=\"disabled\" (change)=\"selectFiles($event)\" />\n@if (previews.length) {\n <div class=\"mt-2 grid grid-cols-2 gap-2 md:grid-cols-4\" cdkDropList cdkDropListOrientation=\"mixed\" [cdkDropListData]=\"previews\" (cdkDropListDropped)=\"dropped.emit($event)\">\n @for (preview of previews; track preview.url; let i = $index) {\n <div class=\"relative overflow-hidden rounded-lg border border-slate-200 bg-slate-50\" cdkDrag [cdkDragDisabled]=\"disabled || preview.source === 'file'\">\n @if (preview.isImage) { <img [src]=\"preview.url\" [alt]=\"preview.name\" class=\"h-28 w-full object-cover\" /> }\n @else { <div class=\"flex h-28 items-center justify-center px-2 text-center text-[0.65rem] text-slate-600\">{{ preview.name }}</div> }\n <div class=\"absolute left-1 top-1 rounded bg-slate-900/85 px-2 py-1 text-[10px] font-semibold text-white\">#{{ i + 1 }}</div>\n <button type=\"button\" class=\"absolute right-1 top-1 rounded bg-white/95 px-2 py-1 text-[10px] text-rose-600\" [disabled]=\"disabled\" (click)=\"removed.emit(i)\">Видалити</button>\n </div>\n }\n </div>\n}\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, forwardRef, Input, OnChanges, OnDestroy, Output, SimpleChanges, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, forkJoin, map } from 'rxjs';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputPhotoControlComponent } from './ui-photo-input-control.component';\n\nexport interface UiPhotoPreview {\n name: string;\n url: string;\n isImage: boolean;\n source: 'file' | 'id';\n}\n\n@Component({\n selector: 'input-photo',\n standalone: true,\n imports: [CommonModule, DragDropModule, FieldFrameComponent, InputPhotoControlComponent],\n templateUrl: './ui-photo-input.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputPhotoComponent), multi: true }],\n})\nexport class InputPhotoComponent implements OnChanges, OnDestroy, ControlValueAccessor {\n private readonly http = inject(HttpClient);\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() accept = 'image/*';\n @Input() multiple = false;\n @Input() limit = Number.MAX_SAFE_INTEGER;\n @Input() disabled = false;\n @Output() filesChange = new EventEmitter<File[]>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n\n value: string | string[] | null = null;\n pendingFiles: File[] = [];\n previews: UiPhotoPreview[] = [];\n uploading = false;\n private readonly fileTypes = new Map<string, string>();\n private onChange: (value: string | string[] | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | string[] | null): void {\n this.value = value;\n this.rebuildPreviews();\n }\n registerOnChange(fn: (value: string | string[] | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['multiple']) this.rebuildPreviews();\n }\n\n ngOnDestroy(): void {\n this.revokeBlobUrls();\n }\n\n get canSelectMore(): boolean {\n return !this.multiple || this.ids.length + this.pendingFiles.length < this.normalizedLimit;\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n if (!files.length || this.disabled) return;\n const accepted = this.multiple ? files.slice(0, Math.max(0, this.normalizedLimit - this.ids.length - this.pendingFiles.length)) : [files[0]];\n this.pendingFiles = this.multiple ? [...this.pendingFiles, ...accepted] : [accepted[0]];\n this.filesChange.emit(this.pendingFiles);\n this.rebuildPreviews();\n this.uploadFiles(accepted);\n }\n\n handleFilesSelected(files: File[]): void {\n if (!files.length || this.disabled) return;\n const accepted = this.multiple ? files.slice(0, Math.max(0, this.normalizedLimit - this.ids.length - this.pendingFiles.length)) : [files[0]];\n this.pendingFiles = this.multiple ? [...this.pendingFiles, ...accepted] : [accepted[0]];\n this.filesChange.emit(this.pendingFiles);\n this.rebuildPreviews();\n this.uploadFiles(accepted);\n }\n\n remove(index: number): void {\n const ids = [...this.ids];\n if (index < ids.length) {\n ids.splice(index, 1);\n this.emitValue(this.multiple ? ids : (ids[0] ?? null));\n } else {\n this.pendingFiles.splice(index - ids.length, 1);\n this.filesChange.emit(this.pendingFiles);\n this.rebuildPreviews();\n }\n }\n\n drop(event: CdkDragDrop<UiPhotoPreview[]>): void {\n if (this.disabled || this.pendingFiles.length || this.ids.length < 2) return;\n const ids = [...this.ids];\n moveItemInArray(ids, event.previousIndex, event.currentIndex);\n this.emitValue(this.multiple ? ids : (ids[0] ?? null));\n }\n\n private get ids(): string[] {\n if (typeof this.value === 'string') return this.value.trim() ? [this.value] : [];\n return Array.isArray(this.value) ? this.value.filter((item) => !!String(item || '').trim()) : [];\n }\n\n private get normalizedLimit(): number {\n return Number.isInteger(Number(this.limit)) && Number(this.limit) > 0 ? Number(this.limit) : Number.MAX_SAFE_INTEGER;\n }\n\n private emitValue(value: string | string[] | null): void {\n this.value = value;\n this.onChange(value);\n this.rebuildPreviews(value);\n }\n\n private uploadFiles(files: File[]): void {\n if (!files.length) return;\n this.uploading = true;\n this.uploadingChange.emit(true);\n forkJoin(files.map((file) => this.uploadFile(file))).subscribe({\n next: (results) => {\n const uploaded = results.map((item) => String(item.imageId || '').trim()).filter(Boolean);\n results.forEach((item) => {\n const id = String(item.imageId || '').trim();\n if (id && item.type) this.fileTypes.set(id, item.type);\n });\n const next = this.multiple ? [...this.ids, ...uploaded].slice(0, this.normalizedLimit) : (uploaded[0] ?? null);\n this.pendingFiles = this.pendingFiles.filter((file) => !files.includes(file));\n this.emitValue(next);\n this.filesChange.emit(this.pendingFiles);\n this.uploading = false;\n this.uploadingChange.emit(false);\n },\n error: () => {\n this.pendingFiles = this.pendingFiles.filter((file) => !files.includes(file));\n this.rebuildPreviews();\n this.uploading = false;\n this.uploadingChange.emit(false);\n },\n });\n }\n\n private uploadFile(file: File): Observable<{ imageId: string; type?: string }> {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post<{ id: string; type?: string }>('/api/files/', formData).pipe(\n map((response) => ({ imageId: response.id, type: response.type })),\n );\n }\n\n private rebuildPreviews(value: string | string[] | null = this.value): void {\n this.revokeBlobUrls();\n const ids = typeof value === 'string' ? (value.trim() ? [value] : []) : (Array.isArray(value) ? value : []);\n this.previews = [\n ...ids.map((id) => ({ name: id, url: this.resolveImageUrl(id), isImage: this.isPreviewableType(this.fileTypes.get(id)), source: 'id' as const })),\n ...this.pendingFiles.map((file) => ({ name: file.name, url: URL.createObjectURL(file), isImage: file.type.startsWith('image/'), source: 'file' as const })),\n ];\n }\n\n private revokeBlobUrls(): void {\n for (const preview of this.previews) if (preview.url.startsWith('blob:')) URL.revokeObjectURL(preview.url);\n }\n\n private resolveImageUrl(value: string): string {\n if (/^(https?:\\/\\/|\\/|data:)/i.test(value)) return value;\n return `/api/files/${encodeURIComponent(value)}/preview?scale=25`;\n }\n\n private isPreviewableType(value?: string): boolean {\n if (!value) return true;\n const normalized = value.toLowerCase();\n return normalized.startsWith('image/') || normalized === 'application/pdf';\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <input-photo-control [accept]=\"accept\" [multiple]=\"multiple\" [disabled]=\"disabled\" [canSelectMore]=\"canSelectMore\" [previews]=\"previews\" (filesSelected)=\"handleFilesSelected($event)\" (removed)=\"remove($event)\" (dropped)=\"drop($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n HostListener,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { Subject, debounceTime, distinctUntilChanged, forkJoin } from 'rxjs';\nimport { Check, ChevronDown, LucideAngularModule, X } from 'lucide-angular';\nimport { UiPopupService } from '../../popup/ui-popup.service';\nimport { validateFormControl } from '../form-control.validator';\n\ninterface SuggestItem {\n key: string;\n label: string;\n imageId?: string | null;\n}\n\nexport interface UiSelectOption {\n label: string;\n value: string | null;\n disabled?: boolean;\n imageUrl?: string;\n}\n\nexport type UiSelectValue = string | string[] | null;\n\n@Component({\n selector: 'input-select-control',\n standalone: true,\n imports: [LucideAngularModule, CommonModule, FormsModule, CdkConnectedOverlay, CdkOverlayOrigin],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './ui-select.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputSelectControlComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputSelectControlComponent), multi: true },\n ],\n})\nexport class InputSelectControlComponent implements ControlValueAccessor, OnChanges, Validator {\n readonly closeIcon = X;\n readonly chevronDownIcon = ChevronDown;\n readonly checkIcon = Check;\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly http = inject(HttpClient);\n private readonly popupService = inject(UiPopupService);\n private readonly closeActivePopup = () => this.closeDropdown();\n\n @Input() label?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() data?: string;\n @Input() dataParams: Record<string, string | number | boolean | null | undefined> = {};\n @Input() required = false;\n @Input() disabled = false;\n @Input({ transform: booleanAttribute })\n multiple = false;\n @Input() includeBlankOption = false;\n @Input() blankOptionLabel = 'Оберіть…';\n @Input() emptyStateLabel = 'Немає варіантів для вибору';\n @Input() searchable = true;\n private _options: UiSelectOption[] = [];\n @Input()\n set options(value: UiSelectOption[]) {\n this._options = value ?? [];\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n }\n get options(): UiSelectOption[] {\n return this._options;\n }\n @Input() error?: string;\n @Input() hint?: string;\n @Input() triggerClass = '';\n @Input() panelClass = '';\n @Output() valueChange = new EventEmitter<UiSelectValue>();\n @Output() searchChange = new EventEmitter<string>();\n\n readonly popupMinWidth = 300;\n readonly popupViewportMargin = 16;\n readonly popupOffset = 8;\n\n @ViewChild('dropdownTrigger', { static: true, read: ElementRef }) dropdownTrigger?: ElementRef<HTMLButtonElement>;\n readonly dropdownPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: this.popupOffset,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -this.popupOffset,\n },\n ];\n\n isOpen = false;\n popupWidth = 0;\n value: string | null = '';\n multiValue: string[] = [];\n selectedOptions: UiSelectOption[] = [];\n searchTerm = '';\n isDictionaryLoading = false;\n\n private readonly searchChanges$ = new Subject<string>();\n private readonly dictionaryRequestVersions = new Map<string, number>();\n private dictionaryOptions: UiSelectOption[] = [];\n private onChange: (value: UiSelectValue) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n constructor() {\n this.searchChanges$.pipe(debounceTime(300), distinctUntilChanged()).subscribe((next) => {\n this.searchTerm = next;\n if (this.getDictionaryName()) {\n this.loadDictionaryOptions(next);\n return;\n }\n\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n });\n\n this.destroyRef.onDestroy(() => {\n this.searchChanges$.complete();\n this.dictionaryRequestVersions.clear();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const dataChanged = 'data' in changes;\n const dataParamsChanged = 'dataParams' in changes\n && !this.sameDataParams(changes['dataParams'].previousValue, changes['dataParams'].currentValue);\n\n if (dataChanged || dataParamsChanged) {\n this.reloadDictionaryOptions();\n }\n }\n\n writeValue(value: UiSelectValue): void {\n if (this.multiple) {\n this.multiValue = Array.isArray(value) ? value : [];\n } else {\n this.value = (value as string) ?? '';\n }\n this.updateSelectionFromValue();\n this.ensureSelectedDictionaryOptionsLoaded();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: UiSelectValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.closeDropdown();\n return;\n }\n const fieldWidth = this.dropdownTrigger!.nativeElement.getBoundingClientRect().width;\n this.popupWidth = Math.max(fieldWidth, this.popupMinWidth);\n this.isOpen = true;\n this.popupService.open(this.closeActivePopup);\n this.searchTerm = '';\n this.searchChanges$.next('');\n this.cdr.markForCheck();\n }\n\n selectOption(option: UiSelectOption, event: Event): void {\n event.stopPropagation();\n const key = this.getOptionValue(option);\n if (this.multiple) {\n const normalized = this.multiValue.includes(key)\n ? this.multiValue.filter((item) => item !== key)\n : [...this.multiValue, key];\n this.multiValue = normalized;\n this.onChange(normalized);\n this.valueChange.emit(normalized);\n } else {\n const nextValue = this.value === key ? null : key;\n this.value = nextValue;\n this.onChange(nextValue);\n this.valueChange.emit(nextValue);\n this.closeDropdown();\n }\n this.updateSelectionFromValue();\n }\n\n markTouched(): void {\n this.onTouched();\n }\n\n closeDropdown(): void {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n this.onTouched();\n this.searchTerm = '';\n this.searchChanges$.next('');\n this.popupService.close(this.closeActivePopup);\n this.cdr.markForCheck();\n }\n\n @HostListener('document:click')\n onDocumentClick(): void {\n if (this.isOpen) {\n this.closeDropdown();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.isOpen) {\n this.closeDropdown();\n }\n }\n\n get displayLabel(): string {\n if (this.multiple) {\n if (!this.selectedOptions.length) {\n return this.placeholder ?? this.blankOptionLabel;\n }\n return `${this.selectedOptions.length}`;\n }\n return this.selectedOptions[0]?.label ?? this.placeholder ?? this.blankOptionLabel;\n }\n\n isSelected(option: UiSelectOption): boolean {\n const value = this.getOptionValue(option);\n if (this.multiple) {\n return this.multiValue.includes(value);\n }\n return this.value === value;\n }\n\n getOptionValue(option: UiSelectOption): string {\n return option.value ?? '';\n }\n\n trackOption(index: number, option: UiSelectOption): string {\n return `${this.getOptionValue(option)}::${String(option.label || '').trim()}::${index}`;\n }\n\n get visibleOptions(): UiSelectOption[] {\n const options = this.getRenderOptions();\n if (!this.searchable || this.getDictionaryName() || !this.searchTerm.trim()) {\n return options;\n }\n\n const search = this.searchTerm.trim().toLowerCase();\n return options.filter((option) => {\n if (this.includeBlankOption && !this.multiple && this.isBlankOption(option)) {\n return true;\n }\n return String(option.label ?? '').toLowerCase().includes(search);\n });\n }\n\n onSearchChange(value: string): void {\n const next = String(value ?? '');\n this.searchChanges$.next(next);\n this.searchChange.emit(next);\n }\n\n removeOption(option: UiSelectOption, event: Event): void {\n event.stopPropagation();\n\n const key = this.getOptionValue(option);\n\n if (this.multiple) {\n this.multiValue = this.multiValue.filter((v) => v !== key);\n this.onChange(this.multiValue);\n this.valueChange.emit(this.multiValue);\n this.updateSelectionFromValue();\n }\n }\n\n private updateSelectionFromValue(): void {\n const options = this.getRenderOptions();\n if (this.multiple) {\n this.selectedOptions = options.filter((option) => this.multiValue.includes(this.getOptionValue(option)));\n return;\n }\n\n const current = options.find((option) => this.getOptionValue(option) === (this.value ?? ''));\n this.selectedOptions = current ? [current] : [];\n }\n\n private getRenderOptions(): UiSelectOption[] {\n const merged = this.mergeOptions(this.options, this.dictionaryOptions);\n if (!this.includeBlankOption || this.multiple) {\n return merged;\n }\n return [{ label: this.blankOptionLabel, value: '' }, ...merged];\n }\n\n private mergeOptions(...optionSets: UiSelectOption[][]): UiSelectOption[] {\n const merged = new Map<string, UiSelectOption>();\n for (const options of optionSets) {\n for (const option of options || []) {\n const value = this.getOptionValue(option);\n const key = `${value}::${String(option.label || '').trim()}`;\n if (!merged.has(key)) {\n merged.set(key, option);\n }\n }\n }\n return [...merged.values()];\n }\n\n private isBlankOption(option: UiSelectOption): boolean {\n return String(option.value ?? '') === '';\n }\n\n private getDictionaryName(): string {\n return String(this.data || '').trim();\n }\n\n private sameDataParams(previous: unknown, current: unknown): boolean {\n if (previous === current) return true;\n if (!previous || !current || typeof previous !== 'object' || typeof current !== 'object') return false;\n\n const previousEntries = Object.entries(previous as Record<string, unknown>);\n const currentEntries = Object.entries(current as Record<string, unknown>);\n if (previousEntries.length !== currentEntries.length) return false;\n\n return previousEntries.every(([key, value]) =>\n Object.prototype.hasOwnProperty.call(current, key)\n && (current as Record<string, unknown>)[key] === value\n );\n }\n\n private reloadDictionaryOptions(): void {\n const dictionaryName = this.getDictionaryName();\n this.dictionaryRequestVersions.clear();\n this.dictionaryOptions = [];\n this.isDictionaryLoading = false;\n\n if (!dictionaryName) {\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n return;\n }\n\n this.loadDictionaryOptions(this.searchTerm);\n }\n\n private loadDictionaryOptions(query: string): void {\n const dictionaryName = this.getDictionaryName();\n if (!dictionaryName) {\n return;\n }\n\n const requestVersion = (this.dictionaryRequestVersions.get(dictionaryName) || 0) + 1;\n this.dictionaryRequestVersions.set(dictionaryName, requestVersion);\n this.isDictionaryLoading = true;\n\n this.loadSuggestItems(dictionaryName, String(query || '').trim()).subscribe({\n next: (items) => {\n if ((this.dictionaryRequestVersions.get(dictionaryName) || 0) !== requestVersion) {\n return;\n }\n\n this.dictionaryOptions = this.normalizeSuggestItems(items);\n this.isDictionaryLoading = false;\n this.ensureSelectedDictionaryOptionsLoaded();\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n },\n error: () => {\n if ((this.dictionaryRequestVersions.get(dictionaryName) || 0) !== requestVersion) {\n return;\n }\n\n this.dictionaryOptions = [];\n this.isDictionaryLoading = false;\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n },\n });\n }\n\n private ensureSelectedDictionaryOptionsLoaded(): void {\n const dictionaryName = this.getDictionaryName();\n if (!dictionaryName) {\n return;\n }\n\n const existingValues = new Set(this.getRenderOptions().map((option) => this.getOptionValue(option)));\n const selectedValues = this.multiple ? this.multiValue : [this.value];\n const missingValues = selectedValues\n .map((item) => String(item || '').trim())\n .filter((item) => !!item && !existingValues.has(item));\n\n if (!missingValues.length) {\n return;\n }\n\n forkJoin(missingValues.map((value) => this.loadSuggestItem(dictionaryName, value))).subscribe({\n next: (items) => {\n const nextOptions = [...this.dictionaryOptions];\n for (const item of items) {\n const normalized = this.normalizeSuggestItem(item);\n if (!nextOptions.some((option) => this.getOptionValue(option) === normalized.value)) {\n nextOptions.push(normalized);\n }\n }\n this.dictionaryOptions = nextOptions;\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n },\n });\n }\n\n private normalizeSuggestItems(items: SuggestItem[] | null | undefined): UiSelectOption[] {\n return (items || [])\n .map((item) => this.normalizeSuggestItem(item))\n .filter((item) => !!item.label || item.value !== null);\n }\n\n private normalizeSuggestItem(item: SuggestItem): UiSelectOption {\n return {\n label: String(item?.label ?? ''),\n value: item?.key != null ? String(item.key) : null,\n imageUrl: item?.imageId ? `/api/files/${item.imageId}/preview?scale=25` : undefined,\n };\n }\n\n private loadSuggestItems(name: string, query?: string) {\n const params = new URLSearchParams();\n if (query?.trim()) params.set('q', query.trim());\n for (const [key, value] of Object.entries(this.dataParams || {})) {\n if (value !== null && value !== undefined && String(value).trim()) {\n params.set(key, String(value));\n }\n }\n const suffix = params.toString() ? `?${params.toString()}` : '';\n return this.http.get<SuggestItem[]>(`/api/suggest/${encodeURIComponent(name)}${suffix}`);\n }\n\n private loadSuggestItem(name: string, key: string) {\n return this.http.get<SuggestItem>(`/api/suggest/${encodeURIComponent(name)}/${encodeURIComponent(key)}`);\n }\n}\n"," <div class=\"relative w-full\">\n\n <button\n data-field-control\n cdkOverlayOrigin\n #dropdownTrigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"flex min-h-10 w-full flex-nowrap items-center gap-2 rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 transition hover:border-slate-300 focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [class]=\"triggerClass\"\n [class.opacity-50]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown($event)\"\n >\n\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-2\" [class.-ml-2]=\"multiple\">\n <!-- MULTIPLE MODE -->\n @if (multiple) {\n\n @if (selectedOptions.length) {\n\n @for (option of selectedOptions; track option.value) {\n <span\n class=\"inline-flex h-6 shrink-0 items-center gap-1 rounded-md bg-slate-100 px-2 text-xs font-medium text-slate-700\"\n >\n {{ option.label }}\n\n <span\n role=\"button\"\n tabindex=\"0\"\n class=\"text-slate-400 hover:text-rose-500 transition-colors\"\n (click)=\"removeOption(option, $event)\"\n (keydown.enter)=\"removeOption(option, $event)\"\n (keydown.space)=\"$event.preventDefault(); removeOption(option, $event)\"\n >\n <lucide-icon [img]=\"closeIcon\" class=\"h-4 w-4 shrink-0\"></lucide-icon>\n </span>\n </span>\n }\n\n } @else {\n <span class=\"text-slate-400\">\n {{ placeholder ?? blankOptionLabel }}\n </span>\n }\n\n } @else {\n\n <!-- SINGLE MODE -->\n @if (selectedOptions[0]?.imageUrl) {\n <img [src]=\"selectedOptions[0]?.imageUrl\" alt=\"\" class=\"h-7 w-7 rounded object-cover\" />\n }\n <span class=\"min-w-0 truncate\">\n {{ selectedOptions[0]?.label ?? placeholder ?? blankOptionLabel }}\n </span>\n\n }\n </span>\n\n <lucide-icon [img]=\"chevronDownIcon\" class=\"shrink-0 text-xs text-slate-400\"></lucide-icon>\n\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"dropdownTrigger\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPositions]=\"dropdownPositions\"\n [cdkConnectedOverlayViewportMargin]=\"popupViewportMargin\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n (detach)=\"closeDropdown()\"\n >\n <!-- DROPDOWN -->\n <div\n class=\"z-50 w-full max-w-[calc(100vw-2rem)] rounded-xl border border-slate-200 bg-white shadow-lg\"\n [style.width.px]=\"popupWidth\"\n [style.max-width]=\"'calc(100vw - 2rem)'\"\n [class]=\"panelClass\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (searchable) {\n <div class=\"border-b border-slate-100 p-2\">\n <input\n type=\"text\"\n class=\"w-full rounded-xl border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 outline-none transition focus:border-slate-900 focus:ring-2 focus:ring-slate-200\"\n placeholder=\"Пошук...\"\n [ngModel]=\"searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\n <div class=\"max-h-60 overflow-auto\">\n @if (!visibleOptions.length) {\n <div class=\"px-4 py-3 text-sm text-slate-500\">\n @if (isDictionaryLoading && data) {\n Завантаження...\n } @else {\n {{ emptyStateLabel }}\n }\n </div>\n } @else {\n @for (option of visibleOptions; track trackOption($index, option)) {\n <button\n type=\"button\"\n class=\"flex w-full items-start justify-between gap-3 whitespace-normal break-words px-4 py-2 text-left text-sm hover:bg-slate-50\"\n [class.bg-slate-100]=\"isSelected(option)\"\n (click)=\"selectOption(option, $event)\"\n >\n <span class=\"flex min-w-0 flex-1 items-center gap-2\">\n @if (option.imageUrl) {\n <img [src]=\"option.imageUrl\" alt=\"\" class=\"h-8 w-8 shrink-0 rounded object-cover\" />\n }\n <span class=\"whitespace-normal break-words\">{{ option.label }}</span>\n </span>\n\n @if (isSelected(option)) {\n <lucide-icon [img]=\"checkIcon\" class=\"text-xs text-sky-500\"></lucide-icon>\n }\n </button>\n }\n }\n </div>\n\n </div>\n </ng-template>\n\n </div>\n","import { AfterViewInit, booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiSelectOption, UiSelectValue, InputSelectControlComponent } from './ui-select.component';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { validateFormControl } from '../form-control.validator';\n\n@Component({\n selector: 'input-select',\n standalone: true,\n imports: [FieldFrameComponent, InputSelectControlComponent],\n templateUrl: './ui-select-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputSelectComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputSelectComponent), multi: true },\n ],\n})\nexport class InputSelectComponent implements ControlValueAccessor, Validator, AfterViewInit {\n @ViewChild(InputSelectControlComponent) private control?: InputSelectControlComponent;\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() data?: string;\n @Input() dataParams: Record<string, string | number | boolean | null | undefined> = {};\n @Input() required = false;\n @Input() disabled = false;\n @Input({ transform: booleanAttribute }) multiple = false;\n @Input() includeBlankOption = false;\n @Input() blankOptionLabel = 'Оберіть…';\n @Input() emptyStateLabel = 'Немає варіантів для вибору';\n @Input() searchable = true;\n @Input() options: UiSelectOption[] = [];\n @Input() triggerClass = '';\n @Input() panelClass = '';\n\n @Output() valueChange = new EventEmitter<UiSelectValue>();\n @Output() searchChange = new EventEmitter<string>();\n\n private pendingValue: UiSelectValue = null;\n private onChange: (value: UiSelectValue) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n ngAfterViewInit(): void {\n this.control?.registerOnChange((value) => {\n this.onChange(value);\n this.valueChange.emit(value);\n });\n this.control?.registerOnTouched(() => this.onTouched());\n this.control?.writeValue(this.pendingValue);\n }\n\n writeValue(value: UiSelectValue): void {\n this.pendingValue = value;\n this.control?.writeValue(value);\n }\n\n registerOnChange(fn: (value: UiSelectValue) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [disabled]=\"disabled\">\n <input-select-control\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [data]=\"data\"\n [dataParams]=\"dataParams\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n [includeBlankOption]=\"includeBlankOption\"\n [blankOptionLabel]=\"blankOptionLabel\"\n [emptyStateLabel]=\"emptyStateLabel\"\n [searchable]=\"searchable\"\n [options]=\"options\"\n [triggerClass]=\"triggerClass\"\n [panelClass]=\"panelClass\"\n (valueChange)=\"valueChange.emit($event)\"\n (searchChange)=\"searchChange.emit($event)\"\n />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-slug-control',\n standalone: true,\n template: `<input data-field-control type=\"text\" class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.placeholder]=\"placeholder\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [disabled]=\"disabled\" [attr.id]=\"id\" [value]=\"value\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />`,\n})\nexport class InputSlugControlComponent {\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() autocomplete = 'off';\n @Input() disabled = false;\n @Input() value = '';\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { validateFormControl } from '../form-control.validator';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputSlugControlComponent } from './ui-slug-input-control.component';\n\n@Component({\n selector: 'input-slug',\n standalone: true,\n imports: [CommonModule, FormsModule, FieldFrameComponent, InputSlugControlComponent],\n templateUrl: './ui-slug-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputSlugComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputSlugComponent), multi: true },\n ],\n})\nexport class InputSlugComponent implements ControlValueAccessor, Validator {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() required = false;\n @Input() autocomplete = 'off';\n @Input() error?: string;\n @Output() invalidInput = new EventEmitter<void>();\n\n disabled = false;\n value = '';\n private static nextId = 0;\n private readonly generatedId = `input-slug-${InputSlugComponent.nextId++}`;\n private onChange: (value: string) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n\n writeValue(value: string | null): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onValueChange(target: HTMLInputElement): void {\n const normalized = this.normalizeSlug(target.value);\n if (target.value !== normalized) {\n target.value = normalized;\n this.invalidInput.emit();\n }\n this.value = normalized;\n this.onChange(normalized);\n }\n\n handleValueChange(value: string): void {\n const normalized = this.normalizeSlug(value);\n if (value !== normalized) this.invalidInput.emit();\n this.value = normalized;\n this.onChange(normalized);\n }\n\n private normalizeSlug(value: string): string {\n return (value ?? '')\n .toLowerCase()\n .replace(/\\s+/g, '_')\n .replace(/[^a-z0-9_]/g, '');\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\">\n <input-slug-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [autocomplete]=\"autocomplete\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"handleValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { Type } from '@angular/core';\nimport { InputBarcodeComponent } from './barcode/ui-barcode-scanner-input.wrapper';\nimport { InputCheckboxComponent } from './checkbox/ui-checkbox-input.component';\nimport { InputColorComponent } from './color/ui-color-input.component';\nimport { InputDateComponent } from './date/ui-date-input.component.wrapper';\nimport { InputDatetimeComponent } from './datetime/ui-datetime-input.component.wrapper';\nimport { InputEmailComponent } from './email/ui-email-input.component';\nimport { InputNumberComponent } from './number/ui-number-input.component';\nimport { InputPasswordComponent } from './password/ui-password-input.component';\nimport { InputTextComponent } from './text/ui-text-input.component';\nimport { InputTextareaComponent } from './textarea/ui-textarea-input.component';\nimport { InputFileComponent } from './file/ui-file-input.component';\nimport { InputPhotoComponent } from './photo/ui-photo-input.component';\nimport { InputSelectComponent } from './select/ui-select-input.component';\nimport { InputSlugComponent } from './slug/ui-slug-input.component';\n\nexport type UiFormInputType = 'text' | 'number' | 'date' | 'datetime' | 'email' | 'password' | 'textarea' | 'select' | 'checkbox' | 'color' | 'slug' | 'file' | 'photo' | 'barcode';\n\nexport const UI_FORM_INPUT_REGISTRY: Record<UiFormInputType, Type<unknown>> = {\n text: InputTextComponent,\n number: InputNumberComponent,\n date: InputDateComponent,\n datetime: InputDatetimeComponent,\n email: InputEmailComponent,\n password: InputPasswordComponent,\n textarea: InputTextareaComponent,\n select: InputSelectComponent,\n checkbox: InputCheckboxComponent,\n color: InputColorComponent,\n slug: InputSlugComponent,\n file: InputFileComponent,\n photo: InputPhotoComponent,\n barcode: InputBarcodeComponent,\n};\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ComponentRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild, ViewContainerRef, inject } from '@angular/core';\nimport { UiDynamicFormField, UiDynamicFormFieldAction, UiDynamicFormValue } from '../dynamic/ui-dynamic-form.models';\nimport { UI_FORM_INPUT_REGISTRY, UiFormInputType } from './form-input.registry';\n\ntype FormControlInstance = {\n writeValue?: (value: unknown) => void;\n registerOnChange?: (callback: (value: unknown) => void) => void;\n registerOnTouched?: (callback: () => void) => void;\n setDisabledState?: (disabled: boolean) => void;\n actionTriggered?: EventEmitter<UiDynamicFormFieldAction>;\n valueChange?: { subscribe: (handler: (value: unknown) => void) => unknown };\n scanned?: { subscribe: (handler: (value: string) => void) => unknown };\n searchRequested?: { subscribe: (handler: () => void) => unknown };\n filesChange?: { subscribe: (handler: (files: File[]) => void) => unknown };\n uploadingChange?: { subscribe: (handler: (uploading: boolean) => void) => unknown };\n};\n\n@Component({\n selector: 'field-input',\n standalone: true,\n imports: [CommonModule],\n template: `\n <ng-container #inputContainer></ng-container>\n `,\n})\nexport class FieldInputComponent implements OnChanges, AfterViewInit {\n @Input() field!: UiDynamicFormField;\n @Input() value: UiDynamicFormValue[string];\n @Input() model: UiDynamicFormValue = {};\n @Input() error = '';\n @Input() disabled = false;\n @Input() visibleActions: UiDynamicFormFieldAction[] = [];\n\n @Output() valueChange = new EventEmitter<unknown>();\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n @Output() lookupRequested = new EventEmitter<void>();\n @Output() barcodeScanned = new EventEmitter<string>();\n @Output() filesChange = new EventEmitter<File[]>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n\n @ViewChild('inputContainer', { read: ViewContainerRef })\n private inputContainer?: ViewContainerRef;\n private componentRef?: ComponentRef<unknown>;\n private readonly fallbackViewContainer = inject(ViewContainerRef);\n private viewReady = false;\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n if (this.field && !this.componentRef) this.render();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['field']) {\n if (this.viewReady) this.render();\n return;\n }\n if (this.viewReady) this.syncInputs();\n }\n\n private render(): void {\n const viewContainer = this.inputContainer || this.fallbackViewContainer;\n viewContainer.clear();\n const inputType = String(this.field?.type || 'text') as UiFormInputType;\n const componentType = UI_FORM_INPUT_REGISTRY[inputType] || UI_FORM_INPUT_REGISTRY.text;\n this.componentRef = viewContainer.createComponent(componentType);\n const hostElement = this.componentRef.location.nativeElement as HTMLElement;\n hostElement.style.display = 'block';\n hostElement.style.width = '100%';\n\n // Materialize the component view before syncing inputs so nested\n // ViewChild controls are available for their initial value.\n this.componentRef.changeDetectorRef.detectChanges();\n this.syncInputs();\n\n const instance = this.componentRef.instance as FormControlInstance;\n const hasCva = !!instance.registerOnChange;\n instance.registerOnChange?.((nextValue) => this.valueChange.emit(nextValue));\n instance.registerOnTouched?.(() => undefined);\n instance.actionTriggered?.subscribe((action) => this.actionTriggered.emit(action));\n if (!hasCva) instance.valueChange?.subscribe((value) => this.valueChange.emit(value));\n instance.scanned?.subscribe((value) => this.barcodeScanned.emit(value));\n instance.searchRequested?.subscribe(() => this.lookupRequested.emit());\n instance.filesChange?.subscribe((files) => this.filesChange.emit(files));\n instance.uploadingChange?.subscribe((uploading) => this.uploadingChange.emit(uploading));\n\n this.componentRef.changeDetectorRef.detectChanges();\n }\n\n private syncInputs(): void {\n if (!this.componentRef || !this.field) return;\n const field = this.field;\n const config = field as unknown as Record<string, unknown>;\n const setInput = (name: string, value: unknown): void => this.componentRef?.setInput(name, value);\n const inputType = String(field.type || 'text') as UiFormInputType;\n\n if (field.label !== undefined) setInput('label', field.label);\n if (field.hint !== undefined) setInput('hint', field.hint);\n setInput('error', this.error);\n if (typeof field.required === 'boolean') setInput('required', field.required);\n\n // FieldInput only adapts the dynamic field to the selected control.\n switch (inputType) {\n case 'text':\n case 'number':\n case 'date':\n case 'datetime':\n case 'email':\n case 'password':\n case 'textarea':\n setInput('actions', this.visibleActions);\n setInput('name', field.id);\n setInput('id', field.id);\n setInput('placeholder', field.placeholder);\n setInput('pattern', config['pattern']);\n setInput('rows', config['rows'] ?? 4);\n break;\n case 'slug':\n setInput('name', field.id);\n setInput('id', field.id);\n setInput('placeholder', field.placeholder);\n break;\n case 'select':\n setInput('name', field.id);\n setInput('placeholder', field.placeholder);\n setInput('data', config['data']);\n const dataParams = config['dataParams'] as Record<string, string> | undefined;\n setInput('dataParams', Object.fromEntries(\n Object.entries(dataParams || {})\n .map(([key, fieldId]) => [key, this.model[fieldId]])\n .filter(([, value]) => value !== undefined && value !== null)\n ));\n setInput('options', config['options'] || []);\n setInput('multiple', !!config['multiple']);\n if (typeof config['searchable'] === 'boolean') {\n setInput('searchable', config['searchable']);\n }\n break;\n case 'color':\n setInput('name', field.id);\n setInput('id', field.id);\n break;\n case 'file':\n setInput('accept', config['accept']);\n setInput('multiple', !!config['multiple']);\n break;\n case 'photo':\n setInput('accept', config['accept'] || 'image/*');\n setInput('multiple', !!config['multiple']);\n setInput('limit', config['limit'] ?? 0);\n break;\n case 'barcode':\n setInput('placeholder', field.placeholder);\n setInput('disabled', this.disabled);\n setInput('value', this.value ?? '');\n break;\n case 'checkbox':\n break;\n }\n\n const instance = this.componentRef.instance as FormControlInstance;\n instance.writeValue?.(this.value);\n instance.setDisabledState?.(this.disabled);\n }\n}\n","type Token =\n | { type: 'value'; value: unknown }\n | { type: 'identifier'; value: string }\n | { type: 'operator'; value: '==' | '!=' | '===' | '!==' | '&&' | '||' | '!' | '(' | ')' };\n\nconst isIdentifierStart = (value: string): boolean => /[A-Za-z_$]/.test(value);\nconst isIdentifierPart = (value: string): boolean => /[A-Za-z0-9_.$-]/.test(value);\n\nconst tokenize = (source: string): Token[] => {\n const tokens: Token[] = [];\n let index = 0;\n\n while (index < source.length) {\n const char = source[index];\n if (/\\s/.test(char)) {\n index += 1;\n continue;\n }\n\n const three = source.slice(index, index + 3);\n const two = source.slice(index, index + 2);\n if (three === '===' || three === '!==') {\n tokens.push({ type: 'operator', value: three });\n index += 3;\n continue;\n }\n if (two === '==' || two === '!=' || two === '&&' || two === '||') {\n tokens.push({ type: 'operator', value: two });\n index += 2;\n continue;\n }\n if (char === '!' || char === '(' || char === ')') {\n tokens.push({ type: 'operator', value: char });\n index += 1;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n const quote = char;\n let value = '';\n let escaped = false;\n index += 1;\n while (index < source.length) {\n const current = source[index++];\n if (escaped) {\n value += current;\n escaped = false;\n } else if (current === '\\\\') {\n escaped = true;\n } else if (current === quote) {\n tokens.push({ type: 'value', value });\n break;\n } else {\n value += current;\n }\n }\n if (source[index - 1] !== quote) throw new Error('Unterminated string');\n continue;\n }\n if (/[0-9.-]/.test(char)) {\n const match = source.slice(index).match(/^-?\\d+(?:\\.\\d+)?/);\n if (match) {\n tokens.push({ type: 'value', value: Number(match[0]) });\n index += match[0].length;\n continue;\n }\n }\n if (isIdentifierStart(char)) {\n let value = char;\n index += 1;\n while (index < source.length && isIdentifierPart(source[index])) value += source[index++];\n if (value === 'true') tokens.push({ type: 'value', value: true });\n else if (value === 'false') tokens.push({ type: 'value', value: false });\n else if (value === 'null') tokens.push({ type: 'value', value: null });\n else tokens.push({ type: 'identifier', value });\n continue;\n }\n throw new Error(`Unexpected token: ${char}`);\n }\n\n return tokens;\n};\n\nconst getPathValue = (model: Record<string, unknown>, path: string): unknown => {\n return path.split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') return undefined;\n return (current as Record<string, unknown>)[part];\n }, model);\n};\n\nexport const evaluateFormCondition = (source: string, model: Record<string, unknown>): boolean => {\n const tokens = tokenize(String(source || '').trim());\n let index = 0;\n const peek = (): Token | undefined => tokens[index];\n const consume = (): Token => {\n const token = tokens[index++];\n if (!token) throw new Error('Unexpected end of condition');\n return token;\n };\n const matchOperator = (...values: Array<Extract<Token, { type: 'operator' }>['value']>): boolean => {\n const token = peek();\n if (token?.type !== 'operator' || !values.includes(token.value)) return false;\n index += 1;\n return true;\n };\n const toBoolean = (value: unknown): boolean => typeof value === 'string' ? value.trim().length > 0 : Boolean(value);\n\n const parseExpression = (): unknown => parseOr();\n const parseOr = (): unknown => {\n let value = parseAnd();\n while (matchOperator('||')) value = toBoolean(value) || toBoolean(parseAnd());\n return value;\n };\n const parseAnd = (): unknown => {\n let value = parseEquality();\n while (matchOperator('&&')) value = toBoolean(value) && toBoolean(parseEquality());\n return value;\n };\n const parseEquality = (): unknown => {\n let value = parseUnary();\n while (true) {\n if (matchOperator('==')) { value = value == parseUnary(); continue; }\n if (matchOperator('!=')) { value = value != parseUnary(); continue; }\n if (matchOperator('===')) { value = value === parseUnary(); continue; }\n if (matchOperator('!==')) { value = value !== parseUnary(); continue; }\n return value;\n }\n };\n const parseUnary = (): unknown => matchOperator('!') ? !toBoolean(parseUnary()) : parsePrimary();\n const parsePrimary = (): unknown => {\n if (matchOperator('(')) {\n const value = parseExpression();\n if (!matchOperator(')')) throw new Error('Missing closing parenthesis');\n return value;\n }\n\n const token = consume();\n if (token.type === 'value') return token.value;\n if (token.type !== 'identifier') throw new Error('Expected value');\n\n if (token.value === 'Number' && matchOperator('(')) {\n const value = Number(parseExpression());\n if (!matchOperator(')')) throw new Error('Missing closing parenthesis');\n return Number.isNaN(value) ? undefined : value;\n }\n return getPathValue(model, token.value);\n };\n\n if (!tokens.length) return true;\n const result = parseExpression();\n if (index !== tokens.length) throw new Error('Unexpected tokens after condition');\n return toBoolean(result);\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FieldInputComponent } from '../inputs/form-input-host.component';\nimport { UiFormContext } from '../context/form-context.service';\nimport { UiFormLookupService } from './form-lookup.service';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { evaluateFormCondition } from './form-condition.parser';\nimport {\n UiDynamicFormField,\n UiDynamicFormFieldAction,\n UiDynamicFormValue,\n flattenDynamicFormFields,\n isDynamicFormLookupField,\n isDynamicFormContainerField,\n isDynamicFormTemplateField,\n} from './ui-dynamic-form.models';\n\n@Component({\n selector: 'dynamic-form',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldInputComponent],\n templateUrl: './ui-dynamic-form.component.html',\n providers: [UiFormContext, UiFormLookupService],\n})\nexport class DynamicFormComponent implements OnChanges {\n private readonly lookupService = inject(UiFormLookupService);\n readonly formContext = inject(UiFormContext);\n @Input() fields: UiDynamicFormField[] = [];\n @Input() value: UiDynamicFormValue = {};\n @Input() errors: Record<string, string> = {};\n @Input() submitLabel = 'Submit';\n @Input() showSubmit = true;\n @Input() disabled = false;\n @Output() valueChange = new EventEmitter<UiDynamicFormValue>();\n @Output() lookupCompleted = new EventEmitter<{ fieldId: string; response: Record<string, unknown> }>();\n @Output() submitted = new EventEmitter<UiDynamicFormValue>();\n @Output() filesChange = new EventEmitter<{ fieldId: string; files: File[] }>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n @Output() fieldActionTriggered = new EventEmitter<{ fieldId: string; action: UiDynamicFormFieldAction }>();\n\n readonly modelSignal = signal<UiDynamicFormValue>({});\n readonly lookupLoadingSignal = signal<Record<string, boolean>>({});\n readonly lookupErrorsSignal = signal<Record<string, string>>({});\n ngOnChanges(changes: SimpleChanges): void {\n if ('fields' in changes || 'value' in changes) {\n const next: UiDynamicFormValue = { ...this.value };\n for (const field of this.getLeafFields()) {\n const defaultValue = field.type === 'checkbox' ? false : '';\n const rawValue = this.value[field.id] !== undefined\n ? this.value[field.id]\n : field.default !== undefined\n ? field.default\n : defaultValue;\n next[field.id] = this.normalizeFieldValue(field, rawValue);\n\n }\n this.modelSignal.set(next);\n this.formContext.setValue(next);\n this.formContext.setErrors(this.errors);\n this.formContext.disabled.set(this.disabled);\n }\n\n }\n\n updateField(fieldId: string, nextValue: UiDynamicFormValue[string]): void {\n this.modelSignal.update((current) => {\n const updated = { ...current, [fieldId]: nextValue };\n this.formContext.setValue(updated);\n this.valueChange.emit(updated);\n return updated;\n });\n }\n\n private normalizeFieldValue(field: UiDynamicFormField, value: unknown): UiDynamicFormValue[string] {\n if (field.type === 'photo' && field.multiple) {\n const values = Array.isArray(value) ? value : String(value || '').split(',');\n return values.map((item) => String(item || '').trim()).filter(Boolean);\n }\n return value as UiDynamicFormValue[string];\n }\n\n onBarcodeValueChange(field: UiDynamicFormField, value: string): void {\n this.updateField(field.id, value);\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n }\n\n onFieldValueChange(field: UiDynamicFormField, value: unknown): void {\n this.updateField(field.id, value as UiDynamicFormValue[string]);\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n\n if (field.type === 'select' && field.lookupApi) {\n const lookupValue = Array.isArray(value) ? '' : String(value || '').trim();\n this.runFieldLookup(field, lookupValue);\n }\n }\n\n onBarcodeScanned(field: UiDynamicFormField, value: string): void {\n this.updateField(field.id, value);\n this.runFieldLookup(field, value);\n }\n\n runBarcodeLookup(field: UiDynamicFormField): void {\n this.runFieldLookup(field);\n }\n\n runFieldLookup(field: UiDynamicFormField, overrideValue?: string): void {\n if (!isDynamicFormLookupField(field)) return;\n const api = String(field.lookupApi || '').trim();\n if (!api) return;\n\n const value = String(overrideValue ?? this.getStringValue(field.id)).trim();\n if (!value) {\n this.lookupErrorsSignal.update((current) => ({\n ...current,\n [field.id]: field.type === 'select' ? 'Вкажіть значення для пошуку' : 'Вкажіть штрихкод для пошуку',\n }));\n return;\n }\n\n this.lookupLoadingSignal.update((current) => ({ ...current, [field.id]: true }));\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n\n this.lookupService.lookup(field, value).subscribe({\n next: (response) => {\n this.applyLookupResponse(field, response || {});\n this.lookupCompleted.emit({ fieldId: field.id, response: response || {} });\n this.lookupLoadingSignal.update((current) => ({ ...current, [field.id]: false }));\n },\n error: (error) => {\n const message = error?.error?.message || 'Не вдалося знайти запис';\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: message }));\n this.lookupLoadingSignal.update((current) => ({ ...current, [field.id]: false }));\n const errorField = String(field.lookupErrorField || '').trim();\n if (errorField) {\n this.updateField(errorField, message);\n }\n },\n });\n }\n\n onFieldActionTriggered(fieldId: string, action: UiDynamicFormFieldAction): void {\n this.fieldActionTriggered.emit({ fieldId, action });\n }\n\n resolveFieldActions(field: UiDynamicFormField): UiDynamicFormFieldAction[] {\n const model = this.modelSignal();\n return (field.actions || []).filter((action) => {\n const condition = String(action.condition || '').trim();\n if (!condition) {\n return true;\n }\n\n try {\n return evaluateFormCondition(condition, model);\n } catch {\n return true;\n }\n });\n }\n\n getActions(field: UiDynamicFormField): UiDynamicFormFieldAction[] {\n return this.resolveFieldActions(field);\n }\n\n isFieldDisabled(field: UiDynamicFormField): boolean {\n if (this.disabled) return true;\n if (typeof field.disabled === 'boolean') return field.disabled;\n const raw = String(field.disabled || '').trim();\n if (!raw) return false;\n const condition = raw.startsWith('${') && raw.endsWith('}') ? raw.slice(2, -1).trim() : raw;\n try {\n return evaluateFormCondition(condition, this.modelSignal());\n } catch {\n return false;\n }\n }\n\n submitForm(): void {\n this.submitted.emit(this.modelSignal());\n }\n\n isTextArea(field: UiDynamicFormField): boolean {\n return (field.type ?? 'text') === 'textarea';\n }\n\n getStringValue(fieldId: string): string {\n return String(this.modelSignal()[fieldId] || '');\n }\n\n getLookupError(fieldId: string): string {\n return this.lookupErrorsSignal()[fieldId] || '';\n }\n\n isLookupLoading(fieldId: string): boolean {\n return !!this.lookupLoadingSignal()[fieldId];\n }\n\n resolveClassName(value: unknown): string {\n return String(value || '').trim();\n }\n\n isContainerField(field: UiDynamicFormField): field is Extract<UiDynamicFormField, { type: 'container' }> {\n return isDynamicFormContainerField(field);\n }\n\n isTemplateField(field: UiDynamicFormField): field is Extract<UiDynamicFormField, { type: 'template' }> {\n return isDynamicFormTemplateField(field);\n }\n\n isFieldVisible(field: UiDynamicFormField): boolean {\n if (typeof field.hidden === 'boolean') {\n return !field.hidden;\n }\n\n const hidden = String(field.hidden || '').trim();\n if (!hidden) {\n return true;\n }\n\n const expression = hidden.startsWith('${') && hidden.endsWith('}')\n ? hidden.slice(2, -1)\n : hidden;\n try {\n const model = this.modelSignal();\n return !evaluateFormCondition(expression, model);\n } catch {\n return false;\n }\n }\n\n resolveInputType(field: UiDynamicFormField): string {\n const type = field.type ?? 'text';\n if (type === 'number' || type === 'date' || type === 'email' || type === 'password') {\n return type;\n }\n if (type === 'datetime') return 'datetime-local';\n\n return 'text';\n }\n\n renderTemplate(field: UiDynamicFormField): string {\n const template = this.isTemplateField(field) ? field.template : '';\n if (!template) {\n return '';\n }\n\n const model = this.modelSignal();\n const context = this.isTemplateField(field) ? { ...(field.templateContext || {}), ...model } : model;\n return String(template).replace(/\\{\\{\\s*([a-zA-Z0-9_.]+)\\s*\\}\\}/g, (_match, path: string) => {\n const value = this.resolveTemplateValue(context, path);\n return value == null ? '' : String(value);\n });\n }\n\n getContainerTag(field: UiDynamicFormField): 'div' | 'section' | 'aside' | 'fieldset' {\n if (!this.isContainerField(field) && !this.isTemplateField(field)) {\n return 'div';\n }\n\n return field.tag || 'section';\n }\n\n getContainerClass(field: UiDynamicFormField): string {\n const className = String(field.className || '').trim();\n const tag = this.getContainerTag(field);\n return [\n this.resolveColSpanClass(field),\n tag === 'aside'\n ? 'space-y-4 rounded-3xl border border-slate-200 bg-white p-4 shadow-sm'\n : 'rounded-3xl border border-slate-200 bg-white p-6 shadow-sm',\n className,\n ].filter(Boolean).join(' ');\n }\n\n getContainerContentClass(field: UiDynamicFormField): string {\n const className = String(this.isContainerField(field) ? field.contentClassName || '' : '').trim();\n const layout = this.isContainerField(field) ? field.layout : undefined;\n return [\n layout === 'stack' ? 'space-y-4' : 'grid grid-cols-1 gap-4 md:grid-cols-12',\n className,\n ].filter(Boolean).join(' ');\n }\n\n getFieldClass(field: UiDynamicFormField): Record<string, boolean> {\n const span = Math.min(12, Math.max(1, Number(field.col ?? 12)));\n return {\n 'md:col-span-1': span === 1,\n 'md:col-span-2': span === 2,\n 'md:col-span-3': span === 3,\n 'md:col-span-4': span === 4,\n 'md:col-span-5': span === 5,\n 'md:col-span-6': span === 6,\n 'md:col-span-7': span === 7,\n 'md:col-span-8': span === 8,\n 'md:col-span-9': span === 9,\n 'md:col-span-10': span === 10,\n 'md:col-span-11': span === 11,\n 'md:col-span-12': span === 12,\n };\n }\n\n private resolveColSpanClass(field: UiDynamicFormField): string {\n const span = Math.min(12, Math.max(1, Number(field.col ?? 12)));\n const classes: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n };\n return classes[span] || classes[12];\n }\n\n private applyLookupResponse(field: UiDynamicFormField, response: Record<string, unknown>): void {\n if (!isDynamicFormLookupField(field)) return;\n const lookupMap = field.lookupMap || {};\n const mapped = Object.entries(lookupMap).reduce<UiDynamicFormValue>((acc, [targetField, sourcePath]) => {\n acc[targetField] = this.resolveTemplateValue(response, sourcePath) as UiDynamicFormValue[string];\n return acc;\n }, {});\n\n this.modelSignal.update((current) => {\n const updated = { ...current, ...mapped };\n this.formContext.setValue(updated);\n this.valueChange.emit(updated);\n return updated;\n });\n }\n\n\n private resolveTemplateValue(model: Record<string, unknown>, pathRaw: string): unknown {\n const path = String(pathRaw || '').trim();\n if (!path) {\n return undefined;\n }\n\n return path.split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') {\n return undefined;\n }\n return (current as Record<string, unknown>)[part];\n }, model);\n }\n\n private getFlatFields(): UiDynamicFormField[] {\n return flattenDynamicFormFields(this.fields);\n }\n\n private getLeafFields(): UiDynamicFormField[] {\n return this.getFlatFields().filter((field) => field.type !== 'container' && field.type !== 'template');\n }\n}\n","<form class=\"grid grid-cols-1 gap-4 md:grid-cols-12\" (ngSubmit)=\"submitForm()\" #dynamicForm=\"ngForm\">\n <ng-template #renderField let-field>\n @if (isFieldVisible(field)) {\n @if (isContainerField(field)) {\n @if (getContainerTag(field) === 'aside') {\n <aside [ngClass]=\"getContainerClass(field)\">\n @if (field.label || field.title || getActions(field).length || field.hint) {\n <header class=\"flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n @if (field.label || field.title) {\n <p class=\"text-xs font-semibold uppercase tracking-[0.22em] text-slate-500\">\n {{ field.label || field.title }}\n </p>\n }\n @if (field.hint) {\n <h3 class=\"mt-1 text-lg font-semibold text-slate-900\">{{ field.hint }}</h3>\n }\n </div>\n\n @if (getActions(field).length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of getActions(field); track action.id; let i = $index) {\n <ui-button\n [variant]=\"action.variant || (i === 0 ? 'primary' : 'ghost')\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"onFieldActionTriggered(field.id, action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n\n <div [ngClass]=\"getContainerContentClass(field)\">\n @for (child of field.fields; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: child }\"></ng-container>\n }\n </div>\n </aside>\n } @else if (getContainerTag(field) === 'fieldset') {\n <fieldset [ngClass]=\"getContainerClass(field)\">\n @if (field.label || field.title || getActions(field).length || field.hint) {\n <header class=\"flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n @if (field.label || field.title) {\n <legend class=\"text-lg font-semibold text-slate-900\">{{ field.label || field.title }}</legend>\n }\n @if (field.hint) {\n <p class=\"mt-1 text-sm text-slate-500\">{{ field.hint }}</p>\n }\n </div>\n\n @if (getActions(field).length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of getActions(field); track action.id; let i = $index) {\n <ui-button\n [variant]=\"action.variant || (i === 0 ? 'primary' : 'ghost')\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"onFieldActionTriggered(field.id, action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n\n <div [ngClass]=\"getContainerContentClass(field)\">\n @for (child of field.fields; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: child }\"></ng-container>\n }\n </div>\n </fieldset>\n } @else {\n <section [ngClass]=\"getContainerClass(field)\">\n @if (field.label || field.title || getActions(field).length || field.hint) {\n <header class=\"flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n @if (field.label || field.title) {\n <h3 class=\"text-lg font-semibold text-slate-900\">{{ field.label || field.title }}</h3>\n }\n @if (field.hint) {\n <p class=\"mt-1 text-sm text-slate-500\">{{ field.hint }}</p>\n }\n </div>\n\n @if (getActions(field).length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of getActions(field); track action.id; let i = $index) {\n <ui-button\n [variant]=\"action.variant || (i === 0 ? 'primary' : 'ghost')\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"onFieldActionTriggered(field.id, action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n\n <div [ngClass]=\"getContainerContentClass(field)\">\n @for (child of field.fields; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: child }\"></ng-container>\n }\n </div>\n </section>\n }\n } @else if (isTemplateField(field)) {\n <div [ngClass]=\"resolveClassName(field.className)\" [innerHTML]=\"renderTemplate(field)\"></div>\n } @else {\n <div [ngClass]=\"getFieldClass(field)\">\n <field-input\n [field]=\"field\"\n [value]=\"modelSignal()[field.id]\"\n [model]=\"modelSignal()\"\n [disabled]=\"disabled || isFieldDisabled(field) || isLookupLoading(field.id)\"\n [error]=\"errors[field.id] ?? getLookupError(field.id)\"\n [visibleActions]=\"resolveFieldActions(field)\"\n (valueChange)=\"onFieldValueChange(field, $event)\"\n (actionTriggered)=\"onFieldActionTriggered(field.id, $event)\"\n (lookupRequested)=\"runBarcodeLookup(field)\"\n (barcodeScanned)=\"onBarcodeScanned(field, $event)\"\n (filesChange)=\"filesChange.emit({ fieldId: field.id, files: $event })\"\n (uploadingChange)=\"uploadingChange.emit($event)\"\n ></field-input>\n </div>\n }\n }\n </ng-template>\n\n @for (field of fields; track field.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: field }\"></ng-container>\n }\n\n @if (showSubmit) {\n <div class=\"flex justify-end md:col-span-12\">\n <button\n type=\"submit\"\n class=\"inline-flex items-center rounded-xl bg-slate-900 px-4 py-2 text-sm font-medium text-white transition hover:bg-slate-800 disabled:opacity-50\"\n [disabled]=\"disabled || !dynamicForm.form.valid\"\n >\n {{ submitLabel }}\n </button>\n </div>\n }\n</form>\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, OnChanges, SimpleChanges, computed, inject, input, output, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { UiButtonComponent, UiToastService } from '@maro-tech/core';\nimport { DynamicFormComponent } from '../dynamic/ui-dynamic-form.component';\nimport { ActionType, UiDynamicFormField, UiDynamicFormFieldAction, UiDynamicFormValue, flattenDynamicFormFields } from '../dynamic/ui-dynamic-form.models';\n\nexport interface MaroFormViewAction extends UiDynamicFormFieldAction {\n redirectTo?: string;\n}\n\nexport interface MaroFormViewResponse {\n meta?: { title?: string };\n title?: string;\n api?: string;\n defaults?: Record<string, unknown>;\n redirectTo?: string;\n fields: UiDynamicFormField[];\n actions?: MaroFormViewAction[];\n item?: Record<string, unknown> | null;\n}\n\n@Component({\n selector: 'form-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, DynamicFormComponent],\n templateUrl: './ui-form-modal.component.html',\n})\nexport class FormModalComponent implements OnChanges {\n readonly formId = input('');\n readonly recordId = input('');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly isOpen = input(false);\n readonly cancelLabel = input('Відмінити');\n readonly initialValue = input<Record<string, unknown>>({});\n\n readonly closed = output<void>();\n readonly completed = output<unknown>();\n readonly isLoading = signal(false);\n readonly isSubmitting = signal(false);\n readonly isActionRunning = signal(false);\n readonly isUploading = signal(false);\n readonly formConfig = signal<MaroFormViewResponse | null>(null);\n readonly formValue = signal<UiDynamicFormValue>({});\n readonly fields = computed(() => this.formConfig()?.fields ?? []);\n readonly submitAction = computed(() => this.formConfig()?.actions?.find((action) => this.isSubmitAction(action)));\n readonly submitLabel = computed(() => this.submitAction()?.submit || this.submitAction()?.label || 'Save');\n readonly panelClass = computed(() => ({\n 'max-w-xl': this.size() === 'sm',\n 'max-w-3xl': this.size() === 'md',\n 'max-w-6xl': this.size() === 'lg',\n }));\n\n private readonly http = inject(HttpClient);\n private readonly router = inject(Router);\n private readonly toast = inject(UiToastService);\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.isOpen() && ('isOpen' in changes || 'formId' in changes || 'recordId' in changes)) {\n this.loadForm();\n }\n }\n\n close(): void { this.closed.emit(); }\n\n onValueChange(value: UiDynamicFormValue): void { this.formValue.set(value); }\n\n onLookupCompleted(event: { fieldId: string; response: Record<string, unknown> }): void {\n const redirectTo = String(this.formConfig()?.redirectTo || '').trim();\n if (!redirectTo) return;\n\n const response = this.extractData(event.response) || event.response;\n const target = this.resolveTemplate(redirectTo, response);\n if (target && !target.includes('{{') && !target.includes(':')) {\n this.closed.emit();\n void this.router.navigateByUrl(target.startsWith('/') ? target : `/${target}`);\n }\n }\n\n onUploadingChange(uploading: boolean): void { this.isUploading.set(uploading); }\n\n onFieldActionTriggered(event: { fieldId: string; action: UiDynamicFormFieldAction }): void {\n if (this.isActionRunning() || this.isSubmitting()) return;\n\n const payload = this.normalizePayload({ ...this.formValue(), ...(event.action.payload || {}) });\n const endpoint = this.resolveTemplate(this.resolveEndpoint(event.action.api), payload);\n if (!endpoint) return;\n\n this.isActionRunning.set(true);\n this.http.request(this.resolveMethod(event.action.method), endpoint, { body: payload }).subscribe({\n next: (response) => {\n const data = this.extractData(response);\n if (data) this.formValue.update((current) => ({ ...current, ...data }) as UiDynamicFormValue);\n this.isActionRunning.set(false);\n },\n error: (error) => {\n this.isActionRunning.set(false);\n this.toast.show(error?.error?.message || 'Не вдалося виконати дію', 'error', 4000);\n },\n });\n }\n\n confirm(): void {\n if (this.isSubmitting() || this.isActionRunning() || this.isUploading()) return;\n\n const action = this.submitAction();\n const endpointTemplate = this.formConfig()?.api || action?.api;\n const endpoint = this.resolveEndpoint(endpointTemplate);\n if (!endpoint) return;\n\n const payload = this.normalizePayload({ ...(this.initialValue() || {}), ...(action?.payload || {}), ...this.formValue() });\n const missingFields = flattenDynamicFormFields(this.fields())\n .filter((field) => field.type !== 'container' && field.type !== 'template' && field.required && this.isEmptyValue(payload[field.id]))\n .map((field) => String(field.label || field.title || field.id));\n if (missingFields.length) {\n this.toast.show(`Заповніть обов’язкові поля: ${missingFields.join(', ')}`, 'warning', 4000);\n return;\n }\n\n const recordId = String(this.recordId() || '').trim();\n if (recordId && !Object.prototype.hasOwnProperty.call(payload, 'id')) payload['id'] = recordId;\n const resolvedEndpoint = this.resolveTemplate(endpoint, payload);\n if (!resolvedEndpoint || resolvedEndpoint.includes('{{')) return;\n\n this.isSubmitting.set(true);\n this.http.request(this.resolveMethod(action?.method || (recordId ? 'PATCH' : 'POST')), resolvedEndpoint, { body: payload }).subscribe({\n next: (response) => {\n this.isSubmitting.set(false);\n this.completed.emit(response);\n this.navigateAfterSubmit(response);\n this.close();\n },\n error: (error) => {\n this.isSubmitting.set(false);\n this.toast.show(error?.error?.message || 'Не вдалося відправити форму', 'error', 4000);\n },\n });\n }\n\n private loadForm(): void {\n const formId = String(this.formId() || '').trim();\n if (!formId) return;\n\n this.isLoading.set(true);\n const recordId = String(this.recordId() || '').trim();\n const endpoint = `/api/crud/form/${encodeURIComponent(formId)}${recordId ? `/${encodeURIComponent(recordId)}` : ''}`;\n this.http.get<{ form?: MaroFormViewResponse; data?: Record<string, unknown> | null }>(endpoint).subscribe({\n next: (response) => {\n const raw = response.form || (response as unknown as MaroFormViewResponse);\n const config: MaroFormViewResponse = {\n ...raw,\n title: raw.title || raw.meta?.title,\n actions: (raw.actions || []).map((action) => ({ ...action, type: this.normalizeActionType(action.type) })),\n };\n this.formConfig.set(config);\n this.formValue.set({ ...(config.defaults || {}), ...(config.item || {}), ...(this.initialValue() || {}), ...(recordId ? { id: recordId } : {}) });\n this.isLoading.set(false);\n },\n error: () => {\n this.formConfig.set(null);\n this.isLoading.set(false);\n },\n });\n }\n\n private resolveEndpoint(endpoint?: string): string {\n const value = String(endpoint || '').trim();\n if (!value) return '';\n if (/^https?:\\/\\//i.test(value) || value.startsWith('/api/')) return value;\n return `/api${value.startsWith('/') ? value : `/${value}`}`;\n }\n\n private normalizePayload(payload: Record<string, unknown>): Record<string, unknown> {\n for (const field of this.fields()) {\n if (field.type !== 'photo' || !field.multiple) continue;\n const value = payload[field.id];\n if (typeof value === 'string') payload[field.id] = value.split(',').map((item) => item.trim()).filter(Boolean);\n }\n return payload;\n }\n\n private isEmptyValue(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === 'string') return value.trim() === '';\n if (typeof value === 'number') return !Number.isFinite(value);\n return false;\n }\n\n private normalizeActionType(type?: string): ActionType {\n const normalized = String(type || '').trim().toLowerCase();\n if (normalized === 'api' || normalized === 'action_api') return 'ACTION_API';\n if (normalized === 'submit' || normalized === 'action_submit') return 'ACTION_SUBMIT';\n return String(type || '') as ActionType;\n }\n\n private isSubmitAction(action: MaroFormViewAction): boolean {\n const type = this.normalizeActionType(action.type);\n return type === 'ACTION_API' || type === 'ACTION_SUBMIT';\n }\n\n private resolveMethod(method?: string): 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' {\n return String(method || 'POST').toUpperCase() as 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n }\n\n private extractData(response: unknown): Record<string, unknown> | null {\n if (!response || typeof response !== 'object') return null;\n const value = (response as { data?: unknown }).data;\n return value && typeof value === 'object' ? value as Record<string, unknown> : response as Record<string, unknown>;\n }\n\n private navigateAfterSubmit(response: unknown): void {\n const redirect = this.formConfig()?.redirectTo || this.submitAction()?.redirectTo;\n if (!redirect) return;\n const data = this.extractData(response) || {};\n const target = this.resolveTemplate(redirect, data);\n if (target && !target.includes(':')) void this.router.navigateByUrl(target.startsWith('/') ? target : `/${target}`);\n }\n\n private resolveTemplate(template: string, data: Record<string, unknown>): string {\n return String(template || '').replace(/\\{\\{([a-zA-Z_][a-zA-Z0-9_.]*)\\}\\}|:([a-zA-Z_][a-zA-Z0-9_.]*)/g, (_match, bracesKey, colonKey) => {\n const key = String(bracesKey || colonKey || '');\n const value = key.split('.').reduce<unknown>((current, part) => current && typeof current === 'object' ? (current as Record<string, unknown>)[part] : undefined, data);\n return value == null || value === '' ? '' : encodeURIComponent(String(value));\n });\n }\n}\n","@if (isOpen()) {\n <div class=\"fixed inset-0 z-50 flex min-h-full items-center justify-center overflow-y-auto bg-slate-950/40 p-4 sm:p-6\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"my-0 flex min-h-0 max-h-[calc(100vh-2rem)] w-full flex-col overflow-hidden rounded-2xl bg-slate-50 shadow-2xl sm:max-h-[calc(100vh-3rem)]\" [ngClass]=\"panelClass()\">\n <div class=\"flex shrink-0 items-center justify-between border-b border-slate-200 bg-white px-5 py-4 sm:px-6\">\n <h2 class=\"text-lg font-semibold\">{{ formConfig()?.title || 'Form' }}</h2>\n <button type=\"button\" class=\"text-xl text-slate-400 hover:text-slate-900\" aria-label=\"Close\" (click)=\"close()\">×</button>\n </div>\n <div class=\"min-h-0 flex-1 overflow-y-auto p-4 sm:p-6\">\n @if (isLoading()) {\n <p class=\"text-sm text-slate-500\">Loading form…</p>\n } @else {\n <dynamic-form [fields]=\"fields()\" [value]=\"formValue()\" [disabled]=\"isLoading() || isSubmitting() || isActionRunning()\" [showSubmit]=\"false\" (valueChange)=\"onValueChange($event)\" (lookupCompleted)=\"onLookupCompleted($event)\" (uploadingChange)=\"onUploadingChange($event)\" (fieldActionTriggered)=\"onFieldActionTriggered($event)\"></dynamic-form>\n }\n </div>\n <div class=\"relative z-10 flex shrink-0 justify-end gap-3 border-t border-slate-200 bg-white px-5 py-4 sm:px-6\">\n <ui-button variant=\"ghost\" (click)=\"close()\">{{ cancelLabel() }}</ui-button>\n @if (submitAction()) { <ui-button variant=\"primary\" [disabled]=\"isLoading() || isSubmitting() || isUploading()\" (click)=\"confirm()\">{{ submitLabel() }}</ui-button> }\n </div>\n </div>\n </div>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-base-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" [type]=\"type\" [element]=\"element\" [rows]=\"rows\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputBaseControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() type = 'text'; @Input() element: 'input' | 'textarea' = 'input'; @Input() rows = 4; @Input() autocomplete?: string; @Input() pattern?: string; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputBaseControlComponent } from './ui-input-control.component';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-base',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputBaseControlComponent],\n templateUrl: './ui-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n ],\n})\nexport class InputComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() type = 'text';\n @Input() element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-${InputComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = this.type === 'number' ? (value === '' ? null : Number(value)) : value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-base-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [type]=\"type\" [element]=\"element\" [rows]=\"rows\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject } from '@angular/core';\nimport { Observable, of, map } from 'rxjs';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\n\nexport interface UiPhotoGalleryEntry {\n clientKey: string;\n imageId?: string;\n preview?: string;\n file?: File;\n isUploading?: boolean;\n}\n\n@Component({\n selector: 'input-photo-gallery',\n standalone: true,\n imports: [CommonModule, DragDropModule, FieldFrameComponent],\n templateUrl: './ui-photo-gallery-field.component.html',\n styles: [\n `\n .image-drag-item.cdk-drag-preview {\n transform: scale(1.03) rotate(0.6deg);\n box-shadow: 0 28px 60px rgba(15, 23, 42, 0.4);\n border-radius: 0.9rem;\n }\n\n .image-drag-item.cdk-drag-placeholder {\n opacity: 0.4;\n outline: 2px dashed #94a3b8;\n outline-offset: 4px;\n }\n `,\n ],\n})\nexport class InputPhotoGalleryComponent implements OnInit, OnChanges, OnDestroy {\n private readonly http = inject(HttpClient);\n @Input() label = 'Фото';\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() orderLabel = 'Порядок фото (перетягуй)';\n @Input() imageIds: string[] = [];\n @Input() disabled = false;\n @Input() afterUpload: ((imageId: string) => Observable<unknown>) | null = null;\n @Input() resolveImageUrl: ((imageId: string) => string) | null = null;\n @Input() notify: ((message: string, variant: 'success' | 'error' | 'warning', durationMs?: number) => void) | null = null;\n\n @Output() imageIdsChange = new EventEmitter<string[]>();\n\n entries: UiPhotoGalleryEntry[] = [];\n private imageEntrySequence = 0;\n\n get photoCount(): number {\n return this.entries.filter((entry) => !!entry.imageId || !!entry.file).length;\n }\n\n ngOnInit(): void {\n if (!this.entries.length) this.entries = this.normalizeImageEntries([]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['imageIds']) return;\n const nextIds = this.imageIds ?? [];\n const currentIds = this.entries.filter((entry) => !!entry.imageId).map((entry) => entry.imageId!);\n const hasPendingLocalFiles = this.entries.some((entry) => !!entry.file || !!entry.isUploading);\n const sameIds = nextIds.length === currentIds.length && nextIds.every((id, idx) => id === currentIds[idx]);\n if (sameIds || hasPendingLocalFiles) return;\n this.entries = this.normalizeImageEntries(nextIds.map((imageId) => ({\n clientKey: imageId,\n imageId,\n preview: this.resolveImageUrl?.(imageId) || '',\n })));\n }\n\n ngOnDestroy(): void {\n this.entries.forEach((entry) => {\n if (entry.file && entry.preview) URL.revokeObjectURL(entry.preview);\n });\n }\n\n onFilesChange(event: Event, index: number): void {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n if (this.disabled || !files.length) return;\n const next = [...this.entries];\n const baseIndex = Math.max(0, Math.min(index, next.length - 1));\n files.forEach((file, offset) => {\n const targetIndex = baseIndex + offset;\n const existing = next[targetIndex];\n if (existing?.file && existing.preview) URL.revokeObjectURL(existing.preview);\n next[targetIndex] = {\n clientKey: existing?.clientKey ?? `local-${this.imageEntrySequence++}`,\n file,\n imageId: existing?.imageId,\n preview: URL.createObjectURL(file),\n };\n });\n this.entries = this.normalizeImageEntries(next);\n this.uploadPendingImages();\n input.value = '';\n }\n\n openFilePicker(input: HTMLInputElement | null, event?: MouseEvent): void {\n event?.preventDefault();\n event?.stopPropagation();\n if (!this.disabled && input) input.click();\n }\n\n onDrop(event: CdkDragDrop<UiPhotoGalleryEntry[]>): void {\n if (this.disabled) return;\n const next = [...this.entries];\n const nonEmptyCount = next.filter((entry) => entry.imageId || entry.file).length;\n if (event.previousIndex >= nonEmptyCount || event.currentIndex >= nonEmptyCount) {\n this.entries = this.normalizeImageEntries(next);\n return;\n }\n moveItemInArray(next, event.previousIndex, event.currentIndex);\n this.entries = this.normalizeImageEntries(next);\n this.emitImageIds();\n }\n\n removeAt(index: number): void {\n if (this.disabled || index < 0 || index >= this.entries.length) return;\n const next = [...this.entries];\n const [removed] = next.splice(index, 1);\n if (removed?.file && removed.preview) URL.revokeObjectURL(removed.preview);\n this.entries = this.normalizeImageEntries(next);\n this.emitImageIds();\n }\n\n private createImageEntry(): UiPhotoGalleryEntry {\n return { clientKey: `local-${this.imageEntrySequence++}` };\n }\n\n private normalizeImageEntries(entries: UiPhotoGalleryEntry[]): UiPhotoGalleryEntry[] {\n const nonEmpty = entries.filter((entry) => !!entry?.imageId || !!entry?.file);\n return nonEmpty.length ? [...nonEmpty, this.createImageEntry()] : [this.createImageEntry()];\n }\n\n private emitImageIds(): void {\n this.imageIdsChange.emit(this.entries.filter((entry) => !!entry.imageId).map((entry) => entry.imageId!));\n }\n\n private uploadPendingImages(): void {\n const nextIndex = this.entries.findIndex((entry) => !!entry.file && !entry.isUploading);\n if (nextIndex < 0) return;\n const entry = this.entries[nextIndex];\n entry.isUploading = true;\n const file = entry.file!;\n this.uploadFile(file).subscribe({\n next: (response) => {\n const persist$ = this.afterUpload ? this.afterUpload(response.imageId) : of(null);\n persist$.subscribe({\n next: () => {\n entry.imageId = response.imageId;\n entry.file = undefined;\n entry.isUploading = undefined;\n entry.preview = this.resolveImageUrl?.(response.imageId) || entry.preview;\n this.entries = this.normalizeImageEntries([...this.entries]);\n this.emitImageIds();\n this.notify?.('Фото завантажено', 'success', 2000);\n this.uploadPendingImages();\n },\n error: (error) => {\n entry.isUploading = undefined;\n this.notify?.(error?.error?.message || 'Не вдалося привʼязати фото', 'error', 3500);\n this.uploadPendingImages();\n },\n });\n },\n error: (error) => {\n entry.isUploading = undefined;\n this.notify?.(error?.error?.message || 'Не вдалося завантажити фото', 'error', 3500);\n this.uploadPendingImages();\n },\n });\n }\n\n private uploadFile(file: File): Observable<{ imageId: string }> {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post<{ id: string }>('/api/files/', formData).pipe(\n map((response) => ({ imageId: response.id })),\n );\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <p class=\"mb-2 text-xs uppercase tracking-[0.2em] text-slate-500\">{{ orderLabel }}</p>\n <div data-field-control class=\"grid gap-3 md:grid-cols-4\" cdkDropList [cdkDropListData]=\"entries\" (cdkDropListDropped)=\"onDrop($event)\">\n @for (entry of entries; let i = $index; track entry.clientKey + '-' + i) {\n <div class=\"image-drag-item relative overflow-hidden rounded-xl border border-slate-200 bg-white\" cdkDrag [cdkDragDisabled]=\"disabled || (!entry.imageId && !entry.file)\">\n <label class=\"block h-full w-full cursor-pointer\">\n @if (entry.preview) {\n <img [src]=\"entry.preview\" alt=\"photo\" class=\"h-48 w-full object-cover\" />\n } @else {\n <button type=\"button\" class=\"flex h-48 w-full items-center justify-center bg-slate-50 text-xs text-slate-500\" (click)=\"openFilePicker(fileInput, $event)\">+ Додати фото</button>\n }\n <input #fileInput type=\"file\" class=\"hidden\" [disabled]=\"disabled\" multiple (change)=\"onFilesChange($event, i)\" />\n </label>\n @if (entry.imageId || entry.file) {\n @if (i === 0) {\n <span class=\"absolute left-2 top-2 rounded-full border border-slate-200 bg-white/95 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.15em] text-slate-700\">Обкладинка</span>\n }\n <span class=\"absolute left-2 bottom-2 rounded-full bg-slate-900/85 px-2 py-1 text-[10px] font-semibold text-white\">#{{ i + 1 }}</span>\n <button type=\"button\" class=\"absolute right-2 top-2 rounded-full bg-white/95 px-2 py-1 text-xs text-rose-600 shadow\" [disabled]=\"disabled\" (click)=\"removeAt(i)\">Видалити</button>\n }\n </div>\n }\n </div>\n <div class=\"mt-1 text-xs text-slate-500\">Кількість фото: {{ photoCount }}</div>\n</field-frame>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\n\n@Component({\n selector: 'input-range-slider',\n standalone: true,\n imports: [CommonModule, FieldFrameComponent],\n template: `\n <field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <div class=\"range-slider\">\n <div class=\"range-slider__track\"></div>\n <div\n class=\"range-slider__range\"\n [style.left.%]=\"startPercent\"\n [style.width.%]=\"rangePercent\">\n </div>\n\n <input\n #startInput\n data-field-control\n class=\"range-slider__input\"\n type=\"range\"\n [min]=\"safeMin\"\n [max]=\"safeMax\"\n [step]=\"safeStep\"\n [value]=\"safeStart\"\n [attr.aria-label]=\"startLabel\"\n (input)=\"onStartInput($event)\"\n (change)=\"interactionEnd.emit()\">\n\n <input\n #endInput\n data-field-control\n class=\"range-slider__input\"\n type=\"range\"\n [min]=\"safeMin\"\n [max]=\"safeMax\"\n [step]=\"safeStep\"\n [value]=\"safeEnd\"\n [attr.aria-label]=\"endLabel\"\n (input)=\"onEndInput($event)\"\n (change)=\"interactionEnd.emit()\">\n </div>\n </field-frame>\n `,\n styles: [`\n .range-slider {\n position: relative;\n height: 2rem;\n width: 100%;\n display: flex;\n align-items: center;\n }\n\n .range-slider__track,\n .range-slider__range {\n position: absolute;\n left: 0;\n right: 0;\n height: 6px;\n border-radius: 999px;\n }\n\n .range-slider__track {\n background: #dbe1ea;\n }\n\n .range-slider__range {\n background: linear-gradient(90deg, #334155 0%, #0f172a 100%);\n }\n\n .range-slider__input {\n pointer-events: none;\n position: absolute;\n left: 0;\n width: 100%;\n height: 2rem;\n margin: 0;\n background: transparent;\n appearance: none;\n -webkit-appearance: none;\n }\n\n .range-slider__input::-webkit-slider-runnable-track {\n height: 6px;\n background: transparent;\n }\n\n .range-slider__input::-moz-range-track {\n height: 6px;\n background: transparent;\n }\n\n .range-slider__input::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n pointer-events: auto;\n width: 20px;\n height: 20px;\n margin-top: -7px;\n border-radius: 50%;\n border: 2px solid #ffffff;\n background: #0f172a;\n box-shadow: 0 8px 22px rgba(15, 23, 42, 0.22);\n cursor: pointer;\n }\n\n .range-slider__input::-moz-range-thumb {\n pointer-events: auto;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 2px solid #ffffff;\n background: #0f172a;\n box-shadow: 0 8px 22px rgba(15, 23, 42, 0.22);\n cursor: pointer;\n }\n `]\n})\nexport class InputRangeSliderComponent implements OnChanges, AfterViewInit {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() startValue: number | null = null;\n @Input() endValue: number | null = null;\n @Input() startLabel = 'Мінімальне значення';\n @Input() endLabel = 'Максимальне значення';\n @Output() startValueChange = new EventEmitter<number>();\n @Output() endValueChange = new EventEmitter<number>();\n @Output() interactionEnd = new EventEmitter<void>();\n\n @ViewChild('startInput') private startInput?: ElementRef<HTMLInputElement>;\n @ViewChild('endInput') private endInput?: ElementRef<HTMLInputElement>;\n\n get safeStart(): number {\n const min = this.safeMin;\n const max = this.safeMax;\n const step = this.safeStep;\n const start = this.toFiniteNumber(this.startValue, min);\n const end = this.toFiniteNumber(this.endValue, max);\n return Math.max(min, Math.min(start, end - step));\n }\n\n get safeEnd(): number {\n const min = this.safeMin;\n const max = this.safeMax;\n const step = this.safeStep;\n const start = this.toFiniteNumber(this.startValue, min);\n const end = this.toFiniteNumber(this.endValue, max);\n return Math.min(max, Math.max(end, start + step));\n }\n\n get startPercent(): number {\n return this.toPercent(this.safeStart);\n }\n\n get endPercent(): number {\n return this.toPercent(this.safeEnd);\n }\n\n get rangePercent(): number {\n return Math.max(0, this.endPercent - this.startPercent);\n }\n\n get safeMin(): number {\n return this.toFiniteNumber(this.min, 0);\n }\n\n get safeMax(): number {\n const min = this.safeMin;\n const max = this.toFiniteNumber(this.max, min + this.safeStep);\n return max > min ? max : min + this.safeStep;\n }\n\n get safeStep(): number {\n const step = this.toFiniteNumber(this.step, 1);\n return step > 0 ? step : 1;\n }\n\n ngOnChanges(_: SimpleChanges): void {\n this.syncNativeInputs();\n }\n\n ngAfterViewInit(): void {\n this.syncNativeInputs();\n }\n\n onStartInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value);\n this.startValueChange.emit(Math.min(value, this.safeEnd - this.safeStep));\n }\n\n onEndInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value);\n this.endValueChange.emit(Math.max(value, this.safeStart + this.safeStep));\n }\n\n private toPercent(value: number): number {\n const span = this.safeMax - this.safeMin;\n if (span <= 0) {\n return 0;\n }\n return ((value - this.safeMin) / span) * 100;\n }\n\n private toFiniteNumber(value: number | null | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n }\n\n private syncNativeInputs(): void {\n queueMicrotask(() => {\n this.syncNativeInput(this.startInput?.nativeElement, this.safeStart);\n this.syncNativeInput(this.endInput?.nativeElement, this.safeEnd);\n });\n }\n\n private syncNativeInput(input: HTMLInputElement | undefined, value: number): void {\n if (!input) {\n return;\n }\n input.min = String(this.safeMin);\n input.max = String(this.safeMax);\n input.step = String(this.safeStep);\n input.value = String(value);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"maro-tech-form.mjs","sources":["../../../src/lib/context/form-context.service.ts","../../../src/lib/forms-api.service.ts","../../../src/lib/dynamic/ui-dynamic-form.models.ts","../../../src/lib/dynamic/form-lookup.service.ts","../../../src/lib/inputs/field-frame/ui-field-frame.component.ts","../../../src/lib/inputs/field-frame/ui-field-frame.component.html","../../../src/lib/inputs/text/ui-text-input-control.component.ts","../../../src/lib/inputs/text/ui-text-input-control.component.html","../../../src/lib/inputs/barcode/ui-barcode-scanner-input.component.ts","../../../src/lib/inputs/barcode/ui-barcode-scanner-input.wrapper.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input-control.component.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.html","../../../src/lib/inputs/form-control.validator.ts","../../../src/lib/inputs/color/ui-color-input-control.component.ts","../../../src/lib/inputs/color/ui-color-input.component.ts","../../../src/lib/inputs/color/ui-color-input.component.html","../../../src/lib/popup/ui-popup.service.ts","../../../src/lib/inputs/date/ui-date-input.component.ts","../../../src/lib/inputs/date/ui-date-input.component.html","../../../src/lib/inputs/date/ui-date-input.component.wrapper.ts","../../../src/lib/inputs/date/ui-date-input.component.wrapper.html","../../../src/lib/inputs/datetime/ui-datetime-input.component.ts","../../../src/lib/inputs/datetime/ui-datetime-input.component.html","../../../src/lib/inputs/datetime/ui-datetime-input.component.wrapper.ts","../../../src/lib/inputs/datetime/ui-datetime-input.component.wrapper.html","../../../src/lib/inputs/email/ui-email-input-control.component.ts","../../../src/lib/inputs/email/ui-email-input.component.ts","../../../src/lib/inputs/email/ui-email-input.component.html","../../../src/lib/inputs/number/ui-number-input-control.component.ts","../../../src/lib/inputs/number/ui-number-input.component.ts","../../../src/lib/inputs/number/ui-number-input.component.html","../../../src/lib/inputs/password/ui-password-input-control.component.ts","../../../src/lib/inputs/password/ui-password-input.component.ts","../../../src/lib/inputs/password/ui-password-input.component.html","../../../src/lib/inputs/text/ui-text-input.component.ts","../../../src/lib/inputs/text/ui-text-input.component.html","../../../src/lib/inputs/textarea/ui-textarea-input-control.component.ts","../../../src/lib/inputs/textarea/ui-textarea-input.component.ts","../../../src/lib/inputs/textarea/ui-textarea-input.component.html","../../../src/lib/inputs/file/ui-file-input-control.component.ts","../../../src/lib/inputs/file/ui-file-input-control.component.html","../../../src/lib/inputs/file/ui-file-input.component.ts","../../../src/lib/inputs/file/ui-file-input.component.html","../../../src/lib/inputs/photo/ui-photo-input-control.component.ts","../../../src/lib/inputs/photo/ui-photo-input-control.component.html","../../../src/lib/inputs/photo/ui-photo-input.component.ts","../../../src/lib/inputs/photo/ui-photo-input.component.html","../../../src/lib/inputs/select/ui-select.component.ts","../../../src/lib/inputs/select/ui-select.component.html","../../../src/lib/inputs/select/ui-select-input.component.ts","../../../src/lib/inputs/select/ui-select-input.component.html","../../../src/lib/inputs/slug/ui-slug-input-control.component.ts","../../../src/lib/inputs/slug/ui-slug-input.component.ts","../../../src/lib/inputs/slug/ui-slug-input.component.html","../../../src/lib/inputs/form-input.registry.ts","../../../src/lib/inputs/form-input-host.component.ts","../../../src/lib/dynamic/form-condition.parser.ts","../../../src/lib/dynamic/ui-dynamic-form.component.ts","../../../src/lib/dynamic/ui-dynamic-form.component.html","../../../src/lib/form/ui-form-modal.component.ts","../../../src/lib/form/ui-form-modal.component.html","../../../src/lib/inputs/input/ui-input-control.component.ts","../../../src/lib/inputs/input/ui-input.component.ts","../../../src/lib/inputs/input/ui-input.component.html","../../../src/lib/inputs/photo-gallery/ui-photo-gallery-field.component.ts","../../../src/lib/inputs/photo-gallery/ui-photo-gallery-field.component.html","../../../src/lib/inputs/range-slider/ui-range-slider.component.ts","../../../src/maro-tech-form.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { UiFormErrors, UiFormValue } from './form.models';\n\n@Injectable()\nexport class UiFormContext {\n readonly value = signal<UiFormValue>({});\n readonly errors = signal<UiFormErrors>({});\n readonly loading = signal(false);\n readonly disabled = signal(false);\n\n setValue(value: UiFormValue): void {\n this.value.set({ ...value });\n }\n\n patchValue(value: UiFormValue): void {\n this.value.update((current) => ({ ...current, ...value }));\n }\n\n setErrors(errors: UiFormErrors): void {\n this.errors.set({ ...errors });\n }\n\n reset(value: UiFormValue = {}): void {\n this.value.set({ ...value });\n this.errors.set({});\n this.loading.set(false);\n }\n}\n\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MaroFormsApiService {\n private readonly http = inject(HttpClient);\n\n getSuggestByName(name: string, query = ''): Observable<Array<Record<string, unknown>>> {\n const suffix = query ? `?q=${encodeURIComponent(query)}` : '';\n return this.http.get<Array<Record<string, unknown>>>(`/api/suggest/${encodeURIComponent(name)}${suffix}`);\n }\n}\n","import { UiSelectOption } from '../inputs/select/ui-select.component';\n\nexport type ApiPluginMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\nexport const ACTION_PRINT = 'ACTION_PRINT' as const;\nexport const ACTION_FORM = 'ACTION_FORM' as const;\nexport const ACTION_API = 'ACTION_API' as const;\nexport const ACTION_SUBMIT = 'ACTION_SUBMIT' as const;\nexport type ActionType = typeof ACTION_PRINT | typeof ACTION_FORM | typeof ACTION_API | typeof ACTION_SUBMIT;\n\nexport type UiDynamicFieldType =\n | 'text'\n | 'number'\n | 'date'\n | 'datetime'\n | 'email'\n | 'password'\n | 'textarea'\n | 'select'\n | 'barcode'\n | 'checkbox'\n | 'color'\n | 'range'\n | 'slug'\n | 'file'\n | 'photo'\n | 'container'\n | 'template';\n\nexport interface UiDynamicFormFieldAction {\n id: string;\n type: ActionType;\n label: string;\n icon?: string;\n formId?: string;\n size?: 'sm' | 'md' | 'lg';\n api?: string;\n method?: ApiPluginMethod;\n title?: string;\n text?: string;\n submit?: boolean | string;\n payload?: Record<string, unknown>;\n condition?: string;\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger';\n}\n\nexport interface UiDynamicFormCommonField {\n id: string;\n label?: string;\n title?: string;\n placeholder?: string;\n hint?: string;\n required?: boolean;\n disabled?: boolean;\n col?: number;\n hidden?: boolean | string;\n default?: string | number | boolean | string[] | null;\n actions?: UiDynamicFormFieldAction[];\n className?: string;\n}\n\nexport interface UiDynamicFormTextField extends UiDynamicFormCommonField {\n type?: Exclude<UiDynamicFieldType, 'select' | 'barcode' | 'checkbox' | 'color' | 'range' | 'file' | 'photo' | 'container' | 'template'>;\n rows?: number;\n pattern?: string;\n}\n\nexport interface UiDynamicFormSelectField extends UiDynamicFormCommonField {\n type: 'select';\n data?: string;\n dataParams?: Record<string, string>;\n options?: UiSelectOption[];\n searchable?: boolean;\n multiple?: boolean;\n lookupApi?: string;\n lookupMap?: Record<string, string>;\n lookupErrorField?: string;\n}\n\nexport interface UiDynamicFormFileField extends UiDynamicFormCommonField {\n type: 'file';\n accept?: string;\n multiple?: boolean;\n}\n\nexport interface UiDynamicFormPhotoField extends UiDynamicFormCommonField {\n type: 'photo';\n accept?: string;\n multiple?: boolean;\n limit?: number;\n}\n\nexport interface UiDynamicFormBarcodeField extends UiDynamicFormCommonField {\n type: 'barcode';\n lookupApi?: string;\n lookupMap?: Record<string, string>;\n lookupErrorField?: string;\n}\n\nexport interface UiDynamicFormCheckboxField extends UiDynamicFormCommonField {\n type: 'checkbox';\n}\n\nexport interface UiDynamicFormColorField extends UiDynamicFormCommonField {\n type: 'color';\n}\n\nexport interface UiDynamicFormRangeField extends UiDynamicFormCommonField {\n type: 'range';\n}\n\nexport interface UiDynamicFormContainerField extends UiDynamicFormCommonField {\n type: 'container';\n fields: UiDynamicFormField[];\n layout?: 'grid' | 'stack';\n title?: string;\n hint?: string;\n contentClassName?: string;\n tag?: 'div' | 'section' | 'aside' | 'fieldset';\n}\n\nexport interface UiDynamicFormTemplateField extends UiDynamicFormCommonField {\n type: 'template';\n template: string;\n templateContext?: Record<string, unknown>;\n tag?: 'div' | 'section' | 'aside' | 'fieldset';\n}\n\nexport type UiDynamicFormField =\n | UiDynamicFormTextField\n | UiDynamicFormSelectField\n | UiDynamicFormFileField\n | UiDynamicFormPhotoField\n | UiDynamicFormBarcodeField\n | UiDynamicFormCheckboxField\n | UiDynamicFormColorField\n | UiDynamicFormRangeField\n | UiDynamicFormContainerField\n | UiDynamicFormTemplateField;\n\nexport type UiDynamicFormValue = Record<string, string | number | boolean | string[] | File | File[] | null | undefined>;\n\nexport const isDynamicFormContainerField = (field: UiDynamicFormField): field is UiDynamicFormContainerField =>\n field.type === 'container';\n\nexport const isDynamicFormTemplateField = (field: UiDynamicFormField): field is UiDynamicFormTemplateField =>\n field.type === 'template';\n\nexport const isDynamicFormLookupField = (\n field: UiDynamicFormField,\n): field is UiDynamicFormSelectField | UiDynamicFormBarcodeField =>\n field.type === 'select' || field.type === 'barcode';\n\nexport const flattenDynamicFormFields = (fields: UiDynamicFormField[]): UiDynamicFormField[] => {\n const result: UiDynamicFormField[] = [];\n\n for (const field of fields || []) {\n if (!field) {\n continue;\n }\n\n result.push(field);\n\n if (isDynamicFormContainerField(field) && Array.isArray(field.fields) && field.fields.length) {\n result.push(...flattenDynamicFormFields(field.fields));\n }\n }\n\n return result;\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { UiDynamicFormField, isDynamicFormLookupField } from './ui-dynamic-form.models';\n\n@Injectable()\nexport class UiFormLookupService {\n private readonly http = inject(HttpClient);\n\n lookup(field: UiDynamicFormField, value: string): Observable<Record<string, unknown>> {\n if (!isDynamicFormLookupField(field)) {\n return throwError(() => new Error('Lookup is not supported for this field type'));\n }\n const api = String(field.lookupApi || '').trim();\n const endpoint = api\n .replace(/:value/g, encodeURIComponent(value))\n .replace(new RegExp(`:${field.id}\\\\b`, 'g'), encodeURIComponent(value));\n if (/^https?:\\/\\//i.test(endpoint)) {\n return this.http.get<Record<string, unknown>>(endpoint);\n }\n const path = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n const requestUrl = path.startsWith('/api/') || path === '/api'\n ? path\n : `/api${path}`;\n return this.http.get<Record<string, unknown>>(requestUrl);\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\n@Component({\n selector: 'field-frame',\n standalone: true,\n imports: [CommonModule, UiButtonComponent],\n templateUrl: './ui-field-frame.component.html',\n styles: [\n ':host(.field-error) ::ng-deep [data-field-control] { border-color: rgb(252 165 165); box-shadow: 0 0 0 2px rgb(254 226 226); }',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FieldFrameComponent {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() forId?: string;\n @Input() disabled = false;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n @HostBinding('class.field-error')\n get hasError(): boolean {\n return !!String(this.error || '').trim();\n }\n\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n}\n","<div class=\"relative w-full flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\">\n @if (label) {\n <label class=\"text-[0.7rem] font-semibold text-slate-600\" [attr.for]=\"forId\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </label>\n }\n\n <div class=\"flex items-end gap-2\">\n <div class=\"min-w-0 flex-1\">\n <ng-content />\n </div>\n\n @if (actions.length) {\n <div class=\"flex flex-none items-center gap-2 pb-0.5\">\n @for (action of actions; track action.id) {\n <ui-button\n type=\"button\"\n [variant]=\"action.variant ?? 'secondary'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"actionTriggered.emit(action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </div>\n\n @if (hint) {\n <p class=\"text-[0.5rem] text-slate-500\">{{ hint }}</p>\n }\n @if (error) {\n <p class=\"absolute left-0 top-full z-10 mt-1 text-[0.5rem] text-red-500\">{{ error }}</p>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'input-text-control',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-text-input-control.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputTextControlComponent {\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() type = 'text';\n @Input() element: 'input' | 'textarea' = 'input';\n @Input() rows = 4;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() disabled = false;\n @Input() value: string | number | null = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n @Output() enterPressed = new EventEmitter<void>();\n}\n","@if (element === 'textarea') {\n <textarea\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.id]=\"id\"\n [disabled]=\"disabled\"\n data-field-control\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [value]=\"value\"\n (input)=\"valueChange.emit($any($event.target).value)\"\n (keydown.enter)=\"enterPressed.emit()\"\n (blur)=\"touched.emit()\"\n ></textarea>\n} @else {\n <input\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [disabled]=\"disabled\"\n data-field-control\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [attr.id]=\"id\"\n [value]=\"value\"\n (input)=\"valueChange.emit($any($event.target).value)\"\n (keydown.enter)=\"enterPressed.emit()\"\n (blur)=\"touched.emit()\"\n />\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Camera, CameraOff } from 'lucide-angular';\nimport { BrowserMultiFormatOneDReader, type IScannerControls } from '@zxing/browser';\nimport { BarcodeFormat, DecodeHintType } from '@zxing/library';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\ntype NativeBarcodeDetector = {\n detect(source: HTMLVideoElement): Promise<Array<{ rawValue?: string }>>;\n};\n\ntype NativeBarcodeDetectorConstructor = {\n new (options?: { formats?: string[] }): NativeBarcodeDetector;\n getSupportedFormats?: () => Promise<string[]>;\n};\n\n@Component({\n selector: 'input-barcode-control',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, InputTextControlComponent],\n template: `\n\n <div class=\"relative flex items-start gap-2\">\n <div class=\"min-w-0 flex-1\">\n <input-text-control\n id=\"barcode-scanner-input\"\n type=\"text\"\n autocomplete=\"off\"\n [disabled]=\"disabled()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n (valueChange)=\"onValueChange($event)\"\n (enterPressed)=\"requestSearch()\"\n />\n </div>\n\n <div class=\"mt-0.5 flex flex-row flex-wrap items-center gap-2\">\n <ui-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"disabled()\"\n (click)=\"requestSearch()\"\n >\n Знайти\n </ui-button>\n <ui-button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [icon]=\"isCameraOpen() ? cameraOffIcon : cameraIcon\"\n [ariaLabel]=\"isCameraOpen() ? 'Закрити камеру' : 'Відкрити камеру'\"\n [disabled]=\"disabled() || isCameraStarting()\"\n (click)=\"isCameraOpen() ? closeCamera() : openCamera()\"\n ></ui-button>\n </div>\n </div>\n\n @if (hint()) {\n <p class=\"mt-2 text-[0.5rem] text-slate-500\">{{ hint() }}</p>\n }\n @if (isCameraStarting()) {\n <div class=\"rounded-xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm text-slate-500\">\n Запускаємо камеру…\n </div>\n }\n\n @if (isCameraOpen()) {\n <section class=\"mt-3 space-y-3 rounded-3xl border border-slate-200 bg-slate-950 p-3 text-white\">\n <div class=\"flex items-center justify-between gap-3\">\n <div>\n <p class=\"text-xs font-semibold uppercase tracking-[0.22em] text-slate-300\">Камера</p>\n <p class=\"text-sm text-slate-200\">{{ cameraStatus() }}</p>\n </div>\n <button\n type=\"button\"\n class=\"rounded-full border border-slate-700 px-3 py-1 text-xs font-semibold text-slate-200 transition hover:border-slate-500 hover:text-white\"\n (click)=\"closeCamera()\"\n >\n Закрити камеру\n </button>\n </div>\n\n <div class=\"overflow-hidden rounded-xl bg-black\">\n <video #cameraVideo class=\"h-[260px] w-full object-cover\" autoplay muted playsinline></video>\n </div>\n\n <p class=\"text-xs text-slate-300\">\n Наведіть камеру на штрихкод.\n </p>\n </section>\n }\n\n @if (cameraError()) {\n <div class=\"rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\">\n {{ cameraError() }}\n </div>\n }\n\n `,\n})\nexport class InputBarcodeControlComponent implements OnChanges, AfterViewInit, OnDestroy {\n readonly cameraIcon = Camera;\n readonly cameraOffIcon = CameraOff;\n\n readonly value = input('');\n readonly label = input('Штрихкод');\n readonly placeholder = input('Відскануйте або введіть штрихкод');\n readonly hint = input('Сканер може просто ввести код і натиснути Enter.');\n readonly error = input('');\n readonly required = input(false);\n readonly disabled = input(false);\n\n readonly valueChange = output<string>();\n readonly scanned = output<string>();\n readonly searchRequested = output<void>();\n readonly cameraStateChange = output<'idle' | 'starting' | 'open' | 'error'>();\n\n readonly isCameraOpen = signal(false);\n readonly isCameraStarting = signal(false);\n readonly cameraError = signal('');\n readonly cameraStatus = signal('Камеру не відкрито');\n\n @ViewChild('cameraVideo') private cameraVideo?: ElementRef<HTMLVideoElement>;\n\n private readonly barcodeReader = new BrowserMultiFormatOneDReader(\n new Map([[DecodeHintType.POSSIBLE_FORMATS, [BarcodeFormat.CODE_128]]]),\n {\n delayBetweenScanAttempts: 75,\n delayBetweenScanSuccess: 250,\n tryPlayVideoTimeout: 5000,\n }\n );\n private nativeBarcodeDetector: NativeBarcodeDetector | null = null;\n private cameraControls: IScannerControls | null = null;\n private cameraStream: MediaStream | null = null;\n private scanLoopId: number | null = null;\n private autoOpenQueued = false;\n private autoOpenAttempted = false;\n private openToken = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['disabled']?.currentValue === true) {\n this.stopCamera();\n this.autoOpenQueued = false;\n return;\n }\n\n if (!this.disabled()) this.scheduleAutoOpen();\n }\n\n ngAfterViewInit(): void {\n this.scheduleAutoOpen();\n }\n\n ngOnDestroy(): void {\n this.stopCamera();\n }\n\n onValueChange(nextValue: string): void {\n this.valueChange.emit(String(nextValue ?? ''));\n }\n\n requestSearch(): void {\n this.searchRequested.emit();\n }\n\n async openCamera(): Promise<void> {\n if (this.disabled() || this.isCameraStarting() || this.isCameraOpen()) {\n return;\n }\n\n // The value emitted by a successful scan updates the parent form and\n // triggers ngOnChanges. Do not treat that value update as a request to\n // start the camera again after it has already been opened once.\n this.autoOpenAttempted = true;\n this.cameraError.set('');\n this.cameraStatus.set('Запускаємо камеру…');\n this.isCameraStarting.set(true);\n this.cameraStateChange.emit('starting');\n this.isCameraOpen.set(true);\n const token = ++this.openToken;\n\n try {\n await new Promise<void>((resolve) => {\n window.requestAnimationFrame(() => resolve());\n });\n\n if (token !== this.openToken) {\n return;\n }\n\n const video = this.cameraVideo?.nativeElement;\n if (!video) {\n throw new Error('Не вдалося підготувати камеру');\n }\n\n if (await this.tryOpenNativeCamera(token, video)) {\n this.isCameraOpen.set(true);\n this.cameraStatus.set('Камера відкрита, наведіть на штрихкод');\n this.cameraStateChange.emit('open');\n return;\n }\n\n await this.openZxingCamera(token, video);\n\n if (token !== this.openToken) {\n this.cameraControls?.stop();\n this.cameraControls = null;\n return;\n }\n\n this.isCameraOpen.set(true);\n this.cameraStatus.set('Камера відкрита, наведіть на штрихкод');\n this.cameraStateChange.emit('open');\n } catch (error: any) {\n if (token !== this.openToken) {\n return;\n }\n\n this.cameraError.set(error?.message || 'Не вдалося відкрити камеру');\n this.cameraStatus.set('Камеру не відкрито');\n this.cameraStateChange.emit('error');\n this.stopCamera();\n } finally {\n if (token === this.openToken) {\n this.isCameraStarting.set(false);\n }\n }\n }\n\n closeCamera(): void {\n this.stopCamera();\n }\n\n private scheduleAutoOpen(): void {\n if (typeof window === 'undefined' || this.disabled() || this.autoOpenAttempted || this.isCameraOpen() || this.isCameraStarting() || this.autoOpenQueued) {\n return;\n }\n\n this.autoOpenQueued = true;\n window.requestAnimationFrame(() => {\n this.autoOpenQueued = false;\n if (this.disabled() || this.autoOpenAttempted || this.isCameraOpen() || this.isCameraStarting()) {\n return;\n }\n\n void this.openCamera();\n });\n }\n\n private onBarcodeDetected(value: string): void {\n this.valueChange.emit(value);\n this.scanned.emit(value);\n this.cameraStatus.set('Штрихкод знайдено');\n this.cameraControls?.stop();\n this.cameraControls = null;\n this.stopCamera();\n }\n\n private stopCamera(): void {\n this.openToken += 1;\n if (this.scanLoopId != null) {\n window.cancelAnimationFrame(this.scanLoopId);\n this.scanLoopId = null;\n }\n\n this.cameraControls?.stop();\n this.cameraControls = null;\n\n if (this.cameraStream) {\n for (const track of this.cameraStream.getTracks()) {\n track.stop();\n }\n this.cameraStream = null;\n }\n\n const video = this.cameraVideo?.nativeElement;\n if (video) {\n video.pause();\n video.srcObject = null;\n }\n\n this.nativeBarcodeDetector = null;\n this.isCameraOpen.set(false);\n this.isCameraStarting.set(false);\n this.cameraStateChange.emit(this.cameraError() ? 'error' : 'idle');\n if (!this.cameraError()) {\n this.cameraStatus.set('Камеру зупинено');\n }\n }\n\n private async tryOpenNativeCamera(token: number, video: HTMLVideoElement): Promise<boolean> {\n const detector = await this.createNativeBarcodeDetector();\n if (!detector) {\n return false;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: false,\n video: {\n facingMode: { ideal: 'environment' },\n width: { ideal: 1280 },\n height: { ideal: 720 },\n },\n });\n\n if (token !== this.openToken) {\n stream.getTracks().forEach((track) => track.stop());\n return true;\n }\n\n this.nativeBarcodeDetector = detector;\n this.cameraStream = stream;\n video.srcObject = stream;\n await video.play().catch(() => undefined);\n this.scheduleNativeScan(token);\n return true;\n } catch {\n return false;\n }\n }\n\n private async openZxingCamera(token: number, video: HTMLVideoElement): Promise<void> {\n this.cameraControls = await this.barcodeReader.decodeFromConstraints(\n {\n audio: false,\n video: {\n facingMode: { ideal: 'environment' },\n width: { ideal: 960 },\n height: { ideal: 540 },\n },\n },\n video,\n (result, error) => {\n if (token !== this.openToken) {\n return;\n }\n\n if (error || !result) {\n return;\n }\n\n const value = String(result.getText()).trim();\n if (value) {\n this.onBarcodeDetected(value);\n }\n }\n );\n }\n\n private scheduleNativeScan(token: number): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const loop = async (): Promise<void> => {\n if (token !== this.openToken) {\n return;\n }\n\n const video = this.cameraVideo?.nativeElement;\n const detector = this.nativeBarcodeDetector;\n if (!video || !detector || video.readyState < HTMLMediaElement.HAVE_CURRENT_DATA) {\n this.scanLoopId = window.requestAnimationFrame(() => {\n void loop();\n });\n return;\n }\n\n try {\n const barcodes = await detector.detect(video);\n const value = String(barcodes?.[0]?.rawValue || '').trim();\n if (value) {\n this.onBarcodeDetected(value);\n return;\n }\n } catch {\n // Native detection can fail on a frame; keep scanning.\n }\n\n this.scanLoopId = window.requestAnimationFrame(() => {\n void loop();\n });\n };\n\n this.scanLoopId = window.requestAnimationFrame(() => {\n void loop();\n });\n }\n\n private async createNativeBarcodeDetector(): Promise<NativeBarcodeDetector | null> {\n if (typeof window === 'undefined') {\n return null;\n }\n\n const detectorCtor = (window as Window & { BarcodeDetector?: NativeBarcodeDetectorConstructor }).BarcodeDetector;\n if (!detectorCtor) {\n return null;\n }\n\n try {\n if (detectorCtor.getSupportedFormats) {\n const supportedFormats = await detectorCtor.getSupportedFormats();\n if (!supportedFormats.includes('code_128')) {\n return null;\n }\n }\n\n return new detectorCtor({ formats: ['code_128'] });\n } catch {\n return null;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputBarcodeControlComponent } from './ui-barcode-scanner-input.component';\n\n@Component({\n selector: 'input-barcode',\n standalone: true,\n imports: [FieldFrameComponent, InputBarcodeControlComponent],\n template: `\n <field-frame [label]=\"label\" [error]=\"error\" [required]=\"required\" [forId]=\"'barcode-scanner-input'\" [disabled]=\"disabled\">\n <input-barcode-control [value]=\"value\" [label]=\"label\" [placeholder]=\"placeholder\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [disabled]=\"disabled\" (valueChange)=\"valueChange.emit($event)\" (scanned)=\"scanned.emit($event)\" (searchRequested)=\"searchRequested.emit()\" (cameraStateChange)=\"cameraStateChange.emit($event)\" />\n </field-frame>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputBarcodeComponent {\n @Input() value = '';\n @Input() label = 'Штрихкод';\n @Input() placeholder = 'Відскануйте або введіть штрихкод';\n @Input() hint = 'Сканер може просто ввести код і натиснути Enter.';\n @Input() error = '';\n @Input() required = false;\n @Input() disabled = false;\n @Output() valueChange = new EventEmitter<string>();\n @Output() scanned = new EventEmitter<string>();\n @Output() searchRequested = new EventEmitter<void>();\n @Output() cameraStateChange = new EventEmitter<'idle' | 'starting' | 'open' | 'error'>();\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-checkbox-control',\n standalone: true,\n template: `<input data-field-control type=\"checkbox\" class=\"h-4 w-4 rounded border-slate-300 text-slate-900 focus:ring-slate-400\" [checked]=\"value\" [disabled]=\"disabled\" (change)=\"onValueChange($event)\" (blur)=\"touched.emit()\" />`,\n})\nexport class InputCheckboxControlComponent {\n @Input() value = false;\n @Input() disabled = false;\n @Output() valueChange = new EventEmitter<boolean>();\n @Output() touched = new EventEmitter<void>();\n\n onValueChange(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).checked);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputCheckboxControlComponent } from './ui-checkbox-input-control.component';\n\n@Component({\n selector: 'input-checkbox',\n standalone: true,\n imports: [CommonModule, FieldFrameComponent, InputCheckboxControlComponent],\n templateUrl: './ui-checkbox-input.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputCheckboxComponent), multi: true }],\n})\nexport class InputCheckboxComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() disabled = false;\n value = false;\n private onChange: (value: boolean) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: boolean | null): void { this.value = !!value; }\n registerOnChange(fn: (value: boolean) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n onValueChange(event: Event): void {\n const value = (event.target as HTMLInputElement).checked;\n this.value = value;\n this.onChange(value);\n }\n\n handleValueChange(value: boolean): void {\n this.value = value;\n this.onChange(value);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <input-checkbox-control [value]=\"value\" [disabled]=\"disabled\" (valueChange)=\"handleValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nconst EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nexport const validateFormControl = (\n control: AbstractControl,\n required: boolean,\n pattern?: string,\n email = false,\n): ValidationErrors | null => {\n const value = control.value;\n const empty = value == null || (typeof value === 'string' && value.trim() === '') || (Array.isArray(value) && value.length === 0);\n\n if (required && empty) return { required: true };\n if (empty) return null;\n if (email && (typeof value !== 'string' || !EMAIL_PATTERN.test(value.trim()))) return { email: true };\n if (pattern) {\n try {\n if (!new RegExp(pattern).test(String(value))) return { pattern: true };\n } catch {\n return null;\n }\n }\n return null;\n};\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-color-control',\n standalone: true,\n template: `\n <div class=\"flex items-center gap-3\">\n <label data-field-control class=\"relative inline-flex h-11 w-11 cursor-pointer items-center justify-center rounded-full border border-slate-200 bg-white shadow-sm transition hover:border-slate-300\" [class.cursor-not-allowed]=\"disabled\" [class.opacity-60]=\"disabled\" [attr.for]=\"id\">\n <span class=\"block h-9 w-9 rounded-full border border-black/10\" [style.backgroundColor]=\"pickerValue\"></span>\n <input class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\" type=\"color\" [attr.id]=\"id\" [attr.name]=\"name ? name + '-picker' : null\" [disabled]=\"disabled\" [value]=\"pickerValue\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />\n </label>\n <input data-field-control class=\"min-w-[110px] rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-xs font-semibold uppercase text-slate-700 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200 disabled:cursor-not-allowed disabled:opacity-60\" type=\"text\" [attr.name]=\"name\" [disabled]=\"disabled\" [value]=\"value\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />\n </div>\n `,\n})\nexport class InputColorControlComponent {\n @Input() id?: string;\n @Input() name?: string;\n @Input() disabled = false;\n @Input() value = '#000000';\n @Input() pickerValue = '#000000';\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { validateFormControl } from '../form-control.validator';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputColorControlComponent } from './ui-color-input-control.component';\n\n@Component({\n selector: 'input-color',\n standalone: true,\n imports: [CommonModule, FormsModule, FieldFrameComponent, InputColorControlComponent],\n templateUrl: './ui-color-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputColorComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputColorComponent), multi: true },\n ],\n})\nexport class InputColorComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() required = false;\n @Input() error?: string;\n\n disabled = false;\n value = '#000000';\n\n private static nextId = 0;\n private readonly generatedId = `input-color-${InputColorComponent.nextId++}`;\n private onChange: (value: string) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n\n get pickerValue(): string {\n return this.isColorValue(this.value) ? this.value : '#000000';\n }\n\n writeValue(value: string | null): void {\n this.value = value?.trim() || '#000000';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onPickerChange(value: string): void {\n this.value = value;\n this.onChange(value);\n }\n\n onHexInput(value: string): void {\n this.value = this.normalizeHexInput(value);\n this.onChange(this.value);\n }\n\n handleValueChange(value: string): void {\n this.value = value;\n this.onChange(value);\n }\n\n markTouched(): void {\n this.onTouched();\n }\n\n private normalizeHexInput(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n return '';\n }\n return trimmed.startsWith('#') ? trimmed : `#${trimmed}`;\n }\n\n private isColorValue(value: string): boolean {\n return /^#([0-9a-fA-F]{6})$/.test(value.trim());\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\">\n <input-color-control [id]=\"controlId\" [name]=\"name\" [disabled]=\"disabled\" [value]=\"value\" [pickerValue]=\"pickerValue\" (valueChange)=\"handleValueChange($event)\" (touched)=\"markTouched()\" />\n</field-frame>\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class UiPopupService {\n private activeClose: (() => void) | null = null;\n\n open(close: () => void): void {\n const previousClose = this.activeClose;\n this.activeClose = close;\n if (previousClose && previousClose !== close) {\n previousClose();\n }\n }\n\n close(close: () => void): void {\n if (this.activeClose === close) {\n this.activeClose = null;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostListener, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { ChevronLeft, ChevronRight, CalendarDays, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { UiPopupService } from '../../popup/ui-popup.service';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\ninterface CalendarDay {\n date: string;\n day: number;\n currentMonth: boolean;\n}\n\ntype CalendarView = 'days' | 'months' | 'years';\n\n@Component({\n selector: 'input-date-control',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule, CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './ui-date-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputDateControlComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDateControlComponent), multi: true },\n ],\n})\nexport class InputDateControlComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly popupService = inject(UiPopupService);\n private readonly closeActivePopup = () => this.closeCalendar();\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'date';\n readonly element: UiInputElement = 'input';\n readonly calendarIcon = CalendarDays;\n readonly previousMonthIcon = ChevronLeft;\n readonly nextMonthIcon = ChevronRight;\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete = 'off';\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n @Input() disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-date-${InputDateControlComponent.nextId++}`;\n visibleMonth = this.startOfMonth(new Date());\n calendarView: CalendarView = 'days';\n isCalendarOpen = false;\n readonly popupViewportMargin = 16;\n readonly popupOffset = 8;\n readonly calendarPositions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: this.popupOffset },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -this.popupOffset },\n ];\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n const selectedDate = this.parseDate(this.value);\n if (selectedDate) {\n this.visibleMonth = this.startOfMonth(selectedDate);\n }\n this.cdr.markForCheck();\n }\n\n get monthLabel(): string {\n return this.visibleMonth.toLocaleDateString('uk-UA', { month: 'long', year: 'numeric' });\n }\n\n get monthName(): string {\n return this.visibleMonth.toLocaleDateString('uk-UA', { month: 'long' });\n }\n\n get yearLabel(): number {\n return this.visibleMonth.getFullYear();\n }\n\n get monthOptions(): Array<{ value: number; label: string }> {\n return Array.from({ length: 12 }, (_, value) => ({\n value,\n label: new Date(2000, value, 1).toLocaleDateString('uk-UA', { month: 'long' }),\n }));\n }\n\n get yearOptions(): number[] {\n const year = this.visibleMonth.getFullYear();\n return Array.from({ length: 12 }, (_, index) => year - 5 + index);\n }\n\n get calendarDays(): CalendarDay[] {\n const firstDay = this.startOfMonth(this.visibleMonth);\n const mondayOffset = (firstDay.getDay() + 6) % 7;\n const firstGridDay = new Date(firstDay);\n firstGridDay.setDate(firstGridDay.getDate() - mondayOffset);\n\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(firstGridDay);\n date.setDate(firstGridDay.getDate() + index);\n return {\n date: this.toDateValue(date),\n day: date.getDate(),\n currentMonth: date.getMonth() === this.visibleMonth.getMonth(),\n };\n });\n }\n\n get displayValue(): string {\n const date = this.selectedDate;\n return date ? date.toLocaleDateString('uk-UA') : String(this.value ?? '');\n }\n\n get selectedDate(): Date | null {\n return this.parseDate(this.value);\n }\n\n openCalendar(event: Event): void {\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.isCalendarOpen = true;\n this.popupService.open(this.closeActivePopup);\n this.calendarView = 'days';\n this.cdr.markForCheck();\n }\n\n closeCalendar(): void {\n this.isCalendarOpen = false;\n this.popupService.close(this.closeActivePopup);\n this.cdr.markForCheck();\n }\n\n showMonthPicker(event: Event): void {\n event.stopPropagation();\n this.calendarView = 'months';\n this.cdr.markForCheck();\n }\n\n showYearPicker(event: Event): void {\n event.stopPropagation();\n this.calendarView = 'years';\n this.cdr.markForCheck();\n }\n\n selectMonth(month: number, event: Event): void {\n event.stopPropagation();\n this.visibleMonth = new Date(this.visibleMonth.getFullYear(), month, 1);\n this.calendarView = 'days';\n this.cdr.markForCheck();\n }\n\n selectYear(year: number, event: Event): void {\n event.stopPropagation();\n this.visibleMonth = new Date(year, this.visibleMonth.getMonth(), 1);\n this.calendarView = 'months';\n this.cdr.markForCheck();\n }\n\n changeMonth(offset: number, event: Event): void {\n event.stopPropagation();\n if (this.calendarView === 'years') {\n this.visibleMonth = new Date(this.visibleMonth.getFullYear() + offset * 12, this.visibleMonth.getMonth(), 1);\n } else if (this.calendarView === 'months') {\n this.visibleMonth = new Date(this.visibleMonth.getFullYear() + offset, this.visibleMonth.getMonth(), 1);\n } else {\n this.visibleMonth = new Date(this.visibleMonth.getFullYear(), this.visibleMonth.getMonth() + offset, 1);\n }\n this.cdr.markForCheck();\n }\n\n selectDate(dateValue: string, event: Event): void {\n event.stopPropagation();\n this.visibleMonth = this.startOfMonth(this.parseDate(dateValue)!);\n this.value = dateValue;\n this.onChange(dateValue);\n this.closeCalendar();\n this.onTouched();\n this.cdr.markForCheck();\n }\n\n isSelected(dateValue: string): boolean {\n return this.value === dateValue;\n }\n\n isSelectedMonth(month: number): boolean {\n return this.selectedDate?.getMonth() === month && this.selectedDate?.getFullYear() === this.visibleMonth.getFullYear();\n }\n\n isSelectedYear(year: number): boolean {\n return this.selectedDate?.getFullYear() === year;\n }\n\n @HostListener('document:click')\n onDocumentClick(): void {\n if (this.isCalendarOpen) {\n this.closeCalendar();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.isCalendarOpen) {\n this.closeCalendar();\n }\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const maskedValue = this.applyDateMask(value);\n const date = this.parseInputDate(maskedValue);\n this.value = date ? this.toDateValue(date) : maskedValue;\n this.onChange(this.value);\n if (date) {\n this.visibleMonth = this.startOfMonth(date);\n }\n this.cdr.markForCheck();\n }\n\n allowDateKey(event: KeyboardEvent): void {\n if (event.ctrlKey || event.metaKey || ['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n if (!/^\\d$/.test(event.key)) event.preventDefault();\n }\n\n private applyDateMask(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n const day = digits.slice(0, 2);\n const month = digits.slice(2, 4);\n const year = digits.slice(4, 8);\n return [day, month, year].filter(Boolean).join('.');\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n\n private startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n\n private parseDate(value: string | number | null): Date | null {\n if (!value) {\n return null;\n }\n const [year, month, day] = String(value).slice(0, 10).split('-').map(Number);\n if (!year || !month || !day) {\n return null;\n }\n return new Date(year, month - 1, day);\n }\n\n private parseInputDate(value: string): Date | null {\n const normalized = value.trim();\n const isoDate = this.parseDate(normalized);\n if (isoDate) {\n return isoDate;\n }\n\n const match = normalized.match(/^(\\d{1,2})\\.(\\d{1,2})\\.(\\d{4})$/);\n if (!match) {\n return null;\n }\n\n const [, day, month, year] = match;\n const date = new Date(Number(year), Number(month) - 1, Number(day));\n return date.getFullYear() === Number(year) && date.getMonth() === Number(month) - 1 && date.getDate() === Number(day)\n ? date\n : null;\n }\n\n private toDateValue(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n}\n","\n <div class=\"flex items-end gap-2\">\n <div class=\"min-w-0 flex-1\">\n @if (element === 'textarea') {\n <textarea\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.id]=\"controlId\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n ></textarea>\n } @else {\n <div class=\"relative\" cdkOverlayOrigin #calendarOrigin=\"cdkOverlayOrigin\">\n <input\n data-field-control\n type=\"text\"\n [attr.placeholder]=\"placeholder ?? 'ДД.ММ.РРРР'\"\n maxlength=\"10\"\n inputmode=\"numeric\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 pr-10 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [attr.id]=\"controlId\"\n [value]=\"displayValue\"\n (click)=\"openCalendar($event)\"\n (keydown)=\"allowDateKey($event)\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n <lucide-icon\n [img]=\"calendarIcon\"\n class=\"pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400\"\n aria-hidden=\"true\"\n ></lucide-icon>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"calendarOrigin\"\n [cdkConnectedOverlayOpen]=\"isCalendarOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPositions]=\"calendarPositions\"\n [cdkConnectedOverlayViewportMargin]=\"popupViewportMargin\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n (detach)=\"closeCalendar()\"\n >\n <div\n class=\"z-50 w-[min(20rem,calc(100vw-2rem))] max-w-[calc(100vw-2rem)] rounded-xl border border-slate-200 bg-white p-4 shadow-xl\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"mb-4 flex items-center justify-between\" [class.justify-center]=\"calendarView === 'months'\">\n @if (calendarView !== 'months') {\n <button\n type=\"button\"\n class=\"rounded-lg p-2 text-slate-500 transition hover:bg-slate-100 hover:text-slate-900\"\n aria-label=\"Попередній місяць\"\n (click)=\"changeMonth(-1, $event)\"\n >\n <lucide-icon [img]=\"previousMonthIcon\" class=\"h-4 w-4\"></lucide-icon>\n </button>\n }\n <div class=\"flex items-center gap-1\">\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-1 text-sm font-semibold capitalize text-slate-900 transition hover:bg-slate-100\"\n (click)=\"showMonthPicker($event)\"\n >\n {{ monthName }}\n </button>\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-1 text-sm font-semibold text-slate-900 transition hover:bg-slate-100\"\n (click)=\"showYearPicker($event)\"\n >\n {{ yearLabel }}\n </button>\n </div>\n @if (calendarView !== 'months') {\n <button\n type=\"button\"\n class=\"rounded-lg p-2 text-slate-500 transition hover:bg-slate-100 hover:text-slate-900\"\n aria-label=\"Наступний місяць\"\n (click)=\"changeMonth(1, $event)\"\n >\n <lucide-icon [img]=\"nextMonthIcon\" class=\"h-4 w-4\"></lucide-icon>\n </button>\n }\n </div>\n\n @if (calendarView === 'days') {\n <div class=\"mb-2 grid grid-cols-7 text-center text-xs font-medium text-slate-400\">\n @for (weekday of ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Нд']; track weekday) {\n <span class=\"py-1\">{{ weekday }}</span>\n }\n </div>\n\n <div class=\"grid grid-cols-7 gap-1\">\n @for (day of calendarDays; track day.date) {\n <button\n type=\"button\"\n class=\"aspect-square rounded-lg text-sm transition hover:bg-slate-100 hover:text-slate-900\"\n [class.text-slate-300]=\"!day.currentMonth\"\n [class.text-slate-700]=\"day.currentMonth && !isSelected(day.date)\"\n [class.bg-slate-900]=\"isSelected(day.date)\"\n [class.text-white]=\"isSelected(day.date)\"\n (click)=\"selectDate(day.date, $event)\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n } @else if (calendarView === 'months') {\n <div class=\"grid grid-cols-3 gap-2\">\n @for (month of monthOptions; track month.value) {\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-3 text-sm capitalize text-slate-700 transition hover:bg-slate-100 hover:text-slate-900\"\n [class.bg-slate-900]=\"isSelectedMonth(month.value)\"\n [class.text-white]=\"isSelectedMonth(month.value)\"\n (click)=\"selectMonth(month.value, $event)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n } @else {\n <div class=\"grid grid-cols-3 gap-2\">\n @for (year of yearOptions; track year) {\n <button\n type=\"button\"\n class=\"rounded-lg px-2 py-3 text-sm text-slate-700 transition hover:bg-slate-100 hover:text-slate-900\"\n [class.bg-slate-900]=\"isSelectedYear(year)\"\n [class.text-white]=\"isSelectedYear(year)\"\n (click)=\"selectYear(year, $event)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n </div>\n }\n </div>\n\n </div>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputDateControlComponent } from './ui-date-input.component';\nimport { validateFormControl } from '../form-control.validator';\n\n@Component({\n selector: 'input-date', standalone: true, imports: [FieldFrameComponent, InputDateControlComponent], templateUrl: './ui-date-input.component.wrapper.html', changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputDateComponent), multi: true }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDateComponent), multi: true }],\n})\nexport class InputDateComponent implements ControlValueAccessor, Validator, AfterViewInit {\n @ViewChild(InputDateControlComponent) private control?: InputDateControlComponent;\n @Input() label?: string; @Input() hint?: string; @Input() error?: string; @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() required = false; @Input() disabled = false; @Input() autocomplete = 'off'; @Input() pattern?: string; @Input() rows = 4; @Input() actions: UiDynamicFormFieldAction[] = [];\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n private pendingValue: string | number | null = ''; private onChange: (value: string | number | null) => void = () => undefined; private onTouched: () => void = () => undefined;\n ngAfterViewInit(): void { this.control?.registerOnChange((value) => this.onChange(value)); this.control?.registerOnTouched(() => this.onTouched()); this.control?.writeValue(this.pendingValue); }\n writeValue(value: string | number | null): void { this.pendingValue = value; this.control?.writeValue(value); }\n registerOnChange(fn: (value: string | number | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(value: boolean): void { this.disabled = value; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"id\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"actionTriggered.emit($event)\">\n <input-date-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" [required]=\"required\" [disabled]=\"disabled\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [rows]=\"rows\" />\n</field-frame>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostListener, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { CalendarDays, ChevronLeft, ChevronRight, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { UiPopupService } from '../../popup/ui-popup.service';\nimport { validateFormControl } from '../form-control.validator';\n\ninterface CalendarDay { date: string; day: number; currentMonth: boolean; }\ntype CalendarView = 'days' | 'months' | 'years';\n\n@Component({\n selector: 'input-datetime-control',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule, CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './ui-datetime-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputDatetimeControlComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDatetimeControlComponent), multi: true },\n ],\n})\nexport class InputDatetimeControlComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly popupService = inject(UiPopupService);\n private readonly closeActivePopup = () => this.closeCalendar();\n @Input() label?: string; @Input() hint?: string; @Input() placeholder?: string; @Input() name?: string; @Input() id?: string;\n @Input() rows = 4; @Input() required = false; @Input() autocomplete = 'off';\n @Input() pattern?: string; @Input() error?: string; @Input() actions: UiDynamicFormFieldAction[] = [];\n readonly type = 'datetime-local'; readonly calendarIcon = CalendarDays; readonly previousMonthIcon = ChevronLeft; readonly nextMonthIcon = ChevronRight;\n @Input() disabled = false; value: string | number | null = ''; isCalendarOpen = false; calendarView: CalendarView = 'days'; visibleMonth = this.startOfMonth(new Date());\n readonly popupViewportMargin = 16; readonly popupOffset = 8;\n readonly calendarPositions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: this.popupOffset },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -this.popupOffset },\n ];\n selectedHour = 12; selectedMinute = 0;\n private static nextId = 0; private readonly generatedId = `input-datetime-${InputDatetimeControlComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n private onChange: (value: string | number | null) => void = () => undefined; onTouched: () => void = () => undefined;\n get controlId(): string { return this.id ?? this.generatedId; }\n get selectedDate(): Date | null { const match = String(this.value ?? '').match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})/); return match ? new Date(+match[1], +match[2] - 1, +match[3]) : null; }\n get displayValue(): string { const match = String(this.value ?? '').match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})/); return match ? `${match[3]}.${match[2]}.${match[1]} ${match[4]}:${match[5]}` : String(this.value ?? ''); }\n get monthName(): string { return this.visibleMonth.toLocaleDateString('uk-UA', { month: 'long' }); }\n get yearLabel(): number { return this.visibleMonth.getFullYear(); }\n get monthOptions(): Array<{ value: number; label: string }> { return Array.from({ length: 12 }, (_, value) => ({ value, label: new Date(2000, value, 1).toLocaleDateString('uk-UA', { month: 'long' }) })); }\n get yearOptions(): number[] { const year = this.visibleMonth.getFullYear(); return Array.from({ length: 12 }, (_, index) => year - 5 + index); }\n get calendarDays(): CalendarDay[] {\n const first = this.startOfMonth(this.visibleMonth); const offset = (first.getDay() + 6) % 7; const start = new Date(first); start.setDate(start.getDate() - offset);\n return Array.from({ length: 42 }, (_, index) => { const date = new Date(start); date.setDate(start.getDate() + index); return { date: this.toDateValue(date), day: date.getDate(), currentMonth: date.getMonth() === this.visibleMonth.getMonth() }; });\n }\n writeValue(value: string | number | null): void { this.value = value ?? ''; const date = this.selectedDate; if (date) { this.visibleMonth = this.startOfMonth(date); this.selectedHour = +(String(value).slice(11, 13)); this.selectedMinute = +(String(value).slice(14, 16)); } this.cdr.markForCheck(); }\n registerOnChange(fn: (value: string | number | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n setDisabledState(disabled: boolean): void { this.disabled = disabled; this.cdr.markForCheck(); }\n openCalendar(event: Event): void { event.stopPropagation(); if (this.disabled) return; this.isCalendarOpen = true; this.calendarView = 'days'; this.popupService.open(this.closeActivePopup); this.cdr.markForCheck(); }\n closeCalendar(): void { this.isCalendarOpen = false; this.popupService.close(this.closeActivePopup); this.cdr.markForCheck(); }\n changeMonth(offset: number, event: Event): void { event.stopPropagation(); const year = this.visibleMonth.getFullYear(); const month = this.visibleMonth.getMonth(); this.visibleMonth = this.calendarView === 'years' ? new Date(year + offset * 12, month, 1) : new Date(year + (this.calendarView === 'months' ? offset : 0), month + (this.calendarView === 'days' ? offset : 0), 1); this.cdr.markForCheck(); }\n showMonthPicker(event: Event): void { event.stopPropagation(); this.calendarView = 'months'; this.cdr.markForCheck(); }\n showYearPicker(event: Event): void { event.stopPropagation(); this.calendarView = 'years'; this.cdr.markForCheck(); }\n selectMonth(month: number, event: Event): void { event.stopPropagation(); this.visibleMonth = new Date(this.visibleMonth.getFullYear(), month, 1); this.calendarView = 'days'; this.cdr.markForCheck(); }\n selectYear(year: number, event: Event): void { event.stopPropagation(); this.visibleMonth = new Date(year, this.visibleMonth.getMonth(), 1); this.calendarView = 'months'; this.cdr.markForCheck(); }\n selectDate(dateValue: string, event: Event): void { event.stopPropagation(); const date = this.parseDate(dateValue)!; this.visibleMonth = this.startOfMonth(date); this.setDateTime(dateValue); }\n setDateTime(dateValue: string, close = true): void { const hour = String(this.selectedHour).padStart(2, '0'); const minute = String(this.selectedMinute).padStart(2, '0'); this.value = `${dateValue}T${hour}:${minute}`; this.onChange(this.value); if (close) this.closeCalendar(); if (close) this.onTouched(); this.cdr.markForCheck(); }\n onTimeChange(): void { const date = this.selectedDate; if (date) { this.setDateTime(this.toDateValue(date), false); } }\n onValueChange(input: string): void { const masked = this.applyMask(input); const match = masked.match(/^(\\d{2})\\.(\\d{2})\\.(\\d{4}) (\\d{2}):(\\d{2})$/); if (match) { const date = new Date(+match[3], +match[2] - 1, +match[1]); if (date.getFullYear() === +match[3] && date.getMonth() === +match[2] - 1 && date.getDate() === +match[1] && +match[4] < 24 && +match[5] < 60) { this.value = `${match[3]}-${match[2]}-${match[1]}T${match[4]}:${match[5]}`; this.visibleMonth = this.startOfMonth(date); this.selectedHour = +match[4]; this.selectedMinute = +match[5]; } else this.value = masked; } else this.value = masked; this.onChange(this.value); this.cdr.markForCheck(); }\n allowDateKey(event: KeyboardEvent): void { if (event.ctrlKey || event.metaKey || ['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return; if (!/^\\d$/.test(event.key)) event.preventDefault(); }\n private applyMask(value: string): string { const digits = value.replace(/\\D/g, '').slice(0, 12); const date = [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 8)].filter(Boolean).join('.'); const time = [digits.slice(8, 10), digits.slice(10, 12)].filter(Boolean).join(':'); return [date, time].filter(Boolean).join(' '); }\n isSelected(date: string): boolean { return this.selectedDate ? this.toDateValue(this.selectedDate) === date : false; }\n isSelectedMonth(month: number): boolean { return this.selectedDate?.getMonth() === month && this.selectedDate?.getFullYear() === this.visibleMonth.getFullYear(); }\n isSelectedYear(year: number): boolean { return this.selectedDate?.getFullYear() === year; }\n @HostListener('document:click') onDocumentClick(): void { if (this.isCalendarOpen) this.closeCalendar(); }\n @HostListener('document:keydown.escape') onEscape(): void { if (this.isCalendarOpen) this.closeCalendar(); }\n triggerAction(action: UiDynamicFormFieldAction): void { this.actionTriggered.emit(action); }\n private startOfMonth(date: Date): Date { return new Date(date.getFullYear(), date.getMonth(), 1); }\n private parseDate(value: string): Date | null { const [year, month, day] = value.split('-').map(Number); return year && month && day ? new Date(year, month - 1, day) : null; }\n private toDateValue(date: Date): string { return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; }\n}\n"," <div class=\"flex items-end gap-2\"><div class=\"min-w-0 flex-1\"><div class=\"relative\" cdkOverlayOrigin #calendarOrigin=\"cdkOverlayOrigin\">\n <input data-field-control type=\"text\" [attr.placeholder]=\"placeholder ?? 'ДД.ММ.РРРР ГГ:ХХ'\" maxlength=\"16\" inputmode=\"numeric\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [disabled]=\"disabled\" class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 pr-10 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.id]=\"controlId\" [value]=\"displayValue\" (click)=\"openCalendar($event)\" (keydown)=\"allowDateKey($event)\" (input)=\"onValueChange($any($event.target).value)\" (blur)=\"onTouched()\" />\n <lucide-icon [img]=\"calendarIcon\" class=\"pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400\"></lucide-icon>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"calendarOrigin\" [cdkConnectedOverlayOpen]=\"isCalendarOpen\" [cdkConnectedOverlayHasBackdrop]=\"false\" [cdkConnectedOverlayPositions]=\"calendarPositions\" [cdkConnectedOverlayViewportMargin]=\"popupViewportMargin\" [cdkConnectedOverlayFlexibleDimensions]=\"true\" [cdkConnectedOverlayPush]=\"true\" (detach)=\"closeCalendar()\"><div class=\"z-50 w-[min(22rem,calc(100vw-2rem))] max-w-[calc(100vw-2rem)] rounded-xl border border-slate-200 bg-white p-4 shadow-xl\" (click)=\"$event.stopPropagation()\">\n <div class=\"mb-4 flex items-center justify-between\" [class.justify-center]=\"calendarView === 'months'\">\n @if (calendarView !== 'months') { <button type=\"button\" class=\"rounded-lg p-2 text-slate-500 hover:bg-slate-100\" aria-label=\"Попередній період\" (click)=\"changeMonth(-1, $event)\"><lucide-icon [img]=\"previousMonthIcon\" class=\"h-4 w-4\"></lucide-icon></button> }\n <div class=\"flex items-center gap-1\"><button type=\"button\" class=\"rounded-lg px-2 py-1 text-sm font-semibold capitalize text-slate-900 hover:bg-slate-100\" (click)=\"showMonthPicker($event)\">{{ monthName }}</button><button type=\"button\" class=\"rounded-lg px-2 py-1 text-sm font-semibold text-slate-900 hover:bg-slate-100\" (click)=\"showYearPicker($event)\">{{ yearLabel }}</button></div>\n @if (calendarView !== 'months') { <button type=\"button\" class=\"rounded-lg p-2 text-slate-500 hover:bg-slate-100\" aria-label=\"Наступний період\" (click)=\"changeMonth(1, $event)\"><lucide-icon [img]=\"nextMonthIcon\" class=\"h-4 w-4\"></lucide-icon></button> }\n </div>\n @if (calendarView === 'days') {\n <div class=\"mb-2 grid grid-cols-7 text-center text-xs font-medium text-slate-400\">@for (weekday of ['Пн','Вт','Ср','Чт','Пт','Сб','Нд']; track weekday) { <span class=\"py-1\">{{ weekday }}</span> }</div>\n <div class=\"grid grid-cols-7 gap-1\">@for (day of calendarDays; track day.date) { <button type=\"button\" class=\"aspect-square rounded-lg text-sm hover:bg-slate-100 hover:text-slate-900\" [class.text-slate-300]=\"!day.currentMonth\" [class.text-slate-700]=\"day.currentMonth && !isSelected(day.date)\" [class.bg-slate-900]=\"isSelected(day.date)\" [class.text-white]=\"isSelected(day.date)\" (click)=\"selectDate(day.date, $event)\">{{ day.day }}</button> }</div>\n <div class=\"mt-4 grid grid-cols-2 gap-2 border-t border-slate-100 pt-3\"><label class=\"text-[0.65rem] font-medium text-slate-500\">Години<input type=\"number\" min=\"0\" max=\"23\" [value]=\"selectedHour\" (input)=\"selectedHour = +$any($event.target).value; onTimeChange()\" class=\"mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" /></label><label class=\"text-[0.65rem] font-medium text-slate-500\">Хвилини<input type=\"number\" min=\"0\" max=\"59\" [value]=\"selectedMinute\" (input)=\"selectedMinute = +$any($event.target).value; onTimeChange()\" class=\"mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" /></label></div>\n } @else if (calendarView === 'months') { <div class=\"grid grid-cols-3 gap-2\">@for (month of monthOptions; track month.value) { <button type=\"button\" class=\"rounded-lg px-2 py-3 text-sm capitalize text-slate-700 hover:bg-slate-100 hover:text-slate-900\" [class.bg-slate-900]=\"isSelectedMonth(month.value)\" [class.text-white]=\"isSelectedMonth(month.value)\" (click)=\"selectMonth(month.value, $event)\">{{ month.label }}</button> }</div>\n } @else { <div class=\"grid grid-cols-3 gap-2\">@for (year of yearOptions; track year) { <button type=\"button\" class=\"rounded-lg px-2 py-3 text-sm text-slate-700 hover:bg-slate-100 hover:text-slate-900\" [class.bg-slate-900]=\"isSelectedYear(year)\" [class.text-white]=\"isSelectedYear(year)\" (click)=\"selectYear(year, $event)\">{{ year }}</button> }</div> }\n </div></ng-template>\n </div></div>\n </div>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputDatetimeControlComponent } from './ui-datetime-input.component';\nimport { validateFormControl } from '../form-control.validator';\n\n@Component({\n selector: 'input-datetime', standalone: true, imports: [FieldFrameComponent, InputDatetimeControlComponent], templateUrl: './ui-datetime-input.component.wrapper.html', changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputDatetimeComponent), multi: true }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputDatetimeComponent), multi: true }],\n})\nexport class InputDatetimeComponent implements ControlValueAccessor, Validator, AfterViewInit {\n @ViewChild(InputDatetimeControlComponent) private control?: InputDatetimeControlComponent;\n @Input() label?: string; @Input() hint?: string; @Input() error?: string; @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() required = false; @Input() disabled = false; @Input() autocomplete = 'off'; @Input() pattern?: string; @Input() rows = 4; @Input() actions: UiDynamicFormFieldAction[] = [];\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n private pendingValue: string | number | null = ''; private onChange: (value: string | number | null) => void = () => undefined; private onTouched: () => void = () => undefined;\n ngAfterViewInit(): void { this.control?.registerOnChange((value) => this.onChange(value)); this.control?.registerOnTouched(() => this.onTouched()); this.control?.writeValue(this.pendingValue); }\n writeValue(value: string | number | null): void { this.pendingValue = value; this.control?.writeValue(value); }\n registerOnChange(fn: (value: string | number | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(value: boolean): void { this.disabled = value; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"id\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"actionTriggered.emit($event)\">\n <input-datetime-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" [required]=\"required\" [disabled]=\"disabled\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [rows]=\"rows\" />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-email-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" type=\"email\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputEmailControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() autocomplete?: string; @Input() pattern?: string; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputEmailControlComponent } from './ui-email-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-email',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputEmailControlComponent],\n templateUrl: './ui-email-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputEmailComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputEmailComponent), multi: true },\n ],\n})\nexport class InputEmailComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'email';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-email-${InputEmailComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern, true); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-email-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-number-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" type=\"number\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputNumberControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputNumberControlComponent } from './ui-number-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-number',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputNumberControlComponent],\n templateUrl: './ui-number-input.component.html',\n styles: [\n 'input[type=\"number\"]::-webkit-inner-spin-button, input[type=\"number\"]::-webkit-outer-spin-button { appearance: none; -webkit-appearance: none; margin: 0; }',\n 'input[type=\"number\"] { -moz-appearance: textfield; }',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputNumberComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputNumberComponent), multi: true },\n ],\n})\nexport class InputNumberComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'number';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() disabled = false;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-number-${InputNumberComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value === '' ? null : Number(value);\n this.value = parsed;\n this.onChange(parsed);\n }\n\n preventWheelChange(event: WheelEvent): void {\n event.preventDefault();\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-number-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Eye, EyeOff, LucideAngularModule } from 'lucide-angular';\n\n@Component({\n selector: 'input-password-control',\n standalone: true,\n imports: [CommonModule, LucideAngularModule],\n template: `\n <div class=\"relative\">\n <input data-field-control [attr.type]=\"visible ? 'text' : 'password'\" [attr.placeholder]=\"placeholder\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [attr.pattern]=\"pattern\" [disabled]=\"disabled\" class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 pr-10 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.id]=\"id\" [value]=\"value\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />\n <button type=\"button\" class=\"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 transition hover:text-slate-700 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.aria-label]=\"visible ? 'Сховати пароль' : 'Показати пароль'\" [disabled]=\"disabled\" (mousedown)=\"$event.preventDefault()\" (click)=\"visible = !visible\">\n <lucide-icon [img]=\"visible ? hideIcon : showIcon\" class=\"h-4 w-4\" aria-hidden=\"true\"></lucide-icon>\n </button>\n </div>\n `,\n})\nexport class InputPasswordControlComponent {\n readonly showIcon = Eye;\n readonly hideIcon = EyeOff;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() disabled = false;\n @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n visible = false;\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { Eye, EyeOff, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputPasswordControlComponent } from './ui-password-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-password',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule, FieldFrameComponent, InputPasswordControlComponent],\n templateUrl: './ui-password-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputPasswordComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputPasswordComponent), multi: true },\n ],\n})\nexport class InputPasswordComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'password';\n readonly showPasswordIcon = Eye;\n readonly hidePasswordIcon = EyeOff;\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n isPasswordVisible = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-password-${InputPasswordComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n togglePassword(event: Event): void {\n event.stopPropagation();\n this.isPasswordVisible = !this.isPasswordVisible;\n this.cdr.markForCheck();\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-password-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { validateFormControl } from '../form-control.validator';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from './ui-text-input-control.component';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-text',\n standalone: true,\n imports: [CommonModule, FormsModule, FieldFrameComponent, InputTextControlComponent],\n templateUrl: './ui-text-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputTextComponent), multi: true },\n ],\n})\nexport class InputTextComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'text';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-text-${InputTextComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame\n [label]=\"label\"\n [hint]=\"hint\"\n [error]=\"error\"\n [required]=\"required\"\n [forId]=\"controlId\"\n [disabled]=\"disabled\"\n [actions]=\"actions\"\n (actionTriggered)=\"triggerAction($event)\"\n>\n <input-text-control\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [id]=\"controlId\"\n [type]=\"type\"\n [element]=\"element\"\n [rows]=\"rows\"\n [autocomplete]=\"autocomplete\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n (touched)=\"onTouched()\"\n />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-textarea-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" element=\"textarea\" [rows]=\"rows\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputTextareaControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() rows = 4; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputTextareaControlComponent } from './ui-textarea-input-control.component';\nimport { validateFormControl } from '../form-control.validator';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-textarea',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputTextareaControlComponent],\n templateUrl: './ui-textarea-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextareaComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputTextareaComponent), multi: true },\n ],\n})\nexport class InputTextareaComponent implements ControlValueAccessor, Validator {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n readonly type = 'text';\n readonly element: UiInputElement = 'textarea';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-textarea-${InputTextareaComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required, this.pattern); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-textarea-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [rows]=\"rows\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-file-control',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-file-input-control.component.html',\n})\nexport class InputFileControlComponent {\n @Input() accept?: string;\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() selectedFiles: File[] = [];\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() removeFile = new EventEmitter<number>();\n @Output() touched = new EventEmitter<void>();\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filesSelected.emit(Array.from(input.files ?? []));\n input.value = '';\n }\n}\n","<input data-field-control type=\"file\" class=\"rounded-xl border border-slate-200 bg-white px-3 py-2 text-sm normal-case tracking-normal text-slate-800 file:mr-3 file:rounded-lg file:border-0 file:bg-slate-900 file:px-3 file:py-2 file:text-sm file:font-medium file:text-white\" [attr.accept]=\"accept ?? null\" [attr.multiple]=\"multiple ? '' : null\" [disabled]=\"disabled\" (change)=\"onFilesSelected($event)\" (blur)=\"touched.emit()\" />\n@if (selectedFiles.length) {\n <div class=\"mt-1 flex flex-col gap-1 text-[0.7rem] font-normal normal-case tracking-normal text-slate-700\">\n @for (file of selectedFiles; track file.name + file.size; let i = $index) {\n <div class=\"flex items-center justify-between rounded border border-slate-200 bg-slate-50 px-2 py-1\">\n <span class=\"truncate pr-2\">{{ file.name }}</span>\n <button type=\"button\" class=\"text-rose-600\" [disabled]=\"disabled\" (click)=\"removeFile.emit(i)\">Видалити</button>\n </div>\n }\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputFileControlComponent } from './ui-file-input-control.component';\n\n@Component({\n selector: 'input-file',\n standalone: true,\n imports: [CommonModule, FieldFrameComponent, InputFileControlComponent],\n templateUrl: './ui-file-input.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputFileComponent), multi: true }],\n})\nexport class InputFileComponent implements ControlValueAccessor {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() accept?: string;\n @Input() multiple = false;\n @Input() disabled = false;\n @Output() filesChange = new EventEmitter<File[]>();\n value: File | File[] | null = null;\n private onChange: (value: File | File[] | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: File | File[] | null): void { this.value = value; }\n registerOnChange(fn: (value: File | File[] | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n get selectedFiles(): File[] {\n if (this.value instanceof File) return [this.value];\n return Array.isArray(this.value) ? this.value.filter((item): item is File => item instanceof File) : [];\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n const value = this.multiple ? files : (files[0] ?? null);\n this.value = value;\n this.onChange(value);\n this.filesChange.emit(files);\n input.value = '';\n }\n\n handleFilesSelected(files: File[]): void {\n const value = this.multiple ? files : (files[0] ?? null);\n this.value = value;\n this.onChange(value);\n this.filesChange.emit(files);\n }\n\n remove(index: number): void {\n const files = this.selectedFiles.filter((_file, fileIndex) => fileIndex !== index);\n const value = this.multiple ? files : (files[0] ?? null);\n this.value = value;\n this.onChange(value);\n this.filesChange.emit(files);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <input-file-control [accept]=\"accept\" [multiple]=\"multiple\" [disabled]=\"disabled\" [selectedFiles]=\"selectedFiles\" (filesSelected)=\"handleFilesSelected($event)\" (removeFile)=\"remove($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport type { UiPhotoPreview } from './ui-photo-input.component';\n\n@Component({\n selector: 'input-photo-control',\n standalone: true,\n imports: [CommonModule, DragDropModule],\n templateUrl: './ui-photo-input-control.component.html',\n})\nexport class InputPhotoControlComponent {\n @Input() accept = 'image/*';\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() canSelectMore = true;\n @Input() previews: UiPhotoPreview[] = [];\n @Output() filesSelected = new EventEmitter<File[]>();\n @Output() removed = new EventEmitter<number>();\n @Output() dropped = new EventEmitter<CdkDragDrop<UiPhotoPreview[]>>();\n @Output() touched = new EventEmitter<void>();\n\n selectFiles(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filesSelected.emit(Array.from(input.files ?? []));\n input.value = '';\n this.touched.emit();\n }\n}\n","<button data-field-control type=\"button\" class=\"flex min-h-24 w-full items-center justify-center rounded-xl border border-dashed border-slate-300 bg-slate-50 px-4 py-3 text-xs font-semibold uppercase tracking-[0.15em] text-slate-600 transition hover:bg-slate-100 disabled:opacity-60\" [disabled]=\"disabled || !canSelectMore\" (click)=\"photoInput.click()\">\n {{ previews.length ? 'Додати ще файл' : 'Обрати файл' }}\n</button>\n<input #photoInput type=\"file\" class=\"hidden\" [attr.accept]=\"accept\" [attr.multiple]=\"multiple && canSelectMore ? '' : null\" [disabled]=\"disabled\" (change)=\"selectFiles($event)\" />\n@if (previews.length) {\n <div class=\"mt-2 grid grid-cols-2 gap-2 md:grid-cols-4\" cdkDropList cdkDropListOrientation=\"mixed\" [cdkDropListData]=\"previews\" (cdkDropListDropped)=\"dropped.emit($event)\">\n @for (preview of previews; track preview.url; let i = $index) {\n <div class=\"relative overflow-hidden rounded-lg border border-slate-200 bg-slate-50\" cdkDrag [cdkDragDisabled]=\"disabled || preview.source === 'file'\">\n @if (preview.isImage) { <img [src]=\"preview.url\" [alt]=\"preview.name\" class=\"h-28 w-full object-cover\" /> }\n @else { <div class=\"flex h-28 items-center justify-center px-2 text-center text-[0.65rem] text-slate-600\">{{ preview.name }}</div> }\n <div class=\"absolute left-1 top-1 rounded bg-slate-900/85 px-2 py-1 text-[10px] font-semibold text-white\">#{{ i + 1 }}</div>\n <button type=\"button\" class=\"absolute right-1 top-1 rounded bg-white/95 px-2 py-1 text-[10px] text-rose-600\" [disabled]=\"disabled\" (click)=\"removed.emit(i)\">Видалити</button>\n </div>\n }\n </div>\n}\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, forwardRef, Input, OnChanges, OnDestroy, Output, SimpleChanges, inject } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Observable, forkJoin, map } from 'rxjs';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputPhotoControlComponent } from './ui-photo-input-control.component';\n\nexport interface UiPhotoPreview {\n name: string;\n url: string;\n isImage: boolean;\n source: 'file' | 'id';\n}\n\n@Component({\n selector: 'input-photo',\n standalone: true,\n imports: [CommonModule, DragDropModule, FieldFrameComponent, InputPhotoControlComponent],\n templateUrl: './ui-photo-input.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputPhotoComponent), multi: true }],\n})\nexport class InputPhotoComponent implements OnChanges, OnDestroy, ControlValueAccessor {\n private readonly http = inject(HttpClient);\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() accept = 'image/*';\n @Input() multiple = false;\n @Input() limit = Number.MAX_SAFE_INTEGER;\n @Input() disabled = false;\n @Output() filesChange = new EventEmitter<File[]>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n\n value: string | string[] | null = null;\n pendingFiles: File[] = [];\n previews: UiPhotoPreview[] = [];\n uploading = false;\n private readonly fileTypes = new Map<string, string>();\n private onChange: (value: string | string[] | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | string[] | null): void {\n this.value = value;\n this.rebuildPreviews();\n }\n registerOnChange(fn: (value: string | string[] | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['multiple']) this.rebuildPreviews();\n }\n\n ngOnDestroy(): void {\n this.revokeBlobUrls();\n }\n\n get canSelectMore(): boolean {\n return !this.multiple || this.ids.length + this.pendingFiles.length < this.normalizedLimit;\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n if (!files.length || this.disabled) return;\n const accepted = this.multiple ? files.slice(0, Math.max(0, this.normalizedLimit - this.ids.length - this.pendingFiles.length)) : [files[0]];\n this.pendingFiles = this.multiple ? [...this.pendingFiles, ...accepted] : [accepted[0]];\n this.filesChange.emit(this.pendingFiles);\n this.rebuildPreviews();\n this.uploadFiles(accepted);\n }\n\n handleFilesSelected(files: File[]): void {\n if (!files.length || this.disabled) return;\n const accepted = this.multiple ? files.slice(0, Math.max(0, this.normalizedLimit - this.ids.length - this.pendingFiles.length)) : [files[0]];\n this.pendingFiles = this.multiple ? [...this.pendingFiles, ...accepted] : [accepted[0]];\n this.filesChange.emit(this.pendingFiles);\n this.rebuildPreviews();\n this.uploadFiles(accepted);\n }\n\n remove(index: number): void {\n const ids = [...this.ids];\n if (index < ids.length) {\n ids.splice(index, 1);\n this.emitValue(this.multiple ? ids : (ids[0] ?? null));\n } else {\n this.pendingFiles.splice(index - ids.length, 1);\n this.filesChange.emit(this.pendingFiles);\n this.rebuildPreviews();\n }\n }\n\n drop(event: CdkDragDrop<UiPhotoPreview[]>): void {\n if (this.disabled || this.pendingFiles.length || this.ids.length < 2) return;\n const ids = [...this.ids];\n moveItemInArray(ids, event.previousIndex, event.currentIndex);\n this.emitValue(this.multiple ? ids : (ids[0] ?? null));\n }\n\n private get ids(): string[] {\n if (typeof this.value === 'string') return this.value.trim() ? [this.value] : [];\n return Array.isArray(this.value) ? this.value.filter((item) => !!String(item || '').trim()) : [];\n }\n\n private get normalizedLimit(): number {\n return Number.isInteger(Number(this.limit)) && Number(this.limit) > 0 ? Number(this.limit) : Number.MAX_SAFE_INTEGER;\n }\n\n private emitValue(value: string | string[] | null): void {\n this.value = value;\n this.onChange(value);\n this.rebuildPreviews(value);\n }\n\n private uploadFiles(files: File[]): void {\n if (!files.length) return;\n this.uploading = true;\n this.uploadingChange.emit(true);\n forkJoin(files.map((file) => this.uploadFile(file))).subscribe({\n next: (results) => {\n const uploaded = results.map((item) => String(item.imageId || '').trim()).filter(Boolean);\n results.forEach((item) => {\n const id = String(item.imageId || '').trim();\n if (id && item.type) this.fileTypes.set(id, item.type);\n });\n const next = this.multiple ? [...this.ids, ...uploaded].slice(0, this.normalizedLimit) : (uploaded[0] ?? null);\n this.pendingFiles = this.pendingFiles.filter((file) => !files.includes(file));\n this.emitValue(next);\n this.filesChange.emit(this.pendingFiles);\n this.uploading = false;\n this.uploadingChange.emit(false);\n },\n error: () => {\n this.pendingFiles = this.pendingFiles.filter((file) => !files.includes(file));\n this.rebuildPreviews();\n this.uploading = false;\n this.uploadingChange.emit(false);\n },\n });\n }\n\n private uploadFile(file: File): Observable<{ imageId: string; type?: string }> {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post<{ id: string; type?: string }>('/api/files/', formData).pipe(\n map((response) => ({ imageId: response.id, type: response.type })),\n );\n }\n\n private rebuildPreviews(value: string | string[] | null = this.value): void {\n this.revokeBlobUrls();\n const ids = typeof value === 'string' ? (value.trim() ? [value] : []) : (Array.isArray(value) ? value : []);\n this.previews = [\n ...ids.map((id) => ({ name: id, url: this.resolveImageUrl(id), isImage: this.isPreviewableType(this.fileTypes.get(id)), source: 'id' as const })),\n ...this.pendingFiles.map((file) => ({ name: file.name, url: URL.createObjectURL(file), isImage: file.type.startsWith('image/'), source: 'file' as const })),\n ];\n }\n\n private revokeBlobUrls(): void {\n for (const preview of this.previews) if (preview.url.startsWith('blob:')) URL.revokeObjectURL(preview.url);\n }\n\n private resolveImageUrl(value: string): string {\n if (/^(https?:\\/\\/|\\/|data:)/i.test(value)) return value;\n return `/api/files/${encodeURIComponent(value)}/preview?scale=25`;\n }\n\n private isPreviewableType(value?: string): boolean {\n if (!value) return true;\n const normalized = value.toLowerCase();\n return normalized.startsWith('image/') || normalized === 'application/pdf';\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <input-photo-control [accept]=\"accept\" [multiple]=\"multiple\" [disabled]=\"disabled\" [canSelectMore]=\"canSelectMore\" [previews]=\"previews\" (filesSelected)=\"handleFilesSelected($event)\" (removed)=\"remove($event)\" (dropped)=\"drop($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n HostListener,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { Subject, debounceTime, distinctUntilChanged, forkJoin } from 'rxjs';\nimport { Check, ChevronDown, LucideAngularModule, X } from 'lucide-angular';\nimport { UiPopupService } from '../../popup/ui-popup.service';\nimport { validateFormControl } from '../form-control.validator';\n\ninterface SuggestItem {\n key: string;\n label: string;\n imageId?: string | null;\n}\n\nexport interface UiSelectOption {\n label: string;\n value: string | null;\n disabled?: boolean;\n imageUrl?: string;\n}\n\nexport type UiSelectValue = string | string[] | null;\n\n@Component({\n selector: 'input-select-control',\n standalone: true,\n imports: [LucideAngularModule, CommonModule, FormsModule, CdkConnectedOverlay, CdkOverlayOrigin],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './ui-select.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputSelectControlComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputSelectControlComponent), multi: true },\n ],\n})\nexport class InputSelectControlComponent implements ControlValueAccessor, OnChanges, Validator {\n readonly closeIcon = X;\n readonly chevronDownIcon = ChevronDown;\n readonly checkIcon = Check;\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly http = inject(HttpClient);\n private readonly popupService = inject(UiPopupService);\n private readonly closeActivePopup = () => this.closeDropdown();\n\n @Input() label?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() data?: string;\n @Input() dataParams: Record<string, string | number | boolean | null | undefined> = {};\n @Input() required = false;\n @Input() disabled = false;\n @Input({ transform: booleanAttribute })\n multiple = false;\n @Input() emptyStateLabel = 'Немає варіантів для вибору';\n @Input() searchable = true;\n private _options: UiSelectOption[] = [];\n @Input()\n set options(value: UiSelectOption[]) {\n this._options = value ?? [];\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n }\n get options(): UiSelectOption[] {\n return this._options;\n }\n @Input() error?: string;\n @Input() hint?: string;\n @Input() triggerClass = '';\n @Input() panelClass = '';\n @Output() valueChange = new EventEmitter<UiSelectValue>();\n @Output() searchChange = new EventEmitter<string>();\n\n readonly popupMinWidth = 300;\n readonly popupViewportMargin = 16;\n readonly popupOffset = 8;\n\n @ViewChild('dropdownTrigger', { static: true, read: ElementRef }) dropdownTrigger?: ElementRef<HTMLButtonElement>;\n readonly dropdownPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: this.popupOffset,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -this.popupOffset,\n },\n ];\n\n isOpen = false;\n popupWidth = 0;\n value: string | null = '';\n multiValue: string[] = [];\n selectedOptions: UiSelectOption[] = [];\n searchTerm = '';\n isDictionaryLoading = false;\n\n private readonly searchChanges$ = new Subject<string>();\n private readonly dictionaryRequestVersions = new Map<string, number>();\n private dictionaryOptions: UiSelectOption[] = [];\n private onChange: (value: UiSelectValue) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n constructor() {\n this.searchChanges$.pipe(debounceTime(300), distinctUntilChanged()).subscribe((next) => {\n this.searchTerm = next;\n if (this.getDictionaryName()) {\n this.loadDictionaryOptions(next);\n return;\n }\n\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n });\n\n this.destroyRef.onDestroy(() => {\n this.searchChanges$.complete();\n this.dictionaryRequestVersions.clear();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const dataChanged = 'data' in changes;\n const dataParamsChanged = 'dataParams' in changes\n && !this.sameDataParams(changes['dataParams'].previousValue, changes['dataParams'].currentValue);\n\n if (dataChanged || dataParamsChanged) {\n this.reloadDictionaryOptions();\n }\n }\n\n writeValue(value: UiSelectValue): void {\n if (this.multiple) {\n this.multiValue = Array.isArray(value) ? value : [];\n } else {\n this.value = (value as string) ?? '';\n }\n this.updateSelectionFromValue();\n this.ensureSelectedDictionaryOptionsLoaded();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: UiSelectValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.closeDropdown();\n return;\n }\n const fieldWidth = this.dropdownTrigger!.nativeElement.getBoundingClientRect().width;\n this.popupWidth = Math.max(fieldWidth, this.popupMinWidth);\n this.isOpen = true;\n this.popupService.open(this.closeActivePopup);\n this.searchTerm = '';\n this.searchChanges$.next('');\n this.cdr.markForCheck();\n }\n\n selectOption(option: UiSelectOption, event: Event): void {\n event.stopPropagation();\n const key = this.getOptionValue(option);\n if (this.multiple) {\n const normalized = this.multiValue.includes(key)\n ? this.multiValue.filter((item) => item !== key)\n : [...this.multiValue, key];\n this.multiValue = normalized;\n this.onChange(normalized);\n this.valueChange.emit(normalized);\n } else {\n const nextValue = this.value === key ? null : key;\n this.value = nextValue;\n this.onChange(nextValue);\n this.valueChange.emit(nextValue);\n this.closeDropdown();\n }\n this.updateSelectionFromValue();\n }\n\n markTouched(): void {\n this.onTouched();\n }\n\n closeDropdown(): void {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n this.onTouched();\n this.searchTerm = '';\n this.searchChanges$.next('');\n this.popupService.close(this.closeActivePopup);\n this.cdr.markForCheck();\n }\n\n @HostListener('document:click')\n onDocumentClick(): void {\n if (this.isOpen) {\n this.closeDropdown();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.isOpen) {\n this.closeDropdown();\n }\n }\n\n get displayLabel(): string {\n if (this.multiple) {\n if (!this.selectedOptions.length) {\n return this.placeholder ?? 'Оберіть…';\n }\n return `${this.selectedOptions.length}`;\n }\n return this.selectedOptions[0]?.label ?? this.placeholder ?? 'Оберіть…';\n }\n\n isSelected(option: UiSelectOption): boolean {\n const value = this.getOptionValue(option);\n if (this.multiple) {\n return this.multiValue.includes(value);\n }\n return this.value === value;\n }\n\n getOptionValue(option: UiSelectOption): string {\n return option.value ?? '';\n }\n\n trackOption(index: number, option: UiSelectOption): string {\n return `${this.getOptionValue(option)}::${String(option.label || '').trim()}::${index}`;\n }\n\n get visibleOptions(): UiSelectOption[] {\n const options = this.getRenderOptions();\n if (!this.searchable || this.getDictionaryName() || !this.searchTerm.trim()) {\n return options;\n }\n\n const search = this.searchTerm.trim().toLowerCase();\n return options.filter((option) => {\n return String(option.label ?? '').toLowerCase().includes(search);\n });\n }\n\n onSearchChange(value: string): void {\n const next = String(value ?? '');\n this.searchChanges$.next(next);\n this.searchChange.emit(next);\n }\n\n removeOption(option: UiSelectOption, event: Event): void {\n event.stopPropagation();\n\n const key = this.getOptionValue(option);\n\n if (this.multiple) {\n this.multiValue = this.multiValue.filter((v) => v !== key);\n this.onChange(this.multiValue);\n this.valueChange.emit(this.multiValue);\n this.updateSelectionFromValue();\n }\n }\n\n clearValue(event: Event): void {\n event.stopPropagation();\n if (this.disabled) return;\n\n const nextValue: UiSelectValue = this.multiple ? [] : null;\n this.value = '';\n this.multiValue = [];\n this.onChange(nextValue);\n this.valueChange.emit(nextValue);\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n }\n\n private updateSelectionFromValue(): void {\n const options = this.getRenderOptions();\n if (this.multiple) {\n this.selectedOptions = options.filter((option) => this.multiValue.includes(this.getOptionValue(option)));\n return;\n }\n\n const current = options.find((option) => this.getOptionValue(option) === (this.value ?? ''));\n this.selectedOptions = current ? [current] : [];\n }\n\n private getRenderOptions(): UiSelectOption[] {\n const merged = this.mergeOptions(this.options, this.dictionaryOptions);\n return merged;\n }\n\n private mergeOptions(...optionSets: UiSelectOption[][]): UiSelectOption[] {\n const merged = new Map<string, UiSelectOption>();\n for (const options of optionSets) {\n for (const option of options || []) {\n const value = this.getOptionValue(option);\n const key = `${value}::${String(option.label || '').trim()}`;\n if (!merged.has(key)) {\n merged.set(key, option);\n }\n }\n }\n return [...merged.values()];\n }\n\n private isBlankOption(option: UiSelectOption): boolean {\n return String(option.value ?? '') === '';\n }\n\n private getDictionaryName(): string {\n return String(this.data || '').trim();\n }\n\n private sameDataParams(previous: unknown, current: unknown): boolean {\n if (previous === current) return true;\n if (!previous || !current || typeof previous !== 'object' || typeof current !== 'object') return false;\n\n const previousEntries = Object.entries(previous as Record<string, unknown>);\n const currentEntries = Object.entries(current as Record<string, unknown>);\n if (previousEntries.length !== currentEntries.length) return false;\n\n return previousEntries.every(([key, value]) =>\n Object.prototype.hasOwnProperty.call(current, key)\n && (current as Record<string, unknown>)[key] === value\n );\n }\n\n private reloadDictionaryOptions(): void {\n const dictionaryName = this.getDictionaryName();\n this.dictionaryRequestVersions.clear();\n this.dictionaryOptions = [];\n this.isDictionaryLoading = false;\n\n if (!dictionaryName) {\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n return;\n }\n\n this.loadDictionaryOptions(this.searchTerm);\n }\n\n private loadDictionaryOptions(query: string): void {\n const dictionaryName = this.getDictionaryName();\n if (!dictionaryName) {\n return;\n }\n\n const requestVersion = (this.dictionaryRequestVersions.get(dictionaryName) || 0) + 1;\n this.dictionaryRequestVersions.set(dictionaryName, requestVersion);\n this.isDictionaryLoading = true;\n\n this.loadSuggestItems(dictionaryName, String(query || '').trim()).subscribe({\n next: (items) => {\n if ((this.dictionaryRequestVersions.get(dictionaryName) || 0) !== requestVersion) {\n return;\n }\n\n this.dictionaryOptions = this.normalizeSuggestItems(items);\n this.isDictionaryLoading = false;\n this.ensureSelectedDictionaryOptionsLoaded();\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n },\n error: () => {\n if ((this.dictionaryRequestVersions.get(dictionaryName) || 0) !== requestVersion) {\n return;\n }\n\n this.dictionaryOptions = [];\n this.isDictionaryLoading = false;\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n },\n });\n }\n\n private ensureSelectedDictionaryOptionsLoaded(): void {\n const dictionaryName = this.getDictionaryName();\n if (!dictionaryName) {\n return;\n }\n\n const existingValues = new Set(this.getRenderOptions().map((option) => this.getOptionValue(option)));\n const selectedValues = this.multiple ? this.multiValue : [this.value];\n const missingValues = selectedValues\n .map((item) => String(item || '').trim())\n .filter((item) => !!item && !existingValues.has(item));\n\n if (!missingValues.length) {\n return;\n }\n\n forkJoin(missingValues.map((value) => this.loadSuggestItem(dictionaryName, value))).subscribe({\n next: (items) => {\n const nextOptions = [...this.dictionaryOptions];\n for (const item of items) {\n const normalized = this.normalizeSuggestItem(item);\n if (!nextOptions.some((option) => this.getOptionValue(option) === normalized.value)) {\n nextOptions.push(normalized);\n }\n }\n this.dictionaryOptions = nextOptions;\n this.updateSelectionFromValue();\n this.cdr.markForCheck();\n },\n });\n }\n\n private normalizeSuggestItems(items: SuggestItem[] | null | undefined): UiSelectOption[] {\n return (items || [])\n .map((item) => this.normalizeSuggestItem(item))\n .filter((item) => !!item.label || item.value !== null);\n }\n\n private normalizeSuggestItem(item: SuggestItem): UiSelectOption {\n return {\n label: String(item?.label ?? ''),\n value: item?.key != null ? String(item.key) : null,\n imageUrl: item?.imageId ? `/api/files/${item.imageId}/preview?scale=25` : undefined,\n };\n }\n\n private loadSuggestItems(name: string, query?: string) {\n const params = new URLSearchParams();\n if (query?.trim()) params.set('q', query.trim());\n for (const [key, value] of Object.entries(this.dataParams || {})) {\n if (value !== null && value !== undefined && String(value).trim()) {\n params.set(key, String(value));\n }\n }\n const suffix = params.toString() ? `?${params.toString()}` : '';\n return this.http.get<SuggestItem[]>(`/api/suggest/${encodeURIComponent(name)}${suffix}`);\n }\n\n private loadSuggestItem(name: string, key: string) {\n return this.http.get<SuggestItem>(`/api/suggest/${encodeURIComponent(name)}/${encodeURIComponent(key)}`);\n }\n}\n"," <div class=\"relative w-full\">\n\n <button\n data-field-control\n cdkOverlayOrigin\n #dropdownTrigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"relative flex min-h-10 w-full flex-nowrap items-center gap-2 rounded-xl border border-slate-200 bg-white px-4 py-2 pr-14 text-sm text-slate-900 transition hover:border-slate-300 focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\"\n [class]=\"triggerClass\"\n [class.opacity-50]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown($event)\"\n >\n\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-2\" [class.-ml-2]=\"multiple\">\n <!-- MULTIPLE MODE -->\n @if (multiple) {\n\n @if (selectedOptions.length) {\n\n @for (option of selectedOptions; track option.value) {\n <span\n class=\"inline-flex h-6 shrink-0 items-center gap-1 rounded-md bg-slate-100 px-2 text-xs font-medium text-slate-700\"\n >\n {{ option.label }}\n\n <span\n role=\"button\"\n tabindex=\"0\"\n class=\"text-slate-400 hover:text-rose-500 transition-colors\"\n (click)=\"removeOption(option, $event)\"\n (keydown.enter)=\"removeOption(option, $event)\"\n (keydown.space)=\"$event.preventDefault(); removeOption(option, $event)\"\n >\n <lucide-icon [img]=\"closeIcon\" class=\"h-4 w-4 shrink-0\"></lucide-icon>\n </span>\n </span>\n }\n\n } @else {\n <span class=\"text-slate-400\">\n {{ placeholder ?? 'Оберіть…' }}\n </span>\n }\n\n } @else {\n\n <!-- SINGLE MODE -->\n @if (selectedOptions[0]?.imageUrl) {\n <img [src]=\"selectedOptions[0]?.imageUrl\" alt=\"\" class=\"h-7 w-7 rounded object-cover\" />\n }\n <span class=\"min-w-0 truncate\">\n {{ selectedOptions[0]?.label ?? placeholder ?? 'Оберіть…' }}\n </span>\n\n }\n </span>\n\n <span class=\"absolute right-3 top-1/2 flex -translate-y-1/2 items-center gap-0\">\n <lucide-icon [img]=\"chevronDownIcon\" class=\"h-4 w-4 shrink-0 text-slate-400\"></lucide-icon>\n\n @if (selectedOptions.length && !disabled) {\n <span\n role=\"button\"\n tabindex=\"0\"\n class=\"inline-flex h-5 w-5 items-center justify-center rounded-md text-slate-400 transition-colors hover:bg-slate-100 hover:text-rose-500\"\n aria-label=\"Очистити\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"$event.preventDefault(); clearValue($event)\"\n >\n <lucide-icon [img]=\"closeIcon\" class=\"h-4 w-4 shrink-0\"></lucide-icon>\n </span>\n }\n </span>\n\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"dropdownTrigger\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPositions]=\"dropdownPositions\"\n [cdkConnectedOverlayViewportMargin]=\"popupViewportMargin\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n (detach)=\"closeDropdown()\"\n >\n <!-- DROPDOWN -->\n <div\n class=\"z-50 w-full max-w-[calc(100vw-2rem)] rounded-xl border border-slate-200 bg-white shadow-lg\"\n [style.width.px]=\"popupWidth\"\n [style.max-width]=\"'calc(100vw - 2rem)'\"\n [class]=\"panelClass\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (searchable) {\n <div class=\"border-b border-slate-100 p-2\">\n <input\n type=\"text\"\n class=\"w-full rounded-xl border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 outline-none transition focus:border-slate-900 focus:ring-2 focus:ring-slate-200\"\n placeholder=\"Пошук...\"\n [ngModel]=\"searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\n <div class=\"max-h-60 overflow-auto\">\n @if (!visibleOptions.length) {\n <div class=\"px-4 py-3 text-sm text-slate-500\">\n @if (isDictionaryLoading && data) {\n Завантаження...\n } @else {\n {{ emptyStateLabel }}\n }\n </div>\n } @else {\n @for (option of visibleOptions; track trackOption($index, option)) {\n <button\n type=\"button\"\n class=\"flex w-full items-start justify-between gap-3 whitespace-normal break-words px-4 py-2 text-left text-sm hover:bg-slate-50\"\n [class.bg-slate-100]=\"isSelected(option)\"\n (click)=\"selectOption(option, $event)\"\n >\n <span class=\"flex min-w-0 flex-1 items-center gap-2\">\n @if (option.imageUrl) {\n <img [src]=\"option.imageUrl\" alt=\"\" class=\"h-8 w-8 shrink-0 rounded object-cover\" />\n }\n <span class=\"whitespace-normal break-words\">{{ option.label }}</span>\n </span>\n\n @if (isSelected(option)) {\n <lucide-icon [img]=\"checkIcon\" class=\"text-xs text-sky-500\"></lucide-icon>\n }\n </button>\n }\n }\n </div>\n\n </div>\n </ng-template>\n\n </div>\n","import { AfterViewInit, booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { UiSelectOption, UiSelectValue, InputSelectControlComponent } from './ui-select.component';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { validateFormControl } from '../form-control.validator';\n\n@Component({\n selector: 'input-select',\n standalone: true,\n imports: [FieldFrameComponent, InputSelectControlComponent],\n templateUrl: './ui-select-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputSelectComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputSelectComponent), multi: true },\n ],\n})\nexport class InputSelectComponent implements ControlValueAccessor, Validator, AfterViewInit {\n @ViewChild(InputSelectControlComponent) private control?: InputSelectControlComponent;\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() data?: string;\n @Input() dataParams: Record<string, string | number | boolean | null | undefined> = {};\n @Input() required = false;\n @Input() disabled = false;\n @Input({ transform: booleanAttribute }) multiple = false;\n @Input() emptyStateLabel = 'Немає варіантів для вибору';\n @Input() searchable = true;\n @Input() options: UiSelectOption[] = [];\n @Input() triggerClass = '';\n @Input() panelClass = '';\n\n @Output() valueChange = new EventEmitter<UiSelectValue>();\n @Output() searchChange = new EventEmitter<string>();\n\n private pendingValue: UiSelectValue = null;\n private onChange: (value: UiSelectValue) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n ngAfterViewInit(): void {\n this.control?.registerOnChange((value) => {\n this.onChange(value);\n this.valueChange.emit(value);\n });\n this.control?.registerOnTouched(() => this.onTouched());\n this.control?.writeValue(this.pendingValue);\n }\n\n writeValue(value: UiSelectValue): void {\n this.pendingValue = value;\n this.control?.writeValue(value);\n }\n\n registerOnChange(fn: (value: UiSelectValue) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; }\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [disabled]=\"disabled\">\n <input-select-control\n [placeholder]=\"placeholder\"\n [name]=\"name\"\n [data]=\"data\"\n [dataParams]=\"dataParams\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n [emptyStateLabel]=\"emptyStateLabel\"\n [searchable]=\"searchable\"\n [options]=\"options\"\n [triggerClass]=\"triggerClass\"\n [panelClass]=\"panelClass\"\n (valueChange)=\"valueChange.emit($event)\"\n (searchChange)=\"searchChange.emit($event)\"\n />\n</field-frame>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'input-slug-control',\n standalone: true,\n template: `<input data-field-control type=\"text\" class=\"w-full rounded-xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-200\" [attr.placeholder]=\"placeholder\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [disabled]=\"disabled\" [attr.id]=\"id\" [value]=\"value\" (input)=\"valueChange.emit($any($event.target).value)\" (blur)=\"touched.emit()\" />`,\n})\nexport class InputSlugControlComponent {\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() autocomplete = 'off';\n @Input() disabled = false;\n @Input() value = '';\n @Output() valueChange = new EventEmitter<string>();\n @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { validateFormControl } from '../form-control.validator';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputSlugControlComponent } from './ui-slug-input-control.component';\n\n@Component({\n selector: 'input-slug',\n standalone: true,\n imports: [CommonModule, FormsModule, FieldFrameComponent, InputSlugControlComponent],\n templateUrl: './ui-slug-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputSlugComponent),\n multi: true,\n },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => InputSlugComponent), multi: true },\n ],\n})\nexport class InputSlugComponent implements ControlValueAccessor, Validator {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() required = false;\n @Input() autocomplete = 'off';\n @Input() error?: string;\n @Output() invalidInput = new EventEmitter<void>();\n\n disabled = false;\n value = '';\n private static nextId = 0;\n private readonly generatedId = `input-slug-${InputSlugComponent.nextId++}`;\n private onChange: (value: string) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n\n writeValue(value: string | null): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n validate(control: AbstractControl): ValidationErrors | null { return validateFormControl(control, this.required); }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onValueChange(target: HTMLInputElement): void {\n const normalized = this.normalizeSlug(target.value);\n if (target.value !== normalized) {\n target.value = normalized;\n this.invalidInput.emit();\n }\n this.value = normalized;\n this.onChange(normalized);\n }\n\n handleValueChange(value: string): void {\n const normalized = this.normalizeSlug(value);\n if (value !== normalized) this.invalidInput.emit();\n this.value = normalized;\n this.onChange(normalized);\n }\n\n private normalizeSlug(value: string): string {\n return (value ?? '')\n .toLowerCase()\n .replace(/\\s+/g, '_')\n .replace(/[^a-z0-9_]/g, '');\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\">\n <input-slug-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [autocomplete]=\"autocomplete\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"handleValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { Type } from '@angular/core';\nimport { InputBarcodeComponent } from './barcode/ui-barcode-scanner-input.wrapper';\nimport { InputCheckboxComponent } from './checkbox/ui-checkbox-input.component';\nimport { InputColorComponent } from './color/ui-color-input.component';\nimport { InputDateComponent } from './date/ui-date-input.component.wrapper';\nimport { InputDatetimeComponent } from './datetime/ui-datetime-input.component.wrapper';\nimport { InputEmailComponent } from './email/ui-email-input.component';\nimport { InputNumberComponent } from './number/ui-number-input.component';\nimport { InputPasswordComponent } from './password/ui-password-input.component';\nimport { InputTextComponent } from './text/ui-text-input.component';\nimport { InputTextareaComponent } from './textarea/ui-textarea-input.component';\nimport { InputFileComponent } from './file/ui-file-input.component';\nimport { InputPhotoComponent } from './photo/ui-photo-input.component';\nimport { InputSelectComponent } from './select/ui-select-input.component';\nimport { InputSlugComponent } from './slug/ui-slug-input.component';\n\nexport type UiFormInputType = 'text' | 'number' | 'date' | 'datetime' | 'email' | 'password' | 'textarea' | 'select' | 'checkbox' | 'color' | 'slug' | 'file' | 'photo' | 'barcode';\n\nexport const UI_FORM_INPUT_REGISTRY: Record<UiFormInputType, Type<unknown>> = {\n text: InputTextComponent,\n number: InputNumberComponent,\n date: InputDateComponent,\n datetime: InputDatetimeComponent,\n email: InputEmailComponent,\n password: InputPasswordComponent,\n textarea: InputTextareaComponent,\n select: InputSelectComponent,\n checkbox: InputCheckboxComponent,\n color: InputColorComponent,\n slug: InputSlugComponent,\n file: InputFileComponent,\n photo: InputPhotoComponent,\n barcode: InputBarcodeComponent,\n};\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ComponentRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild, ViewContainerRef, inject } from '@angular/core';\nimport { UiDynamicFormField, UiDynamicFormFieldAction, UiDynamicFormValue } from '../dynamic/ui-dynamic-form.models';\nimport { UI_FORM_INPUT_REGISTRY, UiFormInputType } from './form-input.registry';\n\ntype FormControlInstance = {\n writeValue?: (value: unknown) => void;\n registerOnChange?: (callback: (value: unknown) => void) => void;\n registerOnTouched?: (callback: () => void) => void;\n setDisabledState?: (disabled: boolean) => void;\n actionTriggered?: EventEmitter<UiDynamicFormFieldAction>;\n valueChange?: { subscribe: (handler: (value: unknown) => void) => unknown };\n scanned?: { subscribe: (handler: (value: string) => void) => unknown };\n searchRequested?: { subscribe: (handler: () => void) => unknown };\n filesChange?: { subscribe: (handler: (files: File[]) => void) => unknown };\n uploadingChange?: { subscribe: (handler: (uploading: boolean) => void) => unknown };\n};\n\n@Component({\n selector: 'field-input',\n standalone: true,\n imports: [CommonModule],\n template: `\n <ng-container #inputContainer></ng-container>\n `,\n})\nexport class FieldInputComponent implements OnChanges, AfterViewInit {\n @Input() field!: UiDynamicFormField;\n @Input() value: UiDynamicFormValue[string];\n @Input() model: UiDynamicFormValue = {};\n @Input() error = '';\n @Input() disabled = false;\n @Input() visibleActions: UiDynamicFormFieldAction[] = [];\n\n @Output() valueChange = new EventEmitter<unknown>();\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n @Output() lookupRequested = new EventEmitter<void>();\n @Output() barcodeScanned = new EventEmitter<string>();\n @Output() filesChange = new EventEmitter<File[]>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n\n @ViewChild('inputContainer', { read: ViewContainerRef })\n private inputContainer?: ViewContainerRef;\n private componentRef?: ComponentRef<unknown>;\n private readonly fallbackViewContainer = inject(ViewContainerRef);\n private viewReady = false;\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n if (this.field && !this.componentRef) this.render();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['field']) {\n if (this.viewReady) this.render();\n return;\n }\n if (this.viewReady) this.syncInputs();\n }\n\n private render(): void {\n const viewContainer = this.inputContainer || this.fallbackViewContainer;\n viewContainer.clear();\n const inputType = String(this.field?.type || 'text') as UiFormInputType;\n const componentType = UI_FORM_INPUT_REGISTRY[inputType] || UI_FORM_INPUT_REGISTRY.text;\n this.componentRef = viewContainer.createComponent(componentType);\n const hostElement = this.componentRef.location.nativeElement as HTMLElement;\n hostElement.style.display = 'block';\n hostElement.style.width = '100%';\n\n // Materialize the component view before syncing inputs so nested\n // ViewChild controls are available for their initial value.\n this.componentRef.changeDetectorRef.detectChanges();\n this.syncInputs();\n\n const instance = this.componentRef.instance as FormControlInstance;\n const hasCva = !!instance.registerOnChange;\n instance.registerOnChange?.((nextValue) => this.valueChange.emit(nextValue));\n instance.registerOnTouched?.(() => undefined);\n instance.actionTriggered?.subscribe((action) => this.actionTriggered.emit(action));\n if (!hasCva) instance.valueChange?.subscribe((value) => this.valueChange.emit(value));\n instance.scanned?.subscribe((value) => this.barcodeScanned.emit(value));\n instance.searchRequested?.subscribe(() => this.lookupRequested.emit());\n instance.filesChange?.subscribe((files) => this.filesChange.emit(files));\n instance.uploadingChange?.subscribe((uploading) => this.uploadingChange.emit(uploading));\n\n this.componentRef.changeDetectorRef.detectChanges();\n }\n\n private syncInputs(): void {\n if (!this.componentRef || !this.field) return;\n const field = this.field;\n const config = field as unknown as Record<string, unknown>;\n const setInput = (name: string, value: unknown): void => this.componentRef?.setInput(name, value);\n const inputType = String(field.type || 'text') as UiFormInputType;\n\n if (field.label !== undefined) setInput('label', field.label);\n if (field.hint !== undefined) setInput('hint', field.hint);\n setInput('error', this.error);\n if (typeof field.required === 'boolean') setInput('required', field.required);\n\n // FieldInput only adapts the dynamic field to the selected control.\n switch (inputType) {\n case 'text':\n case 'number':\n case 'date':\n case 'datetime':\n case 'email':\n case 'password':\n case 'textarea':\n setInput('actions', this.visibleActions);\n setInput('name', field.id);\n setInput('id', field.id);\n setInput('placeholder', field.placeholder);\n setInput('pattern', config['pattern']);\n setInput('rows', config['rows'] ?? 4);\n break;\n case 'slug':\n setInput('name', field.id);\n setInput('id', field.id);\n setInput('placeholder', field.placeholder);\n break;\n case 'select':\n setInput('name', field.id);\n setInput('placeholder', field.placeholder);\n setInput('data', config['data']);\n const dataParams = config['dataParams'] as Record<string, string> | undefined;\n setInput('dataParams', Object.fromEntries(\n Object.entries(dataParams || {})\n .map(([key, fieldId]) => [key, this.model[fieldId]])\n .filter(([, value]) => value !== undefined && value !== null)\n ));\n setInput('options', config['options'] || []);\n setInput('multiple', !!config['multiple']);\n if (typeof config['searchable'] === 'boolean') {\n setInput('searchable', config['searchable']);\n }\n break;\n case 'color':\n setInput('name', field.id);\n setInput('id', field.id);\n break;\n case 'file':\n setInput('accept', config['accept']);\n setInput('multiple', !!config['multiple']);\n break;\n case 'photo':\n setInput('accept', config['accept'] || 'image/*');\n setInput('multiple', !!config['multiple']);\n setInput('limit', config['limit'] ?? 0);\n break;\n case 'barcode':\n setInput('placeholder', field.placeholder);\n setInput('disabled', this.disabled);\n setInput('value', this.value ?? '');\n break;\n case 'checkbox':\n break;\n }\n\n const instance = this.componentRef.instance as FormControlInstance;\n instance.writeValue?.(this.value);\n instance.setDisabledState?.(this.disabled);\n }\n}\n","type Token =\n | { type: 'value'; value: unknown }\n | { type: 'identifier'; value: string }\n | { type: 'operator'; value: '==' | '!=' | '===' | '!==' | '&&' | '||' | '!' | '(' | ')' };\n\nconst isIdentifierStart = (value: string): boolean => /[A-Za-z_$]/.test(value);\nconst isIdentifierPart = (value: string): boolean => /[A-Za-z0-9_.$-]/.test(value);\n\nconst tokenize = (source: string): Token[] => {\n const tokens: Token[] = [];\n let index = 0;\n\n while (index < source.length) {\n const char = source[index];\n if (/\\s/.test(char)) {\n index += 1;\n continue;\n }\n\n const three = source.slice(index, index + 3);\n const two = source.slice(index, index + 2);\n if (three === '===' || three === '!==') {\n tokens.push({ type: 'operator', value: three });\n index += 3;\n continue;\n }\n if (two === '==' || two === '!=' || two === '&&' || two === '||') {\n tokens.push({ type: 'operator', value: two });\n index += 2;\n continue;\n }\n if (char === '!' || char === '(' || char === ')') {\n tokens.push({ type: 'operator', value: char });\n index += 1;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n const quote = char;\n let value = '';\n let escaped = false;\n index += 1;\n while (index < source.length) {\n const current = source[index++];\n if (escaped) {\n value += current;\n escaped = false;\n } else if (current === '\\\\') {\n escaped = true;\n } else if (current === quote) {\n tokens.push({ type: 'value', value });\n break;\n } else {\n value += current;\n }\n }\n if (source[index - 1] !== quote) throw new Error('Unterminated string');\n continue;\n }\n if (/[0-9.-]/.test(char)) {\n const match = source.slice(index).match(/^-?\\d+(?:\\.\\d+)?/);\n if (match) {\n tokens.push({ type: 'value', value: Number(match[0]) });\n index += match[0].length;\n continue;\n }\n }\n if (isIdentifierStart(char)) {\n let value = char;\n index += 1;\n while (index < source.length && isIdentifierPart(source[index])) value += source[index++];\n if (value === 'true') tokens.push({ type: 'value', value: true });\n else if (value === 'false') tokens.push({ type: 'value', value: false });\n else if (value === 'null') tokens.push({ type: 'value', value: null });\n else tokens.push({ type: 'identifier', value });\n continue;\n }\n throw new Error(`Unexpected token: ${char}`);\n }\n\n return tokens;\n};\n\nconst getPathValue = (model: Record<string, unknown>, path: string): unknown => {\n return path.split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') return undefined;\n return (current as Record<string, unknown>)[part];\n }, model);\n};\n\nexport const evaluateFormCondition = (source: string, model: Record<string, unknown>): boolean => {\n const tokens = tokenize(String(source || '').trim());\n let index = 0;\n const peek = (): Token | undefined => tokens[index];\n const consume = (): Token => {\n const token = tokens[index++];\n if (!token) throw new Error('Unexpected end of condition');\n return token;\n };\n const matchOperator = (...values: Array<Extract<Token, { type: 'operator' }>['value']>): boolean => {\n const token = peek();\n if (token?.type !== 'operator' || !values.includes(token.value)) return false;\n index += 1;\n return true;\n };\n const toBoolean = (value: unknown): boolean => typeof value === 'string' ? value.trim().length > 0 : Boolean(value);\n\n const parseExpression = (): unknown => parseOr();\n const parseOr = (): unknown => {\n let value = parseAnd();\n while (matchOperator('||')) value = toBoolean(value) || toBoolean(parseAnd());\n return value;\n };\n const parseAnd = (): unknown => {\n let value = parseEquality();\n while (matchOperator('&&')) value = toBoolean(value) && toBoolean(parseEquality());\n return value;\n };\n const parseEquality = (): unknown => {\n let value = parseUnary();\n while (true) {\n if (matchOperator('==')) { value = value == parseUnary(); continue; }\n if (matchOperator('!=')) { value = value != parseUnary(); continue; }\n if (matchOperator('===')) { value = value === parseUnary(); continue; }\n if (matchOperator('!==')) { value = value !== parseUnary(); continue; }\n return value;\n }\n };\n const parseUnary = (): unknown => matchOperator('!') ? !toBoolean(parseUnary()) : parsePrimary();\n const parsePrimary = (): unknown => {\n if (matchOperator('(')) {\n const value = parseExpression();\n if (!matchOperator(')')) throw new Error('Missing closing parenthesis');\n return value;\n }\n\n const token = consume();\n if (token.type === 'value') return token.value;\n if (token.type !== 'identifier') throw new Error('Expected value');\n\n if (token.value === 'Number' && matchOperator('(')) {\n const value = Number(parseExpression());\n if (!matchOperator(')')) throw new Error('Missing closing parenthesis');\n return Number.isNaN(value) ? undefined : value;\n }\n return getPathValue(model, token.value);\n };\n\n if (!tokens.length) return true;\n const result = parseExpression();\n if (index !== tokens.length) throw new Error('Unexpected tokens after condition');\n return toBoolean(result);\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FieldInputComponent } from '../inputs/form-input-host.component';\nimport { UiFormContext } from '../context/form-context.service';\nimport { UiFormLookupService } from './form-lookup.service';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { evaluateFormCondition } from './form-condition.parser';\nimport {\n UiDynamicFormField,\n UiDynamicFormFieldAction,\n UiDynamicFormValue,\n flattenDynamicFormFields,\n isDynamicFormLookupField,\n isDynamicFormContainerField,\n isDynamicFormTemplateField,\n} from './ui-dynamic-form.models';\n\n@Component({\n selector: 'dynamic-form',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldInputComponent],\n templateUrl: './ui-dynamic-form.component.html',\n providers: [UiFormContext, UiFormLookupService],\n})\nexport class DynamicFormComponent implements OnChanges {\n private readonly lookupService = inject(UiFormLookupService);\n readonly formContext = inject(UiFormContext);\n @Input() fields: UiDynamicFormField[] = [];\n @Input() value: UiDynamicFormValue = {};\n @Input() errors: Record<string, string> = {};\n @Input() submitLabel = 'Submit';\n @Input() showSubmit = true;\n @Input() disabled = false;\n @Output() valueChange = new EventEmitter<UiDynamicFormValue>();\n @Output() lookupCompleted = new EventEmitter<{ fieldId: string; response: Record<string, unknown> }>();\n @Output() submitted = new EventEmitter<UiDynamicFormValue>();\n @Output() filesChange = new EventEmitter<{ fieldId: string; files: File[] }>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n @Output() fieldActionTriggered = new EventEmitter<{ fieldId: string; action: UiDynamicFormFieldAction }>();\n\n readonly modelSignal = signal<UiDynamicFormValue>({});\n readonly lookupLoadingSignal = signal<Record<string, boolean>>({});\n readonly lookupErrorsSignal = signal<Record<string, string>>({});\n ngOnChanges(changes: SimpleChanges): void {\n if ('fields' in changes || 'value' in changes) {\n const next: UiDynamicFormValue = { ...this.value };\n for (const field of this.getLeafFields()) {\n const defaultValue = field.type === 'checkbox' ? false : '';\n const rawValue = this.value[field.id] !== undefined\n ? this.value[field.id]\n : field.default !== undefined\n ? field.default\n : defaultValue;\n next[field.id] = this.normalizeFieldValue(field, rawValue);\n\n }\n this.modelSignal.set(next);\n this.formContext.setValue(next);\n this.formContext.setErrors(this.errors);\n this.formContext.disabled.set(this.disabled);\n }\n\n }\n\n updateField(fieldId: string, nextValue: UiDynamicFormValue[string]): void {\n this.modelSignal.update((current) => {\n const updated = { ...current, [fieldId]: nextValue };\n this.formContext.setValue(updated);\n this.valueChange.emit(updated);\n return updated;\n });\n }\n\n private normalizeFieldValue(field: UiDynamicFormField, value: unknown): UiDynamicFormValue[string] {\n if (field.type === 'photo' && field.multiple) {\n const values = Array.isArray(value) ? value : String(value || '').split(',');\n return values.map((item) => String(item || '').trim()).filter(Boolean);\n }\n return value as UiDynamicFormValue[string];\n }\n\n onBarcodeValueChange(field: UiDynamicFormField, value: string): void {\n this.updateField(field.id, value);\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n }\n\n onFieldValueChange(field: UiDynamicFormField, value: unknown): void {\n this.updateField(field.id, value as UiDynamicFormValue[string]);\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n\n if (field.type === 'select' && field.lookupApi) {\n const lookupValue = Array.isArray(value) ? '' : String(value || '').trim();\n this.runFieldLookup(field, lookupValue);\n }\n }\n\n onBarcodeScanned(field: UiDynamicFormField, value: string): void {\n this.updateField(field.id, value);\n this.runFieldLookup(field, value);\n }\n\n runBarcodeLookup(field: UiDynamicFormField): void {\n this.runFieldLookup(field);\n }\n\n runFieldLookup(field: UiDynamicFormField, overrideValue?: string): void {\n if (!isDynamicFormLookupField(field)) return;\n const api = String(field.lookupApi || '').trim();\n if (!api) return;\n\n const value = String(overrideValue ?? this.getStringValue(field.id)).trim();\n if (!value) {\n this.lookupErrorsSignal.update((current) => ({\n ...current,\n [field.id]: field.type === 'select' ? 'Вкажіть значення для пошуку' : 'Вкажіть штрихкод для пошуку',\n }));\n return;\n }\n\n this.lookupLoadingSignal.update((current) => ({ ...current, [field.id]: true }));\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n\n this.lookupService.lookup(field, value).subscribe({\n next: (response) => {\n this.applyLookupResponse(field, response || {});\n this.lookupCompleted.emit({ fieldId: field.id, response: response || {} });\n this.lookupLoadingSignal.update((current) => ({ ...current, [field.id]: false }));\n },\n error: (error) => {\n const message = error?.error?.message || 'Не вдалося знайти запис';\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: message }));\n this.lookupLoadingSignal.update((current) => ({ ...current, [field.id]: false }));\n const errorField = String(field.lookupErrorField || '').trim();\n if (errorField) {\n this.updateField(errorField, message);\n }\n },\n });\n }\n\n onFieldActionTriggered(fieldId: string, action: UiDynamicFormFieldAction): void {\n this.fieldActionTriggered.emit({ fieldId, action });\n }\n\n resolveFieldActions(field: UiDynamicFormField): UiDynamicFormFieldAction[] {\n const model = this.modelSignal();\n return (field.actions || []).filter((action) => {\n const condition = String(action.condition || '').trim();\n if (!condition) {\n return true;\n }\n\n try {\n return evaluateFormCondition(condition, model);\n } catch {\n return true;\n }\n });\n }\n\n getActions(field: UiDynamicFormField): UiDynamicFormFieldAction[] {\n return this.resolveFieldActions(field);\n }\n\n isFieldDisabled(field: UiDynamicFormField): boolean {\n if (this.disabled) return true;\n if (typeof field.disabled === 'boolean') return field.disabled;\n const raw = String(field.disabled || '').trim();\n if (!raw) return false;\n const condition = raw.startsWith('${') && raw.endsWith('}') ? raw.slice(2, -1).trim() : raw;\n try {\n return evaluateFormCondition(condition, this.modelSignal());\n } catch {\n return false;\n }\n }\n\n submitForm(): void {\n this.submitted.emit(this.modelSignal());\n }\n\n isTextArea(field: UiDynamicFormField): boolean {\n return (field.type ?? 'text') === 'textarea';\n }\n\n getStringValue(fieldId: string): string {\n return String(this.modelSignal()[fieldId] || '');\n }\n\n getLookupError(fieldId: string): string {\n return this.lookupErrorsSignal()[fieldId] || '';\n }\n\n isLookupLoading(fieldId: string): boolean {\n return !!this.lookupLoadingSignal()[fieldId];\n }\n\n resolveClassName(value: unknown): string {\n return String(value || '').trim();\n }\n\n isContainerField(field: UiDynamicFormField): field is Extract<UiDynamicFormField, { type: 'container' }> {\n return isDynamicFormContainerField(field);\n }\n\n isTemplateField(field: UiDynamicFormField): field is Extract<UiDynamicFormField, { type: 'template' }> {\n return isDynamicFormTemplateField(field);\n }\n\n isFieldVisible(field: UiDynamicFormField): boolean {\n if (typeof field.hidden === 'boolean') {\n return !field.hidden;\n }\n\n const hidden = String(field.hidden || '').trim();\n if (!hidden) {\n return true;\n }\n\n const expression = hidden.startsWith('${') && hidden.endsWith('}')\n ? hidden.slice(2, -1)\n : hidden;\n try {\n const model = this.modelSignal();\n return !evaluateFormCondition(expression, model);\n } catch {\n return false;\n }\n }\n\n resolveInputType(field: UiDynamicFormField): string {\n const type = field.type ?? 'text';\n if (type === 'number' || type === 'date' || type === 'email' || type === 'password') {\n return type;\n }\n if (type === 'datetime') return 'datetime-local';\n\n return 'text';\n }\n\n renderTemplate(field: UiDynamicFormField): string {\n const template = this.isTemplateField(field) ? field.template : '';\n if (!template) {\n return '';\n }\n\n const model = this.modelSignal();\n const context = this.isTemplateField(field) ? { ...(field.templateContext || {}), ...model } : model;\n return String(template).replace(/\\{\\{\\s*([a-zA-Z0-9_.]+)\\s*\\}\\}/g, (_match, path: string) => {\n const value = this.resolveTemplateValue(context, path);\n return value == null ? '' : String(value);\n });\n }\n\n getContainerTag(field: UiDynamicFormField): 'div' | 'section' | 'aside' | 'fieldset' {\n if (!this.isContainerField(field) && !this.isTemplateField(field)) {\n return 'div';\n }\n\n return field.tag || 'section';\n }\n\n getContainerClass(field: UiDynamicFormField): string {\n const className = String(field.className || '').trim();\n const tag = this.getContainerTag(field);\n return [\n this.resolveColSpanClass(field),\n tag === 'aside'\n ? 'space-y-4 rounded-3xl border border-slate-200 bg-white p-4 shadow-sm'\n : 'rounded-3xl border border-slate-200 bg-white p-6 shadow-sm',\n className,\n ].filter(Boolean).join(' ');\n }\n\n getContainerContentClass(field: UiDynamicFormField): string {\n const className = String(this.isContainerField(field) ? field.contentClassName || '' : '').trim();\n const layout = this.isContainerField(field) ? field.layout : undefined;\n return [\n layout === 'stack' ? 'space-y-4' : 'grid grid-cols-1 gap-4 md:grid-cols-12',\n className,\n ].filter(Boolean).join(' ');\n }\n\n getFieldClass(field: UiDynamicFormField): Record<string, boolean> {\n const span = Math.min(12, Math.max(1, Number(field.col ?? 12)));\n return {\n 'md:col-span-1': span === 1,\n 'md:col-span-2': span === 2,\n 'md:col-span-3': span === 3,\n 'md:col-span-4': span === 4,\n 'md:col-span-5': span === 5,\n 'md:col-span-6': span === 6,\n 'md:col-span-7': span === 7,\n 'md:col-span-8': span === 8,\n 'md:col-span-9': span === 9,\n 'md:col-span-10': span === 10,\n 'md:col-span-11': span === 11,\n 'md:col-span-12': span === 12,\n };\n }\n\n private resolveColSpanClass(field: UiDynamicFormField): string {\n const span = Math.min(12, Math.max(1, Number(field.col ?? 12)));\n const classes: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n };\n return classes[span] || classes[12];\n }\n\n private applyLookupResponse(field: UiDynamicFormField, response: Record<string, unknown>): void {\n if (!isDynamicFormLookupField(field)) return;\n const lookupMap = field.lookupMap || {};\n const mapped = Object.entries(lookupMap).reduce<UiDynamicFormValue>((acc, [targetField, sourcePath]) => {\n acc[targetField] = this.resolveTemplateValue(response, sourcePath) as UiDynamicFormValue[string];\n return acc;\n }, {});\n\n this.modelSignal.update((current) => {\n const updated = { ...current, ...mapped };\n this.formContext.setValue(updated);\n this.valueChange.emit(updated);\n return updated;\n });\n }\n\n\n private resolveTemplateValue(model: Record<string, unknown>, pathRaw: string): unknown {\n const path = String(pathRaw || '').trim();\n if (!path) {\n return undefined;\n }\n\n return path.split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') {\n return undefined;\n }\n return (current as Record<string, unknown>)[part];\n }, model);\n }\n\n private getFlatFields(): UiDynamicFormField[] {\n return flattenDynamicFormFields(this.fields);\n }\n\n private getLeafFields(): UiDynamicFormField[] {\n return this.getFlatFields().filter((field) => field.type !== 'container' && field.type !== 'template');\n }\n}\n","<form class=\"grid grid-cols-1 gap-4 md:grid-cols-12\" (ngSubmit)=\"submitForm()\" #dynamicForm=\"ngForm\">\n <ng-template #renderField let-field>\n @if (isFieldVisible(field)) {\n @if (isContainerField(field)) {\n @if (getContainerTag(field) === 'aside') {\n <aside [ngClass]=\"getContainerClass(field)\">\n @if (field.label || field.title || getActions(field).length || field.hint) {\n <header class=\"flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n @if (field.label || field.title) {\n <p class=\"text-xs font-semibold uppercase tracking-[0.22em] text-slate-500\">\n {{ field.label || field.title }}\n </p>\n }\n @if (field.hint) {\n <h3 class=\"mt-1 text-lg font-semibold text-slate-900\">{{ field.hint }}</h3>\n }\n </div>\n\n @if (getActions(field).length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of getActions(field); track action.id; let i = $index) {\n <ui-button\n [variant]=\"action.variant || (i === 0 ? 'primary' : 'ghost')\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"onFieldActionTriggered(field.id, action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n\n <div [ngClass]=\"getContainerContentClass(field)\">\n @for (child of field.fields; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: child }\"></ng-container>\n }\n </div>\n </aside>\n } @else if (getContainerTag(field) === 'fieldset') {\n <fieldset [ngClass]=\"getContainerClass(field)\">\n @if (field.label || field.title || getActions(field).length || field.hint) {\n <header class=\"flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n @if (field.label || field.title) {\n <legend class=\"text-lg font-semibold text-slate-900\">{{ field.label || field.title }}</legend>\n }\n @if (field.hint) {\n <p class=\"mt-1 text-sm text-slate-500\">{{ field.hint }}</p>\n }\n </div>\n\n @if (getActions(field).length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of getActions(field); track action.id; let i = $index) {\n <ui-button\n [variant]=\"action.variant || (i === 0 ? 'primary' : 'ghost')\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"onFieldActionTriggered(field.id, action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n\n <div [ngClass]=\"getContainerContentClass(field)\">\n @for (child of field.fields; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: child }\"></ng-container>\n }\n </div>\n </fieldset>\n } @else {\n <section [ngClass]=\"getContainerClass(field)\">\n @if (field.label || field.title || getActions(field).length || field.hint) {\n <header class=\"flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n <div class=\"min-w-0\">\n @if (field.label || field.title) {\n <h3 class=\"text-lg font-semibold text-slate-900\">{{ field.label || field.title }}</h3>\n }\n @if (field.hint) {\n <p class=\"mt-1 text-sm text-slate-500\">{{ field.hint }}</p>\n }\n </div>\n\n @if (getActions(field).length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of getActions(field); track action.id; let i = $index) {\n <ui-button\n [variant]=\"action.variant || (i === 0 ? 'primary' : 'ghost')\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"disabled\"\n (click)=\"onFieldActionTriggered(field.id, action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n\n <div [ngClass]=\"getContainerContentClass(field)\">\n @for (child of field.fields; track child.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: child }\"></ng-container>\n }\n </div>\n </section>\n }\n } @else if (isTemplateField(field)) {\n <div [ngClass]=\"resolveClassName(field.className)\" [innerHTML]=\"renderTemplate(field)\"></div>\n } @else {\n <div [ngClass]=\"getFieldClass(field)\">\n <field-input\n [field]=\"field\"\n [value]=\"modelSignal()[field.id]\"\n [model]=\"modelSignal()\"\n [disabled]=\"disabled || isFieldDisabled(field) || isLookupLoading(field.id)\"\n [error]=\"errors[field.id] ?? getLookupError(field.id)\"\n [visibleActions]=\"resolveFieldActions(field)\"\n (valueChange)=\"onFieldValueChange(field, $event)\"\n (actionTriggered)=\"onFieldActionTriggered(field.id, $event)\"\n (lookupRequested)=\"runBarcodeLookup(field)\"\n (barcodeScanned)=\"onBarcodeScanned(field, $event)\"\n (filesChange)=\"filesChange.emit({ fieldId: field.id, files: $event })\"\n (uploadingChange)=\"uploadingChange.emit($event)\"\n ></field-input>\n </div>\n }\n }\n </ng-template>\n\n @for (field of fields; track field.id) {\n <ng-container *ngTemplateOutlet=\"renderField; context: { $implicit: field }\"></ng-container>\n }\n\n @if (showSubmit) {\n <div class=\"flex justify-end md:col-span-12\">\n <button\n type=\"submit\"\n class=\"inline-flex items-center rounded-xl bg-slate-900 px-4 py-2 text-sm font-medium text-white transition hover:bg-slate-800 disabled:opacity-50\"\n [disabled]=\"disabled || !dynamicForm.form.valid\"\n >\n {{ submitLabel }}\n </button>\n </div>\n }\n</form>\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, OnChanges, SimpleChanges, computed, inject, input, output, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { UiButtonComponent, UiToastService } from '@maro-tech/core';\nimport { DynamicFormComponent } from '../dynamic/ui-dynamic-form.component';\nimport { ActionType, UiDynamicFormField, UiDynamicFormFieldAction, UiDynamicFormValue, flattenDynamicFormFields } from '../dynamic/ui-dynamic-form.models';\n\nexport interface MaroFormViewAction extends UiDynamicFormFieldAction {\n redirectTo?: string;\n}\n\nexport interface MaroFormViewResponse {\n meta?: { title?: string };\n title?: string;\n api?: string;\n defaults?: Record<string, unknown>;\n redirectTo?: string;\n fields: UiDynamicFormField[];\n actions?: MaroFormViewAction[];\n item?: Record<string, unknown> | null;\n}\n\n@Component({\n selector: 'form-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, DynamicFormComponent],\n templateUrl: './ui-form-modal.component.html',\n})\nexport class FormModalComponent implements OnChanges {\n readonly formId = input('');\n readonly recordId = input('');\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly isOpen = input(false);\n readonly cancelLabel = input('Відмінити');\n readonly initialValue = input<Record<string, unknown>>({});\n\n readonly closed = output<void>();\n readonly completed = output<unknown>();\n readonly isLoading = signal(false);\n readonly isSubmitting = signal(false);\n readonly isActionRunning = signal(false);\n readonly isUploading = signal(false);\n readonly formConfig = signal<MaroFormViewResponse | null>(null);\n readonly formValue = signal<UiDynamicFormValue>({});\n readonly fields = computed(() => this.formConfig()?.fields ?? []);\n readonly submitAction = computed(() => this.formConfig()?.actions?.find((action) => this.isSubmitAction(action)));\n readonly submitLabel = computed(() => this.submitAction()?.submit || this.submitAction()?.label || 'Save');\n readonly panelClass = computed(() => ({\n 'max-w-xl': this.size() === 'sm',\n 'max-w-3xl': this.size() === 'md',\n 'max-w-6xl': this.size() === 'lg',\n }));\n\n private readonly http = inject(HttpClient);\n private readonly router = inject(Router);\n private readonly toast = inject(UiToastService);\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.isOpen() && ('isOpen' in changes || 'formId' in changes || 'recordId' in changes)) {\n this.loadForm();\n }\n }\n\n close(): void { this.closed.emit(); }\n\n onValueChange(value: UiDynamicFormValue): void { this.formValue.set(value); }\n\n onLookupCompleted(event: { fieldId: string; response: Record<string, unknown> }): void {\n const redirectTo = String(this.formConfig()?.redirectTo || '').trim();\n if (!redirectTo) return;\n\n const response = this.extractData(event.response) || event.response;\n const target = this.resolveTemplate(redirectTo, response);\n if (target && !target.includes('{{') && !target.includes(':')) {\n this.closed.emit();\n void this.router.navigateByUrl(target.startsWith('/') ? target : `/${target}`);\n }\n }\n\n onUploadingChange(uploading: boolean): void { this.isUploading.set(uploading); }\n\n onFieldActionTriggered(event: { fieldId: string; action: UiDynamicFormFieldAction }): void {\n if (this.isActionRunning() || this.isSubmitting()) return;\n\n const payload = this.normalizePayload({ ...this.formValue(), ...(event.action.payload || {}) });\n const endpoint = this.resolveTemplate(this.resolveEndpoint(event.action.api), payload);\n if (!endpoint) return;\n\n this.isActionRunning.set(true);\n this.http.request(this.resolveMethod(event.action.method), endpoint, { body: payload }).subscribe({\n next: (response) => {\n const data = this.extractData(response);\n if (data) this.formValue.update((current) => ({ ...current, ...data }) as UiDynamicFormValue);\n this.isActionRunning.set(false);\n },\n error: (error) => {\n this.isActionRunning.set(false);\n this.toast.show(error?.error?.message || 'Не вдалося виконати дію', 'error', 4000);\n },\n });\n }\n\n confirm(): void {\n if (this.isSubmitting() || this.isActionRunning() || this.isUploading()) return;\n\n const action = this.submitAction();\n const endpointTemplate = this.formConfig()?.api || action?.api;\n const endpoint = this.resolveEndpoint(endpointTemplate);\n if (!endpoint) return;\n\n const payload = this.normalizePayload({ ...(this.initialValue() || {}), ...(action?.payload || {}), ...this.formValue() });\n const missingFields = flattenDynamicFormFields(this.fields())\n .filter((field) => field.type !== 'container' && field.type !== 'template' && field.required && this.isEmptyValue(payload[field.id]))\n .map((field) => String(field.label || field.title || field.id));\n if (missingFields.length) {\n this.toast.show(`Заповніть обов’язкові поля: ${missingFields.join(', ')}`, 'warning', 4000);\n return;\n }\n\n const recordId = String(this.recordId() || '').trim();\n if (recordId && !Object.prototype.hasOwnProperty.call(payload, 'id')) payload['id'] = recordId;\n const resolvedEndpoint = this.resolveTemplate(endpoint, payload);\n if (!resolvedEndpoint || resolvedEndpoint.includes('{{')) return;\n\n this.isSubmitting.set(true);\n this.http.request(this.resolveMethod(action?.method || (recordId ? 'PATCH' : 'POST')), resolvedEndpoint, { body: payload }).subscribe({\n next: (response) => {\n this.isSubmitting.set(false);\n this.completed.emit(response);\n this.navigateAfterSubmit(response);\n this.close();\n },\n error: (error) => {\n this.isSubmitting.set(false);\n this.toast.show(error?.error?.message || 'Не вдалося відправити форму', 'error', 4000);\n },\n });\n }\n\n private loadForm(): void {\n const formId = String(this.formId() || '').trim();\n if (!formId) return;\n\n this.isLoading.set(true);\n const recordId = String(this.recordId() || '').trim();\n const endpoint = `/api/crud/form/${encodeURIComponent(formId)}${recordId ? `/${encodeURIComponent(recordId)}` : ''}`;\n this.http.get<{ form?: MaroFormViewResponse; data?: Record<string, unknown> | null }>(endpoint).subscribe({\n next: (response) => {\n const raw = response.form || (response as unknown as MaroFormViewResponse);\n const config: MaroFormViewResponse = {\n ...raw,\n title: raw.title || raw.meta?.title,\n actions: (raw.actions || []).map((action) => ({ ...action, type: this.normalizeActionType(action.type) })),\n };\n this.formConfig.set(config);\n this.formValue.set({ ...(config.defaults || {}), ...(config.item || {}), ...(this.initialValue() || {}), ...(recordId ? { id: recordId } : {}) });\n this.isLoading.set(false);\n },\n error: () => {\n this.formConfig.set(null);\n this.isLoading.set(false);\n },\n });\n }\n\n private resolveEndpoint(endpoint?: string): string {\n const value = String(endpoint || '').trim();\n if (!value) return '';\n if (/^https?:\\/\\//i.test(value) || value.startsWith('/api/')) return value;\n return `/api${value.startsWith('/') ? value : `/${value}`}`;\n }\n\n private normalizePayload(payload: Record<string, unknown>): Record<string, unknown> {\n for (const field of this.fields()) {\n if (field.type !== 'photo' || !field.multiple) continue;\n const value = payload[field.id];\n if (typeof value === 'string') payload[field.id] = value.split(',').map((item) => item.trim()).filter(Boolean);\n }\n return payload;\n }\n\n private isEmptyValue(value: unknown): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === 'string') return value.trim() === '';\n if (typeof value === 'number') return !Number.isFinite(value);\n return false;\n }\n\n private normalizeActionType(type?: string): ActionType {\n const normalized = String(type || '').trim().toLowerCase();\n if (normalized === 'api' || normalized === 'action_api') return 'ACTION_API';\n if (normalized === 'submit' || normalized === 'action_submit') return 'ACTION_SUBMIT';\n return String(type || '') as ActionType;\n }\n\n private isSubmitAction(action: MaroFormViewAction): boolean {\n const type = this.normalizeActionType(action.type);\n return type === 'ACTION_API' || type === 'ACTION_SUBMIT';\n }\n\n private resolveMethod(method?: string): 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' {\n return String(method || 'POST').toUpperCase() as 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n }\n\n private extractData(response: unknown): Record<string, unknown> | null {\n if (!response || typeof response !== 'object') return null;\n const value = (response as { data?: unknown }).data;\n return value && typeof value === 'object' ? value as Record<string, unknown> : response as Record<string, unknown>;\n }\n\n private navigateAfterSubmit(response: unknown): void {\n const redirect = this.formConfig()?.redirectTo || this.submitAction()?.redirectTo;\n if (!redirect) return;\n const data = this.extractData(response) || {};\n const target = this.resolveTemplate(redirect, data);\n if (target && !target.includes(':')) void this.router.navigateByUrl(target.startsWith('/') ? target : `/${target}`);\n }\n\n private resolveTemplate(template: string, data: Record<string, unknown>): string {\n return String(template || '').replace(/\\{\\{([a-zA-Z_][a-zA-Z0-9_.]*)\\}\\}|:([a-zA-Z_][a-zA-Z0-9_.]*)/g, (_match, bracesKey, colonKey) => {\n const key = String(bracesKey || colonKey || '');\n const value = key.split('.').reduce<unknown>((current, part) => current && typeof current === 'object' ? (current as Record<string, unknown>)[part] : undefined, data);\n return value == null || value === '' ? '' : encodeURIComponent(String(value));\n });\n }\n}\n","@if (isOpen()) {\n <div class=\"fixed inset-0 z-50 flex min-h-full items-center justify-center overflow-y-auto bg-slate-950/40 p-4 sm:p-6\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"my-0 flex min-h-0 max-h-[calc(100vh-2rem)] w-full flex-col overflow-hidden rounded-2xl bg-slate-50 shadow-2xl sm:max-h-[calc(100vh-3rem)]\" [ngClass]=\"panelClass()\">\n <div class=\"flex shrink-0 items-center justify-between border-b border-slate-200 bg-white px-5 py-4 sm:px-6\">\n <h2 class=\"text-lg font-semibold\">{{ formConfig()?.title || 'Form' }}</h2>\n <button type=\"button\" class=\"text-xl text-slate-400 hover:text-slate-900\" aria-label=\"Close\" (click)=\"close()\">×</button>\n </div>\n <div class=\"min-h-0 flex-1 overflow-y-auto p-4 sm:p-6\">\n @if (isLoading()) {\n <p class=\"text-sm text-slate-500\">Loading form…</p>\n } @else {\n <dynamic-form [fields]=\"fields()\" [value]=\"formValue()\" [disabled]=\"isLoading() || isSubmitting() || isActionRunning()\" [showSubmit]=\"false\" (valueChange)=\"onValueChange($event)\" (lookupCompleted)=\"onLookupCompleted($event)\" (uploadingChange)=\"onUploadingChange($event)\" (fieldActionTriggered)=\"onFieldActionTriggered($event)\"></dynamic-form>\n }\n </div>\n <div class=\"relative z-10 flex shrink-0 justify-end gap-3 border-t border-slate-200 bg-white px-5 py-4 sm:px-6\">\n <ui-button variant=\"ghost\" (click)=\"close()\">{{ cancelLabel() }}</ui-button>\n @if (submitAction()) { <ui-button variant=\"primary\" [disabled]=\"isLoading() || isSubmitting() || isUploading()\" (click)=\"confirm()\">{{ submitLabel() }}</ui-button> }\n </div>\n </div>\n </div>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\n\n@Component({ selector: 'input-base-control', standalone: true, imports: [InputTextControlComponent], template: `<input-text-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"id\" [type]=\"type\" [element]=\"element\" [rows]=\"rows\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"valueChange.emit($event)\" (touched)=\"touched.emit()\" />` })\nexport class InputBaseControlComponent {\n @Input() placeholder?: string; @Input() name?: string; @Input() id?: string; @Input() type = 'text'; @Input() element: 'input' | 'textarea' = 'input'; @Input() rows = 4; @Input() autocomplete?: string; @Input() pattern?: string; @Input() disabled = false; @Input() value: string | number | null = '';\n @Output() valueChange = new EventEmitter<string>(); @Output() touched = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\nimport { InputTextControlComponent } from '../text/ui-text-input-control.component';\nimport { InputBaseControlComponent } from './ui-input-control.component';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'input-base',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, FieldFrameComponent, InputBaseControlComponent],\n templateUrl: './ui-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n ],\n})\nexport class InputComponent implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @Input() label?: string;\n @Input() hint?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() id?: string;\n @Input() type = 'text';\n @Input() element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() autocomplete?: string;\n @Input() pattern?: string;\n @Input() error?: string;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n\n disabled = false;\n value: string | number | null = '';\n private static nextId = 0;\n private readonly generatedId = `input-${InputComponent.nextId++}`;\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n get controlId(): string {\n return this.id ?? this.generatedId;\n }\n private onChange: (value: string | number | null) => void = () => undefined;\n onTouched: () => void = () => undefined;\n\n writeValue(value: string | number | null): void {\n this.value = value ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: string | number | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onValueChange(value: string): void {\n const parsed = this.type === 'number' ? (value === '' ? null : Number(value)) : value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\" [forId]=\"controlId\" [disabled]=\"disabled\" [actions]=\"actions\" (actionTriggered)=\"triggerAction($event)\">\n <input-base-control [placeholder]=\"placeholder\" [name]=\"name\" [id]=\"controlId\" [type]=\"type\" [element]=\"element\" [rows]=\"rows\" [autocomplete]=\"autocomplete\" [pattern]=\"pattern\" [disabled]=\"disabled\" [value]=\"value\" (valueChange)=\"onValueChange($event)\" (touched)=\"onTouched()\" />\n</field-frame>\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject } from '@angular/core';\nimport { Observable, of, map } from 'rxjs';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\n\nexport interface UiPhotoGalleryEntry {\n clientKey: string;\n imageId?: string;\n preview?: string;\n file?: File;\n isUploading?: boolean;\n}\n\n@Component({\n selector: 'input-photo-gallery',\n standalone: true,\n imports: [CommonModule, DragDropModule, FieldFrameComponent],\n templateUrl: './ui-photo-gallery-field.component.html',\n styles: [\n `\n .image-drag-item.cdk-drag-preview {\n transform: scale(1.03) rotate(0.6deg);\n box-shadow: 0 28px 60px rgba(15, 23, 42, 0.4);\n border-radius: 0.9rem;\n }\n\n .image-drag-item.cdk-drag-placeholder {\n opacity: 0.4;\n outline: 2px dashed #94a3b8;\n outline-offset: 4px;\n }\n `,\n ],\n})\nexport class InputPhotoGalleryComponent implements OnInit, OnChanges, OnDestroy {\n private readonly http = inject(HttpClient);\n @Input() label = 'Фото';\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() orderLabel = 'Порядок фото (перетягуй)';\n @Input() imageIds: string[] = [];\n @Input() disabled = false;\n @Input() afterUpload: ((imageId: string) => Observable<unknown>) | null = null;\n @Input() resolveImageUrl: ((imageId: string) => string) | null = null;\n @Input() notify: ((message: string, variant: 'success' | 'error' | 'warning', durationMs?: number) => void) | null = null;\n\n @Output() imageIdsChange = new EventEmitter<string[]>();\n\n entries: UiPhotoGalleryEntry[] = [];\n private imageEntrySequence = 0;\n\n get photoCount(): number {\n return this.entries.filter((entry) => !!entry.imageId || !!entry.file).length;\n }\n\n ngOnInit(): void {\n if (!this.entries.length) this.entries = this.normalizeImageEntries([]);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['imageIds']) return;\n const nextIds = this.imageIds ?? [];\n const currentIds = this.entries.filter((entry) => !!entry.imageId).map((entry) => entry.imageId!);\n const hasPendingLocalFiles = this.entries.some((entry) => !!entry.file || !!entry.isUploading);\n const sameIds = nextIds.length === currentIds.length && nextIds.every((id, idx) => id === currentIds[idx]);\n if (sameIds || hasPendingLocalFiles) return;\n this.entries = this.normalizeImageEntries(nextIds.map((imageId) => ({\n clientKey: imageId,\n imageId,\n preview: this.resolveImageUrl?.(imageId) || '',\n })));\n }\n\n ngOnDestroy(): void {\n this.entries.forEach((entry) => {\n if (entry.file && entry.preview) URL.revokeObjectURL(entry.preview);\n });\n }\n\n onFilesChange(event: Event, index: number): void {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n if (this.disabled || !files.length) return;\n const next = [...this.entries];\n const baseIndex = Math.max(0, Math.min(index, next.length - 1));\n files.forEach((file, offset) => {\n const targetIndex = baseIndex + offset;\n const existing = next[targetIndex];\n if (existing?.file && existing.preview) URL.revokeObjectURL(existing.preview);\n next[targetIndex] = {\n clientKey: existing?.clientKey ?? `local-${this.imageEntrySequence++}`,\n file,\n imageId: existing?.imageId,\n preview: URL.createObjectURL(file),\n };\n });\n this.entries = this.normalizeImageEntries(next);\n this.uploadPendingImages();\n input.value = '';\n }\n\n openFilePicker(input: HTMLInputElement | null, event?: MouseEvent): void {\n event?.preventDefault();\n event?.stopPropagation();\n if (!this.disabled && input) input.click();\n }\n\n onDrop(event: CdkDragDrop<UiPhotoGalleryEntry[]>): void {\n if (this.disabled) return;\n const next = [...this.entries];\n const nonEmptyCount = next.filter((entry) => entry.imageId || entry.file).length;\n if (event.previousIndex >= nonEmptyCount || event.currentIndex >= nonEmptyCount) {\n this.entries = this.normalizeImageEntries(next);\n return;\n }\n moveItemInArray(next, event.previousIndex, event.currentIndex);\n this.entries = this.normalizeImageEntries(next);\n this.emitImageIds();\n }\n\n removeAt(index: number): void {\n if (this.disabled || index < 0 || index >= this.entries.length) return;\n const next = [...this.entries];\n const [removed] = next.splice(index, 1);\n if (removed?.file && removed.preview) URL.revokeObjectURL(removed.preview);\n this.entries = this.normalizeImageEntries(next);\n this.emitImageIds();\n }\n\n private createImageEntry(): UiPhotoGalleryEntry {\n return { clientKey: `local-${this.imageEntrySequence++}` };\n }\n\n private normalizeImageEntries(entries: UiPhotoGalleryEntry[]): UiPhotoGalleryEntry[] {\n const nonEmpty = entries.filter((entry) => !!entry?.imageId || !!entry?.file);\n return nonEmpty.length ? [...nonEmpty, this.createImageEntry()] : [this.createImageEntry()];\n }\n\n private emitImageIds(): void {\n this.imageIdsChange.emit(this.entries.filter((entry) => !!entry.imageId).map((entry) => entry.imageId!));\n }\n\n private uploadPendingImages(): void {\n const nextIndex = this.entries.findIndex((entry) => !!entry.file && !entry.isUploading);\n if (nextIndex < 0) return;\n const entry = this.entries[nextIndex];\n entry.isUploading = true;\n const file = entry.file!;\n this.uploadFile(file).subscribe({\n next: (response) => {\n const persist$ = this.afterUpload ? this.afterUpload(response.imageId) : of(null);\n persist$.subscribe({\n next: () => {\n entry.imageId = response.imageId;\n entry.file = undefined;\n entry.isUploading = undefined;\n entry.preview = this.resolveImageUrl?.(response.imageId) || entry.preview;\n this.entries = this.normalizeImageEntries([...this.entries]);\n this.emitImageIds();\n this.notify?.('Фото завантажено', 'success', 2000);\n this.uploadPendingImages();\n },\n error: (error) => {\n entry.isUploading = undefined;\n this.notify?.(error?.error?.message || 'Не вдалося привʼязати фото', 'error', 3500);\n this.uploadPendingImages();\n },\n });\n },\n error: (error) => {\n entry.isUploading = undefined;\n this.notify?.(error?.error?.message || 'Не вдалося завантажити фото', 'error', 3500);\n this.uploadPendingImages();\n },\n });\n }\n\n private uploadFile(file: File): Observable<{ imageId: string }> {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post<{ id: string }>('/api/files/', formData).pipe(\n map((response) => ({ imageId: response.id })),\n );\n }\n}\n","<field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <p class=\"mb-2 text-xs uppercase tracking-[0.2em] text-slate-500\">{{ orderLabel }}</p>\n <div data-field-control class=\"grid gap-3 md:grid-cols-4\" cdkDropList [cdkDropListData]=\"entries\" (cdkDropListDropped)=\"onDrop($event)\">\n @for (entry of entries; let i = $index; track entry.clientKey + '-' + i) {\n <div class=\"image-drag-item relative overflow-hidden rounded-xl border border-slate-200 bg-white\" cdkDrag [cdkDragDisabled]=\"disabled || (!entry.imageId && !entry.file)\">\n <label class=\"block h-full w-full cursor-pointer\">\n @if (entry.preview) {\n <img [src]=\"entry.preview\" alt=\"photo\" class=\"h-48 w-full object-cover\" />\n } @else {\n <button type=\"button\" class=\"flex h-48 w-full items-center justify-center bg-slate-50 text-xs text-slate-500\" (click)=\"openFilePicker(fileInput, $event)\">+ Додати фото</button>\n }\n <input #fileInput type=\"file\" class=\"hidden\" [disabled]=\"disabled\" multiple (change)=\"onFilesChange($event, i)\" />\n </label>\n @if (entry.imageId || entry.file) {\n @if (i === 0) {\n <span class=\"absolute left-2 top-2 rounded-full border border-slate-200 bg-white/95 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.15em] text-slate-700\">Обкладинка</span>\n }\n <span class=\"absolute left-2 bottom-2 rounded-full bg-slate-900/85 px-2 py-1 text-[10px] font-semibold text-white\">#{{ i + 1 }}</span>\n <button type=\"button\" class=\"absolute right-2 top-2 rounded-full bg-white/95 px-2 py-1 text-xs text-rose-600 shadow\" [disabled]=\"disabled\" (click)=\"removeAt(i)\">Видалити</button>\n }\n </div>\n }\n </div>\n <div class=\"mt-1 text-xs text-slate-500\">Кількість фото: {{ photoCount }}</div>\n</field-frame>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldFrameComponent } from '../field-frame/ui-field-frame.component';\n\n@Component({\n selector: 'input-range-slider',\n standalone: true,\n imports: [CommonModule, FieldFrameComponent],\n template: `\n <field-frame [label]=\"label\" [hint]=\"hint\" [error]=\"error\" [required]=\"required\">\n <div class=\"range-slider\">\n <div class=\"range-slider__track\"></div>\n <div\n class=\"range-slider__range\"\n [style.left.%]=\"startPercent\"\n [style.width.%]=\"rangePercent\">\n </div>\n\n <input\n #startInput\n data-field-control\n class=\"range-slider__input\"\n type=\"range\"\n [min]=\"safeMin\"\n [max]=\"safeMax\"\n [step]=\"safeStep\"\n [value]=\"safeStart\"\n [attr.aria-label]=\"startLabel\"\n (input)=\"onStartInput($event)\"\n (change)=\"interactionEnd.emit()\">\n\n <input\n #endInput\n data-field-control\n class=\"range-slider__input\"\n type=\"range\"\n [min]=\"safeMin\"\n [max]=\"safeMax\"\n [step]=\"safeStep\"\n [value]=\"safeEnd\"\n [attr.aria-label]=\"endLabel\"\n (input)=\"onEndInput($event)\"\n (change)=\"interactionEnd.emit()\">\n </div>\n </field-frame>\n `,\n styles: [`\n .range-slider {\n position: relative;\n height: 2rem;\n width: 100%;\n display: flex;\n align-items: center;\n }\n\n .range-slider__track,\n .range-slider__range {\n position: absolute;\n left: 0;\n right: 0;\n height: 6px;\n border-radius: 999px;\n }\n\n .range-slider__track {\n background: #dbe1ea;\n }\n\n .range-slider__range {\n background: linear-gradient(90deg, #334155 0%, #0f172a 100%);\n }\n\n .range-slider__input {\n pointer-events: none;\n position: absolute;\n left: 0;\n width: 100%;\n height: 2rem;\n margin: 0;\n background: transparent;\n appearance: none;\n -webkit-appearance: none;\n }\n\n .range-slider__input::-webkit-slider-runnable-track {\n height: 6px;\n background: transparent;\n }\n\n .range-slider__input::-moz-range-track {\n height: 6px;\n background: transparent;\n }\n\n .range-slider__input::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n pointer-events: auto;\n width: 20px;\n height: 20px;\n margin-top: -7px;\n border-radius: 50%;\n border: 2px solid #ffffff;\n background: #0f172a;\n box-shadow: 0 8px 22px rgba(15, 23, 42, 0.22);\n cursor: pointer;\n }\n\n .range-slider__input::-moz-range-thumb {\n pointer-events: auto;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n border: 2px solid #ffffff;\n background: #0f172a;\n box-shadow: 0 8px 22px rgba(15, 23, 42, 0.22);\n cursor: pointer;\n }\n `]\n})\nexport class InputRangeSliderComponent implements OnChanges, AfterViewInit {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() error?: string;\n @Input() required = false;\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 1;\n @Input() startValue: number | null = null;\n @Input() endValue: number | null = null;\n @Input() startLabel = 'Мінімальне значення';\n @Input() endLabel = 'Максимальне значення';\n @Output() startValueChange = new EventEmitter<number>();\n @Output() endValueChange = new EventEmitter<number>();\n @Output() interactionEnd = new EventEmitter<void>();\n\n @ViewChild('startInput') private startInput?: ElementRef<HTMLInputElement>;\n @ViewChild('endInput') private endInput?: ElementRef<HTMLInputElement>;\n\n get safeStart(): number {\n const min = this.safeMin;\n const max = this.safeMax;\n const step = this.safeStep;\n const start = this.toFiniteNumber(this.startValue, min);\n const end = this.toFiniteNumber(this.endValue, max);\n return Math.max(min, Math.min(start, end - step));\n }\n\n get safeEnd(): number {\n const min = this.safeMin;\n const max = this.safeMax;\n const step = this.safeStep;\n const start = this.toFiniteNumber(this.startValue, min);\n const end = this.toFiniteNumber(this.endValue, max);\n return Math.min(max, Math.max(end, start + step));\n }\n\n get startPercent(): number {\n return this.toPercent(this.safeStart);\n }\n\n get endPercent(): number {\n return this.toPercent(this.safeEnd);\n }\n\n get rangePercent(): number {\n return Math.max(0, this.endPercent - this.startPercent);\n }\n\n get safeMin(): number {\n return this.toFiniteNumber(this.min, 0);\n }\n\n get safeMax(): number {\n const min = this.safeMin;\n const max = this.toFiniteNumber(this.max, min + this.safeStep);\n return max > min ? max : min + this.safeStep;\n }\n\n get safeStep(): number {\n const step = this.toFiniteNumber(this.step, 1);\n return step > 0 ? step : 1;\n }\n\n ngOnChanges(_: SimpleChanges): void {\n this.syncNativeInputs();\n }\n\n ngAfterViewInit(): void {\n this.syncNativeInputs();\n }\n\n onStartInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value);\n this.startValueChange.emit(Math.min(value, this.safeEnd - this.safeStep));\n }\n\n onEndInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value);\n this.endValueChange.emit(Math.max(value, this.safeStart + this.safeStep));\n }\n\n private toPercent(value: number): number {\n const span = this.safeMax - this.safeMin;\n if (span <= 0) {\n return 0;\n }\n return ((value - this.safeMin) / span) * 100;\n }\n\n private toFiniteNumber(value: number | null | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n }\n\n private syncNativeInputs(): void {\n queueMicrotask(() => {\n this.syncNativeInput(this.startInput?.nativeElement, this.safeStart);\n this.syncNativeInput(this.endInput?.nativeElement, this.safeEnd);\n });\n }\n\n private syncNativeInput(input: HTMLInputElement | undefined, value: number): void {\n if (!input) {\n return;\n }\n input.min = String(this.safeMin);\n input.max = String(this.safeMax);\n input.step = String(this.safeStep);\n input.value = String(value);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;;;MAIa,aAAa,CAAA;AACf,IAAA,KAAK,GAAG,MAAM,CAAc,EAAE,4EAAC;AAC/B,IAAA,MAAM,GAAG,MAAM,CAAe,EAAE,6EAAC;AACjC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AAEjC,IAAA,QAAQ,CAAC,KAAkB,EAAA;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B;AAEA,IAAA,UAAU,CAAC,KAAkB,EAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAC5D;AAEA,IAAA,SAAS,CAAC,MAAoB,EAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IAChC;IAEA,KAAK,CAAC,QAAqB,EAAE,EAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;wGAtBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAb,aAAa,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;MCEY,mBAAmB,CAAA;AACb,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAE1C,IAAA,gBAAgB,CAAC,IAAY,EAAE,KAAK,GAAG,EAAE,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,GAAG,CAAA,GAAA,EAAM,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAE,GAAG,EAAE;AAC7D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAiC,CAAA,aAAA,EAAgB,kBAAkB,CAAC,IAAI,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC;IAC3G;wGANW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;4FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACD3B,MAAM,YAAY,GAAG;AACrB,MAAM,WAAW,GAAG;AACpB,MAAM,UAAU,GAAG;AACnB,MAAM,aAAa,GAAG;AAuItB,MAAM,2BAA2B,GAAG,CAAC,KAAyB,KACnE,KAAK,CAAC,IAAI,KAAK;AAEV,MAAM,0BAA0B,GAAG,CAAC,KAAyB,KAClE,KAAK,CAAC,IAAI,KAAK;MAEJ,wBAAwB,GAAG,CACtC,KAAyB,KAEzB,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK;AAErC,MAAM,wBAAwB,GAAG,CAAC,MAA4B,KAA0B;IAC7F,MAAM,MAAM,GAAyB,EAAE;AAEvC,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAElB,IAAI,2BAA2B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YAC5F,MAAM,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD;IACF;AAEA,IAAA,OAAO,MAAM;AACf;;MClKa,mBAAmB,CAAA;AACb,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAE1C,MAAM,CAAC,KAAyB,EAAE,KAAa,EAAA;AAC7C,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE;YACpC,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnF;AACA,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAChD,MAAM,QAAQ,GAAG;AACd,aAAA,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC;AAC5C,aAAA,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,EAAE,CAAA,GAAA,CAAK,EAAE,GAAG,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACzE,QAAA,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0B,QAAQ,CAAC;QACzD;AACA,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAA,CAAA,EAAI,QAAQ,EAAE;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK;AACtD,cAAE;AACF,cAAE,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0B,UAAU,CAAC;IAC3D;wGAnBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAnB,mBAAmB,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCUY,mBAAmB,CAAA;AACrB,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,KAAK;IACL,QAAQ,GAAG,KAAK;AAChB,IAAA,KAAK;IACL,QAAQ,GAAG,KAAK;IAChB,OAAO,GAA+B,EAAE;AAEjD,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;IAC1C;AAEU,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;wGAd7D,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfhC,orCAwCA,EAAA,MAAA,EAAA,CAAA,yGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhCY,YAAY,+BAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAO9B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAKzB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,orCAAA,EAAA,MAAA,EAAA,CAAA,yGAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,WAAW;uBAAC,mBAAmB;;sBAK/B;;;MEnBU,yBAAyB,CAAA;AAC3B,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,MAAM;IACb,OAAO,GAAyB,OAAO;IACvC,IAAI,GAAG,CAAC;AACR,IAAA,YAAY;AACZ,IAAA,OAAO;IACP,QAAQ,GAAG,KAAK;IAChB,KAAK,GAA2B,EAAE;AAEjC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;wGAdtC,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVtC,+tCA+BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzBY,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAIX,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EAEN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+tCAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;ME0FU,4BAA4B,CAAA;IAC9B,UAAU,GAAG,MAAM;IACnB,aAAa,GAAG,SAAS;AAEzB,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,4EAAC;AACjB,IAAA,KAAK,GAAG,KAAK,CAAC,UAAU,4EAAC;AACzB,IAAA,WAAW,GAAG,KAAK,CAAC,kCAAkC,kFAAC;AACvD,IAAA,IAAI,GAAG,KAAK,CAAC,kDAAkD,2EAAC;AAChE,IAAA,KAAK,GAAG,KAAK,CAAC,EAAE,4EAAC;AACjB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,+EAAC;AACvB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,+EAAC;IAEvB,WAAW,GAAG,MAAM,EAAU;IAC9B,OAAO,GAAG,MAAM,EAAU;IAC1B,eAAe,GAAG,MAAM,EAAQ;IAChC,iBAAiB,GAAG,MAAM,EAA0C;AAEpE,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AAC5B,IAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;AAChC,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,kFAAC;AACxB,IAAA,YAAY,GAAG,MAAM,CAAC,oBAAoB,mFAAC;AAElB,IAAA,WAAW;IAE5B,aAAa,GAAG,IAAI,4BAA4B,CAC/D,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EACtE;AACE,QAAA,wBAAwB,EAAE,EAAE;AAC5B,QAAA,uBAAuB,EAAE,GAAG;AAC5B,QAAA,mBAAmB,EAAE,IAAI;AAC1B,KAAA,CACF;IACO,qBAAqB,GAAiC,IAAI;IAC1D,cAAc,GAA4B,IAAI;IAC9C,YAAY,GAAuB,IAAI;IACvC,UAAU,GAAkB,IAAI;IAChC,cAAc,GAAG,KAAK;IACtB,iBAAiB,GAAG,KAAK;IACzB,SAAS,GAAG,CAAC;AAErB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,KAAK,IAAI,EAAE;YAC9C,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE,IAAI,CAAC,gBAAgB,EAAE;IAC/C;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,aAAa,CAAC,SAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChD;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;AAEA,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACrE;QACF;;;;AAKA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,SAAS;AAE9B,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;gBAClC,MAAM,CAAC,qBAAqB,CAAC,MAAM,OAAO,EAAE,CAAC;AAC/C,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;gBAC5B;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;YAC7C,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;YAClD;YAEA,IAAI,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uCAAuC,CAAC;AAC9D,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnC;YACF;YAEA,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;AAExC,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAA,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;gBAC1B;YACF;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uCAAuC,CAAC;AAC9D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QACrC;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;gBAC5B;YACF;YAEA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,4BAA4B,CAAC;AACpE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC3C,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,UAAU,EAAE;QACnB;gBAAU;AACR,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC;QACF;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE;IACnB;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YACvJ;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,MAAM,CAAC,qBAAqB,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC/F;YACF;AAEA,YAAA,KAAK,IAAI,CAAC,UAAU,EAAE;AACxB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,IAAI,CAAC,UAAU,EAAE;IACnB;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AAC3B,YAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5C,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACxB;AAEA,QAAA,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;gBACjD,KAAK,CAAC,IAAI,EAAE;YACd;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;QAC7C,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE;AACb,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI;QACxB;AAEA,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAClE,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC1C;IACF;AAEQ,IAAA,MAAM,mBAAmB,CAAC,KAAa,EAAE,KAAuB,EAAA;AACtE,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE;QACzD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;AACvD,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AACpC,oBAAA,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACtB,oBAAA,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB,iBAAA;AACF,aAAA,CAAC;AAEF,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAA,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;AACnD,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,CAAC,qBAAqB,GAAG,QAAQ;AACrC,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,YAAA,KAAK,CAAC,SAAS,GAAG,MAAM;AACxB,YAAA,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;AACzC,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEQ,IAAA,MAAM,eAAe,CAAC,KAAa,EAAE,KAAuB,EAAA;QAClE,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAClE;AACE,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;AACpC,gBAAA,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;AACrB,gBAAA,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB,aAAA;AACF,SAAA,EACD,KAAK,EACL,CAAC,MAAM,EAAE,KAAK,KAAI;AAChB,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;gBAC5B;YACF;AAEA,YAAA,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;gBACpB;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;YAC7C,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAC/B;AACF,QAAA,CAAC,CACF;IACH;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,YAA0B;AACrC,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;gBAC5B;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB;AAC3C,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,iBAAiB,EAAE;gBAChF,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAK;oBAClD,KAAK,IAAI,EAAE;AACb,gBAAA,CAAC,CAAC;gBACF;YACF;AAEA,YAAA,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AAC7C,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC1D,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;oBAC7B;gBACF;YACF;AAAE,YAAA,MAAM;;YAER;YAEA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAK;gBAClD,KAAK,IAAI,EAAE;AACb,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAK;YAClD,KAAK,IAAI,EAAE;AACb,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,2BAA2B,GAAA;AACvC,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,YAAY,GAAI,MAA0E,CAAC,eAAe;QAChH,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,YAAY,CAAC,mBAAmB,EAAE;AACpC,gBAAA,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,mBAAmB,EAAE;gBACjE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC1C,oBAAA,OAAO,IAAI;gBACb;YACF;YAEA,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;wGAzTW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlF7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjFS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAmFzD,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAtFxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,CAAC;AACrE,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFT,EAAA,CAAA;AACF,iBAAA;;sBAuBE,SAAS;uBAAC,aAAa;;;MCzHb,qBAAqB,CAAA;IACvB,KAAK,GAAG,EAAE;IACV,KAAK,GAAG,UAAU;IAClB,WAAW,GAAG,kCAAkC;IAChD,IAAI,GAAG,kDAAkD;IACzD,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;AACf,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAU;AACpC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;AAC1C,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAA0C;wGAX7E,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPtB;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EALS,mBAAmB,sKAAE,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAQhD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;AAC5D,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCnBU,6BAA6B,CAAA;IAC/B,KAAK,GAAG,KAAK;IACb,QAAQ,GAAG,KAAK;AACf,IAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AACzC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAE5C,IAAA,aAAa,CAAC,KAAY,EAAA;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAE,KAAK,CAAC,MAA2B,CAAC,OAAO,CAAC;IACnE;wGARW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,iMAF9B,CAAA,0NAAA,CAA4N,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;4FAE3N,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,0NAAA,CAA4N;AACvO,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;;MCEU,sBAAsB,CAAA;AACxB,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,KAAK;IACL,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IACzB,KAAK,GAAG,KAAK;AACL,IAAA,QAAQ,GAA6B,MAAM,SAAS;AAC5D,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAAqB,EAAA,EAAU,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,gBAAgB,CAAC,EAA4B,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC3E,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,UAAmB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;AAE1E,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,iBAAiB,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtB;wGAxBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAFtB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXjH,2PAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,sKAAE,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAI/D,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,6BAA6B,CAAC,EAAA,SAAA,EAEhE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,sBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,2PAAA,EAAA;;sBAG9G;;sBACA;;sBACA;;sBACA;;sBACA;;;AEhBH,MAAM,aAAa,GAAG,4BAA4B;AAE3C,MAAM,mBAAmB,GAAG,CACjC,OAAwB,EACxB,QAAiB,EACjB,OAAgB,EAChB,KAAK,GAAG,KAAK,KACc;AAC3B,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;AAC3B,IAAA,MAAM,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAEjI,IAAI,QAAQ,IAAI,KAAK;AAAE,QAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;AAChD,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,IAAI;AACtB,IAAA,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAAE,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IACrG,IAAI,OAAO,EAAE;AACX,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAE,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QACxE;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AACA,IAAA,OAAO,IAAI;AACb,CAAC;;MCTY,0BAA0B,CAAA;AAC5B,IAAA,EAAE;AACF,IAAA,IAAI;IACJ,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,SAAS;IACjB,WAAW,GAAG,SAAS;AACtB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGAPjC,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAV3B;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;4FAEU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAbtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,EAAA,CAAA;AACF,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCAU,mBAAmB,CAAA;AACb,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,QAAQ,GAAG,KAAK;AAChB,IAAA,KAAK;IAEd,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,SAAS;AAET,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,YAAA,EAAe,mBAAmB,CAAC,MAAM,EAAE,EAAE;AACpE,IAAA,QAAQ,GAA4B,MAAM,SAAS;AAC3D,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS;IAC/D;AAEA,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,EAAE;IAClB;AAEQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACrC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAA,CAAA,EAAI,OAAO,EAAE;IAC1D;AAEQ,IAAA,YAAY,CAAC,KAAa,EAAA;QAChC,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACjD;wGA3EW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EATnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC5F,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBH,iVAGA,2CDOY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,sKAAE,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAYzE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,0BAA0B,CAAC,EAAA,eAAA,EAEpE,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5F,qBAAA,EAAA,QAAA,EAAA,iVAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;ME3BU,cAAc,CAAA;IACjB,WAAW,GAAwB,IAAI;AAE/C,IAAA,IAAI,CAAC,KAAiB,EAAA;AACpB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,aAAa,IAAI,aAAa,KAAK,KAAK,EAAE;AAC5C,YAAA,aAAa,EAAE;QACjB;IACF;AAEA,IAAA,KAAK,CAAC,KAAiB,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;wGAfW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;4FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCiCrB,yBAAyB,CAAA;AACnB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;IACrC,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;AAErD,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,MAAM;IACb,OAAO,GAAmB,OAAO;IACjC,YAAY,GAAG,YAAY;IAC3B,iBAAiB,GAAG,WAAW;IAC/B,aAAa,GAAG,YAAY;IAC5B,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;IAChB,YAAY,GAAG,KAAK;AACpB,IAAA,OAAO;AACP,IAAA,KAAK;IACL,OAAO,GAA+B,EAAE;IAExC,QAAQ,GAAG,KAAK;IACzB,KAAK,GAA2B,EAAE;AAC1B,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,WAAA,EAAc,yBAAyB,CAAC,MAAM,EAAE,EAAE;IACjF,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5C,YAAY,GAAiB,MAAM;IACnC,cAAc,GAAG,KAAK;IACb,mBAAmB,GAAG,EAAE;IACxB,WAAW,GAAG,CAAC;AACf,IAAA,iBAAiB,GAAwB;QAChD,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;QACtG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;KACxG;AACS,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AACxE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AACQ,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAC3E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/C,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACrD;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1F;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACzE;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACxC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM;YAC/C,KAAK;YACL,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC/E,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;IACnE;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AACrD,QAAA,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;AAChD,QAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;QACvC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC;AAE3D,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;AAC7C,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;YAC5C,OAAO;AACL,gBAAA,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5B,gBAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;gBACnB,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;aAC/D;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY;QAC9B,OAAO,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC3E;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC9C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,WAAW,CAAC,KAAa,EAAE,KAAY,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,UAAU,CAAC,IAAY,EAAE,KAAY,EAAA;QACnC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,WAAW,CAAC,MAAc,EAAE,KAAY,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9G;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;YACzC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzG;aAAO;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACzG;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,UAAU,CAAC,SAAiB,EAAE,KAAY,EAAA;QACxC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC;AACjE,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS;IACjC;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACxH;AAEA,IAAA,cAAc,CAAC,IAAY,EAAA;QACzB,OAAO,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI;IAClD;IAGA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhI,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AAC7C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW;AACxD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAC7C;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,YAAY,CAAC,KAAoB,EAAA;AAC/B,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE;QACpI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,cAAc,EAAE;IACrD;AAEQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAA,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACrD;AAEA,IAAA,aAAa,CAAC,MAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;AAEQ,IAAA,YAAY,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzD;AAEQ,IAAA,SAAS,CAAC,KAA6B,EAAA;QAC7C,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5E,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAC3B,YAAA,OAAO,IAAI;QACb;QACA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;IACvC;AAEQ,IAAA,cAAc,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAC1C,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO;QAChB;QAEA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,iCAAiC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK;QAClC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACnE,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC,GAAG;AAClH,cAAE;cACA,IAAI;IACV;AAEQ,IAAA,WAAW,CAAC,IAAU,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,EAAE;IAClC;wGAlRW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EATzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAClG,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjCH,uyOAwJA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjIY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8BAAqB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAYvG,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAfrC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,mBAElG,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAClG,qBAAA,EAAA,QAAA,EAAA,uyOAAA,EAAA;;sBAOA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAaA;;sBA+IA,YAAY;uBAAC,gBAAgB;;sBAO7B,YAAY;uBAAC,yBAAyB;;;MEjN5B,kBAAkB,CAAA;AACiB,IAAA,OAAO;AAC5C,IAAA,KAAK;AAAoB,IAAA,IAAI;AAAoB,IAAA,KAAK;AAAoB,IAAA,WAAW;AAAoB,IAAA,IAAI;AAAoB,IAAA,EAAE;IAAoB,QAAQ,GAAG,KAAK;IAAW,QAAQ,GAAG,KAAK;IAAW,YAAY,GAAG,KAAK;AAAW,IAAA,OAAO;IAAoB,IAAI,GAAG,CAAC;IAAW,OAAO,GAA+B,EAAE;AACjU,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;IAChE,YAAY,GAA2B,EAAE;AAAU,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAAU,IAAA,SAAS,GAAe,MAAM,SAAS;IAC/K,eAAe,GAAA,EAAW,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACjM,UAAU,CAAC,KAA6B,EAAA,EAAU,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9G,gBAAgB,CAAC,EAA2C,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC1F,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,KAAc,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AAChE,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;wGAVrH,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAFlB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAG5L,yBAAyB,gDCZtC,uaAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKsD,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGvF,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;+BACE,YAAY,EAAA,UAAA,EAAc,IAAI,EAAA,OAAA,EAAW,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,EAAA,eAAA,EAA0E,uBAAuB,CAAC,MAAM,EAAA,SAAA,EAChM,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,kBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,uaAAA,EAAA;;sBAGtM,SAAS;uBAAC,yBAAyB;;sBACnC;;sBAAyB;;sBAAwB;;sBAAyB;;sBAA+B;;sBAAwB;;sBAAsB;;sBAA2B;;sBAA2B;;sBAA+B;;sBAA2B;;sBAAmB;;sBAC1R;;;MEUU,6BAA6B,CAAA;AACvB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;IACrC,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;AACrD,IAAA,KAAK;AAAoB,IAAA,IAAI;AAAoB,IAAA,WAAW;AAAoB,IAAA,IAAI;AAAoB,IAAA,EAAE;IAC1G,IAAI,GAAG,CAAC;IAAW,QAAQ,GAAG,KAAK;IAAW,YAAY,GAAG,KAAK;AAClE,IAAA,OAAO;AAAoB,IAAA,KAAK;IAAoB,OAAO,GAA+B,EAAE;IAC5F,IAAI,GAAG,gBAAgB;IAAW,YAAY,GAAG,YAAY;IAAW,iBAAiB,GAAG,WAAW;IAAW,aAAa,GAAG,YAAY;IAC9I,QAAQ,GAAG,KAAK;IAAE,KAAK,GAA2B,EAAE;IAAE,cAAc,GAAG,KAAK;IAAE,YAAY,GAAiB,MAAM;IAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/J,mBAAmB,GAAG,EAAE;IAAW,WAAW,GAAG,CAAC;AAClD,IAAA,iBAAiB,GAAwB;QAChD,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;QACtG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;KACxG;IACD,YAAY,GAAG,EAAE;IAAE,cAAc,GAAG,CAAC;AAC7B,IAAA,OAAO,MAAM,GAAG,CAAC;AAAmB,IAAA,WAAW,GAAG,CAAA,eAAA,EAAkB,6BAA6B,CAAC,MAAM,EAAE,EAAE;AAC1G,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AAChE,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAAE,IAAA,SAAS,GAAe,MAAM,SAAS;AACpH,IAAA,IAAI,SAAS,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,IAAI,YAAY,GAAA,EAAkB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjM,IAAA,IAAI,YAAY,GAAA,EAAa,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAChO,IAAA,IAAI,SAAS,GAAA,EAAa,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnG,IAAI,SAAS,GAAA,EAAa,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAClE,IAAI,YAAY,KAA8C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5M,IAAA,IAAI,WAAW,GAAA,EAAe,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC/I,IAAA,IAAI,YAAY,GAAA;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAAE,QAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;AAAE,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;AACnK,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI,EAAG,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACzP;IACA,UAAU,CAAC,KAA6B,EAAA,EAAU,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,EAAE;QAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1S,gBAAgB,CAAC,EAA2C,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC1F,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAC/D,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAChI,IAAA,gBAAgB,CAAC,QAAiB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AAC/F,IAAA,YAAY,CAAC,KAAY,EAAA,EAAU,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AACvN,IAAA,aAAa,GAAA,EAAW,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9H,WAAW,CAAC,MAAc,EAAE,KAAY,EAAA,EAAU,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,KAAK,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACnZ,eAAe,CAAC,KAAY,EAAA,EAAU,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACtH,cAAc,CAAC,KAAY,EAAA,EAAU,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACpH,WAAW,CAAC,KAAa,EAAE,KAAY,IAAU,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACxM,UAAU,CAAC,IAAY,EAAE,KAAY,IAAU,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AACpM,IAAA,UAAU,CAAC,SAAiB,EAAE,KAAY,EAAA,EAAU,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;AAChM,IAAA,WAAW,CAAC,SAAiB,EAAE,KAAK,GAAG,IAAI,EAAA,EAAU,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;AAAE,QAAA,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,KAAK;AAAE,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AAC5U,IAAA,YAAY,GAAA,EAAW,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,EAAE;AAAE,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;AAAE,IAAA,CAAC,CAAC;AACtH,IAAA,aAAa,CAAC,KAAa,EAAA,EAAU,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE;QAAE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE;;AAAO,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;IAAE;;QAAO,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AACrpB,IAAA,YAAY,CAAC,KAAoB,EAAA,EAAU,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAAE,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IACpO,SAAS,CAAC,KAAa,EAAA,EAAY,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzU,UAAU,CAAC,IAAY,EAAA,EAAa,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;AACrH,IAAA,eAAe,CAAC,KAAa,EAAA,EAAa,OAAO,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;AAClK,IAAA,cAAc,CAAC,IAAY,EAAA,EAAa,OAAO,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;AAC1D,IAAA,eAAe,GAAA,EAAW,IAAI,IAAI,CAAC,cAAc;AAAE,QAAA,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAChE,IAAA,QAAQ,GAAA,EAAW,IAAI,IAAI,CAAC,cAAc;AAAE,QAAA,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC3G,IAAA,aAAa,CAAC,MAAgC,EAAA,EAAU,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF,YAAY,CAAC,IAAU,EAAA,EAAU,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,SAAS,CAAC,KAAa,EAAA,EAAiB,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACtK,WAAW,CAAC,IAAU,EAAA,EAAY,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE,CAAC,CAAC;wGAvD1J,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EAL7B;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACzG,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SACtG,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBH,8vKAkBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8BAAqB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAQvG,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAXzC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,mBAElG,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,mCAAmC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACzG,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,mCAAmC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACtG,qBAAA,EAAA,QAAA,EAAA,8vKAAA,EAAA;;sBAMA;;sBAAyB;;sBAAwB;;sBAA+B;;sBAAwB;;sBACxG;;sBAAmB;;sBAA2B;;sBAC9C;;sBAA2B;;sBAAyB;;sBAEpD;;sBAQA;;sBAkCA,YAAY;uBAAC,gBAAgB;;sBAC7B,YAAY;uBAAC,yBAAyB;;;MEhE5B,sBAAsB,CAAA;AACiB,IAAA,OAAO;AAChD,IAAA,KAAK;AAAoB,IAAA,IAAI;AAAoB,IAAA,KAAK;AAAoB,IAAA,WAAW;AAAoB,IAAA,IAAI;AAAoB,IAAA,EAAE;IAAoB,QAAQ,GAAG,KAAK;IAAW,QAAQ,GAAG,KAAK;IAAW,YAAY,GAAG,KAAK;AAAW,IAAA,OAAO;IAAoB,IAAI,GAAG,CAAC;IAAW,OAAO,GAA+B,EAAE;AACjU,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;IAChE,YAAY,GAA2B,EAAE;AAAU,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAAU,IAAA,SAAS,GAAe,MAAM,SAAS;IAC/K,eAAe,GAAA,EAAW,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACjM,UAAU,CAAC,KAA6B,EAAA,EAAU,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9G,gBAAgB,CAAC,EAA2C,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC1F,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,KAAc,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AAChE,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;wGAVrH,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAFtB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGpM,6BAA6B,gDCZ1C,2aAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDK0D,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAG/F,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EAAc,IAAI,EAAA,OAAA,EAAW,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAA8E,uBAAuB,CAAC,MAAM,EAAA,SAAA,EAC5M,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,sBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,2aAAA,EAAA;;sBAG9M,SAAS;uBAAC,6BAA6B;;sBACvC;;sBAAyB;;sBAAwB;;sBAAyB;;sBAA+B;;sBAAwB;;sBAAsB;;sBAA2B;;sBAA2B;;sBAA+B;;sBAA2B;;sBAAmB;;sBAC1R;;;MEVU,0BAA0B,CAAA;AAC5B,IAAA,WAAW;AAAoB,IAAA,IAAI;AAAoB,IAAA,EAAE;AAAoB,IAAA,YAAY;AAAoB,IAAA,OAAO;IAAoB,QAAQ,GAAG,KAAK;IAAW,KAAK,GAA2B,EAAE;AACpM,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAAY,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGAFrF,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EADyE,CAAA,mPAAA,CAAqP,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAA3R,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FACtF,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,qPAAqP,EAAE;;sBAEpW;;sBAA+B;;sBAAwB;;sBAAsB;;sBAAgC;;sBAA2B;;sBAA2B;;sBACnK;;sBAAoD;;;MCqB1C,mBAAmB,CAAA;AACb,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,OAAO;IACd,OAAO,GAAmB,OAAO;IACjC,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;AAChB,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,KAAK;IACL,OAAO,GAA+B,EAAE;IAEjD,QAAQ,GAAG,KAAK;IAChB,KAAK,GAA2B,EAAE;AAC1B,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,YAAA,EAAe,mBAAmB,CAAC,MAAM,EAAE,EAAE;AAClE,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AACxE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AACQ,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAC3E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;IAEA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAEtI,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,MAAM,MAAM,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;AAEA,IAAA,aAAa,CAAC,MAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;wGAxDW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EATnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC5F,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBH,2dAGA,2CDYY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAqB,mBAAmB,sKAAE,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAY5F,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,0BAA0B,CAAC,mBAEvF,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5F,qBAAA,EAAA,QAAA,EAAA,2dAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA;;;ME5CU,2BAA2B,CAAA;AAC7B,IAAA,WAAW;AAAoB,IAAA,IAAI;AAAoB,IAAA,EAAE;IAAoB,QAAQ,GAAG,KAAK;IAAW,KAAK,GAA2B,EAAE;AACzI,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAAY,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGAFrF,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EADyE,CAAA,kMAAA,CAAoM,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAA1O,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FACvF,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,oMAAoM,EAAE;;sBAEpT;;sBAA+B;;sBAAwB;;sBAAsB;;sBAA2B;;sBACxG;;sBAAoD;;;MCyB1C,oBAAoB,CAAA;AACd,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,QAAQ;IACf,OAAO,GAAmB,OAAO;IACjC,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;AAChB,IAAA,YAAY;IACZ,QAAQ,GAAG,KAAK;AAChB,IAAA,OAAO;AACP,IAAA,KAAK;IACL,OAAO,GAA+B,EAAE;IAEjD,KAAK,GAA2B,EAAE;AAC1B,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,aAAA,EAAgB,oBAAoB,CAAC,MAAM,EAAE,EAAE;AACpE,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AACxE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AACQ,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAC3E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhI,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;AAEA,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE;IACxB;AAEA,IAAA,aAAa,CAAC,MAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;wGA5DW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EATpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC7F,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BH,saAGA,2PDYY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAqB,mBAAmB,sKAAE,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAgB7F,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,mBAMxF,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7F,qBAAA,EAAA,QAAA,EAAA,saAAA,EAAA,MAAA,EAAA,CAAA,iJAAA,EAAA,iDAAA,CAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAKA;;;MEnCU,6BAA6B,CAAA;IAC/B,QAAQ,GAAG,GAAG;IACd,QAAQ,GAAG,MAAM;AACjB,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;AACF,IAAA,YAAY;AACZ,IAAA,OAAO;IACP,QAAQ,GAAG,KAAK;IAChB,KAAK,GAA2B,EAAE;AACjC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;IAC5C,OAAO,GAAG,KAAK;wGAZJ,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT9B;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAUhC,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAbzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;AACF,iBAAA;;sBAIE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCDU,sBAAsB,CAAA;AAChB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,UAAU;IACjB,gBAAgB,GAAG,GAAG;IACtB,gBAAgB,GAAG,MAAM;IACzB,OAAO,GAAmB,OAAO;IACjC,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;AAChB,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,KAAK;IACL,OAAO,GAA+B,EAAE;IAEjD,QAAQ,GAAG,KAAK;IAChB,iBAAiB,GAAG,KAAK;IACzB,KAAK,GAA2B,EAAE;AAC1B,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,eAAA,EAAkB,sBAAsB,CAAC,MAAM,EAAE,EAAE;AACxE,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AACxE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AACQ,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAC3E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhI,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,MAAM,MAAM,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB;AAChD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,MAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;wGAjEW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EATtB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC/F,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBH,8dAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDYY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,8BAAqB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAYpH,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAflC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,6BAA6B,CAAC,mBAE/G,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC;AACrD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/F,qBAAA,EAAA,QAAA,EAAA,8dAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAOA;;;ME1BU,kBAAkB,CAAA;AACZ,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,MAAM;IACb,OAAO,GAAmB,OAAO;IACjC,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;AAChB,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,KAAK;IACL,OAAO,GAA+B,EAAE;IAEjD,QAAQ,GAAG,KAAK;IAChB,KAAK,GAA2B,EAAE;AAC1B,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,WAAA,EAAc,kBAAkB,CAAC,MAAM,EAAE,EAAE;AAChE,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AACxE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AACQ,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAC3E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhI,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,MAAM,MAAM,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;AAEA,IAAA,aAAa,CAAC,MAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;wGAxDW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EATlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC3F,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBH,ymBAyBA,2CDZY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,sKAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAYxE,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,EAAA,eAAA,EAEnE,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC3F,qBAAA,EAAA,QAAA,EAAA,ymBAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA;;;ME1CU,6BAA6B,CAAA;AAC/B,IAAA,WAAW;AAAoB,IAAA,IAAI;AAAoB,IAAA,EAAE;IAAoB,IAAI,GAAG,CAAC;IAAW,QAAQ,GAAG,KAAK;IAAW,KAAK,GAA2B,EAAE;AAC5J,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAAY,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGAFrF,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EADyE,CAAA,qNAAA,CAAuN,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAA7P,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FACzF,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,uNAAuN,EAAE;;sBAEzU;;sBAA+B;;sBAAwB;;sBAAsB;;sBAAmB;;sBAA2B;;sBAC3H;;sBAAoD;;;MCqB1C,sBAAsB,CAAA;AAChB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,MAAM;IACb,OAAO,GAAmB,UAAU;IACpC,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;AAChB,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,KAAK;IACL,OAAO,GAA+B,EAAE;IAEjD,QAAQ,GAAG,KAAK;IAChB,KAAK,GAA2B,EAAE;AAC1B,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,eAAA,EAAkB,sBAAsB,CAAC,MAAM,EAAE,EAAE;AACxE,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AACxE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AACQ,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAC3E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhI,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,MAAM,MAAM,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;AAEA,IAAA,aAAa,CAAC,MAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;wGAxDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EATtB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC/F,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBH,wbAGA,2CDYY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAqB,mBAAmB,sKAAE,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAY/F,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAflC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,6BAA6B,CAAC,mBAE1F,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC;AACrD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/F,qBAAA,EAAA,QAAA,EAAA,wbAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA;;;MEvCU,yBAAyB,CAAA;AAC3B,IAAA,MAAM;IACN,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,aAAa,GAAW,EAAE;AACzB,IAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAE5C,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACtD,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;wGAbW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECTtC,uhCAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLY,YAAY,EAAA,CAAA,EAAA,CAAA;;4FAGX,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,uhCAAA,EAAA;;sBAItB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEHU,kBAAkB,CAAA;AACpB,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,KAAK;IACL,QAAQ,GAAG,KAAK;AAChB,IAAA,MAAM;IACN,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;AACf,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;IAClD,KAAK,GAAyB,IAAI;AAC1B,IAAA,QAAQ,GAA0C,MAAM,SAAS;AACzE,IAAA,SAAS,GAAe,MAAM,SAAS;IAEvC,UAAU,CAAC,KAA2B,EAAA,EAAU,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACpE,gBAAgB,CAAC,EAAyC,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACxF,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,UAAmB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;AAE1E,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,YAAY,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACnD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAmB,IAAI,YAAY,IAAI,CAAC,GAAG,EAAE;IACzG;AAEA,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,KAAK,KAAK,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;wGA9CW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAFlB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECX7G,uVAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,sKAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAI3D,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,EAAA,SAAA,EAE5D,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,kBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,uVAAA,EAAA;;sBAG1G;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEVU,0BAA0B,CAAA;IAC5B,MAAM,GAAG,SAAS;IAClB,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,aAAa,GAAG,IAAI;IACpB,QAAQ,GAAqB,EAAE;AAC9B,IAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,IAAA,OAAO,GAAG,IAAI,YAAY,EAAU;AACpC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAiC;AAC3D,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAE5C,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACtD,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACrB;wGAhBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXvC,0zDAgBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRY,YAAY,8BAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAG3B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,0zDAAA,EAAA;;sBAItC;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEGU,mBAAmB,CAAA;AACb,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACjC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,KAAK;IACL,QAAQ,GAAG,KAAK;IAChB,MAAM,GAAG,SAAS;IAClB,QAAQ,GAAG,KAAK;AAChB,IAAA,KAAK,GAAG,MAAM,CAAC,gBAAgB;IAC/B,QAAQ,GAAG,KAAK;AACf,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAW;IAEvD,KAAK,GAA6B,IAAI;IACtC,YAAY,GAAW,EAAE;IACzB,QAAQ,GAAqB,EAAE;IAC/B,SAAS,GAAG,KAAK;AACA,IAAA,SAAS,GAAG,IAAI,GAAG,EAAkB;AAC9C,IAAA,QAAQ,GAA8C,MAAM,SAAS;AAC7E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA+B,EAAA;AACxC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,eAAe,EAAE;IACxB;IACA,gBAAgB,CAAC,EAA6C,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC5F,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,UAAmB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;AAE1E,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC;YAAE,IAAI,CAAC,eAAe,EAAE;IACjD;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe;IAC5F;AAEA,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AAC3C,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5I,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC5B;AAEA,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5I,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,KAAa,EAAA;QAClB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;AACzB,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE;AACtB,YAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACxD;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YACxC,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;AAEA,IAAA,IAAI,CAAC,KAAoC,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE;QACtE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACzB,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACxD;AAEA,IAAA,IAAY,GAAG,GAAA;AACb,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AAChF,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;IAClG;AAEA,IAAA,IAAY,eAAe,GAAA;AACzB,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,gBAAgB;IACtH;AAEQ,IAAA,SAAS,CAAC,KAA+B,EAAA;AAC/C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IAC7B;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,YAAA,IAAI,EAAE,CAAC,OAAO,KAAI;AAChB,gBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACzF,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACvB,oBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC5C,oBAAA,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI;wBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;AACxD,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;gBAC9G,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7E,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACxC,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,CAAC;YACD,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC7E,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,CAAC;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,UAAU,CAAC,IAAU,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAgC,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CAChF,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CACnE;IACH;AAEQ,IAAA,eAAe,CAAC,KAAA,GAAkC,IAAI,CAAC,KAAK,EAAA;QAClE,IAAI,CAAC,cAAc,EAAE;QACrB,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QAC3G,IAAI,CAAC,QAAQ,GAAG;YACd,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAa,EAAE,CAAC,CAAC;YACjJ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC,CAAC;SAC5J;IACH;IAEQ,cAAc,GAAA;AACpB,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,gBAAA,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5G;AAEQ,IAAA,eAAe,CAAC,KAAa,EAAA;AACnC,QAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACxD,QAAA,OAAO,cAAc,kBAAkB,CAAC,KAAK,CAAC,mBAAmB;IACnE;AAEQ,IAAA,iBAAiB,CAAC,KAAc,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;QACtC,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,KAAK,iBAAiB;IAC5E;wGAzJW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAFnB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrB9G,wYAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDgBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,sKAAE,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAI5E,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,0BAA0B,CAAC,EAAA,SAAA,EAE7E,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,mBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,wYAAA,EAAA;;sBAI3G;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEsBU,2BAA2B,CAAA;IAC7B,SAAS,GAAG,CAAC;IACb,eAAe,GAAG,WAAW;IAC7B,SAAS,GAAG,KAAK;AACT,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;IACrC,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;AAErD,IAAA,KAAK;AACL,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,IAAI;IACJ,UAAU,GAAiE,EAAE;IAC7E,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAEzB,QAAQ,GAAG,KAAK;IACP,eAAe,GAAG,4BAA4B;IAC9C,UAAU,GAAG,IAAI;IAClB,QAAQ,GAAqB,EAAE;IACvC,IACI,OAAO,CAAC,KAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AACA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AACS,IAAA,KAAK;AACL,IAAA,IAAI;IACJ,YAAY,GAAG,EAAE;IACjB,UAAU,GAAG,EAAE;AACd,IAAA,WAAW,GAAG,IAAI,YAAY,EAAiB;AAC/C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;IAE1C,aAAa,GAAG,GAAG;IACnB,mBAAmB,GAAG,EAAE;IACxB,WAAW,GAAG,CAAC;AAE0C,IAAA,eAAe;AACxE,IAAA,iBAAiB,GAAwB;AAChD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,IAAI,CAAC,WAAW;AAC1B,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW;AAC3B,SAAA;KACF;IAED,MAAM,GAAG,KAAK;IACd,UAAU,GAAG,CAAC;IACd,KAAK,GAAkB,EAAE;IACzB,UAAU,GAAa,EAAE;IACzB,eAAe,GAAqB,EAAE;IACtC,UAAU,GAAG,EAAE;IACf,mBAAmB,GAAG,KAAK;AAEV,IAAA,cAAc,GAAG,IAAI,OAAO,EAAU;AACtC,IAAA,yBAAyB,GAAG,IAAI,GAAG,EAAkB;IAC9D,iBAAiB,GAAqB,EAAE;AACxC,IAAA,QAAQ,GAAmC,MAAM,SAAS;AAClE,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACrF,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAChC;YACF;YAEA,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AACxC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO;AACrC,QAAA,MAAM,iBAAiB,GAAG,YAAY,IAAI;AACrC,eAAA,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC;AAElG,QAAA,IAAI,WAAW,IAAI,iBAAiB,EAAE;YACpC,IAAI,CAAC,uBAAuB,EAAE;QAChC;IACF;AAEA,IAAA,UAAU,CAAC,KAAoB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;QACrD;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,GAAI,KAAgB,IAAI,EAAE;QACtC;QACA,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,qCAAqC,EAAE;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAkC,EAAA;AACjD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;YACpB;QACF;AACA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAgB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACpF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,YAAY,CAAC,MAAsB,EAAE,KAAY,EAAA;QAC/C,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;AAC7C,kBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,GAAG;kBAC7C,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACnC;aAAO;AACL,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG;AACjD,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,aAAa,EAAE;QACtB;QACA,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC9C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAGA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,WAAW,IAAI,UAAU;YACvC;AACA,YAAA,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;QACzC;AACA,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU;IACzE;AAEA,IAAA,UAAU,CAAC,MAAsB,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACzC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxC;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK;IAC7B;AAEA,IAAA,cAAc,CAAC,MAAsB,EAAA;AACnC,QAAA,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE;IAC3B;IAEA,WAAW,CAAC,KAAa,EAAE,MAAsB,EAAA;QAC/C,OAAO,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE;IACzF;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE;AAC3E,YAAA,OAAO,OAAO;QAChB;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACnD,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAC/B,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClE,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;IAEA,YAAY,CAAC,MAAsB,EAAE,KAAY,EAAA;QAC/C,KAAK,CAAC,eAAe,EAAE;QAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAEvC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AAC1D,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,wBAAwB,EAAE;QACjC;IACF;AAEA,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEnB,QAAA,MAAM,SAAS,GAAkB,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI;AAC1D,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;YACxG;QACF;QAEA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC5F,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;IACjD;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACtE,QAAA,OAAO,MAAM;IACf;IAEQ,YAAY,CAAC,GAAG,UAA8B,EAAA;AACpD,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B;AAChD,QAAA,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE;AAChC,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE;gBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACzC,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACpB,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;gBACzB;YACF;QACF;AACA,QAAA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC7B;AAEQ,IAAA,aAAa,CAAC,MAAsB,EAAA;QAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE;IAC1C;IAEQ,iBAAiB,GAAA;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;IACvC;IAEQ,cAAc,CAAC,QAAiB,EAAE,OAAgB,EAAA;QACxD,IAAI,QAAQ,KAAK,OAAO;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;QAEtG,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,QAAmC,CAAC;QAC3E,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC;AACzE,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QAElE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KACxC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG;AAC7C,eAAA,OAAmC,CAAC,GAAG,CAAC,KAAK,KAAK,CACvD;IACH;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC/C,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAEhC,IAAI,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AAEA,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;AAEQ,IAAA,qBAAqB,CAAC,KAAa,EAAA;AACzC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C,IAAI,CAAC,cAAc,EAAE;YACnB;QACF;AAEA,QAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QACpF,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC;AAClE,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAE7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC;AAC5E,YAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACd,gBAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,cAAc,EAAE;oBAChF;gBACF;gBAEA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC1D,gBAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;gBAChC,IAAI,CAAC,qCAAqC,EAAE;gBAC5C,IAAI,CAAC,wBAAwB,EAAE;AAC/B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,cAAc,EAAE;oBAChF;gBACF;AAEA,gBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,gBAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;gBAChC,IAAI,CAAC,wBAAwB,EAAE;AAC/B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACJ;IAEQ,qCAAqC,GAAA;AAC3C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C,IAAI,CAAC,cAAc,EAAE;YACnB;QACF;QAEA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AACpG,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACrE,MAAM,aAAa,GAAG;AACnB,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACvC,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACzB;QACF;QAEA,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,YAAA,IAAI,EAAE,CAAC,KAAK,KAAI;gBACd,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAC/C,gBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;oBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;oBAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE;AACnF,wBAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC9B;gBACF;AACA,gBAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW;gBACpC,IAAI,CAAC,wBAAwB,EAAE;AAC/B,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,qBAAqB,CAAC,KAAuC,EAAA;AACnE,QAAA,OAAO,CAAC,KAAK,IAAI,EAAE;AAChB,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC7C,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAC1D;AAEQ,IAAA,oBAAoB,CAAC,IAAiB,EAAA;QAC5C,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AAChC,YAAA,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;AAClD,YAAA,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,OAAO,CAAA,iBAAA,CAAmB,GAAG,SAAS;SACpF;IACH;IAEQ,gBAAgB,CAAC,IAAY,EAAE,KAAc,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;QACpC,IAAI,KAAK,EAAE,IAAI,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAChD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;AAChE,YAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;gBACjE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC;QACF;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAA,CAAE,GAAG,EAAE;AAC/D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAA,aAAA,EAAgB,kBAAkB,CAAC,IAAI,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC;IAC1F;IAEQ,eAAe,CAAC,IAAY,EAAE,GAAW,EAAA;AAC/C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAc,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;IAC1G;wGA5aW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAiBlB,gBAAgB,CAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EA1BzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACpG,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EA4CmD,UAAU,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClGhE,24LAmJA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvGY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAYpF,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAfvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cACpB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,mBAC/E,uBAAuB,CAAC,MAAM,EAAA,SAAA,EAEpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACpG,qBAAA,EAAA,QAAA,EAAA,24LAAA,EAAA;;sBAYA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAErC;;sBACA;;sBAEA;;sBASA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA,SAAS;uBAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;;sBA4I/D,YAAY;uBAAC,gBAAgB;;sBAO7B,YAAY;uBAAC,yBAAyB;;;MEpO5B,oBAAoB,CAAA;AACiB,IAAA,OAAO;AAE9C,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,IAAI;IACJ,UAAU,GAAiE,EAAE;IAC7E,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IACe,QAAQ,GAAG,KAAK;IAC/C,eAAe,GAAG,4BAA4B;IAC9C,UAAU,GAAG,IAAI;IACjB,OAAO,GAAqB,EAAE;IAC9B,YAAY,GAAG,EAAE;IACjB,UAAU,GAAG,EAAE;AAEd,IAAA,WAAW,GAAG,IAAI,YAAY,EAAiB;AAC/C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;IAE3C,YAAY,GAAkB,IAAI;AAClC,IAAA,QAAQ,GAAmC,MAAM,SAAS;AAC1D,IAAA,SAAS,GAAe,MAAM,SAAS;IAE/C,eAAe,GAAA;QACb,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,KAAI;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;IAC7C;AAEA,IAAA,UAAU,CAAC,KAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;IACjC;IAEA,gBAAgB,CAAC,EAAkC,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACjF,iBAAiB,CAAC,EAAc,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC/D,gBAAgB,CAAC,UAAmB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;AAC1E,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;wGA3CvG,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAYX,gBAAgB,CAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAjBzB;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAChG,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7F,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGU,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBxC,wnBAkBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDTY,mBAAmB,sKAAE,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAQ/C,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,EAAA,eAAA,EAE1C,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAChG,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7F,qBAAA,EAAA,QAAA,EAAA,wnBAAA,EAAA;;sBAGA,SAAS;uBAAC,2BAA2B;;sBAErC;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;ME9BU,yBAAyB,CAAA;AAC3B,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,YAAY,GAAG,KAAK;IACpB,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,EAAE;AACT,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGARjC,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,+QAF1B,CAAA,gdAAA,CAAkd,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;4FAEjd,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,gdAAA,CAAkd;AAC7d,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCOU,kBAAkB,CAAA;AACpB,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,QAAQ,GAAG,KAAK;IAChB,YAAY,GAAG,KAAK;AACpB,IAAA,KAAK;AACJ,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;IAEjD,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,EAAE;AACF,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,WAAA,EAAc,kBAAkB,CAAC,MAAM,EAAE,EAAE;AAClE,IAAA,QAAQ,GAA4B,MAAM,SAAS;AAC3D,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AAEA,IAAA,UAAU,CAAC,KAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA,EAA6B,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;AAEA,IAAA,aAAa,CAAC,MAAwB,EAAA;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,KAAK,GAAG,UAAU;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC3B;AAEA,IAAA,iBAAiB,CAAC,KAAa,EAAA;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5C,IAAI,KAAK,KAAK,UAAU;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC3B;AAEQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,OAAO,CAAC,KAAK,IAAI,EAAE;AAChB,aAAA,WAAW;AACX,aAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,aAAA,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;IAC/B;wGA9DW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EATlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC3F,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBH,8WAGA,2CDOY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,sKAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,cAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAYxE,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,EAAA,eAAA,EAEnE,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC3F,qBAAA,EAAA,QAAA,EAAA,8WAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AEbI,MAAM,sBAAsB,GAA2C;AAC5E,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,MAAM,EAAE,oBAAoB;AAC5B,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,QAAQ,EAAE,sBAAsB;AAChC,IAAA,KAAK,EAAE,mBAAmB;AAC1B,IAAA,QAAQ,EAAE,sBAAsB;AAChC,IAAA,QAAQ,EAAE,sBAAsB;AAChC,IAAA,MAAM,EAAE,oBAAoB;AAC5B,IAAA,QAAQ,EAAE,sBAAsB;AAChC,IAAA,KAAK,EAAE,mBAAmB;AAC1B,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,KAAK,EAAE,mBAAmB;AAC1B,IAAA,OAAO,EAAE,qBAAqB;;;MCNnB,mBAAmB,CAAA;AACrB,IAAA,KAAK;AACL,IAAA,KAAK;IACL,KAAK,GAAuB,EAAE;IAC9B,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,KAAK;IAChB,cAAc,GAA+B,EAAE;AAE9C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AACzC,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AAC9D,IAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;AAC1C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAW;AAG/C,IAAA,cAAc;AACd,IAAA,YAAY;AACH,IAAA,qBAAqB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACzD,SAAS,GAAG,KAAK;IAEzB,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,MAAM,EAAE;IACrD;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACpB,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,MAAM,EAAE;YACjC;QACF;QACA,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,UAAU,EAAE;IACvC;IAEQ,MAAM,GAAA;QACZ,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,qBAAqB;QACvE,aAAa,CAAC,KAAK,EAAE;AACrB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,MAAM,CAAoB;QACvE,MAAM,aAAa,GAAG,sBAAsB,CAAC,SAAS,CAAC,IAAI,sBAAsB,CAAC,IAAI;QACtF,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAA4B;AAC3E,QAAA,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AACnC,QAAA,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;;;AAIhC,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;QACnD,IAAI,CAAC,UAAU,EAAE;AAEjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAA+B;AAClE,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB;AAC1C,QAAA,QAAQ,CAAC,gBAAgB,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5E,QAAQ,CAAC,iBAAiB,GAAG,MAAM,SAAS,CAAC;AAC7C,QAAA,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrF,QAAA,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AACtE,QAAA,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,QAAA,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAExF,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;IACrD;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,MAAM,MAAM,GAAG,KAA2C;AAC1D,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,KAAc,KAAW,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QACjG,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAoB;AAEjE,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;AAC7D,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;AAC1D,QAAA,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;;QAG7E,QAAQ,SAAS;AACf,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,UAAU;AACb,gBAAA,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;AACxC,gBAAA,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;AAC1B,gBAAA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;AACxB,gBAAA,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;gBAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;AAC1B,gBAAA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;AACxB,gBAAA,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;gBAC1C;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;AAC1B,gBAAA,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;gBAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAChC,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAuC;AAC7E,gBAAA,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,CACvC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;qBAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAClD,qBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAChE,CAAC;gBACF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC5C,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;oBAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC9C;gBACA;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;AAC1B,gBAAA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACxB;AACF,YAAA,KAAK,MAAM;gBACT,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACpC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C;AACF,YAAA,KAAK,OAAO;gBACV,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;gBACjD,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvC;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;AAC1C,gBAAA,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACnC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnC;AACF,YAAA,KAAK,UAAU;gBACb;;AAGJ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAA+B;QAClE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACjC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC5C;wGAzIW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAeO,gBAAgB,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnB3C;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAHS,YAAY,EAAA,CAAA,EAAA,CAAA;;4FAKX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;AACF,iBAAA;;sBAEE;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;;;ACpCzD,MAAM,iBAAiB,GAAG,CAAC,KAAa,KAAc,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9E,MAAM,gBAAgB,GAAG,CAAC,KAAa,KAAc,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAElF,MAAM,QAAQ,GAAG,CAAC,MAAc,KAAa;IAC3C,MAAM,MAAM,GAAY,EAAE;IAC1B,IAAI,KAAK,GAAG,CAAC;AAEb,IAAA,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnB,KAAK,IAAI,CAAC;YACV;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;AAC5C,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE;AACtC,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/C,KAAK,IAAI,CAAC;YACV;QACF;AACA,QAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE;AAChE,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YAC7C,KAAK,IAAI,CAAC;YACV;QACF;AACA,QAAA,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;AAChD,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC;YACV;QACF;QACA,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE;YAChC,MAAM,KAAK,GAAG,IAAI;YAClB,IAAI,KAAK,GAAG,EAAE;YACd,IAAI,OAAO,GAAG,KAAK;YACnB,KAAK,IAAI,CAAC;AACV,YAAA,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;AAC5B,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC/B,IAAI,OAAO,EAAE;oBACX,KAAK,IAAI,OAAO;oBAChB,OAAO,GAAG,KAAK;gBACjB;AAAO,qBAAA,IAAI,OAAO,KAAK,IAAI,EAAE;oBAC3B,OAAO,GAAG,IAAI;gBAChB;AAAO,qBAAA,IAAI,OAAO,KAAK,KAAK,EAAE;oBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;oBACrC;gBACF;qBAAO;oBACL,KAAK,IAAI,OAAO;gBAClB;YACF;AACA,YAAA,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;YACvE;QACF;AACA,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;YAC3D,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,gBAAA,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBACxB;YACF;QACF;AACA,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;YAC3B,IAAI,KAAK,GAAG,IAAI;YAChB,KAAK,IAAI,CAAC;AACV,YAAA,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAE,gBAAA,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACzF,IAAI,KAAK,KAAK,MAAM;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAC5D,IAAI,KAAK,KAAK,OAAO;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;iBACnE,IAAI,KAAK,KAAK,MAAM;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;gBACjE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAC/C;QACF;AACA,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAA,CAAE,CAAC;IAC9C;AAEA,IAAA,OAAO,MAAM;AACf,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,KAA8B,EAAE,IAAY,KAAa;AAC7E,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,OAAO,EAAE,IAAI,KAAI;AACvD,QAAA,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;AAAE,YAAA,OAAO,SAAS;AACpE,QAAA,OAAQ,OAAmC,CAAC,IAAI,CAAC;IACnD,CAAC,EAAE,KAAK,CAAC;AACX,CAAC;AAEM,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,KAA8B,KAAa;AAC/F,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,KAAK,GAAG,CAAC;IACb,MAAM,IAAI,GAAG,MAAyB,MAAM,CAAC,KAAK,CAAC;IACnD,MAAM,OAAO,GAAG,MAAY;AAC1B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;AAC1D,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AACD,IAAA,MAAM,aAAa,GAAG,CAAC,GAAG,MAA4D,KAAa;AACjG,QAAA,MAAM,KAAK,GAAG,IAAI,EAAE;AACpB,QAAA,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAC7E,KAAK,IAAI,CAAC;AACV,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACD,IAAA,MAAM,SAAS,GAAG,CAAC,KAAc,KAAc,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;AAEnH,IAAA,MAAM,eAAe,GAAG,MAAe,OAAO,EAAE;IAChD,MAAM,OAAO,GAAG,MAAc;AAC5B,QAAA,IAAI,KAAK,GAAG,QAAQ,EAAE;QACtB,OAAO,aAAa,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC7E,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;IACD,MAAM,QAAQ,GAAG,MAAc;AAC7B,QAAA,IAAI,KAAK,GAAG,aAAa,EAAE;QAC3B,OAAO,aAAa,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;AAClF,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;IACD,MAAM,aAAa,GAAG,MAAc;AAClC,QAAA,IAAI,KAAK,GAAG,UAAU,EAAE;QACxB,OAAO,IAAI,EAAE;AACX,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AAAE,gBAAA,KAAK,GAAG,KAAK,IAAI,UAAU,EAAE;gBAAE;YAAU;AACpE,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AAAE,gBAAA,KAAK,GAAG,KAAK,IAAI,UAAU,EAAE;gBAAE;YAAU;AACpE,YAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AAAE,gBAAA,KAAK,GAAG,KAAK,KAAK,UAAU,EAAE;gBAAE;YAAU;AACtE,YAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AAAE,gBAAA,KAAK,GAAG,KAAK,KAAK,UAAU,EAAE;gBAAE;YAAU;AACtE,YAAA,OAAO,KAAK;QACd;AACF,IAAA,CAAC;IACD,MAAM,UAAU,GAAG,MAAe,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,YAAY,EAAE;IAChG,MAAM,YAAY,GAAG,MAAc;AACjC,QAAA,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,eAAe,EAAE;AAC/B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;AACvE,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE;AACvB,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC,KAAK;AAC9C,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;QAElE,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;AAClD,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;AACvC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;AACvE,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK;QAChD;QACA,OAAO,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AACzC,IAAA,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAC/B,IAAA,MAAM,MAAM,GAAG,eAAe,EAAE;AAChC,IAAA,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;AACjF,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC;AAC1B,CAAC;;MC9HY,oBAAoB,CAAA;AACd,IAAA,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACnD,IAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;IACnC,MAAM,GAAyB,EAAE;IACjC,KAAK,GAAuB,EAAE;IAC9B,MAAM,GAA2B,EAAE;IACnC,WAAW,GAAG,QAAQ;IACtB,UAAU,GAAG,IAAI;IACjB,QAAQ,GAAG,KAAK;AACf,IAAA,WAAW,GAAG,IAAI,YAAY,EAAsB;AACpD,IAAA,eAAe,GAAG,IAAI,YAAY,EAA0D;AAC5F,IAAA,SAAS,GAAG,IAAI,YAAY,EAAsB;AAClD,IAAA,WAAW,GAAG,IAAI,YAAY,EAAsC;AACpE,IAAA,eAAe,GAAG,IAAI,YAAY,EAAW;AAC7C,IAAA,oBAAoB,GAAG,IAAI,YAAY,EAAyD;AAEjG,IAAA,WAAW,GAAG,MAAM,CAAqB,EAAE,kFAAC;AAC5C,IAAA,mBAAmB,GAAG,MAAM,CAA0B,EAAE,0FAAC;AACzD,IAAA,kBAAkB,GAAG,MAAM,CAAyB,EAAE,yFAAC;AAChE,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,EAAE;YAC7C,MAAM,IAAI,GAAuB,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;YAClD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxC,gBAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,UAAU,GAAG,KAAK,GAAG,EAAE;gBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK;sBACtC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACrB,sBAAE,KAAK,CAAC,OAAO,KAAK;0BAChB,KAAK,CAAC;0BACN,YAAY;AAClB,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC;YAE5D;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9C;IAEF;IAEA,WAAW,CAAC,OAAe,EAAE,SAAqC,EAAA;QAChE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAClC,YAAA,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,OAAO,GAAG,SAAS,EAAE;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;IACJ;IAEQ,mBAAmB,CAAC,KAAyB,EAAE,KAAc,EAAA;QACnE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACxE;AACA,QAAA,OAAO,KAAmC;IAC5C;IAEA,oBAAoB,CAAC,KAAyB,EAAE,KAAa,EAAA;QAC3D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;QACjC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/E;IAEA,kBAAkB,CAAC,KAAyB,EAAE,KAAc,EAAA;QAC1D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAmC,CAAC;QAC/D,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAE7E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE;YAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC1E,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC;QACzC;IACF;IAEA,gBAAgB,CAAC,KAAyB,EAAE,KAAa,EAAA;QACvD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;IACnC;AAEA,IAAA,gBAAgB,CAAC,KAAyB,EAAA;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC5B;IAEA,cAAc,CAAC,KAAyB,EAAE,aAAsB,EAAA;AAC9D,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;YAAE;AACtC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAChD,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3E,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM;AAC3C,gBAAA,GAAG,OAAO;AACV,gBAAA,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,GAAG,6BAA6B,GAAG,6BAA6B;AACpG,aAAA,CAAC,CAAC;YACH;QACF;QAEA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAE7E,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC;AAChD,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;AAC/C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC1E,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;YACnF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,MAAM,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,yBAAyB;gBAClE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;gBAClF,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AACjF,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC9D,IAAI,UAAU,EAAE;AACd,oBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC;gBACvC;YACF,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,sBAAsB,CAAC,OAAe,EAAE,MAAgC,EAAA;QACtE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACrD;AAEA,IAAA,mBAAmB,CAAC,KAAyB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,KAAI;AAC7C,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACvD,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI;AACF,gBAAA,OAAO,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC;YAChD;AAAE,YAAA,MAAM;AACN,gBAAA,OAAO,IAAI;YACb;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,KAAyB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IACxC;AAEA,IAAA,eAAe,CAAC,KAAyB,EAAA;QACvC,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,QAAQ;AAC9D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC/C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK;AACtB,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG;AAC3F,QAAA,IAAI;YACF,OAAO,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7D;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC;AAEA,IAAA,UAAU,CAAC,KAAyB,EAAA;QAClC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,MAAM,UAAU;IAC9C;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;AAC5B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAClD;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;QAC5B,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;IACjD;AAEA,IAAA,eAAe,CAAC,OAAe,EAAA;QAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC;IAC9C;AAEA,IAAA,gBAAgB,CAAC,KAAc,EAAA;QAC7B,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;IACnC;AAEA,IAAA,gBAAgB,CAAC,KAAyB,EAAA;AACxC,QAAA,OAAO,2BAA2B,CAAC,KAAK,CAAC;IAC3C;AAEA,IAAA,eAAe,CAAC,KAAyB,EAAA;AACvC,QAAA,OAAO,0BAA0B,CAAC,KAAK,CAAC;IAC1C;AAEA,IAAA,cAAc,CAAC,KAAyB,EAAA;AACtC,QAAA,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE;AACrC,YAAA,OAAO,CAAC,KAAK,CAAC,MAAM;QACtB;AAEA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAChD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG;cAC7D,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;cAClB,MAAM;AACV,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC;QAClD;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,gBAAgB,CAAC,KAAyB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM;AACjC,QAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,EAAE;AACnF,YAAA,OAAO,IAAI;QACb;QACA,IAAI,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,gBAAgB;AAEhD,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,cAAc,CAAC,KAAyB,EAAA;AACtC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE;QAClE,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK;AACpG,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,iCAAiC,EAAE,CAAC,MAAM,EAAE,IAAY,KAAI;YAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC;AACtD,YAAA,OAAO,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,KAAyB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;AACjE,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,KAAK,CAAC,GAAG,IAAI,SAAS;IAC/B;AAEA,IAAA,iBAAiB,CAAC,KAAyB,EAAA;AACzC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QACvC,OAAO;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC/B,YAAA,GAAG,KAAK;AACN,kBAAE;AACF,kBAAE,4DAA4D;YAChE,SAAS;SACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7B;AAEA,IAAA,wBAAwB,CAAC,KAAyB,EAAA;QAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,gBAAgB,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE;AACjG,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS;QACtE,OAAO;YACL,MAAM,KAAK,OAAO,GAAG,WAAW,GAAG,wCAAwC;YAC3E,SAAS;SACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7B;AAEA,IAAA,aAAa,CAAC,KAAyB,EAAA;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,eAAe,EAAE,IAAI,KAAK,CAAC;YAC3B,gBAAgB,EAAE,IAAI,KAAK,EAAE;YAC7B,gBAAgB,EAAE,IAAI,KAAK,EAAE;YAC7B,gBAAgB,EAAE,IAAI,KAAK,EAAE;SAC9B;IACH;AAEQ,IAAA,mBAAmB,CAAC,KAAyB,EAAA;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/D,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,EAAE,EAAE,gBAAgB;SACrB;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;IACrC;IAEQ,mBAAmB,CAAC,KAAyB,EAAE,QAAiC,EAAA;AACtF,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;YAAE;AACtC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAqB,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,KAAI;AACrG,YAAA,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAA+B;AAChG,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAE,CAAC;QAEN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;YAClC,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;IACJ;IAGQ,oBAAoB,CAAC,KAA8B,EAAE,OAAe,EAAA;QAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACzC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,OAAO,EAAE,IAAI,KAAI;YACvD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAClD,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,OAAQ,OAAmC,CAAC,IAAI,CAAC;QACnD,CAAC,EAAE,KAAK,CAAC;IACX;IAEQ,aAAa,GAAA;AACnB,QAAA,OAAO,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9C;IAEQ,aAAa,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;IACxG;wGA7UW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAFpB,CAAC,aAAa,EAAE,mBAAmB,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBjD,qqOA6JA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxIY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,mKAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAIhE,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,EAAA,SAAA,EAEjE,CAAC,aAAa,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,qqOAAA,EAAA;;sBAK9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEVU,kBAAkB,CAAA;AACpB,IAAA,MAAM,GAAG,KAAK,CAAC,EAAE,6EAAC;AAClB,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,+EAAC;AACpB,IAAA,IAAI,GAAG,KAAK,CAAqB,IAAI,2EAAC;AACtC,IAAA,MAAM,GAAG,KAAK,CAAC,KAAK,6EAAC;AACrB,IAAA,WAAW,GAAG,KAAK,CAAC,WAAW,kFAAC;AAChC,IAAA,YAAY,GAAG,KAAK,CAA0B,EAAE,mFAAC;IAEjD,MAAM,GAAG,MAAM,EAAQ;IACvB,SAAS,GAAG,MAAM,EAAW;AAC7B,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;AACzB,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AAC5B,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,sFAAC;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,kFAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAA8B,IAAI,iFAAC;AACtD,IAAA,SAAS,GAAG,MAAM,CAAqB,EAAE,gFAAC;AAC1C,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,IAAI,EAAE,6EAAC;AACxD,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IACxG,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,IAAI,MAAM,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACjG,IAAA,UAAU,GAAG,QAAQ,CAAC,OAAO;AACpC,QAAA,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;AAChC,QAAA,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;AACjC,QAAA,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;AAClC,KAAA,CAAC,iFAAC;AAEc,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAE/C,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO,CAAC,EAAE;YAC1F,IAAI,CAAC,QAAQ,EAAE;QACjB;IACF;IAEA,KAAK,GAAA,EAAW,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAEpC,IAAA,aAAa,CAAC,KAAyB,EAAA,EAAU,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAE5E,IAAA,iBAAiB,CAAC,KAA6D,EAAA;AAC7E,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACrE,QAAA,IAAI,CAAC,UAAU;YAAE;AAEjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AACzD,QAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAClB,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC;QAChF;IACF;AAEA,IAAA,iBAAiB,CAAC,SAAkB,EAAA,EAAU,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAE/E,IAAA,sBAAsB,CAAC,KAA4D,EAAA;QACjF,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE;QAEnD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/F,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;AACtF,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;AAChG,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACvC,gBAAA,IAAI,IAAI;oBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAuB,CAAC;AAC7F,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,yBAAyB,EAAE,OAAO,EAAE,IAAI,CAAC;YACpF,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;AAEzE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC;AACvD,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1H,MAAM,aAAa,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE;AACzD,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACnI,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;AACjE,QAAA,IAAI,aAAa,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,4BAAA,EAA+B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,EAAE,SAAS,EAAE,IAAI,CAAC;YAC3F;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACrD,QAAA,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ;QAC9F,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC;QAChE,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;AAE1D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;AACpI,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAClC,IAAI,CAAC,KAAK,EAAE;YACd,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,6BAA6B,EAAE,OAAO,EAAE,IAAI,CAAC;YACxF,CAAC;AACF,SAAA,CAAC;IACJ;IAEQ,QAAQ,GAAA;AACd,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACjD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACrD,MAAM,QAAQ,GAAG,CAAA,eAAA,EAAkB,kBAAkB,CAAC,MAAM,CAAC,CAAA,EAAG,QAAQ,GAAG,CAAA,CAAA,EAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE;QACpH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyE,QAAQ,CAAC,CAAC,SAAS,CAAC;AACxG,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAK,QAA4C;AAC1E,gBAAA,MAAM,MAAM,GAAyB;AACnC,oBAAA,GAAG,GAAG;oBACN,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK;AACnC,oBAAA,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBAC3G;AACD,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,QAAQ,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACjJ,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,eAAe,CAAC,QAAiB,EAAA;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3C,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,KAAK;AAC1E,QAAA,OAAO,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAA,CAAE,EAAE;IAC7D;AAEQ,IAAA,gBAAgB,CAAC,OAAgC,EAAA;QACvD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAAE;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,gBAAA,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAChH;AACA,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,YAAY,CAAC,KAAc,EAAA;QACjC,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;QACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC7D,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,mBAAmB,CAAC,IAAa,EAAA;AACvC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC1D,QAAA,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,YAAY;AAAE,YAAA,OAAO,YAAY;AAC5E,QAAA,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,eAAe;AAAE,YAAA,OAAO,eAAe;AACrF,QAAA,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAe;IACzC;AAEQ,IAAA,cAAc,CAAC,MAA0B,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;AAClD,QAAA,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,eAAe;IAC1D;AAEQ,IAAA,aAAa,CAAC,MAAe,EAAA;QACnC,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,WAAW,EAAiD;IAC9F;AAEQ,IAAA,WAAW,CAAC,QAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;AAC1D,QAAA,MAAM,KAAK,GAAI,QAA+B,CAAC,IAAI;AACnD,QAAA,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAgC,GAAG,QAAmC;IACpH;AAEQ,IAAA,mBAAmB,CAAC,QAAiB,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU;AACjF,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC;QACnD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC;IACrH;IAEQ,eAAe,CAAC,QAAgB,EAAE,IAA6B,EAAA;AACrE,QAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,+DAA+D,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,KAAI;YACrI,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,QAAQ,IAAI,EAAE,CAAC;AAC/C,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,GAAI,OAAmC,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC;YACtK,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/E,QAAA,CAAC,CAAC;IACJ;wGArMW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,i6BC7B/B,4sDAqBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,mKAAE,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAGpD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAAA,QAAA,EAAA,4sDAAA,EAAA;;;MEtBrD,yBAAyB,CAAA;AAC3B,IAAA,WAAW;AAAoB,IAAA,IAAI;AAAoB,IAAA,EAAE;IAAoB,IAAI,GAAG,MAAM;IAAW,OAAO,GAAyB,OAAO;IAAW,IAAI,GAAG,CAAC;AAAW,IAAA,YAAY;AAAoB,IAAA,OAAO;IAAoB,QAAQ,GAAG,KAAK;IAAW,KAAK,GAA2B,EAAE;AACjS,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AAAY,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGAFrF,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EADyE,CAAA,sRAAA,CAAwR,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAA9T,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FACrF,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,wRAAwR,EAAE;;sBAEtY;;sBAA+B;;sBAAwB;;sBAAsB;;sBAAwB;;sBAAkD;;sBAAmB;;sBAAgC;;sBAA2B;;sBAA2B;;sBAChQ;;sBAAoD;;;MCmB1C,cAAc,CAAA;AACR,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvC,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,WAAW;AACX,IAAA,IAAI;AACJ,IAAA,EAAE;IACF,IAAI,GAAG,MAAM;IACb,OAAO,GAAmB,OAAO;IACjC,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;AAChB,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,KAAK;IACL,OAAO,GAA+B,EAAE;IAEjD,QAAQ,GAAG,KAAK;IAChB,KAAK,GAA2B,EAAE;AAC1B,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,WAAW,GAAG,CAAA,MAAA,EAAS,cAAc,CAAC,MAAM,EAAE,EAAE;AACvD,IAAA,eAAe,GAAG,IAAI,YAAY,EAA4B;AACxE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AACQ,IAAA,QAAQ,GAA4C,MAAM,SAAS;AAC3E,IAAA,SAAS,GAAe,MAAM,SAAS;AAEvC,IAAA,UAAU,CAAC,KAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK;AACrF,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvB;AAEA,IAAA,aAAa,CAAC,MAAgC,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;wGAtDW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EARd;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBH,ghBAGA,2CDWY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAqB,mBAAmB,sKAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAW3F,cAAc,EAAA,UAAA,EAAA,CAAA;kBAd1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,mBAEtF,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,ghBAAA,EAAA;;sBAKA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAMA;;;MEVU,0BAA0B,CAAA;AACpB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IACjC,KAAK,GAAG,MAAM;AACd,IAAA,IAAI;AACJ,IAAA,KAAK;IACL,QAAQ,GAAG,KAAK;IAChB,UAAU,GAAG,0BAA0B;IACvC,QAAQ,GAAa,EAAE;IACvB,QAAQ,GAAG,KAAK;IAChB,WAAW,GAAsD,IAAI;IACrE,eAAe,GAAyC,IAAI;IAC5D,MAAM,GAAsG,IAAI;AAE/G,IAAA,cAAc,GAAG,IAAI,YAAY,EAAY;IAEvD,OAAO,GAA0B,EAAE;IAC3B,kBAAkB,GAAG,CAAC;AAE9B,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;IAC/E;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;IACzE;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE;AACnC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAQ,CAAC;QACjG,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;AAC9F,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1G,IAAI,OAAO,IAAI,oBAAoB;YAAE;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;AAClE,YAAA,SAAS,EAAE,OAAO;YAClB,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE;SAC/C,CAAC,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7B,YAAA,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO;AAAE,gBAAA,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;AACrE,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,CAAC,KAAY,EAAE,KAAa,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;QACpC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,KAAI;AAC7B,YAAA,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM;AACtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;AAClC,YAAA,IAAI,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,OAAO;AAAE,gBAAA,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7E,IAAI,CAAC,WAAW,CAAC,GAAG;gBAClB,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,SAAS,IAAI,CAAC,kBAAkB,EAAE,CAAA,CAAE;gBACtE,IAAI;gBACJ,OAAO,EAAE,QAAQ,EAAE,OAAO;AAC1B,gBAAA,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;aACnC;AACH,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;IAEA,cAAc,CAAC,KAA8B,EAAE,KAAkB,EAAA;QAC/D,KAAK,EAAE,cAAc,EAAE;QACvB,KAAK,EAAE,eAAe,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,EAAE;IAC5C;AAEA,IAAA,MAAM,CAAC,KAAyC,EAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;AAChF,QAAA,IAAI,KAAK,CAAC,aAAa,IAAI,aAAa,IAAI,KAAK,CAAC,YAAY,IAAI,aAAa,EAAE;YAC/E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC/C;QACF;QACA,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;QAC9D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE;QAChE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACvC,QAAA,IAAI,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,OAAO;AAAE,YAAA,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,gBAAgB,GAAA;QACtB,OAAO,EAAE,SAAS,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,kBAAkB,EAAE,CAAA,CAAE,EAAE;IAC5D;AAEQ,IAAA,qBAAqB,CAAC,OAA8B,EAAA;QAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;QAC7E,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC7F;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAQ,CAAC,CAAC;IAC1G;IAEQ,mBAAmB,GAAA;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QACvF,IAAI,SAAS,GAAG,CAAC;YAAE;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACrC,QAAA,KAAK,CAAC,WAAW,GAAG,IAAI;AACxB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAK;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAC9B,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBACjF,QAAQ,CAAC,SAAS,CAAC;oBACjB,IAAI,EAAE,MAAK;AACT,wBAAA,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;AAChC,wBAAA,KAAK,CAAC,IAAI,GAAG,SAAS;AACtB,wBAAA,KAAK,CAAC,WAAW,GAAG,SAAS;AAC7B,wBAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO;AACzE,wBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC5D,IAAI,CAAC,YAAY,EAAE;wBACnB,IAAI,CAAC,MAAM,GAAG,kBAAkB,EAAE,SAAS,EAAE,IAAI,CAAC;wBAClD,IAAI,CAAC,mBAAmB,EAAE;oBAC5B,CAAC;AACD,oBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,wBAAA,KAAK,CAAC,WAAW,GAAG,SAAS;AAC7B,wBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,4BAA4B,EAAE,OAAO,EAAE,IAAI,CAAC;wBACnF,IAAI,CAAC,mBAAmB,EAAE;oBAC5B,CAAC;AACF,iBAAA,CAAC;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,KAAK,CAAC,WAAW,GAAG,SAAS;AAC7B,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,6BAA6B,EAAE,OAAO,EAAE,IAAI,CAAC;gBACpF,IAAI,CAAC,mBAAmB,EAAE;YAC5B,CAAC;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,UAAU,CAAC,IAAU,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;AAC/B,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAiB,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CACjE,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAC9C;IACH;wGAtJW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,2XCpCvC,4lEAyBA,EAAA,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,yhCAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAkBhD,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBArBtC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,4lEAAA,EAAA,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA;;sBAoB3D;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;MEuEU,yBAAyB,CAAA;AAC3B,IAAA,KAAK;AACL,IAAA,IAAI;AACJ,IAAA,KAAK;IACL,QAAQ,GAAG,KAAK;IAChB,GAAG,GAAG,CAAC;IACP,GAAG,GAAG,GAAG;IACT,IAAI,GAAG,CAAC;IACR,UAAU,GAAkB,IAAI;IAChC,QAAQ,GAAkB,IAAI;IAC9B,UAAU,GAAG,qBAAqB;IAClC,QAAQ,GAAG,sBAAsB;AAChC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AAC7C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,IAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;AAElB,IAAA,UAAU;AACZ,IAAA,QAAQ;AAEvC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;IACnD;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AACnD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IACnD;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;IACvC;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;IACzD;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC9D,QAAA,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ;IAC9C;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;IAC5B;AAEA,IAAA,WAAW,CAAC,CAAgB,EAAA;QAC1B,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,MAAM,KAAK,GAAG,MAAM,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3E;AAEA,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,MAAM,KAAK,GAAG,MAAM,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3E;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAA;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACxC,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,YAAA,OAAO,CAAC;QACV;AACA,QAAA,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,GAAG;IAC9C;IAEQ,cAAc,CAAC,KAAgC,EAAE,QAAgB,EAAA;AACvE,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ;IAC/E;IAEQ,gBAAgB,GAAA;QACtB,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;AACpE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;AAClE,QAAA,CAAC,CAAC;IACJ;IAEQ,eAAe,CAAC,KAAmC,EAAE,KAAa,EAAA;QACxE,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QACA,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAChC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAA,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7B;wGA7GW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhH1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8iCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtCS,YAAY,+BAAE,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAiHhC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBApHrC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,8iCAAA,CAAA,EAAA;;sBA4EA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,YAAY;;sBACtB,SAAS;uBAAC,UAAU;;;ACzIvB;;AAEG;;;;"}
|