@maro-tech/form 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/maro-tech-form.mjs +441 -162
- package/fesm2022/maro-tech-form.mjs.map +1 -1
- package/package.json +2 -2
- package/types/maro-tech-form.d.ts +111 -12
|
@@ -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/form-lookup.service.ts","../../../src/lib/dynamic/ui-dynamic-form-options-source.token.ts","../../../src/lib/dynamic/ui-dynamic-form.models.ts","../../../src/lib/inputs/barcode/ui-barcode-scanner-input.component.ts","../../../src/lib/inputs/select/ui-select.component.ts","../../../src/lib/inputs/select/ui-select.component.html","../../../src/lib/inputs/date/ui-date-input.component.ts","../../../src/lib/inputs/date/ui-date-input.component.html","../../../src/lib/inputs/datetime/ui-datetime-input.component.ts","../../../src/lib/inputs/datetime/ui-datetime-input.component.html","../../../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.component.ts","../../../src/lib/inputs/number/ui-number-input.component.html","../../../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.component.ts","../../../src/lib/inputs/textarea/ui-textarea-input.component.html","../../../src/lib/inputs/form-input.registry.ts","../../../src/lib/inputs/form-input-host.component.ts","../../../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.component.ts","../../../src/lib/inputs/photo/ui-photo-input.component.html","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.html","../../../src/lib/inputs/color/ui-color-input.component.ts","../../../src/lib/inputs/color/ui-color-input.component.html","../../../src/lib/inputs/slug/ui-slug-input.component.ts","../../../src/lib/inputs/slug/ui-slug-input.component.html","../../../src/lib/dynamic/ui-dynamic-form.component.ts","../../../src/lib/dynamic/ui-dynamic-form.component.html","../../../src/lib/action-form/ui-action-form-modal.component.ts","../../../src/lib/action-form/ui-action-form-modal.component.html","../../../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 { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UiDynamicFormField } 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 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 { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UiSelectOption } from '../inputs/select/ui-select.component';\nimport { UiDynamicFormField, UiDynamicFormValue } from './ui-dynamic-form.models';\n\nexport interface UiDynamicFormOptionsSourceContext {\n source: string;\n field: UiDynamicFormField;\n model: UiDynamicFormValue;\n query?: string;\n}\n\nexport interface UiDynamicFormOptionsSourceResolver {\n source: string;\n resolve(context: UiDynamicFormOptionsSourceContext): Observable<UiSelectOption[]>;\n}\n\nexport const UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS = new InjectionToken<UiDynamicFormOptionsSourceResolver[]>(\n 'UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS'\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 UiDynamicFormBaseField {\n id: string;\n type?: UiDynamicFieldType;\n label?: string;\n title?: string;\n placeholder?: string;\n hint?: string;\n required?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n data?: string;\n optionsSource?: string;\n options?: UiSelectOption[];\n searchable?: boolean;\n rows?: number;\n fullWidth?: boolean;\n col?: number;\n accept?: string;\n multiple?: boolean;\n limit?: number;\n hidden?: boolean | string;\n default?: string | number | boolean | string[] | null;\n pattern?: string;\n actions?: UiDynamicFormFieldAction[];\n className?: string;\n containerClassName?: string;\n contentClassName?: string;\n tag?: 'div' | 'section' | 'aside' | 'fieldset';\n fields?: UiDynamicFormField[];\n layout?: 'grid' | 'stack';\n template?: string;\n templateContext?: Record<string, unknown>;\n autoOpen?: boolean;\n searchButtonLabel?: string;\n openCameraLabel?: string;\n closeCameraLabel?: string;\n cameraTitle?: string;\n cameraStartingLabel?: string;\n cameraHint?: string;\n lookupApi?: string;\n lookupMap?: Record<string, string>;\n lookupErrorField?: string;\n}\n\nexport interface UiDynamicFormContainerField extends UiDynamicFormBaseField {\n type: 'container';\n fields: UiDynamicFormField[];\n layout?: 'grid' | 'stack';\n}\n\nexport interface UiDynamicFormTemplateField extends UiDynamicFormBaseField {\n type: 'template';\n template: string;\n templateContext?: Record<string, unknown>;\n}\n\nexport type UiDynamicFormField = UiDynamicFormBaseField | UiDynamicFormContainerField | 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 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 { 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 { FormsModule } from '@angular/forms';\nimport { BrowserMultiFormatOneDReader, type IScannerControls } from '@zxing/browser';\nimport { BarcodeFormat, DecodeHintType } from '@zxing/library';\nimport { UiButtonComponent } from '@maro-tech/ui';\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: 'forms-barcode-scanner-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n template: `\n <div class=\"space-y-2\">\n @if (label()) {\n <label class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\" for=\"barcode-scanner-input\">\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label() }}\n </span>\n </label>\n }\n\n <div class=\"flex items-start gap-2\">\n <div class=\"min-w-0 flex-1\">\n <input\n #barcodeInput\n id=\"barcode-scanner-input\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onValueChange($event)\"\n (keydown.enter)=\"requestSearch()\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [placeholder]=\"placeholder()\"\n />\n @if (hint()) {\n <p class=\"mt-2 text-[0.5rem] text-slate-500\">\n {{ hint() }}\n </p>\n }\n </div>\n\n <div class=\"mt-0.5 flex flex-col gap-2\">\n <ui-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"disabled()\"\n (click)=\"requestSearch()\"\n >\n {{ searchButtonLabel() }}\n </ui-button>\n <ui-button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n [disabled]=\"disabled() || isCameraStarting()\"\n (click)=\"isCameraOpen() ? closeCamera() : openCamera()\"\n >\n {{ isCameraOpen() ? closeCameraLabel() : openCameraLabel() }}\n </ui-button>\n </div>\n </div>\n\n @if (isCameraStarting()) {\n <div class=\"rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm text-slate-500\">\n {{ cameraStartingLabel() }}\n </div>\n }\n\n @if (isCameraOpen()) {\n <section class=\"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\">{{ cameraTitle() }}</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 {{ closeCameraLabel() }}\n </button>\n </div>\n\n <div class=\"overflow-hidden rounded-2xl 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 {{ cameraHint() }}\n </p>\n </section>\n }\n\n @if (cameraError()) {\n <div class=\"rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">\n {{ cameraError() }}\n </div>\n }\n </div>\n `,\n})\nexport class UiBarcodeScannerInputComponent implements OnChanges, AfterViewInit, OnDestroy {\n readonly value = input('');\n readonly label = input('Штрихкод');\n readonly placeholder = input('Відскануйте або введіть штрихкод');\n readonly hint = input('Сканер може просто ввести код і натиснути Enter.');\n readonly disabled = input(false);\n readonly autoOpen = input(true);\n readonly searchButtonLabel = input('Знайти');\n readonly openCameraLabel = input('Відкрити камеру');\n readonly closeCameraLabel = input('Закрити камеру');\n readonly cameraTitle = input('Камера');\n readonly cameraStartingLabel = input('Запускаємо камеру…');\n readonly cameraHint = input('Наведіть камеру на штрихкод. Після зчитування код підставиться автоматично.');\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 (changes['autoOpen'] && this.autoOpen() && !this.disabled()) {\n this.scheduleAutoOpen();\n }\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.autoOpen() || 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.autoOpen() || 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\n\n\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 OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } 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';\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: 'forms-select',\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(() => UiSelectComponent),\n multi: true,\n },\n ],\n})\nexport class UiSelectComponent implements ControlValueAccessor, OnChanges {\n readonly closeIcon = X;\n readonly chevronDownIcon = ChevronDown;\n readonly checkIcon = Check;\n private static openInstance: UiSelectComponent | null = null;\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly http = inject(HttpClient);\n\n @Input() label?: string;\n @Input() placeholder?: string;\n @Input() name?: string;\n @Input() data?: string;\n @Input() required = false;\n @Input() fullWidth = 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 @Input() remoteSearch = false;\n @Input() searchPlaceholder = 'Пошук...';\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 @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: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n ];\n\n isOpen = false;\n triggerWidth = 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 if (UiSelectComponent.openInstance === this) {\n UiSelectComponent.openInstance = null;\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('data' in changes) {\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 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 if (UiSelectComponent.openInstance && UiSelectComponent.openInstance !== this) {\n UiSelectComponent.openInstance.closeDropdown();\n }\n this.triggerWidth = this.dropdownTrigger?.nativeElement.getBoundingClientRect().width ?? 0;\n this.isOpen = true;\n this.searchTerm = '';\n this.searchChanges$.next('');\n UiSelectComponent.openInstance = this;\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 if (UiSelectComponent.openInstance === this) {\n UiSelectComponent.openInstance = null;\n }\n this.cdr.markForCheck();\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.remoteSearch || !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 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 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\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n>\n <!-- LABEL -->\n @if (label || (hint && !error)) {\n <div class=\"flex items-center justify-between\">\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) { <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span> }\n </span>\n\n @if (hint && !error) {\n <span class=\"text-[0.65rem] text-slate-400\">\n {{ hint }}\n </span>\n }\n </div>\n }\n\n <!-- SELECT -->\n <div class=\"relative\" [class.w-full]=\"fullWidth\">\n\n <button\n cdkOverlayOrigin\n #dropdownTrigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"flex w-full flex-wrap items-center gap-2 rounded-xl border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 transition hover:border-slate-300 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 <!-- 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 items-center gap-1 rounded-md bg-slate-100 px-2 py-0.5 text-xs font-medium text-slate-700\"\n >\n {{ option.label }}\n\n <button\n type=\"button\"\n class=\"text-slate-400 hover:text-rose-500 transition-colors\"\n (click)=\"removeOption(option, $event)\"\n >\n <lucide-icon [img]=\"closeIcon\" class=\"text-[10px]\"></lucide-icon>\n </button>\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=\"truncate\">\n {{ selectedOptions[0]?.label ?? placeholder ?? blankOptionLabel }}\n </span>\n\n }\n\n <lucide-icon [img]=\"chevronDownIcon\" class=\"ml-auto text-xs text-slate-400\"></lucide-icon>\n\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"dropdownTrigger\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"dropdownPositions\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n (backdropClick)=\"closeDropdown()\"\n (detach)=\"closeDropdown()\"\n >\n <!-- DROPDOWN -->\n <div\n class=\"z-50 max-h-60 min-w-full w-max max-w-[calc(100vw-1rem)] overflow-auto rounded-xl border border-slate-200 bg-white shadow-lg\"\n [style.min-width.px]=\"triggerWidth\"\n [class]=\"panelClass\"\n >\n @if (searchable) {\n <div class=\"border-b border-slate-100 p-2\">\n <input\n type=\"text\"\n class=\"w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 outline-none transition focus:border-slate-300 focus:ring-2 focus:ring-slate-200\"\n [placeholder]=\"searchPlaceholder\"\n [ngModel]=\"searchTerm\"\n (ngModelChange)=\"onSearchChange($event)\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\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\n </div>\n </ng-template>\n\n </div>\n\n @if (error) {\n <p class=\"text-[0.7rem] text-rose-500\">\n {{ error }}\n </p>\n }\n\n</div>\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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-date-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-date-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiDateInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiDateInputComponent 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 readonly type = 'date';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiDateInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-datetime-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-datetime-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiDatetimeInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiDatetimeInputComponent 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 readonly type = 'datetime-local';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiDatetimeInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-email-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-email-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiEmailInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiEmailInputComponent 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 readonly type = 'email';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiEmailInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-number-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-number-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiNumberInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiNumberInputComponent 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 readonly type = 'number';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiNumberInputComponent.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 = value === '' ? null : Number(value);\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-password-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-password-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiPasswordInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiPasswordInputComponent 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 readonly type = 'password';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiPasswordInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-text-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-text-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiTextInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiTextInputComponent 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 readonly type = 'text';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiTextInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-textarea-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-textarea-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiTextareaInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiTextareaInputComponent 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 readonly type = 'text';\n readonly element: UiInputElement = 'textarea';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiTextareaInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\n\n","import { Type } from '@angular/core';\nimport { UiDateInputComponent } from './date/ui-date-input.component';\nimport { UiDatetimeInputComponent } from './datetime/ui-datetime-input.component';\nimport { UiEmailInputComponent } from './email/ui-email-input.component';\nimport { UiNumberInputComponent } from './number/ui-number-input.component';\nimport { UiPasswordInputComponent } from './password/ui-password-input.component';\nimport { UiTextInputComponent } from './text/ui-text-input.component';\nimport { UiTextareaInputComponent } from './textarea/ui-textarea-input.component';\n\nexport type UiFormInputType = 'text' | 'number' | 'date' | 'datetime' | 'email' | 'password' | 'textarea';\n\nexport const UI_FORM_INPUT_REGISTRY: Record<UiFormInputType, Type<unknown>> = {\n text: UiTextInputComponent,\n number: UiNumberInputComponent,\n date: UiDateInputComponent,\n datetime: UiDatetimeInputComponent,\n email: UiEmailInputComponent,\n password: UiPasswordInputComponent,\n textarea: UiTextareaInputComponent,\n};\n","import { Component, ComponentRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, Type, 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};\n\n@Component({\n selector: 'forms-form-input-host',\n standalone: true,\n template: '',\n})\nexport class UiFormInputHostComponent implements OnChanges {\n @Input() field!: UiDynamicFormField;\n @Input() value: UiDynamicFormValue[string];\n @Input() error = '';\n @Input() disabled = false;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n @Input() options: Array<{ label: string; value: string | null; disabled?: boolean }> = [];\n\n @Output() valueChange = new EventEmitter<unknown>();\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n\n private readonly viewContainer = inject(ViewContainerRef);\n private componentRef?: ComponentRef<unknown>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['field']) {\n this.render();\n return;\n }\n this.syncInputs();\n }\n\n private render(): void {\n this.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 = this.viewContainer.createComponent(componentType);\n this.syncInputs();\n\n const instance = this.componentRef.instance as FormControlInstance;\n instance.registerOnChange?.((nextValue) => this.valueChange.emit(nextValue));\n instance.registerOnTouched?.(() => undefined);\n instance.actionTriggered?.subscribe((action) => this.actionTriggered.emit(action));\n }\n\n private syncInputs(): void {\n if (!this.componentRef || !this.field) return;\n const field = this.field;\n const setInput = (name: string, value: unknown): void => this.componentRef?.setInput(name, value);\n setInput('name', field.id);\n setInput('id', field.id);\n setInput('label', field.label);\n setInput('placeholder', field.placeholder);\n setInput('hint', field.hint);\n setInput('required', !!field.required);\n setInput('readonly', !!field.readonly);\n setInput('disabled', this.disabled || !!field.disabled);\n setInput('pattern', field.pattern);\n setInput('rows', field.rows ?? 4);\n setInput('fullWidth', field.fullWidth !== false);\n setInput('error', this.error);\n setInput('actions', this.actions);\n const instance = this.componentRef.instance as FormControlInstance;\n instance.writeValue?.(this.value);\n instance.setDisabledState?.(this.disabled || !!field.disabled);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'forms-file-input',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-file-input.component.html',\n})\nexport class UiFileInputComponent {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() accept?: string;\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() value: File | File[] | null = null;\n @Output() valueChange = new EventEmitter<File | File[] | null>();\n @Output() filesChange = new EventEmitter<File[]>();\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.valueChange.emit(value);\n this.filesChange.emit(files);\n input.value = '';\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.valueChange.emit(value);\n this.filesChange.emit(files);\n }\n}\n","<label class=\"flex flex-col gap-2 text-[0.7rem] font-semibold uppercase tracking-[0.2em] text-slate-600\">\n @if (label) { <span>{{ label }}</span> }\n <input\n type=\"file\"\n 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\"\n [attr.accept]=\"accept ?? null\"\n [attr.multiple]=\"multiple ? '' : null\"\n [disabled]=\"disabled\"\n (change)=\"onFilesSelected($event)\"\n />\n @if (hint) { <span class=\"text-[0.7rem] font-normal normal-case tracking-normal text-slate-500\">{{ hint }}</span> }\n @if (selectedFiles.length) {\n <div class=\"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)=\"remove(i)\">Видалити</button>\n </div>\n }\n </div>\n }\n</label>\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\nimport { Observable, forkJoin } from 'rxjs';\n\nexport interface UiPhotoPreview {\n name: string;\n url: string;\n isImage: boolean;\n source: 'file' | 'id';\n}\n\n@Component({\n selector: 'forms-photo-input',\n standalone: true,\n imports: [CommonModule, DragDropModule],\n templateUrl: './ui-photo-input.component.html',\n})\nexport class UiPhotoInputComponent implements OnChanges, OnDestroy {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() accept = 'image/*';\n @Input() multiple = false;\n @Input() limit = Number.MAX_SAFE_INTEGER;\n @Input() disabled = false;\n @Input() value: string | string[] | null = null;\n @Input() uploadPhoto: ((file: File) => Observable<{ imageId: string; type?: string }>) | null = null;\n @Output() valueChange = new EventEmitter<string | string[] | null>();\n @Output() filesChange = new EventEmitter<File[]>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n\n pendingFiles: File[] = [];\n previews: UiPhotoPreview[] = [];\n uploading = false;\n private readonly fileTypes = new Map<string, string>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || 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 if (this.uploadPhoto) 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.valueChange.emit(value);\n this.rebuildPreviews(value);\n }\n\n private uploadFiles(files: File[]): void {\n if (!this.uploadPhoto || !files.length) return;\n this.uploading = true;\n this.uploadingChange.emit(true);\n forkJoin(files.map((file) => this.uploadPhoto!(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 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","<label class=\"flex flex-col gap-2 text-[0.7rem] font-semibold uppercase tracking-[0.2em] text-slate-600\">\n @if (label) { <span>{{ label }}</span> }\n <button type=\"button\" class=\"flex min-h-24 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)=\"onFilesSelected($event)\" />\n @if (hint) { <span class=\"text-[0.7rem] font-normal normal-case tracking-normal text-slate-500\">{{ hint }}</span> }\n @if (previews.length) {\n <div class=\"grid grid-cols-2 gap-2 md:grid-cols-4\" cdkDropList cdkDropListOrientation=\"mixed\" [cdkDropListData]=\"previews\" (cdkDropListDropped)=\"drop($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)=\"remove(i)\">Видалити</button>\n </div>\n }\n </div>\n }\n</label>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'forms-checkbox-input',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-checkbox-input.component.html',\n})\nexport class UiCheckboxInputComponent {\n @Input() label?: string;\n @Input() disabled = false;\n @Input() value = false;\n @Output() valueChange = new EventEmitter<boolean>();\n\n onValueChange(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).checked);\n }\n}\n","<label class=\"inline-flex items-center gap-3 text-sm text-slate-700\">\n <input\n type=\"checkbox\"\n class=\"h-4 w-4 rounded border-slate-300 text-slate-900 focus:ring-slate-400\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (change)=\"onValueChange($event)\"\n />\n <span>{{ label }}</span>\n</label>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'forms-color-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './ui-color-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiColorInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiColorInputComponent implements ControlValueAccessor {\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() fullWidth = false;\n @Input() error?: string;\n\n disabled = false;\n value = '#000000';\n\n private static nextId = 0;\n private readonly generatedId = `ui-color-input-${UiColorInputComponent.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 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 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\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\n }\n\n <div class=\"flex items-center gap-3\">\n <label\n 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\"\n [class.cursor-not-allowed]=\"disabled\"\n [class.opacity-60]=\"disabled\"\n [attr.for]=\"controlId\"\n >\n <span\n class=\"block h-9 w-9 rounded-full border border-black/10\"\n [style.backgroundColor]=\"pickerValue\"\n ></span>\n <input\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n type=\"color\"\n [attr.id]=\"controlId\"\n [attr.name]=\"name ? name + '-picker' : null\"\n [disabled]=\"disabled\"\n [value]=\"pickerValue\"\n (input)=\"onPickerChange($event.target.value)\"\n (blur)=\"markTouched()\"\n />\n </label>\n <input\n 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-sky-400 focus:outline-none disabled:cursor-not-allowed disabled:opacity-60\"\n type=\"text\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (input)=\"onHexInput($event.target.value)\"\n (blur)=\"markTouched()\"\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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'forms-slug-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './ui-slug-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiSlugInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiSlugInputComponent implements ControlValueAccessor {\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() fullWidth = false;\n @Input() autocomplete = 'off';\n @Input() readonly = false;\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 = `ui-slug-input-${UiSlugInputComponent.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 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 private normalizeSlug(value: string): string {\n return (value ?? '')\n .toLowerCase()\n .replace(/\\s+/g, '_')\n .replace(/[^a-z0-9_]/g, '');\n }\n}\n\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\n }\n\n <input\n type=\"text\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target))\"\n (blur)=\"onTouched()\"\n />\n\n @if (hint) {\n <p class=\"text-[0.5rem] text-slate-500\">{{ hint }}</p>\n }\n @if (error) {\n <p class=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Observable, Subject, Subscription, debounceTime, distinctUntilChanged, forkJoin, from, switchMap } from 'rxjs';\nimport { UiBarcodeScannerInputComponent } from '../inputs/barcode/ui-barcode-scanner-input.component';\nimport { UiSelectComponent, UiSelectOption } from '../inputs/select/ui-select.component';\nimport { UiFormInputHostComponent } from '../inputs/form-input-host.component';\nimport { UiFileInputComponent } from '../inputs/file/ui-file-input.component';\nimport { UiPhotoInputComponent } from '../inputs/photo/ui-photo-input.component';\nimport { UiCheckboxInputComponent } from '../inputs/checkbox/ui-checkbox-input.component';\nimport { UiColorInputComponent } from '../inputs/color/ui-color-input.component';\nimport { UiSlugInputComponent } from '../inputs/slug/ui-slug-input.component';\nimport { UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS } from './ui-dynamic-form-options-source.token';\nimport { UiFormContext } from '../context/form-context.service';\nimport { UiFormLookupService } from './form-lookup.service';\nimport { MaroFormsApiService } from '../forms-api.service';\nimport { UiButtonComponent } from '@maro-tech/ui';\nimport {\n UiDynamicFormField,\n UiDynamicFormFieldAction,\n UiDynamicFormValue,\n flattenDynamicFormFields,\n isDynamicFormContainerField,\n isDynamicFormTemplateField,\n} from './ui-dynamic-form.models';\n\n@Component({\n selector: 'forms-dynamic-form',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, UiFormInputHostComponent, UiFileInputComponent, UiPhotoInputComponent, UiCheckboxInputComponent, UiColorInputComponent, UiSlugInputComponent, UiBarcodeScannerInputComponent, UiSelectComponent],\n templateUrl: './ui-dynamic-form.component.html',\n providers: [UiFormContext, UiFormLookupService],\n})\nexport class UiDynamicFormComponent implements OnInit, OnChanges, OnDestroy {\n private readonly formsApi = inject(MaroFormsApiService);\n private readonly lookupService = inject(UiFormLookupService);\n readonly formContext = inject(UiFormContext);\n private readonly optionsSourceResolvers = inject(UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS, { optional: true }) ?? [];\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 @Input() uploadPhoto: ((file: File) => Observable<{ imageId: string }>) | null = null;\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 dictionaryOptionsSignal = signal<Record<string, UiSelectOption[]>>({});\n readonly lookupLoadingSignal = signal<Record<string, boolean>>({});\n readonly lookupErrorsSignal = signal<Record<string, string>>({});\n private readonly selectSearchChanges = new Map<string, Subject<string>>();\n private readonly selectSearchSubscriptions = new Map<string, Subscription>();\n private readonly optionsSourceRequestVersions = new Map<string, number>();\n\n ngOnInit(): void {\n this.ensureOptionsSourceOptionsLoaded(this.modelSignal());\n }\n\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 nextValue = this.value[field.id] !== undefined\n ? this.value[field.id]\n : field.default !== undefined\n ? field.default\n : defaultValue;\n next[field.id] = nextValue;\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 if ('fields' in changes || 'value' in changes) {\n this.ensureOptionsSourceOptionsLoaded(this.modelSignal());\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupSelectSearchStreams();\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 this.ensureOptionsSourceOptionsLoaded(updated);\n return updated;\n });\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 onBarcodeScanned(field: UiDynamicFormField, value: string): void {\n this.updateField(field.id, value);\n this.runFieldLookup(field, value);\n }\n\n onSelectValueChange(field: UiDynamicFormField, value: string | string[] | null): void {\n this.updateField(field.id, value as UiDynamicFormValue[string]);\n const nextValue = Array.isArray(value) ? '' : String(value || '').trim();\n if (field.lookupApi) {\n this.runFieldLookup(field, nextValue);\n return;\n }\n\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n }\n\n runBarcodeLookup(field: UiDynamicFormField): void {\n this.runFieldLookup(field);\n }\n\n runFieldLookup(field: UiDynamicFormField, overrideValue?: string): void {\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 const evaluator = new Function('model', `with (model) { return !!(${condition}); }`) as (model: UiDynamicFormValue) => boolean;\n return evaluator(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 Boolean(Function('model', `with (model) { return Boolean(${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 isInputField(field: UiDynamicFormField): boolean {\n const type = field.type ?? 'text';\n return type === 'text' || type === 'number' || type === 'date' || type === 'datetime' || type === 'email' || type === 'password' || type === 'textarea';\n }\n\n isBarcodeField(field: UiDynamicFormField): boolean {\n return field.type === 'barcode';\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): boolean {\n return isDynamicFormContainerField(field);\n }\n\n isTemplateField(field: UiDynamicFormField): boolean {\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 const evaluator = new Function('model', `with (model) { return !!(${expression}); }`) as (model: UiDynamicFormValue) => boolean;\n return !evaluator(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 resolveSelectOptions(field: UiDynamicFormField): UiSelectOption[] {\n if (field.options?.length) {\n return field.options;\n }\n\n const sourceKey = String(field.optionsSource || '').trim();\n if (!sourceKey) {\n return [];\n }\n\n return this.dictionaryOptionsSignal()[sourceKey] ?? [];\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(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 onSelectSearchChange(field: UiDynamicFormField, query: string): void {\n const key = String(field.optionsSource || '').trim();\n if (!key) return;\n this.getSelectSearchStream(field, key).next(String(query ?? ''));\n }\n\n private ensureOptionsSourceOptionsLoaded(model: UiDynamicFormValue): void {\n const sourceKeys = [...new Set(\n this.getLeafFields()\n .filter((field) => (field.type ?? 'text') === 'select' && !!field.optionsSource)\n .map((field) => String(field.optionsSource || '').trim())\n .filter(Boolean)\n )];\n\n if (!sourceKeys.length) {\n return;\n }\n\n for (const sourceKey of sourceKeys) {\n const resolver = this.optionsSourceResolvers.find((item) => item.source === sourceKey);\n if (!resolver) {\n continue;\n }\n\n const sourceFields = this.getLeafFields().filter((field) => String(field.optionsSource || '').trim() === sourceKey);\n if (!sourceFields.length) {\n continue;\n }\n\n const version = (this.optionsSourceRequestVersions.get(sourceKey) || 0) + 1;\n this.optionsSourceRequestVersions.set(sourceKey, version);\n\n forkJoin(sourceFields.map((field) => {\n const resolved = resolver\n ? resolver.resolve({ source: sourceKey, field, model })\n : this.formsApi.getSuggestByName(sourceKey);\n return resolved instanceof Observable ? resolved : from(Promise.resolve(resolved));\n })).subscribe({\n next: (results) => {\n if ((this.optionsSourceRequestVersions.get(sourceKey) || 0) !== version) {\n return;\n }\n\n const options = results\n .flat()\n .map((item) => ({\n label: String(item?.label ?? ''),\n value: item?.value == null ? null : String(item.value),\n disabled: typeof item?.disabled === 'boolean' ? item.disabled : undefined,\n imageUrl: item?.imageUrl ? String(item.imageUrl) : undefined,\n } satisfies UiSelectOption))\n .filter((item) => !!item.label || item.value !== null);\n\n this.dictionaryOptionsSignal.update((current) => ({\n ...current,\n [sourceKey]: options,\n }));\n },\n });\n }\n }\n\n private getSelectSearchStream(field: UiDynamicFormField, key: string): Subject<string> {\n const normalizedKey = String(key || '').trim();\n const existing = this.selectSearchChanges.get(normalizedKey);\n if (existing) {\n return existing;\n }\n\n const search$ = new Subject<string>();\n this.selectSearchChanges.set(normalizedKey, search$);\n\n const subscription = search$\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n switchMap((query) => {\n const resolver = this.optionsSourceResolvers.find((item) => item.source === normalizedKey);\n if (resolver) {\n return resolver.resolve({ source: normalizedKey, field, model: this.modelSignal(), query });\n }\n return this.formsApi.getSuggestByName(normalizedKey, query);\n })\n )\n .subscribe({\n next: (items) => {\n const resolver = this.optionsSourceResolvers.find((item) => item.source === normalizedKey);\n this.dictionaryOptionsSignal.update((current) => ({\n ...current,\n [normalizedKey]: resolver\n ? (items ?? []).map((item) => ({\n label: String(item?.label ?? ''),\n value: item?.value == null ? null : String(item.value),\n disabled: item?.disabled,\n imageUrl: item?.imageUrl ? String(item.imageUrl) : undefined,\n }))\n : (items ?? []).map((item) => ({\n label: String(item?.label ?? ''),\n value: (item as Record<string, unknown>)?.['key'] != null ? String((item as Record<string, unknown>)['key']) : null,\n })),\n }));\n },\n });\n\n this.selectSearchSubscriptions.set(normalizedKey, subscription);\n return search$;\n }\n\n private cleanupSelectSearchStreams(): void {\n for (const subscription of this.selectSearchSubscriptions.values()) {\n subscription.unsubscribe();\n }\n this.selectSearchSubscriptions.clear();\n this.selectSearchChanges.clear();\n }\n\n private applyLookupResponse(field: UiDynamicFormField, response: Record<string, unknown>): void {\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 this.ensureOptionsSourceOptionsLoaded(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 (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 (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 (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 @if (isBarcodeField(field)) {\n <forms-barcode-scanner-input\n [label]=\"field.label || 'Штрихкод'\"\n [placeholder]=\"field.placeholder || 'Відскануйте або введіть штрихкод'\"\n [hint]=\"field.hint || 'Сканер може просто ввести код і натиснути Enter.'\"\n [disabled]=\"isFieldDisabled(field) || isLookupLoading(field.id)\"\n [autoOpen]=\"field.autoOpen !== false\"\n [value]=\"getStringValue(field.id)\"\n [searchButtonLabel]=\"field.searchButtonLabel || 'Знайти'\"\n [openCameraLabel]=\"field.openCameraLabel || 'Відкрити камеру'\"\n [closeCameraLabel]=\"field.closeCameraLabel || 'Закрити камеру'\"\n [cameraTitle]=\"field.cameraTitle || 'Камера'\"\n [cameraStartingLabel]=\"field.cameraStartingLabel || 'Запускаємо камеру…'\"\n [cameraHint]=\"field.cameraHint || 'Наведіть камеру на штрихкод. Після зчитування код підставиться автоматично.'\"\n (valueChange)=\"onBarcodeValueChange(field, $event)\"\n (searchRequested)=\"runBarcodeLookup(field)\"\n (scanned)=\"onBarcodeScanned(field, $event)\"\n ></forms-barcode-scanner-input>\n @if (getLookupError(field.id)) {\n <div class=\"mt-3 rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">\n {{ getLookupError(field.id) }}\n </div>\n }\n }\n\n @if (isInputField(field)) {\n <forms-form-input-host\n [field]=\"field\"\n [value]=\"modelSignal()[field.id]\"\n [disabled]=\"disabled\"\n [error]=\"errors[field.id] ?? ''\"\n [actions]=\"resolveFieldActions(field)\"\n (valueChange)=\"updateField(field.id, $any($event))\"\n (actionTriggered)=\"onFieldActionTriggered(field.id, $event)\"\n ></forms-form-input-host>\n }\n\n @if (field.type === 'select') {\n <forms-select\n [name]=\"field.id\"\n [label]=\"field.label\"\n [placeholder]=\"field.placeholder\"\n [hint]=\"field.hint\"\n [data]=\"field.data\"\n [required]=\"!!field.required\"\n [multiple]=\"!!field.multiple\"\n [disabled]=\"isFieldDisabled(field)\"\n [options]=\"resolveSelectOptions(field)\"\n [searchable]=\"(field.searchable ?? !!field.data) || !!field.optionsSource\"\n [remoteSearch]=\"!!field.optionsSource\"\n (searchChange)=\"field.optionsSource ? onSelectSearchChange(field, $event) : null\"\n [fullWidth]=\"field.fullWidth !== false\"\n [error]=\"errors[field.id] ?? ''\"\n [ngModel]=\"modelSignal()[field.id]\"\n (ngModelChange)=\"onSelectValueChange(field, $event)\">\n </forms-select>\n @if (field.lookupApi && getLookupError(field.id)) {\n <div class=\"mt-3 rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">\n {{ getLookupError(field.id) }}\n </div>\n }\n }\n\n @if (field.type === 'checkbox') {\n <forms-checkbox-input\n [label]=\"field.label\"\n [disabled]=\"isFieldDisabled(field)\"\n [value]=\"!!modelSignal()[field.id]\"\n (valueChange)=\"updateField(field.id, $event)\"\n ></forms-checkbox-input>\n }\n\n @if (field.type === 'color') {\n <forms-color-input\n [name]=\"field.id\"\n [id]=\"field.id\"\n [label]=\"field.label\"\n [hint]=\"field.hint\"\n [required]=\"!!field.required\"\n [disabled]=\"isFieldDisabled(field)\"\n [fullWidth]=\"field.fullWidth !== false\"\n [error]=\"errors[field.id] ?? ''\"\n [ngModel]=\"modelSignal()[field.id]\"\n (ngModelChange)=\"updateField(field.id, $event)\"\n ></forms-color-input>\n }\n\n @if (field.type === 'slug') {\n <forms-slug-input\n [name]=\"field.id\"\n [id]=\"field.id\"\n [label]=\"field.label\"\n [placeholder]=\"field.placeholder\"\n [hint]=\"field.hint\"\n [required]=\"!!field.required\"\n [readonly]=\"!!field.readonly\"\n [disabled]=\"isFieldDisabled(field)\"\n [fullWidth]=\"field.fullWidth !== false\"\n [error]=\"errors[field.id] ?? ''\"\n [ngModel]=\"modelSignal()[field.id]\"\n (ngModelChange)=\"updateField(field.id, $event)\"\n ></forms-slug-input>\n }\n\n @if (field.type === 'photo') {\n <forms-photo-input\n [label]=\"field.label\"\n [hint]=\"field.hint\"\n [accept]=\"field.accept ?? 'image/*'\"\n [multiple]=\"!!field.multiple\"\n [limit]=\"field.limit ?? 0\"\n [disabled]=\"isFieldDisabled(field)\"\n [value]=\"$any(modelSignal()[field.id])\"\n [uploadPhoto]=\"uploadPhoto\"\n (valueChange)=\"updateField(field.id, $event)\"\n (filesChange)=\"filesChange.emit({ fieldId: field.id, files: $event })\"\n (uploadingChange)=\"uploadingChange.emit($event)\"\n ></forms-photo-input>\n }\n @if (field.type === 'file') {\n <forms-file-input\n [label]=\"field.label\"\n [hint]=\"field.hint\"\n [accept]=\"field.accept\"\n [multiple]=\"!!field.multiple\"\n [disabled]=\"isFieldDisabled(field)\"\n [value]=\"$any(modelSignal()[field.id])\"\n (valueChange)=\"updateField(field.id, $event)\"\n (filesChange)=\"filesChange.emit({ fieldId: field.id, files: $event })\"\n ></forms-file-input>\n }\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 { Observable } from 'rxjs';\nimport { UiButtonComponent } from '@maro-tech/ui';\nimport { UiDynamicFormComponent } from '../dynamic/ui-dynamic-form.component';\nimport { UiDynamicFormField, UiDynamicFormFieldAction, UiDynamicFormValue } from '../dynamic/ui-dynamic-form.models';\n\nexport interface MaroFormViewAction extends UiDynamicFormFieldAction {\n redirectTo?: string;\n}\n\nexport interface MaroFormViewResponse {\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: 'forms-action-form-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, UiDynamicFormComponent],\n templateUrl: './ui-action-form-modal.component.html',\n})\nexport class UiActionFormModalComponent 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 initialValue = input<Record<string, unknown>>({});\n readonly uploadPhoto = input<((file: File) => Observable<{ imageId: string }>) | null>(null);\n\n readonly closed = output<void>();\n readonly completed = output<unknown>();\n readonly isLoading = signal(false);\n readonly isSubmitting = 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) => String(action.type).toUpperCase() === 'ACTION_SUBMIT' || String(action.type).toUpperCase() === 'ACTION_API'));\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\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 {\n this.closed.emit();\n }\n\n onValueChange(value: UiDynamicFormValue): void {\n this.formValue.set(value);\n }\n\n onLookupCompleted(_event: { fieldId: string; response: Record<string, unknown> }): void {\n // Lookup results are already applied by the dynamic form and emitted via valueChange.\n }\n\n onUploadingChange(uploading: boolean): void {\n this.isUploading.set(uploading);\n }\n\n onFieldActionTriggered(event: { fieldId: string; action: UiDynamicFormFieldAction }): void {\n const endpoint = this.resolveEndpoint(event.action.api);\n if (!endpoint) return;\n\n this.http.request(this.resolveMethod(event.action.method), endpoint, { body: { ...this.formValue(), ...(event.action.payload || {}) } }).subscribe({\n next: (response) => {\n const data = this.extractData(response);\n if (data) this.formValue.update((current) => ({ ...current, ...data }) as UiDynamicFormValue);\n },\n });\n }\n\n confirm(): void {\n if (this.isSubmitting()) return;\n\n const action = this.submitAction();\n const endpoint = this.resolveEndpoint(this.formConfig()?.api || action?.api);\n if (!endpoint) return;\n\n const payload = { ...(this.initialValue() || {}), ...(action?.payload || {}), ...this.formValue() };\n const recordId = String(this.recordId() || '').trim();\n if (recordId && !Object.prototype.hasOwnProperty.call(payload, 'id')) payload['id'] = recordId;\n\n this.isSubmitting.set(true);\n this.http.request(this.resolveMethod(action?.method || (recordId ? 'PATCH' : 'POST')), endpoint, { 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: () => this.isSubmitting.set(false),\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 config = response.form || (response as unknown as MaroFormViewResponse);\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 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 = redirect.replace(/:([a-zA-Z_][a-zA-Z0-9_.]*)/g, (_match, key) => {\n const value = String(key).split('.').reduce<unknown>((current, part) => current && typeof current === 'object' ? (current as Record<string, unknown>)[part] : undefined, data);\n return value == null ? '' : String(value);\n });\n if (target && !target.includes(':')) void this.router.navigateByUrl(target.startsWith('/') ? target : `/${target}`);\n }\n}\n","@if (isOpen()) {\n <div class=\"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/40 p-4 sm:items-center sm:p-6\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"my-2 flex min-h-0 max-h-[calc(100vh-1rem)] w-full flex-col overflow-hidden rounded-2xl bg-slate-50 shadow-2xl sm:my-0 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 <forms-dynamic-form [fields]=\"fields()\" [value]=\"formValue()\" [showSubmit]=\"false\" [uploadPhoto]=\"uploadPhoto()\" (valueChange)=\"onValueChange($event)\" (lookupCompleted)=\"onLookupCompleted($event)\" (uploadingChange)=\"onUploadingChange($event)\" (fieldActionTriggered)=\"onFieldActionTriggered($event)\"></forms-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()\">Cancel</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 { 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/ui';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiInputComponent 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() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiInputComponent.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\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\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 [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full rounded-2xl border border-slate-200 bg-white px-4 py-2 text-sm text-slate-900 placeholder:text-slate-400 transition focus:border-sky-400 focus:outline-none\"\n [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Observable, of } from 'rxjs';\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: 'forms-photo-gallery-field',\n standalone: true,\n imports: [CommonModule, DragDropModule],\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 UiPhotoGalleryFieldComponent implements OnInit, OnChanges, OnDestroy {\n @Input() label = 'Фото';\n @Input() orderLabel = 'Порядок фото (перетягуй)';\n @Input() imageIds: string[] = [];\n @Input() disabled = false;\n @Input() afterUpload: ((imageId: string) => Observable<unknown>) | null = null;\n @Input() uploadPhoto: ((file: File) => Observable<{ imageId: string }>) | 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 || !this.uploadPhoto) return;\n const entry = this.entries[nextIndex];\n entry.isUploading = true;\n const file = entry.file!;\n this.uploadPhoto(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","<label class=\"flex flex-col gap-1 md:col-span-12\">\n <span class=\"text-sm\">{{ label }}</span>\n <div class=\"text-xs text-slate-500\">Кількість фото: {{ photoCount }}</div>\n</label>\n\n<div class=\"md:col-span-12\">\n <p class=\"mb-2 text-xs uppercase tracking-[0.2em] text-slate-500\">{{ orderLabel }}</p>\n <div 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>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'forms-range-slider',\n standalone: true,\n imports: [CommonModule],\n template: `\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 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 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 `,\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 UiRangeSliderComponent implements OnChanges, AfterViewInit {\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","/**\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/form-lookup.service.ts","../../../src/lib/dynamic/ui-dynamic-form-options-source.token.ts","../../../src/lib/dynamic/ui-dynamic-form.models.ts","../../../src/lib/inputs/barcode/ui-barcode-scanner-input.component.ts","../../../src/lib/popup/ui-popup.service.ts","../../../src/lib/inputs/select/ui-select.component.ts","../../../src/lib/inputs/select/ui-select.component.html","../../../src/lib/inputs/date/ui-date-input.component.ts","../../../src/lib/inputs/date/ui-date-input.component.html","../../../src/lib/inputs/datetime/ui-datetime-input.component.ts","../../../src/lib/inputs/datetime/ui-datetime-input.component.html","../../../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.component.ts","../../../src/lib/inputs/number/ui-number-input.component.html","../../../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.component.ts","../../../src/lib/inputs/textarea/ui-textarea-input.component.html","../../../src/lib/inputs/form-input.registry.ts","../../../src/lib/inputs/form-input-host.component.ts","../../../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.component.ts","../../../src/lib/inputs/photo/ui-photo-input.component.html","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.ts","../../../src/lib/inputs/checkbox/ui-checkbox-input.component.html","../../../src/lib/inputs/color/ui-color-input.component.ts","../../../src/lib/inputs/color/ui-color-input.component.html","../../../src/lib/inputs/slug/ui-slug-input.component.ts","../../../src/lib/inputs/slug/ui-slug-input.component.html","../../../src/lib/dynamic/ui-dynamic-form.component.ts","../../../src/lib/dynamic/ui-dynamic-form.component.html","../../../src/lib/action-form/ui-action-form-modal.component.ts","../../../src/lib/action-form/ui-action-form-modal.component.html","../../../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 { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UiDynamicFormField } 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 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 { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UiSelectOption } from '../inputs/select/ui-select.component';\nimport { UiDynamicFormField, UiDynamicFormValue } from './ui-dynamic-form.models';\n\nexport interface UiDynamicFormOptionsSourceContext {\n source: string;\n field: UiDynamicFormField;\n model: UiDynamicFormValue;\n query?: string;\n}\n\nexport interface UiDynamicFormOptionsSourceResolver {\n source: string;\n resolve(context: UiDynamicFormOptionsSourceContext): Observable<UiSelectOption[]>;\n}\n\nexport const UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS = new InjectionToken<UiDynamicFormOptionsSourceResolver[]>(\n 'UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS'\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 UiDynamicFormBaseField {\n id: string;\n type?: UiDynamicFieldType;\n label?: string;\n title?: string;\n placeholder?: string;\n hint?: string;\n required?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n data?: string;\n optionsSource?: string;\n options?: UiSelectOption[];\n searchable?: boolean;\n rows?: number;\n fullWidth?: boolean;\n col?: number;\n accept?: string;\n multiple?: boolean;\n limit?: number;\n hidden?: boolean | string;\n default?: string | number | boolean | string[] | null;\n pattern?: string;\n actions?: UiDynamicFormFieldAction[];\n className?: string;\n containerClassName?: string;\n contentClassName?: string;\n tag?: 'div' | 'section' | 'aside' | 'fieldset';\n fields?: UiDynamicFormField[];\n layout?: 'grid' | 'stack';\n template?: string;\n templateContext?: Record<string, unknown>;\n autoOpen?: boolean;\n searchButtonLabel?: string;\n openCameraLabel?: string;\n closeCameraLabel?: string;\n cameraTitle?: string;\n cameraStartingLabel?: string;\n cameraHint?: string;\n lookupApi?: string;\n lookupMap?: Record<string, string>;\n lookupErrorField?: string;\n}\n\nexport interface UiDynamicFormContainerField extends UiDynamicFormBaseField {\n type: 'container';\n fields: UiDynamicFormField[];\n layout?: 'grid' | 'stack';\n}\n\nexport interface UiDynamicFormTemplateField extends UiDynamicFormBaseField {\n type: 'template';\n template: string;\n templateContext?: Record<string, unknown>;\n}\n\nexport type UiDynamicFormField = UiDynamicFormBaseField | UiDynamicFormContainerField | 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 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 { 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 { FormsModule } from '@angular/forms';\nimport { BrowserMultiFormatOneDReader, type IScannerControls } from '@zxing/browser';\nimport { BarcodeFormat, DecodeHintType } from '@zxing/library';\nimport { UiButtonComponent } from '@maro-tech/core';\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: 'forms-barcode-scanner-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n template: `\n <div class=\"space-y-2\">\n @if (label()) {\n <label class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\" for=\"barcode-scanner-input\">\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label() }}\n </span>\n </label>\n }\n\n <div class=\"flex items-start gap-2\">\n <div class=\"min-w-0 flex-1\">\n <input\n #barcodeInput\n id=\"barcode-scanner-input\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onValueChange($event)\"\n (keydown.enter)=\"requestSearch()\"\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 [placeholder]=\"placeholder()\"\n />\n @if (hint()) {\n <p class=\"mt-2 text-[0.5rem] text-slate-500\">\n {{ hint() }}\n </p>\n }\n </div>\n\n <div class=\"mt-0.5 flex flex-col gap-2\">\n <ui-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"disabled()\"\n (click)=\"requestSearch()\"\n >\n {{ searchButtonLabel() }}\n </ui-button>\n <ui-button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n [disabled]=\"disabled() || isCameraStarting()\"\n (click)=\"isCameraOpen() ? closeCamera() : openCamera()\"\n >\n {{ isCameraOpen() ? closeCameraLabel() : openCameraLabel() }}\n </ui-button>\n </div>\n </div>\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 {{ cameraStartingLabel() }}\n </div>\n }\n\n @if (isCameraOpen()) {\n <section class=\"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\">{{ cameraTitle() }}</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 {{ closeCameraLabel() }}\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 {{ cameraHint() }}\n </p>\n </section>\n }\n\n @if (cameraError()) {\n <div class=\"rounded-xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">\n {{ cameraError() }}\n </div>\n }\n </div>\n `,\n})\nexport class UiBarcodeScannerInputComponent implements OnChanges, AfterViewInit, OnDestroy {\n readonly value = input('');\n readonly label = input('Штрихкод');\n readonly placeholder = input('Відскануйте або введіть штрихкод');\n readonly hint = input('Сканер може просто ввести код і натиснути Enter.');\n readonly disabled = input(false);\n readonly autoOpen = input(true);\n readonly searchButtonLabel = input('Знайти');\n readonly openCameraLabel = input('Відкрити камеру');\n readonly closeCameraLabel = input('Закрити камеру');\n readonly cameraTitle = input('Камера');\n readonly cameraStartingLabel = input('Запускаємо камеру…');\n readonly cameraHint = input('Наведіть камеру на штрихкод. Після зчитування код підставиться автоматично.');\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 (changes['autoOpen'] && this.autoOpen() && !this.disabled()) {\n this.scheduleAutoOpen();\n }\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.autoOpen() || 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.autoOpen() || 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\n\n\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 { 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 { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } 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';\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: 'forms-select',\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(() => UiSelectComponent),\n multi: true,\n },\n ],\n})\nexport class UiSelectComponent implements ControlValueAccessor, OnChanges {\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() required = false;\n @Input() fullWidth = 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 @Input() remoteSearch = false;\n @Input() searchPlaceholder = 'Пошук...';\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 if ('data' in changes) {\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 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.remoteSearch || !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 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 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\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n>\n <!-- LABEL -->\n @if (label || (hint && !error)) {\n <div class=\"flex items-center justify-between\">\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) { <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span> }\n </span>\n\n @if (hint && !error) {\n <span class=\"text-[0.65rem] text-slate-400\">\n {{ hint }}\n </span>\n }\n </div>\n }\n\n <!-- SELECT -->\n <div class=\"relative\" [class.w-full]=\"fullWidth\">\n\n <button\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]=\"searchPlaceholder\"\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\n @if (error) {\n <p class=\"text-[0.7rem] text-rose-500\">\n {{ error }}\n </p>\n }\n\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostListener, 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 { ChevronLeft, ChevronRight, CalendarDays, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { UiPopupService } from '../../popup/ui-popup.service';\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: 'forms-date-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule],\n templateUrl: './ui-date-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiDateInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiDateInputComponent implements ControlValueAccessor {\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() fullWidth = false;\n @Input() autocomplete = 'off';\n @Input() readonly = false;\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 = `ui-input-${UiDateInputComponent.nextId++}`;\n visibleMonth = this.startOfMonth(new Date());\n calendarView: CalendarView = 'days';\n isCalendarOpen = false;\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 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","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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\">\n <input\n type=\"text\"\n [attr.placeholder]=\"placeholder ?? 'ДД.ММ.РРРР'\"\n maxlength=\"10\"\n inputmode=\"numeric\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [readonly]=\"readonly\"\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 @if (isCalendarOpen) {\n <div\n class=\"absolute left-0 top-full z-50 mt-2 w-[min(20rem,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 }\n </div>\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, HostListener, 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 { CalendarDays, ChevronLeft, ChevronRight, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\nimport { UiPopupService } from '../../popup/ui-popup.service';\n\ninterface CalendarDay { date: string; day: number; currentMonth: boolean; }\ntype CalendarView = 'days' | 'months' | 'years';\n\n@Component({\n selector: 'forms-datetime-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule],\n templateUrl: './ui-datetime-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => UiDatetimeInputComponent), multi: true }],\n})\nexport class UiDatetimeInputComponent implements ControlValueAccessor {\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() fullWidth = false; @Input() autocomplete = 'off';\n @Input() readonly = false; @Input() pattern?: string; @Input() error?: string; @Input() actions: UiDynamicFormFieldAction[] = [];\n readonly type = 'datetime-local'; readonly calendarIcon = CalendarDays; readonly previousMonthIcon = ChevronLeft; readonly nextMonthIcon = ChevronRight;\n disabled = false; value: string | number | null = ''; isCalendarOpen = false; calendarView: CalendarView = 'days'; visibleMonth = this.startOfMonth(new Date());\n selectedHour = 12; selectedMinute = 0;\n private static nextId = 0; private readonly generatedId = `ui-input-${UiDatetimeInputComponent.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 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 flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\" [class.w-full]=\"fullWidth\">\n @if (label) { <span class=\"text-[0.7rem] font-semibold text-slate-600\">{{ label }} @if (required) { <span class=\"text-rose-500\"> *</span> }</span> }\n <div class=\"flex items-end gap-2\"><div class=\"min-w-0 flex-1\"><div class=\"relative\">\n <input type=\"text\" [attr.placeholder]=\"placeholder ?? 'ДД.ММ.РРРР ГГ:ХХ'\" maxlength=\"16\" inputmode=\"numeric\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [readonly]=\"readonly\" [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 @if (isCalendarOpen) { <div class=\"absolute left-0 top-full z-50 mt-2 w-[min(22rem,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> }\n </div></div>\n @if (actions.length) { <div class=\"flex flex-none items-center gap-2 pb-0.5\">@for (action of actions; track action.id) { <ui-button type=\"button\" [variant]=\"action.variant ?? 'secondary'\" [icon]=\"action.icon || ''\" size=\"sm\" [disabled]=\"disabled\" (click)=\"triggerAction(action)\">{{ action.label }}</ui-button> }</div> }\n </div>\n @if (hint) { <p class=\"text-[0.5rem] text-slate-500\">{{ hint }}</p> } @if (error) { <p class=\"text-[0.5rem] text-rose-400\">{{ error }}</p> }\n</div>\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';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-email-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-email-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiEmailInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiEmailInputComponent 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 readonly type = 'email';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiEmailInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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 <input\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [readonly]=\"readonly\"\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 [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-number-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\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(() => UiNumberInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiNumberInputComponent 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 readonly type = 'number';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiNumberInputComponent.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 = 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","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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 <input\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"w-full appearance-none 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]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (wheel)=\"preventWheelChange($event)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\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 { Eye, EyeOff, LucideAngularModule } from 'lucide-angular';\nimport { UiDynamicFormFieldAction } from '../../dynamic/ui-dynamic-form.models';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-password-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, LucideAngularModule],\n templateUrl: './ui-password-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiPasswordInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiPasswordInputComponent 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 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() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiPasswordInputComponent.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 = 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","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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\">\n <input\n [attr.type]=\"isPasswordVisible ? 'text' : type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [readonly]=\"readonly\"\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]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n <button\n type=\"button\"\n 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\"\n [attr.aria-label]=\"isPasswordVisible ? 'Сховати пароль' : 'Показати пароль'\"\n [disabled]=\"disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"togglePassword($event)\"\n >\n <lucide-icon\n [img]=\"isPasswordVisible ? hidePasswordIcon : showPasswordIcon\"\n class=\"h-4 w-4\"\n aria-hidden=\"true\"\n ></lucide-icon>\n </button>\n </div>\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\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';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-text-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-text-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiTextInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiTextInputComponent 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 readonly type = 'text';\n readonly element: UiInputElement = 'input';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiTextInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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 <input\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [readonly]=\"readonly\"\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 [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\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';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-textarea-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-textarea-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiTextareaInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiTextareaInputComponent 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 readonly type = 'text';\n readonly element: UiInputElement = 'textarea';\n @Input() rows = 4;\n @Input() required = false;\n @Input() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiTextareaInputComponent.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 = value;\n this.value = parsed;\n this.onChange(parsed);\n }\n\n triggerAction(action: UiDynamicFormFieldAction): void {\n this.actionTriggered.emit(action);\n }\n}\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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 <input\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [readonly]=\"readonly\"\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 [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\n\n","import { Type } from '@angular/core';\nimport { UiDateInputComponent } from './date/ui-date-input.component';\nimport { UiDatetimeInputComponent } from './datetime/ui-datetime-input.component';\nimport { UiEmailInputComponent } from './email/ui-email-input.component';\nimport { UiNumberInputComponent } from './number/ui-number-input.component';\nimport { UiPasswordInputComponent } from './password/ui-password-input.component';\nimport { UiTextInputComponent } from './text/ui-text-input.component';\nimport { UiTextareaInputComponent } from './textarea/ui-textarea-input.component';\n\nexport type UiFormInputType = 'text' | 'number' | 'date' | 'datetime' | 'email' | 'password' | 'textarea';\n\nexport const UI_FORM_INPUT_REGISTRY: Record<UiFormInputType, Type<unknown>> = {\n text: UiTextInputComponent,\n number: UiNumberInputComponent,\n date: UiDateInputComponent,\n datetime: UiDatetimeInputComponent,\n email: UiEmailInputComponent,\n password: UiPasswordInputComponent,\n textarea: UiTextareaInputComponent,\n};\n","import { Component, ComponentRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, Type, 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};\n\n@Component({\n selector: 'forms-form-input-host',\n standalone: true,\n template: '',\n})\nexport class UiFormInputHostComponent implements OnChanges {\n @Input() field!: UiDynamicFormField;\n @Input() value: UiDynamicFormValue[string];\n @Input() error = '';\n @Input() disabled = false;\n @Input() actions: UiDynamicFormFieldAction[] = [];\n @Input() options: Array<{ label: string; value: string | null; disabled?: boolean }> = [];\n\n @Output() valueChange = new EventEmitter<unknown>();\n @Output() actionTriggered = new EventEmitter<UiDynamicFormFieldAction>();\n\n private readonly viewContainer = inject(ViewContainerRef);\n private componentRef?: ComponentRef<unknown>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['field']) {\n this.render();\n return;\n }\n this.syncInputs();\n }\n\n private render(): void {\n this.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 = this.viewContainer.createComponent(componentType);\n this.syncInputs();\n\n const instance = this.componentRef.instance as FormControlInstance;\n instance.registerOnChange?.((nextValue) => this.valueChange.emit(nextValue));\n instance.registerOnTouched?.(() => undefined);\n instance.actionTriggered?.subscribe((action) => this.actionTriggered.emit(action));\n }\n\n private syncInputs(): void {\n if (!this.componentRef || !this.field) return;\n const field = this.field;\n const setInput = (name: string, value: unknown): void => this.componentRef?.setInput(name, value);\n setInput('name', field.id);\n setInput('id', field.id);\n setInput('label', field.label);\n setInput('placeholder', field.placeholder);\n setInput('hint', field.hint);\n setInput('required', !!field.required);\n setInput('readonly', !!field.readonly);\n setInput('disabled', this.disabled || !!field.disabled);\n setInput('pattern', field.pattern);\n setInput('rows', field.rows ?? 4);\n setInput('fullWidth', field.fullWidth !== false);\n setInput('error', this.error);\n setInput('actions', this.actions);\n const instance = this.componentRef.instance as FormControlInstance;\n instance.writeValue?.(this.value);\n instance.setDisabledState?.(this.disabled || !!field.disabled);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'forms-file-input',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-file-input.component.html',\n})\nexport class UiFileInputComponent {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() accept?: string;\n @Input() multiple = false;\n @Input() disabled = false;\n @Input() value: File | File[] | null = null;\n @Output() valueChange = new EventEmitter<File | File[] | null>();\n @Output() filesChange = new EventEmitter<File[]>();\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.valueChange.emit(value);\n this.filesChange.emit(files);\n input.value = '';\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.valueChange.emit(value);\n this.filesChange.emit(files);\n }\n}\n","<label class=\"flex flex-col gap-2 text-[0.7rem] font-semibold uppercase tracking-[0.2em] text-slate-600\">\n @if (label) { <span>{{ label }}</span> }\n <input\n type=\"file\"\n 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\"\n [attr.accept]=\"accept ?? null\"\n [attr.multiple]=\"multiple ? '' : null\"\n [disabled]=\"disabled\"\n (change)=\"onFilesSelected($event)\"\n />\n @if (hint) { <span class=\"text-[0.7rem] font-normal normal-case tracking-normal text-slate-500\">{{ hint }}</span> }\n @if (selectedFiles.length) {\n <div class=\"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)=\"remove(i)\">Видалити</button>\n </div>\n }\n </div>\n }\n</label>\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\nimport { Observable, forkJoin } from 'rxjs';\n\nexport interface UiPhotoPreview {\n name: string;\n url: string;\n isImage: boolean;\n source: 'file' | 'id';\n}\n\n@Component({\n selector: 'forms-photo-input',\n standalone: true,\n imports: [CommonModule, DragDropModule],\n templateUrl: './ui-photo-input.component.html',\n})\nexport class UiPhotoInputComponent implements OnChanges, OnDestroy {\n @Input() label?: string;\n @Input() hint?: string;\n @Input() accept = 'image/*';\n @Input() multiple = false;\n @Input() limit = Number.MAX_SAFE_INTEGER;\n @Input() disabled = false;\n @Input() value: string | string[] | null = null;\n @Input() uploadPhoto: ((file: File) => Observable<{ imageId: string; type?: string }>) | null = null;\n @Output() valueChange = new EventEmitter<string | string[] | null>();\n @Output() filesChange = new EventEmitter<File[]>();\n @Output() uploadingChange = new EventEmitter<boolean>();\n\n pendingFiles: File[] = [];\n previews: UiPhotoPreview[] = [];\n uploading = false;\n private readonly fileTypes = new Map<string, string>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || 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 if (this.uploadPhoto) 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.valueChange.emit(value);\n this.rebuildPreviews(value);\n }\n\n private uploadFiles(files: File[]): void {\n if (!this.uploadPhoto || !files.length) return;\n this.uploading = true;\n this.uploadingChange.emit(true);\n forkJoin(files.map((file) => this.uploadPhoto!(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 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","<label class=\"flex flex-col gap-2 text-[0.7rem] font-semibold uppercase tracking-[0.2em] text-slate-600\">\n @if (label) { <span>{{ label }}</span> }\n <button type=\"button\" class=\"flex min-h-24 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)=\"onFilesSelected($event)\" />\n @if (hint) { <span class=\"text-[0.7rem] font-normal normal-case tracking-normal text-slate-500\">{{ hint }}</span> }\n @if (previews.length) {\n <div class=\"grid grid-cols-2 gap-2 md:grid-cols-4\" cdkDropList cdkDropListOrientation=\"mixed\" [cdkDropListData]=\"previews\" (cdkDropListDropped)=\"drop($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)=\"remove(i)\">Видалити</button>\n </div>\n }\n </div>\n }\n</label>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'forms-checkbox-input',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './ui-checkbox-input.component.html',\n})\nexport class UiCheckboxInputComponent {\n @Input() label?: string;\n @Input() disabled = false;\n @Input() value = false;\n @Output() valueChange = new EventEmitter<boolean>();\n\n onValueChange(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).checked);\n }\n}\n","<label class=\"inline-flex items-center gap-3 text-sm text-slate-700\">\n <input\n type=\"checkbox\"\n class=\"h-4 w-4 rounded border-slate-300 text-slate-900 focus:ring-slate-400\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (change)=\"onValueChange($event)\"\n />\n <span>{{ label }}</span>\n</label>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'forms-color-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './ui-color-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiColorInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiColorInputComponent implements ControlValueAccessor {\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() fullWidth = false;\n @Input() error?: string;\n\n disabled = false;\n value = '#000000';\n\n private static nextId = 0;\n private readonly generatedId = `ui-color-input-${UiColorInputComponent.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 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 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\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\n }\n\n <div class=\"flex items-center gap-3\">\n <label\n 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\"\n [class.cursor-not-allowed]=\"disabled\"\n [class.opacity-60]=\"disabled\"\n [attr.for]=\"controlId\"\n >\n <span\n class=\"block h-9 w-9 rounded-full border border-black/10\"\n [style.backgroundColor]=\"pickerValue\"\n ></span>\n <input\n class=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n type=\"color\"\n [attr.id]=\"controlId\"\n [attr.name]=\"name ? name + '-picker' : null\"\n [disabled]=\"disabled\"\n [value]=\"pickerValue\"\n (input)=\"onPickerChange($event.target.value)\"\n (blur)=\"markTouched()\"\n />\n </label>\n <input\n 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\"\n type=\"text\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [value]=\"value\"\n (input)=\"onHexInput($event.target.value)\"\n (blur)=\"markTouched()\"\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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'forms-slug-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './ui-slug-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiSlugInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiSlugInputComponent implements ControlValueAccessor {\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() fullWidth = false;\n @Input() autocomplete = 'off';\n @Input() readonly = false;\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 = `ui-slug-input-${UiSlugInputComponent.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 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 private normalizeSlug(value: string): string {\n return (value ?? '')\n .toLowerCase()\n .replace(/\\s+/g, '_')\n .replace(/[^a-z0-9_]/g, '');\n }\n}\n\n","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\n }\n\n <input\n type=\"text\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n class=\"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]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target))\"\n (blur)=\"onTouched()\"\n />\n\n @if (hint) {\n <p class=\"text-[0.5rem] text-slate-500\">{{ hint }}</p>\n }\n @if (error) {\n <p class=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Observable, Subject, Subscription, debounceTime, distinctUntilChanged, forkJoin, from, switchMap } from 'rxjs';\nimport { UiBarcodeScannerInputComponent } from '../inputs/barcode/ui-barcode-scanner-input.component';\nimport { UiSelectComponent, UiSelectOption } from '../inputs/select/ui-select.component';\nimport { UiFormInputHostComponent } from '../inputs/form-input-host.component';\nimport { UiFileInputComponent } from '../inputs/file/ui-file-input.component';\nimport { UiPhotoInputComponent } from '../inputs/photo/ui-photo-input.component';\nimport { UiCheckboxInputComponent } from '../inputs/checkbox/ui-checkbox-input.component';\nimport { UiColorInputComponent } from '../inputs/color/ui-color-input.component';\nimport { UiSlugInputComponent } from '../inputs/slug/ui-slug-input.component';\nimport { UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS } from './ui-dynamic-form-options-source.token';\nimport { UiFormContext } from '../context/form-context.service';\nimport { UiFormLookupService } from './form-lookup.service';\nimport { MaroFormsApiService } from '../forms-api.service';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport {\n UiDynamicFormField,\n UiDynamicFormFieldAction,\n UiDynamicFormValue,\n flattenDynamicFormFields,\n isDynamicFormContainerField,\n isDynamicFormTemplateField,\n} from './ui-dynamic-form.models';\n\n@Component({\n selector: 'forms-dynamic-form',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent, UiFormInputHostComponent, UiFileInputComponent, UiPhotoInputComponent, UiCheckboxInputComponent, UiColorInputComponent, UiSlugInputComponent, UiBarcodeScannerInputComponent, UiSelectComponent],\n templateUrl: './ui-dynamic-form.component.html',\n providers: [UiFormContext, UiFormLookupService],\n})\nexport class UiDynamicFormComponent implements OnInit, OnChanges, OnDestroy {\n private readonly formsApi = inject(MaroFormsApiService);\n private readonly lookupService = inject(UiFormLookupService);\n readonly formContext = inject(UiFormContext);\n private readonly optionsSourceResolvers = inject(UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS, { optional: true }) ?? [];\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 @Input() uploadPhoto: ((file: File) => Observable<{ imageId: string }>) | null = null;\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 dictionaryOptionsSignal = signal<Record<string, UiSelectOption[]>>({});\n readonly lookupLoadingSignal = signal<Record<string, boolean>>({});\n readonly lookupErrorsSignal = signal<Record<string, string>>({});\n private readonly selectSearchChanges = new Map<string, Subject<string>>();\n private readonly selectSearchSubscriptions = new Map<string, Subscription>();\n private readonly optionsSourceRequestVersions = new Map<string, number>();\n\n ngOnInit(): void {\n this.ensureOptionsSourceOptionsLoaded(this.modelSignal());\n }\n\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 nextValue = this.value[field.id] !== undefined\n ? this.value[field.id]\n : field.default !== undefined\n ? field.default\n : defaultValue;\n next[field.id] = nextValue;\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 if ('fields' in changes || 'value' in changes) {\n this.ensureOptionsSourceOptionsLoaded(this.modelSignal());\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupSelectSearchStreams();\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 this.ensureOptionsSourceOptionsLoaded(updated);\n return updated;\n });\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 onBarcodeScanned(field: UiDynamicFormField, value: string): void {\n this.updateField(field.id, value);\n this.runFieldLookup(field, value);\n }\n\n onSelectValueChange(field: UiDynamicFormField, value: string | string[] | null): void {\n this.updateField(field.id, value as UiDynamicFormValue[string]);\n const nextValue = Array.isArray(value) ? '' : String(value || '').trim();\n if (field.lookupApi) {\n this.runFieldLookup(field, nextValue);\n return;\n }\n\n this.lookupErrorsSignal.update((current) => ({ ...current, [field.id]: '' }));\n }\n\n runBarcodeLookup(field: UiDynamicFormField): void {\n this.runFieldLookup(field);\n }\n\n runFieldLookup(field: UiDynamicFormField, overrideValue?: string): void {\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 const evaluator = new Function('model', `with (model) { return !!(${condition}); }`) as (model: UiDynamicFormValue) => boolean;\n return evaluator(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 Boolean(Function('model', `with (model) { return Boolean(${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 isInputField(field: UiDynamicFormField): boolean {\n const type = field.type ?? 'text';\n return type === 'text' || type === 'number' || type === 'date' || type === 'datetime' || type === 'email' || type === 'password' || type === 'textarea';\n }\n\n isBarcodeField(field: UiDynamicFormField): boolean {\n return field.type === 'barcode';\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): boolean {\n return isDynamicFormContainerField(field);\n }\n\n isTemplateField(field: UiDynamicFormField): boolean {\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 const evaluator = new Function('model', `with (model) { return !!(${expression}); }`) as (model: UiDynamicFormValue) => boolean;\n return !evaluator(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 resolveSelectOptions(field: UiDynamicFormField): UiSelectOption[] {\n if (field.options?.length) {\n return field.options;\n }\n\n const sourceKey = String(field.optionsSource || '').trim();\n if (!sourceKey) {\n return [];\n }\n\n return this.dictionaryOptionsSignal()[sourceKey] ?? [];\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(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 onSelectSearchChange(field: UiDynamicFormField, query: string): void {\n const key = String(field.optionsSource || '').trim();\n if (!key) return;\n this.getSelectSearchStream(field, key).next(String(query ?? ''));\n }\n\n private ensureOptionsSourceOptionsLoaded(model: UiDynamicFormValue): void {\n const sourceKeys = [...new Set(\n this.getLeafFields()\n .filter((field) => (field.type ?? 'text') === 'select' && !!field.optionsSource)\n .map((field) => String(field.optionsSource || '').trim())\n .filter(Boolean)\n )];\n\n if (!sourceKeys.length) {\n return;\n }\n\n for (const sourceKey of sourceKeys) {\n const resolver = this.optionsSourceResolvers.find((item) => item.source === sourceKey);\n if (!resolver) {\n continue;\n }\n\n const sourceFields = this.getLeafFields().filter((field) => String(field.optionsSource || '').trim() === sourceKey);\n if (!sourceFields.length) {\n continue;\n }\n\n const version = (this.optionsSourceRequestVersions.get(sourceKey) || 0) + 1;\n this.optionsSourceRequestVersions.set(sourceKey, version);\n\n forkJoin(sourceFields.map((field) => {\n const resolved = resolver\n ? resolver.resolve({ source: sourceKey, field, model })\n : this.formsApi.getSuggestByName(sourceKey);\n return resolved instanceof Observable ? resolved : from(Promise.resolve(resolved));\n })).subscribe({\n next: (results) => {\n if ((this.optionsSourceRequestVersions.get(sourceKey) || 0) !== version) {\n return;\n }\n\n const options = results\n .flat()\n .map((item) => ({\n label: String(item?.label ?? ''),\n value: item?.value == null ? null : String(item.value),\n disabled: typeof item?.disabled === 'boolean' ? item.disabled : undefined,\n imageUrl: item?.imageUrl ? String(item.imageUrl) : undefined,\n } satisfies UiSelectOption))\n .filter((item) => !!item.label || item.value !== null);\n\n this.dictionaryOptionsSignal.update((current) => ({\n ...current,\n [sourceKey]: options,\n }));\n },\n });\n }\n }\n\n private getSelectSearchStream(field: UiDynamicFormField, key: string): Subject<string> {\n const normalizedKey = String(key || '').trim();\n const existing = this.selectSearchChanges.get(normalizedKey);\n if (existing) {\n return existing;\n }\n\n const search$ = new Subject<string>();\n this.selectSearchChanges.set(normalizedKey, search$);\n\n const subscription = search$\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n switchMap((query) => {\n const resolver = this.optionsSourceResolvers.find((item) => item.source === normalizedKey);\n if (resolver) {\n return resolver.resolve({ source: normalizedKey, field, model: this.modelSignal(), query });\n }\n return this.formsApi.getSuggestByName(normalizedKey, query);\n })\n )\n .subscribe({\n next: (items) => {\n const resolver = this.optionsSourceResolvers.find((item) => item.source === normalizedKey);\n this.dictionaryOptionsSignal.update((current) => ({\n ...current,\n [normalizedKey]: resolver\n ? (items ?? []).map((item) => ({\n label: String(item?.label ?? ''),\n value: item?.value == null ? null : String(item.value),\n disabled: item?.disabled,\n imageUrl: item?.imageUrl ? String(item.imageUrl) : undefined,\n }))\n : (items ?? []).map((item) => ({\n label: String(item?.label ?? ''),\n value: (item as Record<string, unknown>)?.['key'] != null ? String((item as Record<string, unknown>)['key']) : null,\n })),\n }));\n },\n });\n\n this.selectSearchSubscriptions.set(normalizedKey, subscription);\n return search$;\n }\n\n private cleanupSelectSearchStreams(): void {\n for (const subscription of this.selectSearchSubscriptions.values()) {\n subscription.unsubscribe();\n }\n this.selectSearchSubscriptions.clear();\n this.selectSearchChanges.clear();\n }\n\n private applyLookupResponse(field: UiDynamicFormField, response: Record<string, unknown>): void {\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 this.ensureOptionsSourceOptionsLoaded(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 (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 (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 (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 @if (isBarcodeField(field)) {\n <forms-barcode-scanner-input\n [label]=\"field.label || 'Штрихкод'\"\n [placeholder]=\"field.placeholder || 'Відскануйте або введіть штрихкод'\"\n [hint]=\"field.hint || 'Сканер може просто ввести код і натиснути Enter.'\"\n [disabled]=\"isFieldDisabled(field) || isLookupLoading(field.id)\"\n [autoOpen]=\"field.autoOpen !== false\"\n [value]=\"getStringValue(field.id)\"\n [searchButtonLabel]=\"field.searchButtonLabel || 'Знайти'\"\n [openCameraLabel]=\"field.openCameraLabel || 'Відкрити камеру'\"\n [closeCameraLabel]=\"field.closeCameraLabel || 'Закрити камеру'\"\n [cameraTitle]=\"field.cameraTitle || 'Камера'\"\n [cameraStartingLabel]=\"field.cameraStartingLabel || 'Запускаємо камеру…'\"\n [cameraHint]=\"field.cameraHint || 'Наведіть камеру на штрихкод. Після зчитування код підставиться автоматично.'\"\n (valueChange)=\"onBarcodeValueChange(field, $event)\"\n (searchRequested)=\"runBarcodeLookup(field)\"\n (scanned)=\"onBarcodeScanned(field, $event)\"\n ></forms-barcode-scanner-input>\n @if (getLookupError(field.id)) {\n <div class=\"mt-3 rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">\n {{ getLookupError(field.id) }}\n </div>\n }\n }\n\n @if (isInputField(field)) {\n <forms-form-input-host\n [field]=\"field\"\n [value]=\"modelSignal()[field.id]\"\n [disabled]=\"disabled\"\n [error]=\"errors[field.id] ?? ''\"\n [actions]=\"resolveFieldActions(field)\"\n (valueChange)=\"updateField(field.id, $any($event))\"\n (actionTriggered)=\"onFieldActionTriggered(field.id, $event)\"\n ></forms-form-input-host>\n }\n\n @if (field.type === 'select') {\n <forms-select\n [name]=\"field.id\"\n [label]=\"field.label\"\n [placeholder]=\"field.placeholder\"\n [hint]=\"field.hint\"\n [data]=\"field.data\"\n [required]=\"!!field.required\"\n [multiple]=\"!!field.multiple\"\n [disabled]=\"isFieldDisabled(field)\"\n [options]=\"resolveSelectOptions(field)\"\n [searchable]=\"(field.searchable ?? !!field.data) || !!field.optionsSource\"\n [remoteSearch]=\"!!field.optionsSource\"\n (searchChange)=\"field.optionsSource ? onSelectSearchChange(field, $event) : null\"\n [fullWidth]=\"field.fullWidth !== false\"\n [error]=\"errors[field.id] ?? ''\"\n [ngModel]=\"modelSignal()[field.id]\"\n (ngModelChange)=\"onSelectValueChange(field, $event)\">\n </forms-select>\n @if (field.lookupApi && getLookupError(field.id)) {\n <div class=\"mt-3 rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">\n {{ getLookupError(field.id) }}\n </div>\n }\n }\n\n @if (field.type === 'checkbox') {\n <forms-checkbox-input\n [label]=\"field.label\"\n [disabled]=\"isFieldDisabled(field)\"\n [value]=\"!!modelSignal()[field.id]\"\n (valueChange)=\"updateField(field.id, $event)\"\n ></forms-checkbox-input>\n }\n\n @if (field.type === 'color') {\n <forms-color-input\n [name]=\"field.id\"\n [id]=\"field.id\"\n [label]=\"field.label\"\n [hint]=\"field.hint\"\n [required]=\"!!field.required\"\n [disabled]=\"isFieldDisabled(field)\"\n [fullWidth]=\"field.fullWidth !== false\"\n [error]=\"errors[field.id] ?? ''\"\n [ngModel]=\"modelSignal()[field.id]\"\n (ngModelChange)=\"updateField(field.id, $event)\"\n ></forms-color-input>\n }\n\n @if (field.type === 'slug') {\n <forms-slug-input\n [name]=\"field.id\"\n [id]=\"field.id\"\n [label]=\"field.label\"\n [placeholder]=\"field.placeholder\"\n [hint]=\"field.hint\"\n [required]=\"!!field.required\"\n [readonly]=\"!!field.readonly\"\n [disabled]=\"isFieldDisabled(field)\"\n [fullWidth]=\"field.fullWidth !== false\"\n [error]=\"errors[field.id] ?? ''\"\n [ngModel]=\"modelSignal()[field.id]\"\n (ngModelChange)=\"updateField(field.id, $event)\"\n ></forms-slug-input>\n }\n\n @if (field.type === 'photo') {\n <forms-photo-input\n [label]=\"field.label\"\n [hint]=\"field.hint\"\n [accept]=\"field.accept ?? 'image/*'\"\n [multiple]=\"!!field.multiple\"\n [limit]=\"field.limit ?? 0\"\n [disabled]=\"isFieldDisabled(field)\"\n [value]=\"$any(modelSignal()[field.id])\"\n [uploadPhoto]=\"uploadPhoto\"\n (valueChange)=\"updateField(field.id, $event)\"\n (filesChange)=\"filesChange.emit({ fieldId: field.id, files: $event })\"\n (uploadingChange)=\"uploadingChange.emit($event)\"\n ></forms-photo-input>\n }\n @if (field.type === 'file') {\n <forms-file-input\n [label]=\"field.label\"\n [hint]=\"field.hint\"\n [accept]=\"field.accept\"\n [multiple]=\"!!field.multiple\"\n [disabled]=\"isFieldDisabled(field)\"\n [value]=\"$any(modelSignal()[field.id])\"\n (valueChange)=\"updateField(field.id, $event)\"\n (filesChange)=\"filesChange.emit({ fieldId: field.id, files: $event })\"\n ></forms-file-input>\n }\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 { Observable } from 'rxjs';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiDynamicFormComponent } from '../dynamic/ui-dynamic-form.component';\nimport { UiDynamicFormField, UiDynamicFormFieldAction, UiDynamicFormValue } from '../dynamic/ui-dynamic-form.models';\n\nexport interface MaroFormViewAction extends UiDynamicFormFieldAction {\n redirectTo?: string;\n}\n\nexport interface MaroFormViewResponse {\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: 'forms-action-form-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, UiDynamicFormComponent],\n templateUrl: './ui-action-form-modal.component.html',\n})\nexport class UiActionFormModalComponent 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 initialValue = input<Record<string, unknown>>({});\n readonly uploadPhoto = input<((file: File) => Observable<{ imageId: string }>) | null>(null);\n\n readonly closed = output<void>();\n readonly completed = output<unknown>();\n readonly isLoading = signal(false);\n readonly isSubmitting = 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) => String(action.type).toUpperCase() === 'ACTION_SUBMIT' || String(action.type).toUpperCase() === 'ACTION_API'));\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\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 {\n this.closed.emit();\n }\n\n onValueChange(value: UiDynamicFormValue): void {\n this.formValue.set(value);\n }\n\n onLookupCompleted(_event: { fieldId: string; response: Record<string, unknown> }): void {\n // Lookup results are already applied by the dynamic form and emitted via valueChange.\n }\n\n onUploadingChange(uploading: boolean): void {\n this.isUploading.set(uploading);\n }\n\n onFieldActionTriggered(event: { fieldId: string; action: UiDynamicFormFieldAction }): void {\n const endpoint = this.resolveEndpoint(event.action.api);\n if (!endpoint) return;\n\n this.http.request(this.resolveMethod(event.action.method), endpoint, { body: { ...this.formValue(), ...(event.action.payload || {}) } }).subscribe({\n next: (response) => {\n const data = this.extractData(response);\n if (data) this.formValue.update((current) => ({ ...current, ...data }) as UiDynamicFormValue);\n },\n });\n }\n\n confirm(): void {\n if (this.isSubmitting()) return;\n\n const action = this.submitAction();\n const endpoint = this.resolveEndpoint(this.formConfig()?.api || action?.api);\n if (!endpoint) return;\n\n const payload = { ...(this.initialValue() || {}), ...(action?.payload || {}), ...this.formValue() };\n const recordId = String(this.recordId() || '').trim();\n if (recordId && !Object.prototype.hasOwnProperty.call(payload, 'id')) payload['id'] = recordId;\n\n this.isSubmitting.set(true);\n this.http.request(this.resolveMethod(action?.method || (recordId ? 'PATCH' : 'POST')), endpoint, { 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: () => this.isSubmitting.set(false),\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 config = response.form || (response as unknown as MaroFormViewResponse);\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 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 = redirect.replace(/:([a-zA-Z_][a-zA-Z0-9_.]*)/g, (_match, key) => {\n const value = String(key).split('.').reduce<unknown>((current, part) => current && typeof current === 'object' ? (current as Record<string, unknown>)[part] : undefined, data);\n return value == null ? '' : String(value);\n });\n if (target && !target.includes(':')) void this.router.navigateByUrl(target.startsWith('/') ? target : `/${target}`);\n }\n}\n","@if (isOpen()) {\n <div class=\"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/40 p-4 sm:items-center sm:p-6\" role=\"dialog\" aria-modal=\"true\">\n <div class=\"my-2 flex min-h-0 max-h-[calc(100vh-1rem)] w-full flex-col overflow-hidden rounded-2xl bg-slate-50 shadow-2xl sm:my-0 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 <forms-dynamic-form [fields]=\"fields()\" [value]=\"formValue()\" [showSubmit]=\"false\" [uploadPhoto]=\"uploadPhoto()\" (valueChange)=\"onValueChange($event)\" (lookupCompleted)=\"onLookupCompleted($event)\" (uploadingChange)=\"onUploadingChange($event)\" (fieldActionTriggered)=\"onFieldActionTriggered($event)\"></forms-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()\">Cancel</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 { 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';\n\ntype UiInputElement = 'input' | 'textarea';\n\n@Component({\n selector: 'forms-input',\n standalone: true,\n imports: [CommonModule, FormsModule, UiButtonComponent],\n templateUrl: './ui-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UiInputComponent),\n multi: true,\n },\n ],\n})\nexport class UiInputComponent 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() fullWidth = false;\n @Input() autocomplete?: string;\n @Input() readonly = false;\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 = `ui-input-${UiInputComponent.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","<label\n class=\"flex flex-col gap-1 text-[0.65rem] uppercase tracking-[0.3em] text-slate-500\"\n [class.w-full]=\"fullWidth\"\n [attr.for]=\"controlId\"\n>\n @if (label) {\n <span class=\"text-[0.7rem] font-semibold text-slate-600\">\n {{ label }}\n @if (required) {\n <span aria-hidden=\"true\" class=\"text-rose-500\"> *</span>\n }\n </span>\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 <input\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [attr.name]=\"name\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [readonly]=\"readonly\"\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 [attr.id]=\"controlId\"\n [value]=\"value\"\n (input)=\"onValueChange($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n }\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)=\"triggerAction(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=\"text-[0.5rem] text-rose-400\">{{ error }}</p>\n }\n</label>\n\n\n\n","import { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { Observable, of } from 'rxjs';\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: 'forms-photo-gallery-field',\n standalone: true,\n imports: [CommonModule, DragDropModule],\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 UiPhotoGalleryFieldComponent implements OnInit, OnChanges, OnDestroy {\n @Input() label = 'Фото';\n @Input() orderLabel = 'Порядок фото (перетягуй)';\n @Input() imageIds: string[] = [];\n @Input() disabled = false;\n @Input() afterUpload: ((imageId: string) => Observable<unknown>) | null = null;\n @Input() uploadPhoto: ((file: File) => Observable<{ imageId: string }>) | 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 || !this.uploadPhoto) return;\n const entry = this.entries[nextIndex];\n entry.isUploading = true;\n const file = entry.file!;\n this.uploadPhoto(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","<label class=\"flex flex-col gap-1 md:col-span-12\">\n <span class=\"text-sm\">{{ label }}</span>\n <div class=\"text-xs text-slate-500\">Кількість фото: {{ photoCount }}</div>\n</label>\n\n<div class=\"md:col-span-12\">\n <p class=\"mb-2 text-xs uppercase tracking-[0.2em] text-slate-500\">{{ orderLabel }}</p>\n <div 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>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'forms-range-slider',\n standalone: true,\n imports: [CommonModule],\n template: `\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 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 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 `,\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 UiRangeSliderComponent implements OnChanges, AfterViewInit {\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|