@maro-tech/card 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maro-tech-card.mjs","sources":["../../../src/lib/card-events.ts","../../../src/lib/components/card-section-header.component.ts","../../../src/lib/tabs/html/html-tab.component.ts","../../../src/lib/tabs/html/html-tab.component.html","../../../src/lib/tabs/images/images-viewer/images-viewer.component.ts","../../../src/lib/tabs/images/images-viewer/images-viewer.component.html","../../../src/lib/tabs/details-grid/details-grid.component.ts","../../../src/lib/tabs/details-grid/details-grid.component.html","../../../src/lib/tabs/images/images.component.ts","../../../src/lib/tabs/images/images.component.html","../../../src/lib/card-tab-registry.token.ts","../../../src/lib/layouts/panels/ui-card-panels-layout.component.ts","../../../src/lib/layouts/panels/ui-card-panels-layout.component.html","../../../src/lib/layouts/tabs/ui-card-tabs-layout.component.ts","../../../src/lib/layouts/tabs/ui-card-tabs-layout.component.html","../../../src/lib/card.component.ts","../../../src/lib/card.component.html","../../../src/lib/card-host.token.ts","../../../src/lib/card-api.ts","../../../src/lib/tabs/documents/documents.service.ts","../../../src/lib/tabs/documents/upload-modal/documents-upload-modal.component.ts","../../../src/lib/tabs/documents/upload-modal/documents-upload-modal.component.html","../../../src/lib/tabs/documents/text-modal/documents-text-modal.component.ts","../../../src/lib/tabs/documents/text-modal/documents-text-modal.component.html","../../../src/lib/tabs/documents/image-preview-modal/documents-image-preview-modal.component.ts","../../../src/lib/tabs/documents/image-preview-modal/documents-image-preview-modal.component.html","../../../src/lib/tabs/documents/documents.component.ts","../../../src/lib/tabs/documents/documents.component.html","../../../src/lib/tabs/history/history-tab.component.ts","../../../src/lib/tabs/history/history-tab.component.html","../../../src/lib/tabs/table/card-table-services.ts","../../../src/lib/tabs/table/card-table.component.ts","../../../src/lib/tabs/table/card-table.component.html","../../../src/maro-tech-card.ts"],"sourcesContent":["import type { UiEntityCardAction } from './card-host.token';\n\nexport interface CardActionContext {\n entity: string;\n recordId?: string;\n data?: Record<string, unknown> | null;\n}\n\nexport const CARD_ACTION_REQUESTED = 'card.action.requested';\nexport const CARD_ACTION_STARTED = 'card.action.started';\nexport const CARD_ACTION_COMPLETED = 'card.action.completed';\nexport const CARD_ACTION_FINISHED = 'card.action.finished';\nexport const ENTITY_UPDATED = 'entity.updated';\n\nexport interface CardActionRequestedEvent {\n action: UiEntityCardAction;\n context: CardActionContext;\n}\n\nexport interface CardActionLifecycleEvent {\n actionId: string;\n context: CardActionContext;\n}\n\nexport interface EntityUpdatedEvent {\n entity?: string;\n recordId?: string;\n source?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EventBus, UiButtonComponent } from '@maro-tech/core';\nimport type { UiEntityCardAction } from '../card-host.token';\nimport {\n CARD_ACTION_FINISHED,\n CARD_ACTION_REQUESTED,\n CardActionLifecycleEvent,\n CardActionRequestedEvent,\n} from '../card-events';\n\n@Component({\n selector: 'app-card-section-header',\n standalone: true,\n imports: [CommonModule, UiButtonComponent],\n template: `\n @if (variant() === 'tabs') {\n <header class=\"mb-4 flex justify-end\">\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of actions(); track trackAction($index, action); let i = $index) {\n <ui-button\n [variant]=\"i === 0 ? 'primary' : 'ghost'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"isActionPending(action)\"\n (click)=\"onActionClick(action)\"\n >\n {{ isActionPending(action) ? 'Зачекайте...' : action.label }}\n </ui-button>\n }\n </div>\n </header>\n } @else {\n <header class=\"mb-4 flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n @if (title()) {\n <h3 class=\"text-lg font-semibold text-slate-900\">{{ title() }}</h3>\n } @else {\n <span></span>\n }\n\n @if (actions().length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of actions(); track trackAction($index, action); let i = $index) {\n <ui-button\n [variant]=\"i === 0 ? 'primary' : 'ghost'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"isActionPending(action)\"\n (click)=\"onActionClick(action)\"\n >\n {{ isActionPending(action) ? 'Зачекайте...' : action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n `,\n})\nexport class CardSectionHeaderComponent {\n readonly variant = input<'tabs' | 'panels'>('panels');\n readonly title = input<string>('');\n readonly actions = input<UiEntityCardAction[]>([]);\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly data = input<Record<string, unknown> | null>(null);\n\n private readonly eventBus = inject(EventBus);\n private readonly destroyRef = inject(DestroyRef);\n private readonly pendingActionIdSignal = signal('');\n\n constructor() {\n this.eventBus.on<CardActionLifecycleEvent>(CARD_ACTION_FINISHED)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (this.matchesContext(event.context)) {\n this.pendingActionIdSignal.set('');\n }\n });\n }\n\n trackAction(_: number, action: UiEntityCardAction): string {\n return action.id || `${action.label}:${action.type}:${action.api || ''}:${action.formId || ''}`;\n }\n\n isActionPending(action: UiEntityCardAction): boolean {\n const pendingId = String(this.pendingActionIdSignal() || '').trim();\n const actionId = String(action.id || '').trim();\n return !!pendingId && !!actionId && pendingId === actionId;\n }\n\n onActionClick(action: UiEntityCardAction): void {\n const context = {\n entity: this.entity(),\n recordId: this.recordId() || undefined,\n data: this.data(),\n };\n this.pendingActionIdSignal.set(String(action.id || '').trim());\n this.eventBus.emit<CardActionRequestedEvent>(CARD_ACTION_REQUESTED, { action, context });\n }\n\n private matchesContext(context: { entity: string; recordId?: string }): boolean {\n return context.entity === this.entity()\n && (!context.recordId || context.recordId === this.recordId());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input } from '@angular/core';\nimport { EventBus } from '@maro-tech/core';\nimport { UiCardTabConfig } from '../../card.models';\nimport type { UiEntityCardAction } from '../../card-host.token';\nimport { CARD_ACTION_REQUESTED, CardActionRequestedEvent } from '../../card-events';\n\n@Component({\n selector: 'app-card-html-tab',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './html-tab.component.html',\n})\nexport class CardHtmlTabComponent {\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tab = input<UiCardTabConfig | null>(null);\n readonly data = input<Record<string, unknown> | null>(null);\n\n private readonly eventBus = inject(EventBus);\n\n readonly html = computed(() => this.tab()?.html || '');\n\n onClick(event: MouseEvent): void {\n this.dispatchFromEvent(event);\n }\n\n onKeydown(event: Event): void {\n this.dispatchFromEvent(event as KeyboardEvent);\n }\n\n private dispatchFromEvent(event: MouseEvent | KeyboardEvent): void {\n const target = event.target as HTMLElement | null;\n const actionElement = target?.closest?.('[class*=\"card-action-\"]') as HTMLElement | null;\n if (!actionElement) return;\n\n const action = this.resolveAction(actionElement);\n if (!action) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.eventBus.emit<CardActionRequestedEvent>(CARD_ACTION_REQUESTED, {\n action,\n context: {\n entity: this.entity(),\n recordId: this.recordId() || undefined,\n data: this.data(),\n },\n });\n }\n\n private resolveAction(actionElement: HTMLElement | null): UiEntityCardAction | null {\n const tab = this.tab();\n const actions = Array.isArray(tab?.actions) ? tab.actions : [];\n if (!actions.length) return null;\n\n const actionId = Array.from(actionElement?.classList || [])\n .find((className) => className.startsWith('card-action-'))\n ?.slice('card-action-'.length)\n .trim();\n if (!actionId) return null;\n\n return actions.find((item) => String(item.id || '').trim() === actionId) || null;\n }\n}\n","<section\n [attr.data-card-tab-id]=\"tab()?.id || ''\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onKeydown($event)\"\n (keydown.space)=\"onKeydown($event)\"\n>\n <div [innerHTML]=\"html()\"></div>\n</section>\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, effect, input, output, signal } from '@angular/core';\n\n@Component({\n selector: 'app-images-viewer',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './images-viewer.component.html',\n})\nexport class ImagesViewerComponent {\n readonly urls = input<string[]>([]);\n readonly initialIndex = input(0);\n readonly currentIndex = signal(0);\n\n readonly closed = output<void>();\n\n constructor() {\n effect(() => {\n const urls = this.urls();\n if (!urls.length) {\n this.currentIndex.set(0);\n return;\n }\n\n const maxIndex = urls.length - 1;\n const startIndex = Math.max(0, Math.min(this.initialIndex(), maxIndex));\n this.currentIndex.set(startIndex);\n });\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.closed.emit();\n }\n\n @HostListener('document:keydown.arrowleft')\n onArrowLeft(): void {\n this.showPreviousImage();\n }\n\n @HostListener('document:keydown.arrowright')\n onArrowRight(): void {\n this.showNextImage();\n }\n\n closeViewer(): void {\n this.closed.emit();\n }\n\n showPreviousImage(): void {\n const total = this.urls().length;\n if (total <= 1) return;\n this.currentIndex.set((this.currentIndex() - 1 + total) % total);\n }\n\n showNextImage(): void {\n const total = this.urls().length;\n if (total <= 1) return;\n this.currentIndex.set((this.currentIndex() + 1) % total);\n }\n\n get imageViewerTransform(): string {\n return `translate3d(-${this.currentIndex() * 100}%, 0, 0)`;\n }\n\n get imageViewerTransitionStyle(): string {\n return 'transform 320ms cubic-bezier(0.22, 1, 0.36, 1)';\n }\n\n getThumbnailUrl(url: string): string {\n const match = String(url || '').match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : url;\n }\n}\n","<div class=\"fixed inset-0 z-[2300] flex items-center justify-center bg-black/80 p-3 md:p-4\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Перегляд фото\">\n <button type=\"button\" class=\"absolute inset-0\" aria-label=\"Закрити перегляд\" (click)=\"closeViewer()\"></button>\n <div class=\"relative z-[1] flex h-full w-full max-w-[1500px] flex-col items-center justify-center gap-4\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"absolute right-2 top-2 z-20 inline-flex h-11 w-11 items-center justify-center rounded-full bg-white/90 text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.22)] transition hover:bg-white md:right-3 md:top-3\"\n aria-label=\"Закрити\"\n (click)=\"closeViewer()\">\n ✕\n </button>\n\n <div class=\"relative flex min-h-0 w-full flex-1 items-center justify-center overflow-hidden rounded-[18px]\">\n <div class=\"h-full w-full overflow-hidden rounded-[18px]\">\n <div\n class=\"flex h-full w-full\"\n style=\"will-change: transform; backface-visibility: hidden;\"\n [style.transition]=\"imageViewerTransitionStyle\"\n [style.transform]=\"imageViewerTransform\">\n @for (url of urls(); track $index; let idx = $index) {\n <div class=\"flex h-full w-full min-w-full shrink-0 items-center justify-center overflow-hidden\">\n <img\n [src]=\"idx === currentIndex() ? url : getThumbnailUrl(url)\"\n [attr.alt]=\"'Фото ' + (idx + 1)\"\n [attr.loading]=\"idx === currentIndex() ? 'eager' : 'lazy'\"\n decoding=\"async\"\n class=\"block max-h-[74vh] max-w-[96vw] object-contain md:max-h-[78vh]\">\n </div>\n }\n </div>\n </div>\n\n @if (urls().length > 1) {\n <button type=\"button\" class=\"absolute left-0 top-0 z-10 flex h-full w-1/4 min-w-12 items-center justify-start pl-2 md:pl-3\" aria-label=\"Попереднє фото\" (click)=\"showPreviousImage()\">\n <span class=\"inline-flex h-11 w-11 items-center justify-center rounded-full bg-white/90 text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.22)] transition hover:bg-white\">‹</span>\n </button>\n <button type=\"button\" class=\"absolute right-0 top-0 z-10 flex h-full w-1/4 min-w-12 items-center justify-end pr-2 md:pr-3\" aria-label=\"Наступне фото\" (click)=\"showNextImage()\">\n <span class=\"inline-flex h-11 w-11 items-center justify-center rounded-full bg-white/90 text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.22)] transition hover:bg-white\">›</span>\n </button>\n }\n </div>\n\n @if (urls().length > 1) {\n <div class=\"flex w-full flex-col items-center gap-3 pb-1 md:pb-2\">\n <div class=\"flex max-w-[92vw] flex-wrap justify-center gap-2 md:max-w-[80vw]\">\n @for (url of urls(); track url; let idx = $index) {\n <button\n type=\"button\"\n class=\"h-14 w-14 overflow-hidden rounded-xl border bg-white p-1 transition\"\n [class.border-slate-900]=\"idx === currentIndex()\"\n [class.shadow-[0_0_0_2px_rgba(15,23,42,0.16)]]=\"idx === currentIndex()\"\n [class.border-slate-300]=\"idx !== currentIndex()\"\n [attr.aria-label]=\"'Фото ' + (idx + 1)\"\n (click)=\"currentIndex.set(idx)\">\n <img class=\"block aspect-square w-full rounded-lg object-contain\" [src]=\"getThumbnailUrl(url)\" [attr.alt]=\"'Мініатюра ' + (idx + 1)\" loading=\"lazy\" decoding=\"async\">\n </button>\n }\n </div>\n <div class=\"rounded-full bg-white/95 px-3 py-1.5 text-xs font-semibold text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.2)]\">\n {{ currentIndex() + 1 }} / {{ urls().length }}\n </div>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, signal } from '@angular/core';\n\nimport { UiCardTabConfig, UiCardTabField } from '../../card.models';\nimport { ImagesViewerComponent } from '../images/images-viewer/images-viewer.component';\n\ninterface UiDetailsGridDisplayField extends UiCardTabField {\n displayValue: string;\n imageSrc?: string | null;\n}\n\n@Component({\n selector: 'app-details-grid',\n standalone: true,\n imports: [CommonModule, ImagesViewerComponent],\n templateUrl: './details-grid.component.html',\n})\nexport class DetailsGridComponent {\n readonly tab = input<UiCardTabConfig | null>(null);\n readonly hasExplicitColumns = computed(() => this.resolveFields().some((field) => this.isValidColumnSpan(field.col)));\n readonly displayFields = computed<UiDetailsGridDisplayField[]>(() =>\n this.resolveFields().map((field) => ({\n ...field,\n displayValue: this.formatFieldValue(field),\n imageSrc: this.getImageSrc(field),\n }))\n );\n readonly selectedImageSrc = signal<string | null>(null);\n\n openViewer(imageSrc: string): void {\n this.selectedImageSrc.set(imageSrc);\n }\n\n closeViewer(): void {\n this.selectedImageSrc.set(null);\n }\n\n private resolveFields(): UiCardTabField[] {\n const value = this.tab()?.props?.['fields'];\n return Array.isArray(value) ? (value as UiCardTabField[]) : [];\n }\n\n getFieldColumnClass(field: UiCardTabField): string {\n if (!this.isValidColumnSpan(field.col)) return '';\n const span = Math.min(12, Math.trunc(Number(field.col)));\n const classes: Record<number, string> = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n };\n return classes[span] || '';\n }\n\n private isValidColumnSpan(value: number | undefined): boolean {\n const span = Number(value);\n return Number.isFinite(span) && span > 0;\n }\n\n private formatFieldValue(field: UiCardTabField): string {\n const value = field.value;\n if (value == null) return '-';\n if (typeof value === 'boolean') return value ? 'Так' : 'Ні';\n const raw = String(value).trim();\n if (!raw) return '-';\n\n if (field.type === 'date' || field.type === 'datetime') {\n return this.formatDate(raw, field.type === 'datetime');\n }\n if (field.type === 'enum') {\n return this.formatEnum(raw, field.enumMap);\n }\n\n return raw;\n }\n\n private getImageSrc(field: UiCardTabField): string | null {\n if (field.type !== 'image') return null;\n\n const value = field.value;\n if (value == null) return null;\n\n const raw = String(value).trim();\n if (!raw) return null;\n if (/^https?:\\/\\//i.test(raw) || raw.startsWith('/')) {\n return raw;\n }\n\n const base = String(field.imageBaseUrl || '/api/files').trim().replace(/\\/+$/, '');\n return `${base}/${encodeURIComponent(raw)}`;\n }\n\n private formatEnum(raw: string, enumMap?: Record<string, string>): string {\n if (enumMap?.[raw]) {\n return enumMap[raw];\n }\n if (raw === 'true') return 'Так';\n if (raw === 'false') return 'Ні';\n return raw;\n }\n\n private formatDate(value: string, withTime: boolean): string {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n return value;\n }\n\n return new Intl.DateTimeFormat('uk-UA', withTime\n ? { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }\n : { day: '2-digit', month: '2-digit', year: 'numeric' }).format(date);\n }\n}\n","<div class=\"grid gap-4\" [class.grid-cols-1]=\"!hasExplicitColumns()\" [class.sm:grid-cols-3]=\"!hasExplicitColumns()\" [class.sm:grid-cols-12]=\"hasExplicitColumns()\">\n @for (field of displayFields(); track $index) {\n <div class=\"rounded-2xl border border-slate-100 bg-slate-200 p-4\" [ngClass]=\"getFieldColumnClass(field)\" [class.flex]=\"field.type === 'image'\" [class.flex-col]=\"field.type === 'image'\" [class.min-h-64]=\"field.type === 'image'\">\n <p class=\"text-xs uppercase tracking-[0.18em] text-slate-500\">{{ field.label }}</p>\n @if (field.type === 'image') {\n @if (field.imageSrc) {\n <button type=\"button\" class=\"mt-2 block flex-1 cursor-zoom-in overflow-hidden rounded-xl border border-slate-200 bg-white\" [attr.aria-label]=\"'Переглянути ' + field.label\" (click)=\"openViewer(field.imageSrc)\">\n <img [src]=\"field.imageSrc\" [alt]=\"field.label\" class=\"h-full w-full object-cover\" />\n </button>\n } @else {\n <p class=\"mt-2 text-base font-semibold text-slate-900\">-</p>\n }\n } @else {\n <p class=\"mt-2 text-base font-semibold text-slate-900\">{{ field.displayValue ?? '-' }}</p>\n }\n </div>\n }\n</div>\n\n@if (selectedImageSrc(); as imageSrc) {\n <app-images-viewer [urls]=\"[imageSrc]\" (closed)=\"closeViewer()\" />\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, signal } from '@angular/core';\nimport { UiCardTabConfig } from '../../card.models';\nimport { ImagesViewerComponent } from './images-viewer/images-viewer.component';\n\n@Component({\n selector: 'app-images',\n standalone: true,\n imports: [CommonModule, ImagesViewerComponent],\n templateUrl: './images.component.html',\n})\nexport class ImagesComponent {\n readonly tab = input<UiCardTabConfig | null>(null);\n readonly data = input<Record<string, unknown> | null>(null);\n\n readonly isViewerOpen = signal(false);\n readonly viewerStartIndex = signal(0);\n\n readonly resolvedImageIds = computed(() => {\n const tab = this.tab();\n const props = tab?.props || {};\n const explicit = this.normalizeIds(props['imageIds']);\n if (explicit.length) return explicit;\n\n const key = String(props['images'] || 'images').trim();\n const value = key ? this.data()?.[key] : null;\n return this.normalizeIds(value);\n });\n\n readonly resolvedImageUrls = computed(() => {\n const tab = this.tab();\n const props = tab?.props || {};\n const explicit = Array.isArray(props['imageUrls'])\n ? props['imageUrls'].filter((item): item is string => typeof item === 'string')\n : [];\n if (explicit.length) return explicit;\n return this.resolvedImageIds().map((id) => this.resolveImageUrl(id)).filter((item): item is string => !!item);\n });\n\n readonly resolvedImagePreviewUrls = computed(() => this.resolvedImageUrls().map((url) => this.resolvePreviewUrl(url)));\n\n readonly resolvedImageMaxHeight = computed(() => {\n const value = Number(this.tab()?.props?.['maxHeight']);\n return Number.isFinite(value) && value > 0 ? value : 400;\n });\n\n openViewer(index: number): void {\n this.viewerStartIndex.set(Math.max(0, index));\n if (this.resolvedImageUrls().length) this.isViewerOpen.set(true);\n }\n\n closeViewer(): void {\n this.isViewerOpen.set(false);\n }\n\n private resolveImageUrl(imageIdOrUrl: string): string {\n const value = String(imageIdOrUrl || '').trim();\n if (!value) {\n return '';\n }\n if (value.startsWith('http://') || value.startsWith('https://') || value.startsWith('data:') || value.startsWith('/')) {\n return value;\n }\n\n const base = String(this.tab()?.props?.['imageBaseUrl'] || '/api/files').trim().replace(/\\/+$/, '');\n return `${base}/${encodeURIComponent(value)}`;\n }\n\n private resolvePreviewUrl(url: string): string {\n const match = url.match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : url;\n }\n\n private normalizeIds(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return Array.from(new Set(\n value\n .map((item) => String(item || '').trim())\n .filter(Boolean)\n ));\n }\n}\n","@if (resolvedImageUrls().length === 0) {\n <p class=\"text-sm text-slate-500\">Фото відсутні</p>\n} @else {\n <div\n class=\"grid gap-3\"\n [ngClass]=\"resolvedImageUrls().length === 1 ? 'grid-cols-1' : 'sm:grid-cols-2 lg:grid-cols-4'\"\n >\n @for (image of resolvedImagePreviewUrls(); track image; let i = $index) {\n <button\n type=\"button\"\n class=\"group block overflow-hidden rounded-2xl border border-slate-200 bg-slate-50 text-left\"\n [attr.aria-label]=\"'Переглянути фото ' + (i + 1)\"\n (click)=\"openViewer(i)\"\n >\n <img\n [src]=\"image\"\n [alt]=\"'Фото ' + (i + 1)\"\n loading=\"lazy\"\n decoding=\"async\"\n class=\"w-full object-cover transition duration-200 group-hover:scale-[1.02]\"\n [style.max-height.px]=\"resolvedImageMaxHeight()\"\n [ngClass]=\"resolvedImageUrls().length === 1 ? 'h-auto' : 'h-48'\"\n />\n </button>\n }\n </div>\n\n @if (isViewerOpen()) {\n <app-images-viewer\n [urls]=\"resolvedImageUrls()\"\n [initialIndex]=\"viewerStartIndex()\"\n (closed)=\"closeViewer()\"\n ></app-images-viewer>\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { UiCardTabConfig } from './card.models';\n\nexport interface UiCardTabRegistration {\n key: string;\n component: Type<unknown>;\n resolveInputs?: (tab: UiCardTabConfig, data?: Record<string, unknown> | null) => Record<string, unknown>;\n}\n\nexport const UI_CARD_TAB_REGISTRY = new InjectionToken<UiCardTabRegistration[]>('UI_CARD_TAB_REGISTRY');\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, forwardRef, inject, input, signal, Type } from '@angular/core';\n\nimport { CardComponent } from '../../card.component';\nimport { CardSectionHeaderComponent } from '../../components/card-section-header.component';\nimport { CardHtmlTabComponent } from '../../tabs/html/html-tab.component';\nimport { DetailsGridComponent } from '../../tabs/details-grid/details-grid.component';\nimport { ImagesComponent } from '../../tabs/images/images.component';\nimport type { UiEntityCardAction } from '../../card-host.token';\nimport { UiCardTabConfig, UiCardLayout } from '../../card.models';\nimport { UI_CARD_TAB_REGISTRY, UiCardTabRegistration } from '../../card-tab-registry.token';\n\ntype NestedCardConfig = {\n tabs: UiCardTabConfig[];\n layout: UiCardLayout;\n};\n\n@Component({\n selector: 'app-ui-card-panels-layout',\n standalone: true,\n imports: [CommonModule, forwardRef(() => CardComponent), CardSectionHeaderComponent, CardHtmlTabComponent, DetailsGridComponent, ImagesComponent],\n templateUrl: './ui-card-panels-layout.component.html',\n})\nexport class UiCardPanelsLayoutComponent {\n private readonly registry: UiCardTabRegistration[] = inject(UI_CARD_TAB_REGISTRY, { optional: true }) || [];\n\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tabs = input<UiCardTabConfig[]>([]);\n readonly data = input<Record<string, unknown> | null>(null);\n readonly embedded = input(false);\n\n readonly firstTab = computed(() => this.tabs()[0] || null);\n\n getActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n const value = tab.actions;\n return Array.isArray(value) ? value : [];\n }\n\n getVisibleActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n return this.getActions(tab).filter((action) => !action.hidden);\n }\n\n shouldShowPanelHeader(tab: UiCardTabConfig): boolean {\n return !this.embedded() && !tab.html && tab.component !== 'html' && tab.header !== false;\n }\n\n getColSpanClass(tab: UiCardTabConfig): string {\n if (tab.col == null) return 'md:col-span-12';\n\n const raw = Number(tab.col);\n const span = !Number.isFinite(raw) || raw <= 0 ? 12 : Math.min(12, Math.trunc(raw));\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] || 'md:col-span-12';\n }\n\n getNestedCardConfig(tab: UiCardTabConfig): NestedCardConfig | null {\n if (Array.isArray(tab.tabs) && tab.tabs.length) {\n return { tabs: tab.tabs, layout: tab.layout || 'panels' };\n }\n return null;\n }\n\n getNestedPanels(tab: UiCardTabConfig): UiCardTabConfig[] | null {\n return Array.isArray(tab.panels) && tab.panels.length ? tab.panels : null;\n }\n\n getRegisteredComponent(tab: UiCardTabConfig): Type<unknown> | null {\n const key = tab.component;\n if (!key || key === 'images' || key === 'detailsGrid' || key === 'html') return null;\n const found = this.registry.find((item) => item.key === key);\n return found?.component || null;\n }\n\n getRegisteredInputs(tab: UiCardTabConfig): Record<string, unknown> {\n const key = tab.component;\n if (!key) return { tab };\n const found: UiCardTabRegistration | undefined = this.registry.find((item) => item.key === key);\n if (!found?.resolveInputs) return { tab };\n return found.resolveInputs(tab, this.data());\n }\n}\n","@if (tabs().length) {\n @if (!embedded()) {\n <section class=\"space-y-4\">\n <ng-container *ngTemplateOutlet=\"panelGrid\"></ng-container>\n </section>\n } @else {\n <ng-container *ngTemplateOutlet=\"panelGrid\"></ng-container>\n }\n}\n\n<ng-template #panelGrid>\n <div class=\"grid grid-cols-1 gap-4 md:grid-cols-12\">\n @for (tab of tabs(); track tab.id) {\n <section\n [class.rounded-3xl]=\"!embedded()\"\n [class.border]=\"!embedded()\"\n [class.border-slate-200]=\"!embedded()\"\n [class.bg-white]=\"!embedded()\"\n [class.p-6]=\"!embedded()\"\n [class.min-w-0]=\"embedded()\"\n [ngClass]=\"getColSpanClass(tab)\"\n [attr.data-card-panel-id]=\"tab.id\"\n >\n @if (shouldShowPanelHeader(tab)) {\n <app-card-section-header\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [data]=\"data()\"\n [title]=\"tab.title\"\n [actions]=\"getVisibleActions(tab)\"\n ></app-card-section-header>\n }\n\n @if (getNestedCardConfig(tab); as nestedCard) {\n <app-card [entity]=\"entity()\" [recordId]=\"recordId()\" [tabs]=\"nestedCard.tabs\" [data]=\"data()\" [layout]=\"nestedCard.layout\"></app-card>\n } @else if (getNestedPanels(tab); as nestedPanels) {\n <app-card [entity]=\"entity()\" [recordId]=\"recordId()\" [tabs]=\"nestedPanels\" [data]=\"data()\" layout=\"panels\" [embedded]=\"true\"></app-card>\n } @else if (tab.component === 'detailsGrid') {\n <app-details-grid [tab]=\"tab\"></app-details-grid>\n } @else if (tab.component === 'images') {\n <app-images [tab]=\"tab\" [data]=\"data()\"></app-images>\n } @else if (tab.component === 'html') {\n <app-card-html-tab [tab]=\"tab\" [entity]=\"entity()\" [recordId]=\"recordId()\" [data]=\"data()\"></app-card-html-tab>\n } @else if (getRegisteredComponent(tab); as customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: getRegisteredInputs(tab)\"></ng-container>\n }\n </section>\n }\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, DestroyRef, forwardRef, inject, input, OnInit, signal, Type } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { CardComponent } from '../../card.component';\nimport { CardSectionHeaderComponent } from '../../components/card-section-header.component';\nimport { CardHtmlTabComponent } from '../../tabs/html/html-tab.component';\nimport { DetailsGridComponent } from '../../tabs/details-grid/details-grid.component';\nimport { ImagesComponent } from '../../tabs/images/images.component';\nimport type { UiEntityCardAction } from '../../card-host.token';\nimport { UiCardTabConfig } from '../../card.models';\nimport { UI_CARD_TAB_REGISTRY, UiCardTabRegistration } from '../../card-tab-registry.token';\n\n@Component({\n selector: 'app-ui-card-tabs-layout',\n standalone: true,\n imports: [CommonModule, forwardRef(() => CardComponent), CardSectionHeaderComponent, CardHtmlTabComponent, ImagesComponent, DetailsGridComponent],\n templateUrl: './ui-card-tabs-layout.component.html',\n})\nexport class UiCardTabsLayoutComponent implements OnInit {\n private readonly registry: UiCardTabRegistration[] = inject(UI_CARD_TAB_REGISTRY, { optional: true }) || [];\n private readonly destroyRef = inject(DestroyRef);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tabs = input<UiCardTabConfig[]>([]);\n readonly data = input<Record<string, unknown> | null>(null);\n readonly activeTabId = signal<string>('');\n\n ngOnInit(): void {\n this.route.queryParamMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params) => {\n const tabId = params.get('tab');\n if (tabId) this.activeTabId.set(tabId);\n });\n }\n\n readonly activeTab = computed(() => {\n const items = this.tabs() || [];\n if (!items.length) return null;\n const currentId = this.activeTabId();\n return items.find((item) => item.id === currentId) || items[0];\n });\n\n setActiveTab(id: string): void {\n this.activeTabId.set(id);\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { tab: id },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n getActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n const value = tab.actions;\n return Array.isArray(value) ? value : [];\n }\n\n getVisibleActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n return this.getActions(tab).filter((action) => !action.hidden);\n }\n\n getColSpan(tab: UiCardTabConfig): number {\n if (tab.col == null) return 12;\n\n const raw = Number(tab.col);\n if (!Number.isFinite(raw) || raw <= 0) return 12;\n return Math.min(12, Math.trunc(raw));\n }\n\n getRegisteredComponent(tab: UiCardTabConfig): Type<unknown> | null {\n const key = tab.component;\n if (!key || key === 'images' || key === 'detailsGrid' || key === 'html') return null;\n const found = this.registry.find((item) => item.key === key);\n return found?.component || null;\n }\n\n getRegisteredInputs(tab: UiCardTabConfig): Record<string, unknown> {\n const key = tab.component;\n if (!key) return { tab };\n const found: UiCardTabRegistration | undefined = this.registry.find((item) => item.key === key);\n if (!found?.resolveInputs) return { tab };\n return found.resolveInputs(tab, this.data());\n }\n}\n","@if (tabs().length) {\n <section class=\"space-y-4\">\n <nav class=\"flex flex-wrap gap-2\" aria-label=\"Card tabs\">\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"rounded-xl border px-4 py-2 text-sm font-medium transition\"\n [class.border-slate-900]=\"activeTab()?.id === tab.id\"\n [class.bg-slate-900]=\"activeTab()?.id === tab.id\"\n [class.text-white]=\"activeTab()?.id === tab.id\"\n [class.border-slate-200]=\"activeTab()?.id !== tab.id\"\n [class.bg-white]=\"activeTab()?.id !== tab.id\"\n [class.text-slate-700]=\"activeTab()?.id !== tab.id\"\n (click)=\"setActiveTab(tab.id)\"\n >\n {{ tab.title }}\n </button>\n }\n </nav>\n\n @if (activeTab(); as tab) {\n <section\n [attr.data-card-tab-id]=\"tab.id\"\n >\n @if (getVisibleActions(tab).length) {\n <app-card-section-header\n variant=\"tabs\"\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [data]=\"data()\"\n [actions]=\"getVisibleActions(tab)\"\n ></app-card-section-header>\n }\n\n @if (tab.tabs?.length) {\n <app-card [entity]=\"entity()\" [recordId]=\"recordId()\" [tabs]=\"tab.tabs || []\" [data]=\"data()\" [layout]=\"tab.layout || 'panels'\"></app-card>\n } @else if (tab.component === 'images') {\n <app-images\n [tab]=\"tab\"\n [data]=\"data()\"\n ></app-images>\n } @else if (tab.component === 'detailsGrid') {\n <app-details-grid [tab]=\"tab\"></app-details-grid>\n } @else if (tab.component === 'html') {\n <app-card-html-tab [tab]=\"tab\" [entity]=\"entity()\" [recordId]=\"recordId()\" [data]=\"data()\"></app-card-html-tab>\n } @else if (getRegisteredComponent(tab); as customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: getRegisteredInputs(tab)\"></ng-container>\n }\n </section>\n }\n </section>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, input } from '@angular/core';\nimport { UiCardPanelsLayoutComponent } from './layouts/panels/ui-card-panels-layout.component';\nimport { UiCardTabsLayoutComponent } from './layouts/tabs/ui-card-tabs-layout.component';\nimport { UiCardLayoutInput, UiCardTabConfig } from './card.models';\n\n@Component({\n selector: 'app-card',\n standalone: true,\n imports: [CommonModule, forwardRef(() => UiCardTabsLayoutComponent), forwardRef(() => UiCardPanelsLayoutComponent)],\n templateUrl: './card.component.html',\n})\nexport class CardComponent {\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tabs = input<UiCardTabConfig[]>([]);\n readonly data = input<Record<string, unknown> | null>(null);\n readonly layout = input<UiCardLayoutInput>('panels');\n readonly embedded = input(false);\n\n}\n","@if (layout() === 'panels') {\n <app-ui-card-panels-layout\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [tabs]=\"tabs()\"\n [data]=\"data()\"\n [embedded]=\"embedded()\"\n ></app-ui-card-panels-layout>\n} @else {\n <app-ui-card-tabs-layout\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [tabs]=\"tabs()\"\n [data]=\"data()\"\n ></app-ui-card-tabs-layout>\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport type { UiCardLayoutInput } from './card.models';\n\nexport type ApiPluginMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\nexport interface ApiPluginConfig {\n api: string;\n method?: ApiPluginMethod;\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface UiEntityCardAction {\n id?: string;\n label: string;\n type: string;\n icon?: string;\n hidden?: boolean;\n html?: string;\n component?: string;\n formId?: string;\n size?: 'sm' | 'md' | 'lg';\n api?: string;\n template?: string;\n method?: ApiPluginMethod;\n title?: string;\n text?: string;\n submit?: boolean | string;\n payload?: Record<string, unknown>;\n redirectEntity?: string;\n condition?: string;\n}\n\nexport interface UiEntityCardTab {\n id: string;\n title: string;\n col?: number;\n layout?: UiCardLayoutInput;\n component?: string;\n html?: string;\n tabs?: UiEntityCardTab[];\n panels?: UiEntityCardTab[];\n actions?: UiEntityCardAction[];\n props?: Record<string, unknown> & {\n imageUrls?: string[];\n imageIds?: string[];\n images?: string;\n recordId?: string;\n recordIdKey?: string;\n imageBaseUrl?: string;\n fields?: Array<Record<string, unknown>>;\n warehouseId?: number | string;\n [key: string]: unknown;\n };\n}\n\nexport interface UiEntityCardResponse {\n meta?: Record<string, unknown>;\n title: string;\n layout?: UiCardLayoutInput;\n actions?: UiEntityCardAction[];\n viewActions?: {\n read: boolean;\n create: boolean;\n edit: boolean;\n delete: boolean;\n hasFormTemplate: boolean;\n };\n tabs?: UiEntityCardTab[];\n data?: Record<string, unknown>;\n}\n\nexport interface UiEntityCardHost {\n getCardView(entity: string, id: string): Observable<UiEntityCardResponse>;\n getFormView(entity: string, id: string): Observable<Record<string, unknown>>;\n callApi(config: ApiPluginConfig): Observable<unknown>;\n deleteCard(entity: string, id: string): Observable<void>;\n notify(message: string, variant: 'success' | 'error' | 'warning', durationMs?: number): void;\n goBack(entity: string, queryParams?: Record<string, unknown>, returnUrl?: string): void;\n goToEdit(entity: string, id: string): void;\n}\n\nexport const UI_ENTITY_CARD_HOST = new InjectionToken<UiEntityCardHost>('UI_ENTITY_CARD_HOST');\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { InjectionToken, Injectable, inject } from '@angular/core';\nimport { Observable, shareReplay } from 'rxjs';\n\nexport const UI_CARD_API_BASE_URL = new InjectionToken<string>('UI_CARD_API_BASE_URL', { factory: () => '' });\n\nconst apiUrl = (baseUrl: string, path: string): string => `${String(baseUrl || '').replace(/\\/$/, '')}${path}`;\n\nexport interface CardDictionarySuggestItem { key: string; label: string; imageId?: string | null; }\n\n@Injectable({ providedIn: 'root' })\nexport class CardDictionaryService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n getSuggestByName(name: string): Observable<CardDictionarySuggestItem[]> {\n return this.http.get<CardDictionarySuggestItem[]>(apiUrl(this.baseUrl, `/api/suggest/${encodeURIComponent(name)}`));\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardCurrentUserService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n private readonly user$ = this.http.get<{ role?: string }>(apiUrl(this.baseUrl, '/api/users/me'), { withCredentials: true }).pipe(shareReplay(1));\n getCurrentUser(): Observable<{ role?: string }> { return this.user$; }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardImageService {\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n getPhotoLink(id: string): string | undefined {\n return id ? apiUrl(this.baseUrl, `/api/files/${encodeURIComponent(id)}/preview?scale=25`) : undefined;\n }\n}\n\nexport const cardApiResourceUrl = (baseUrl: string, path: string): string => apiUrl(baseUrl, path);\nexport const cardApiParams = (params: Record<string, string | number | undefined>): HttpParams =>\n Object.entries(params).reduce((result, [key, value]) => value == null ? result : result.set(key, String(value)), new HttpParams());\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UI_CARD_API_BASE_URL, cardApiParams, cardApiResourceUrl } from '../../card-api';\n\nexport interface UiEntityDocumentFile {\n id: string;\n entity: string;\n entityId: string;\n fileId: string;\n name: string | null;\n type: string;\n size: number | string;\n documentTypeId?: string | null;\n documentTypeLabel?: string | null;\n text?: string | null;\n recognitionStatus?: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | null;\n createdAt?: string;\n updatedAt?: string;\n downloadUrl: string;\n}\n\nexport interface UiEntityDocumentRecognitionStatus {\n id: string;\n text?: string | null;\n recognitionStatus?: UiEntityDocumentFile['recognitionStatus'];\n updatedAt?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class UiEntityDocumentsService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n\n list(entity: string, entityId: string): Observable<UiEntityDocumentFile[]> {\n const params = cardApiParams({ entity, entityId });\n\n return this.http.get<UiEntityDocumentFile[]>(cardApiResourceUrl(this.baseUrl, '/api/entity-files'), { params });\n }\n\n recognitionStatus(id: string): Observable<UiEntityDocumentRecognitionStatus> {\n return this.http.get<UiEntityDocumentRecognitionStatus>(\n cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}/recognition-status`),\n );\n }\n\n upload(file: File): Observable<{ id: string }> {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('fileName', file.name);\n return this.http.post<{ id: string }>(cardApiResourceUrl(this.baseUrl, '/api/files'), formData);\n }\n\n attach(payload: { entity: string; entityId: string; fileId: string; documentTypeId?: string | null }): Observable<UiEntityDocumentFile> {\n return this.http.post<UiEntityDocumentFile>(cardApiResourceUrl(this.baseUrl, '/api/entity-files'), payload);\n }\n\n recognize(id: string): Observable<UiEntityDocumentFile> {\n return this.http.post<UiEntityDocumentFile>(cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}/recognize`), {});\n }\n\n rename(id: string, name: string): Observable<UiEntityDocumentFile> {\n return this.http.patch<UiEntityDocumentFile>(cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}`), { name });\n }\n\n remove(id: string): Observable<void> {\n return this.http.delete<void>(cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}`));\n }\n\n resolveDownloadUrl(fileId: string): string {\n return cardApiResourceUrl(this.baseUrl, `/api/files/${encodeURIComponent(fileId)}`);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, ViewChild, effect, inject, input, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { forkJoin, switchMap } from 'rxjs';\nimport { LucideAngularModule } from 'lucide-angular';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiModalComponent } from '@maro-tech/core';\nimport { UiToastService } from '@maro-tech/core';\nimport { UiSelectComponent } from '@maro-tech/form';\nimport { UiEntityDocumentsService } from '../documents.service';\n\n@Component({\n selector: 'app-documents-upload-modal',\n standalone: true,\n imports: [CommonModule, FormsModule, LucideAngularModule, UiButtonComponent, UiModalComponent, UiSelectComponent],\n templateUrl: './documents-upload-modal.component.html',\n})\nexport class DocumentsUploadModalComponent {\n readonly isOpen = input(false);\n readonly entity = input<string>('');\n readonly id = input<string>('');\n readonly closed = output<void>();\n readonly saved = output<void>();\n\n readonly documentTypeId = signal<string | null>(null);\n readonly fileNames = signal<string[]>([]);\n readonly isUploading = signal(false);\n\n @ViewChild('uploadFileInput') private uploadFileInput?: ElementRef<HTMLInputElement>;\n\n private readonly documentsService = inject(UiEntityDocumentsService);\n private readonly toast = inject(UiToastService);\n private uploadFiles: File[] = [];\n\n private readonly isOpenEffect = effect(() => {\n if (!this.isOpen()) {\n this.resetState();\n }\n });\n\n close(): void {\n this.closed.emit();\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement | null;\n const files = Array.from(input?.files ?? []);\n this.uploadFiles = files;\n this.fileNames.set(files.map((file) => file.name));\n }\n\n onDocumentTypeChange(value: string | string[] | null): void {\n this.documentTypeId.set(Array.isArray(value) ? value[0] ?? null : value);\n }\n\n submitUpload(): void {\n const entity = String(this.entity() || '').trim();\n const id = String(this.id() || '').trim();\n if (!entity || !id) {\n this.toast.show('Немає entity або id запису', 'warning', 2400);\n return;\n }\n\n if (!this.uploadFiles.length) {\n this.toast.show('Оберіть файл для завантаження', 'warning', 2400);\n return;\n }\n\n this.isUploading.set(true);\n forkJoin(\n this.uploadFiles.map((file) =>\n this.documentsService.upload(file).pipe(\n switchMap((result) =>\n this.documentsService.attach({\n entity,\n entityId: id,\n fileId: result.id,\n documentTypeId: this.documentTypeId(),\n })\n )\n )\n )\n ).subscribe({\n next: () => {\n this.toast.show(this.uploadFiles.length > 1 ? `Додано документів: ${this.uploadFiles.length}` : 'Документ додано', 'success', 2200);\n this.isUploading.set(false);\n this.saved.emit();\n this.closed.emit();\n },\n error: (error) => {\n this.toast.show(error?.error?.message || 'Не вдалося додати документи', 'error', 3200);\n this.isUploading.set(false);\n },\n });\n }\n\n private resetState(): void {\n this.documentTypeId.set(null);\n this.fileNames.set([]);\n this.isUploading.set(false);\n this.uploadFiles = [];\n if (this.uploadFileInput) {\n this.uploadFileInput.nativeElement.value = '';\n }\n }\n}\n","<core-modal\n title=\"Додати документ\"\n [isOpen]=\"isOpen()\"\n (closed)=\"close()\"\n>\n <div class=\"space-y-4\">\n <forms-select\n [data]=\"'doc_type'\"\n name=\"uploadDocumentTypeId\"\n label=\"Тип документа\"\n hint=\"Необов'язково\"\n [ngModel]=\"documentTypeId()\"\n (ngModelChange)=\"onDocumentTypeChange($event)\"\n placeholder=\"Тип документа\"\n [fullWidth]=\"true\"\n [searchable]=\"true\"\n ></forms-select>\n\n <div class=\"space-y-2\">\n <label class=\"block text-sm font-medium text-slate-700\" for=\"document-files\">Файли</label>\n <input\n #uploadFileInput\n id=\"document-files\"\n type=\"file\"\n class=\"block w-full rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-sm text-slate-900 outline-none transition 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 focus:border-slate-400 focus:ring-2 focus:ring-slate-200\"\n multiple\n (change)=\"onFilesSelected($event)\"\n />\n @if (fileNames().length) {\n <div class=\"rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-600\">\n @for (fileName of fileNames(); track fileName) {\n <div class=\"truncate\">{{ fileName }}</div>\n }\n </div>\n } @else {\n <p class=\"text-xs text-slate-500\">Можна обрати один або декілька файлів.</p>\n }\n </div>\n </div>\n\n <div slot=\"footer\" class=\"flex justify-end gap-2\">\n <ui-button variant=\"ghost\" [disabled]=\"isUploading()\" (click)=\"close()\">Скасувати</ui-button>\n <ui-button variant=\"primary\" [disabled]=\"isUploading()\" (click)=\"submitUpload()\">\n {{ isUploading() ? 'Завантаження...' : 'Зберегти' }}\n </ui-button>\n </div>\n</core-modal>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiModalComponent } from '@maro-tech/core';\nimport { UiEntityDocumentFile } from '../documents.service';\n\n@Component({\n selector: 'app-documents-text-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, UiModalComponent],\n templateUrl: './documents-text-modal.component.html',\n})\nexport class DocumentsTextModalComponent {\n readonly isOpen = input(false);\n readonly document = input<UiEntityDocumentFile | null>(null);\n readonly closed = output<void>();\n readonly recognizeRequested = output<void>();\n\n close(): void {\n this.closed.emit();\n }\n\n requestRecognize(): void {\n this.recognizeRequested.emit();\n }\n\n isImage(): boolean {\n return String(this.document()?.type || '').toLowerCase().startsWith('image/');\n }\n\n hasDocumentHtml(): boolean {\n return !!String(this.document()?.text || '').trim();\n }\n\n getDocumentHtml(): string {\n const text = String(this.document()?.text || '').trim();\n if (!text) {\n return '';\n }\n if (this.looksLikeHtml(text)) {\n return text;\n }\n\n return this.escapeHtml(text).replace(/\\r?\\n/g, '<br>');\n }\n\n private looksLikeHtml(value: string): boolean {\n return /<\\/?[a-z][\\s\\S]*>/i.test(value);\n }\n\n private escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n}\n","<core-modal\n title=\"Розпізнані дані\"\n size=\"lg\"\n [isOpen]=\"isOpen()\"\n (closed)=\"close()\"\n>\n <div class=\"space-y-3\">\n @if (hasDocumentHtml()) {\n <div\n class=\"max-h-[32rem] overflow-auto rounded-xl border border-slate-200 bg-slate-50 px-4 py-4 text-sm text-slate-900\"\n [innerHTML]=\"getDocumentHtml()\"\n ></div>\n } @else {\n <div class=\"rounded-xl border border-dashed border-slate-200 bg-slate-50 px-4 py-6 text-sm text-slate-500\">\n Дані ще не розпізнані. Натисни “Розпізнати дані”.\n </div>\n }\n </div>\n\n <div slot=\"footer\" class=\"flex justify-end gap-2\">\n @if (isImage()) {\n <ui-button variant=\"secondary\" (click)=\"requestRecognize()\">Розпізнати ще раз</ui-button>\n }\n <ui-button variant=\"primary\" (click)=\"close()\">Закрити</ui-button>\n </div>\n</core-modal>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiModalComponent } from '@maro-tech/core';\nimport { UiEntityDocumentFile } from '../documents.service';\n\n@Component({\n selector: 'app-documents-image-preview-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, UiModalComponent],\n templateUrl: './documents-image-preview-modal.component.html',\n})\nexport class DocumentsImagePreviewModalComponent {\n readonly isOpen = input(false);\n readonly document = input<UiEntityDocumentFile | null>(null);\n readonly closed = output<void>();\n\n close(): void {\n this.closed.emit();\n }\n\n getPreviewUrl(url: string): string {\n const match = String(url || '').match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : url;\n }\n}\n","<core-modal\n [title]=\"document()?.name || 'Перегляд документа'\"\n size=\"lg\"\n [isOpen]=\"isOpen()\"\n (closed)=\"close()\"\n>\n @if (document()) {\n <div class=\"overflow-hidden rounded-2xl bg-slate-100\">\n <img\n [src]=\"getPreviewUrl(document()!.downloadUrl)\"\n [alt]=\"document()!.name || 'Документ'\"\n decoding=\"async\"\n class=\"max-h-[75vh] w-full object-contain\"\n >\n </div>\n }\n\n <div slot=\"footer\" class=\"flex justify-end gap-2\">\n <ui-button variant=\"primary\" (click)=\"close()\">Закрити</ui-button>\n </div>\n</core-modal>\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, effect, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { forkJoin, of, Subscription, timer } from 'rxjs';\nimport { catchError, exhaustMap, finalize, map, takeUntil, takeWhile } from 'rxjs/operators';\nimport { Eye, FileText, LucideAngularModule, Plus, Sparkles, Trash } from 'lucide-angular';\nimport { CardCurrentUserService, CardDictionaryService } from '../../card-api';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiToastService } from '@maro-tech/core';\nimport { UiConfirmService } from '@maro-tech/core';\nimport { UiEntityDocumentsService, UiEntityDocumentFile, UiEntityDocumentRecognitionStatus } from './documents.service';\nimport { DocumentsUploadModalComponent } from './upload-modal/documents-upload-modal.component';\nimport { UiSelectOption } from '@maro-tech/form';\nimport { DocumentsTextModalComponent } from './text-modal/documents-text-modal.component';\nimport { DocumentsImagePreviewModalComponent } from './image-preview-modal/documents-image-preview-modal.component';\n\nconst DOCUMENT_TYPE_DICTIONARY = 'doc_type';\nconst RECOGNITION_POLLING_TIMEOUT_MS = 5 * 60 * 1000;\n\n@Component({\n selector: 'app-documents',\n standalone: true,\n imports: [\n CommonModule,\n LucideAngularModule,\n UiButtonComponent,\n DocumentsUploadModalComponent,\n DocumentsTextModalComponent,\n DocumentsImagePreviewModalComponent,\n ],\n templateUrl: './documents.component.html',\n})\nexport class DocumentsComponent {\n readonly entity = input<string>('');\n readonly id = input<string>('');\n readonly documentTypeDictionary = DOCUMENT_TYPE_DICTIONARY;\n\n readonly documents = signal<UiEntityDocumentFile[]>([]);\n readonly documentTypeOptions = signal<UiSelectOption[]>([]);\n readonly isUploadOpen = signal(false);\n readonly isLoading = signal(false);\n readonly recognizingDocumentId = signal<string | null>(null);\n readonly isTextOpen = signal(false);\n readonly isImagePreviewOpen = signal(false);\n readonly textTarget = signal<UiEntityDocumentFile | null>(null);\n readonly imagePreviewTarget = signal<UiEntityDocumentFile | null>(null);\n readonly deletingDocumentId = signal<string | null>(null);\n readonly eyeIcon = Eye;\n readonly fileIcon = FileText;\n readonly plusIcon = Plus;\n readonly sparkleIcon = Sparkles;\n readonly deleteIcon = Trash;\n readonly isAdmin = toSignal(\n inject(CardCurrentUserService).getCurrentUser().pipe(\n map((user) => String(user.role || '').trim().toUpperCase() === 'ADMIN'),\n ),\n { initialValue: false },\n );\n\n private readonly documentsService = inject(UiEntityDocumentsService);\n private readonly dictionaryService = inject(CardDictionaryService);\n private readonly toast = inject(UiToastService);\n private readonly confirmService = inject(UiConfirmService);\n private readonly destroyRef = inject(DestroyRef);\n private loadedDocumentTypeDictionary = '';\n private recognitionPolling?: Subscription;\n private readonly reloadEffect = effect(() => {\n this.entity();\n this.id();\n this.loadDocuments();\n });\n private readonly documentTypeDictionaryEffect = effect(() => {\n const dictionaryName = this.documentTypeDictionary.trim();\n if (!dictionaryName) {\n this.loadedDocumentTypeDictionary = '';\n this.documentTypeOptions.set([]);\n return;\n }\n\n if (dictionaryName === this.loadedDocumentTypeDictionary) {\n return;\n }\n\n this.loadedDocumentTypeDictionary = dictionaryName;\n this.dictionaryService.getSuggestByName(dictionaryName).subscribe({\n next: (items) => {\n this.documentTypeOptions.set(\n (items || [])\n .map((item) => ({\n value: String(item.key || ''),\n label: String(item.label || item.key || ''),\n }))\n .filter((item) => !!item.value),\n );\n },\n error: () => {\n this.documentTypeOptions.set([]);\n },\n });\n });\n\n openUploadModal(): void {\n this.isUploadOpen.set(true);\n }\n\n closeUploadModal(): void {\n this.isUploadOpen.set(false);\n }\n\n openTextModal(document: UiEntityDocumentFile): void {\n this.textTarget.set(document);\n this.isTextOpen.set(true);\n }\n\n closeTextModal(): void {\n this.isTextOpen.set(false);\n this.textTarget.set(null);\n }\n\n openImagePreview(document: UiEntityDocumentFile): void {\n if (!this.isImage(document)) {\n return;\n }\n this.imagePreviewTarget.set(document);\n this.isImagePreviewOpen.set(true);\n }\n\n closeImagePreview(): void {\n this.isImagePreviewOpen.set(false);\n this.imagePreviewTarget.set(null);\n }\n\n recognizeText(document: UiEntityDocumentFile): void {\n if (!this.isImage(document)) {\n return;\n }\n if (document.recognitionStatus === 'COMPLETED') {\n return;\n }\n if (this.isDocumentRecognizing(document)) {\n return;\n }\n\n this.recognizingDocumentId.set(document.id);\n this.documentsService.recognize(document.id).subscribe({\n next: (updated) => {\n this.recognizingDocumentId.set(null);\n this.upsertDocument(updated);\n this.updateRecognitionPolling();\n this.toast.show('Розпізнавання запущено', 'success', 2200);\n if (this.textTarget()?.id === updated.id) {\n this.textTarget.set(updated);\n }\n },\n error: (error) => {\n this.recognizingDocumentId.set(null);\n this.toast.show(error?.error?.message || 'Не вдалося розпізнати дані', 'error', 3200);\n },\n });\n }\n\n removeDocument(document: UiEntityDocumentFile): void {\n if (!this.isAdmin() || this.deletingDocumentId()) {\n return;\n }\n\n this.confirmService.open({\n title: 'Видалити документ',\n text: `Видалити документ «${document.name || 'Без назви'}»? Дію не можна буде скасувати.`,\n submit: 'Видалити',\n danger: true,\n }).subscribe((confirmed) => {\n if (!confirmed) return;\n\n this.deletingDocumentId.set(document.id);\n this.documentsService.remove(document.id).subscribe({\n next: () => {\n this.documents.update((documents) => documents.filter((item) => item.id !== document.id));\n if (this.textTarget()?.id === document.id) this.closeTextModal();\n if (this.imagePreviewTarget()?.id === document.id) this.closeImagePreview();\n this.deletingDocumentId.set(null);\n this.updateRecognitionPolling();\n this.toast.show('Документ видалено', 'success', 2200);\n },\n error: (error) => {\n this.deletingDocumentId.set(null);\n this.toast.show(error?.error?.message || 'Не вдалося видалити документ', 'error', 3200);\n },\n });\n });\n }\n\n isDocumentRecognizing(document: UiEntityDocumentFile | null): boolean {\n return !!document?.id && this.recognizingDocumentId() === document.id;\n }\n\n trackDocument(_: number, document: UiEntityDocumentFile): string {\n return document.id;\n }\n\n getImagePreviewUrl(document: UiEntityDocumentFile): string {\n const match = String(document.downloadUrl || '').match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : document.downloadUrl;\n }\n\n private upsertDocument(updated: Pick<UiEntityDocumentFile, 'id'> & Partial<UiEntityDocumentFile>): void {\n this.documents.update((current) => {\n const next = current.slice();\n const index = next.findIndex((item) => item.id === updated.id);\n if (index >= 0) {\n next[index] = { ...next[index], ...updated };\n }\n return next;\n });\n }\n\n private loadDocuments(): void {\n const entity = this.resolveEntity();\n const id = this.resolveId();\n if (!entity || !id) {\n this.documents.set([]);\n return;\n }\n\n this.isLoading.set(true);\n this.documentsService.list(entity, id).subscribe({\n next: (rows) => {\n this.documents.set(rows || []);\n this.isLoading.set(false);\n this.updateRecognitionPolling();\n },\n error: () => {\n this.documents.set([]);\n this.isLoading.set(false);\n },\n });\n }\n\n formatSize(size?: number | string | null): string {\n const normalizedSize = Number(size);\n if (!Number.isFinite(normalizedSize)) return '-';\n size = normalizedSize;\n const bytes = Number(size || 0);\n if (!Number.isFinite(bytes) || bytes <= 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB'];\n let value = bytes;\n let index = 0;\n while (value >= 1024 && index < units.length - 1) {\n value /= 1024;\n index += 1;\n }\n return `${value >= 10 || index === 0 ? Math.round(value) : value.toFixed(1)} ${units[index]}`;\n }\n\n private resolveEntity(): string {\n return String(this.entity() || '').trim();\n }\n\n private resolveId(): string {\n return String(this.id() || '').trim();\n }\n\n isImage(document: UiEntityDocumentFile): boolean {\n return String(document.type || '').startsWith('image/');\n }\n\n isPdf(document: UiEntityDocumentFile): boolean {\n const type = String(document.type || '').toLowerCase();\n const name = String(document.name || '').toLowerCase();\n return type === 'application/pdf' || name.endsWith('.pdf');\n }\n\n getFileBadge(document: UiEntityDocumentFile): string {\n if (this.isPdf(document)) return 'PDF';\n if (this.isImage(document)) return 'IMG';\n const name = String(document.name || '').trim();\n if (name.includes('.')) {\n return name.split('.').pop()!.slice(0, 5).toUpperCase();\n }\n return 'FILE';\n }\n\n getDocumentTypeLabel(document: UiEntityDocumentFile): string {\n const label = String(document.documentTypeLabel || '').trim();\n if (label) return label;\n\n const documentTypeId = String(document.documentTypeId || '').trim();\n if (!documentTypeId) return '';\n\n return this.documentTypeOptions().find((option) => option.value === documentTypeId)?.label ?? documentTypeId;\n }\n\n reloadDocuments(): void {\n this.loadDocuments();\n }\n\n isRecognitionPending(document: UiEntityDocumentFile): boolean {\n return this.isImage(document) && (document.recognitionStatus === 'PENDING' || document.recognitionStatus === 'PROCESSING');\n }\n\n isRecognitionCompleted(document: UiEntityDocumentFile): boolean {\n return this.isImage(document) && document.recognitionStatus === 'COMPLETED';\n }\n\n getRecognitionStatusLabel(document: UiEntityDocumentFile): string {\n if (document.recognitionStatus === 'FAILED') return 'Не вдалося розпізнати';\n if (this.isRecognitionPending(document)) {\n return document.recognitionStatus === 'PROCESSING' ? 'Розпізнається у фоні' : 'Очікує розпізнавання';\n }\n return document.recognitionStatus === 'COMPLETED' ? 'Розпізнано' : '';\n }\n\n private updateRecognitionPolling(): void {\n if (!this.documents().some((document) => this.isRecognitionPending(document))) {\n this.recognitionPolling?.unsubscribe();\n this.recognitionPolling = undefined;\n return;\n }\n if (this.recognitionPolling) return;\n\n this.recognitionPolling = timer(2500, 4000)\n .pipe(\n exhaustMap(() => {\n const pendingDocuments = this.documents().filter((document) => this.isRecognitionPending(document));\n if (!pendingDocuments.length) return of([] as UiEntityDocumentRecognitionStatus[]);\n\n return forkJoin(\n pendingDocuments.map((document) =>\n this.documentsService.recognitionStatus(document.id).pipe(\n catchError(() => of(null)),\n ),\n ),\n ).pipe(\n map((statuses) => statuses.filter((status): status is UiEntityDocumentRecognitionStatus => !!status)),\n );\n }),\n map((statuses) => {\n statuses.forEach((status) => this.upsertDocument(status));\n return statuses;\n }),\n takeWhile(() => this.documents().some((document) => this.isRecognitionPending(document)), true),\n takeUntilDestroyed(this.destroyRef),\n takeUntil(timer(RECOGNITION_POLLING_TIMEOUT_MS)),\n finalize(() => {\n this.recognitionPolling = undefined;\n }),\n )\n .subscribe();\n }\n}\n","<div class=\"space-y-4\">\n <div>\n @if (isLoading()) {\n <div class=\"rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-4 py-8 text-center text-sm text-slate-500\">\n Завантаження документів...\n </div>\n } @else if (documents().length === 0) {\n <div class=\"rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-4 py-8 text-center text-sm text-slate-500\">\n Документи відсутні\n </div>\n } @else {\n <div class=\"grid gap-3\">\n @for (document of documents(); track trackDocument($index, document)) {\n <article class=\"flex flex-col gap-4 rounded-2xl border border-slate-200 bg-white p-4 shadow-sm sm:flex-row sm:items-center sm:justify-between\">\n @if (isImage(document)) {\n <button\n type=\"button\"\n class=\"block shrink-0 overflow-hidden rounded-2xl border border-slate-200 bg-slate-50 transition hover:border-slate-300 hover:bg-slate-100 h-28 w-40\"\n (click)=\"openImagePreview(document)\"\n >\n <img [src]=\"getImagePreviewUrl(document)\" [alt]=\"document.name || 'Документ'\" loading=\"lazy\" decoding=\"async\" class=\"h-full w-full object-cover\">\n </button>\n } @else {\n <a\n class=\"block shrink-0 overflow-hidden rounded-2xl border border-slate-200 bg-slate-50 transition hover:border-slate-300 hover:bg-slate-100\"\n [href]=\"document.downloadUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [class.h-28]=\"isPdf(document)\"\n [class.w-40]=\"isPdf(document)\"\n [class.h-20]=\"!isPdf(document)\"\n [class.w-24]=\"!isPdf(document)\"\n >\n @if (isPdf(document)) {\n <div class=\"flex h-full w-full flex-col items-center justify-center gap-2 px-3 py-4 text-slate-700\">\n <div class=\"flex h-11 w-11 items-center justify-center rounded-2xl bg-white text-slate-900 shadow-sm\">\n <lucide-icon [img]=\"fileIcon\"></lucide-icon>\n </div>\n <span class=\"text-xs font-semibold uppercase tracking-[0.18em] text-slate-600\">PDF</span>\n </div>\n } @else {\n <div class=\"flex h-full w-full flex-col items-center justify-center gap-2 px-3 py-4 text-slate-700\">\n <div class=\"flex h-11 w-11 items-center justify-center rounded-2xl bg-white text-slate-900 shadow-sm\">\n <lucide-icon [img]=\"fileIcon\"></lucide-icon>\n </div>\n <span class=\"text-[10px] font-semibold uppercase tracking-[0.18em] text-slate-500\">\n {{ getFileBadge(document) }}\n </span>\n </div>\n }\n </a>\n }\n\n <div class=\"min-w-0 flex-1\">\n <div class=\"flex flex-col gap-2 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <h4 class=\"truncate text-sm font-semibold text-slate-900\">\n {{ document.name || 'Без назви' }}\n </h4>\n @if (getDocumentTypeLabel(document)) {\n <span class=\"inline-flex shrink-0 items-center rounded-full border border-sky-200 bg-sky-50 px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-sky-700\">\n {{ getDocumentTypeLabel(document) }}\n </span>\n }\n </div>\n <p class=\"mt-1 text-xs text-slate-500\">\n {{ formatSize(document.size) }} · {{ document.type }}\n </p>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-2\">\n <ui-button variant=\"ghost\" size=\"sm\" (click)=\"openTextModal(document)\">\n <lucide-icon [img]=\"eyeIcon\"></lucide-icon>\n Перегляд\n </ui-button>\n @if (isImage(document)) {\n <ui-button variant=\"ghost\" size=\"sm\" [disabled]=\"isDocumentRecognizing(document) || isRecognitionPending(document) || isRecognitionCompleted(document)\" (click)=\"recognizeText(document)\">\n <lucide-icon [img]=\"sparkleIcon\"></lucide-icon>\n {{ isDocumentRecognizing(document) ? 'Розпізнавання...' : 'Розпізнати дані' }}\n </ui-button>\n }\n @if (isAdmin()) {\n <ui-button variant=\"ghost\" size=\"sm\" [disabled]=\"deletingDocumentId() === document.id\" (click)=\"removeDocument(document)\">\n <lucide-icon [img]=\"deleteIcon\"></lucide-icon>\n {{ deletingDocumentId() === document.id ? 'Видалення...' : 'Видалити' }}\n </ui-button>\n }\n </div>\n </div>\n\n <div class=\"mt-3 flex flex-wrap items-center justify-between gap-2\">\n <a\n class=\"inline-flex items-center rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-700 transition hover:border-slate-300 hover:bg-slate-50\"\n [href]=\"document.downloadUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Завантажити\n </a>\n @if (isImage(document) && getRecognitionStatusLabel(document)) {\n <span\n class=\"inline-flex items-center rounded-full border px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.12em]\"\n [class.border-amber-200]=\"isRecognitionPending(document)\"\n [class.bg-amber-50]=\"isRecognitionPending(document)\"\n [class.text-amber-700]=\"isRecognitionPending(document)\"\n [class.border-rose-200]=\"document.recognitionStatus === 'FAILED'\"\n [class.bg-rose-50]=\"document.recognitionStatus === 'FAILED'\"\n [class.text-rose-700]=\"document.recognitionStatus === 'FAILED'\"\n [class.border-emerald-200]=\"document.recognitionStatus === 'COMPLETED'\"\n [class.bg-emerald-50]=\"document.recognitionStatus === 'COMPLETED'\"\n [class.text-emerald-700]=\"document.recognitionStatus === 'COMPLETED'\"\n >\n {{ getRecognitionStatusLabel(document) }}\n </span>\n }\n </div>\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <div class=\"flex flex-col gap-3 rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-4 py-4\">\n <div>\n <h4 class=\"text-sm font-semibold text-slate-900\">Завантаження документів у файлове сховище</h4>\n <p class=\"mt-1 text-xs text-slate-500\">Додайте нові файли до картки безпосередньо тут.</p>\n </div>\n\n <div class=\"flex w-full flex-col gap-2 sm:w-auto\">\n <ui-button variant=\"secondary\" size=\"sm\" (click)=\"openUploadModal()\">\n <lucide-icon [img]=\"plusIcon\"></lucide-icon>\n Завантажити документ\n </ui-button>\n </div>\n </div>\n</div>\n\n<app-documents-text-modal\n [isOpen]=\"isTextOpen()\"\n [document]=\"textTarget()\"\n (closed)=\"closeTextModal()\"\n (recognizeRequested)=\"textTarget() && recognizeText(textTarget()!)\"\n></app-documents-text-modal>\n\n<app-documents-upload-modal\n [isOpen]=\"isUploadOpen()\"\n [entity]=\"entity()\"\n [id]=\"id()\"\n (closed)=\"closeUploadModal()\"\n (saved)=\"reloadDocuments()\"\n></app-documents-upload-modal>\n\n<app-documents-image-preview-modal\n [isOpen]=\"isImagePreviewOpen()\"\n [document]=\"imagePreviewTarget()\"\n (closed)=\"closeImagePreview()\"\n></app-documents-image-preview-modal>\n","import { CommonModule } from '@angular/common';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Component, DestroyRef, effect, inject, input, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EventBus } from '@maro-tech/core';\nimport { ENTITY_UPDATED, EntityUpdatedEvent } from '../../card-events';\nimport { CardImageService, UI_CARD_API_BASE_URL, cardApiResourceUrl } from '../../card-api';\nimport { ImagesViewerComponent } from '../images/images-viewer/images-viewer.component';\n\ninterface AuditFieldChange {\n label: string;\n type?: string;\n from: { value: unknown; display: string; url?: string };\n to: { value: unknown; display: string; url?: string };\n}\n\ninterface AuditChange {\n action: string;\n entityId: string;\n entityType: string;\n changedFields: Record<string, AuditFieldChange>;\n}\n\ninterface AuditOperation {\n id: string;\n actorName?: string | null;\n description: string;\n actionCode: string;\n createdAt: string;\n changes: AuditChange[];\n}\n\n@Component({\n selector: 'app-history-tab',\n standalone: true,\n imports: [CommonModule, ImagesViewerComponent],\n templateUrl: './history-tab.component.html',\n})\nexport class HistoryTabComponent {\n readonly entity = input<string>('');\n readonly primaryEntity = input<string>('');\n readonly id = input<string>('');\n readonly entityLabels = input<Record<string, string>>({});\n\n readonly operations = signal<AuditOperation[]>([]);\n readonly isLoading = signal(false);\n readonly hasError = signal(false);\n readonly expandedOperationIds = signal<Set<string>>(new Set());\n readonly viewerUrls = signal<string[]>([]);\n readonly isViewerOpen = signal(false);\n\n private readonly http = inject(HttpClient);\n private readonly imageService = inject(CardImageService);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n private readonly eventBus = inject(EventBus);\n private readonly destroyRef = inject(DestroyRef);\n private readonly refreshSequence = signal(0);\n private lastRequestKey = '';\n\n constructor() {\n this.eventBus.on<EntityUpdatedEvent>(ENTITY_UPDATED)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (event.entity && event.entity !== this.entity()) return;\n if (event.recordId && event.recordId !== this.id()) return;\n this.refreshSequence.update((value) => value + 1);\n });\n\n // Document events contain the useful information in the related entity\n // change. Keep those details visible without requiring an extra click.\n effect(() => {\n const documentOperationIds = new Set(\n this.operations()\n .filter((operation) => operation.actionCode.startsWith('documents.'))\n .map((operation) => operation.id),\n );\n if (!documentOperationIds.size) return;\n const next = new Set(untracked(() => this.expandedOperationIds()));\n documentOperationIds.forEach((id) => next.add(id));\n this.expandedOperationIds.set(next);\n });\n }\n\n private readonly loadEffect = effect(() => {\n const entity = this.entity().trim();\n const id = this.id().trim();\n const refreshSequence = this.refreshSequence();\n const requestKey = `${entity}:${id}:${refreshSequence}`;\n if (requestKey === this.lastRequestKey) return;\n this.lastRequestKey = requestKey;\n\n if (!entity || !id) {\n this.operations.set([]);\n return;\n }\n\n this.isLoading.set(true);\n this.hasError.set(false);\n const cacheBuster = Date.now();\n this.http\n .get<AuditOperation[]>(cardApiResourceUrl(this.baseUrl, `/api/crud/${encodeURIComponent(entity)}/${encodeURIComponent(id)}/history?_ts=${cacheBuster}`), {\n headers: new HttpHeaders({\n 'Cache-Control': 'no-cache, no-store, max-age=0',\n Pragma: 'no-cache',\n }),\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (operations) => {\n this.operations.set(operations || []);\n this.isLoading.set(false);\n },\n error: () => {\n this.operations.set([]);\n this.hasError.set(true);\n this.isLoading.set(false);\n },\n });\n });\n\n toggleOperation(id: string): void {\n const next = new Set(this.expandedOperationIds());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.expandedOperationIds.set(next);\n }\n\n isExpanded(id: string): boolean {\n return this.expandedOperationIds().has(id);\n }\n\n getEntityLabel(entityType: string): string {\n const labels: Record<string, string> = {\n entity_files: 'Документ',\n files: 'Файл',\n };\n return this.entityLabels()[entityType] || labels[entityType] || entityType;\n }\n\n getActionLabel(action: string): string {\n const labels: Record<string, string> = {\n created: 'Створено',\n updated: 'Змінено',\n deleted: 'Видалено',\n };\n return labels[action] || action;\n }\n\n isImageField(field: AuditFieldChange): boolean {\n return field.type === 'image';\n }\n\n isHtmlField(field: AuditFieldChange): boolean {\n return field.type === 'html';\n }\n\n isFileField(field: AuditFieldChange): boolean {\n return field.type === 'file';\n }\n\n getImageUrls(value: unknown): string[] {\n const values = Array.isArray(value) ? value : [value];\n return values\n .map((item) => String(item ?? '').trim())\n .filter(Boolean)\n .map((id) => this.imageService.getPhotoLink(id) || '')\n .filter(Boolean);\n }\n\n openImageViewer(urls: string[]): void {\n if (!urls.length) return;\n this.viewerUrls.set(urls);\n this.isViewerOpen.set(true);\n }\n\n closeImageViewer(): void {\n this.isViewerOpen.set(false);\n }\n\n getAffectedSummary(operation: AuditOperation): string {\n const counts = new Map<string, number>();\n for (const change of this.getRelatedChanges(operation)) {\n counts.set(change.entityType, (counts.get(change.entityType) || 0) + 1);\n }\n return [...counts.entries()]\n .map(([type, count]) => `${this.getEntityLabel(type)}: ${count}`)\n .join(' · ');\n }\n\n getPrimaryChanges(operation: AuditOperation): AuditChange[] {\n const primaryTypes = new Set([this.entity(), this.primaryEntity()].filter(Boolean));\n return (operation.changes || []).filter((change) => primaryTypes.has(change.entityType));\n }\n\n getRelatedChanges(operation: AuditOperation): AuditChange[] {\n const primaryChanges = this.getPrimaryChanges(operation);\n const primaryTypes = new Set([this.entity(), this.primaryEntity()].filter(Boolean));\n return primaryChanges.length\n ? (operation.changes || []).filter((change) => !primaryTypes.has(change.entityType))\n : operation.changes || [];\n }\n\n}\n","<section class=\"space-y-4\">\n @if (isLoading()) {\n <div class=\"rounded-2xl border border-slate-200 bg-white p-6 text-sm text-slate-500\">\n Завантаження історії…\n </div>\n } @else if (hasError()) {\n <div class=\"rounded-2xl border border-red-200 bg-red-50 p-6 text-sm text-red-700\">\n Не вдалося завантажити історію змін.\n </div>\n } @else if (!operations().length) {\n <div class=\"rounded-2xl border border-slate-200 bg-white p-6 text-sm text-slate-500\">\n Історія змін поки порожня.\n </div>\n } @else {\n <div class=\"space-y-3\">\n @for (operation of operations(); track operation.id) {\n <article class=\"rounded-2xl border border-slate-200 bg-white p-5 shadow-sm\">\n <div class=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h3 class=\"text-sm font-semibold text-slate-900\">{{ operation.description }}</h3>\n @if (operation.actorName) {\n <p class=\"mt-1 text-sm text-slate-500\">{{ operation.actorName }}</p>\n }\n </div>\n <time class=\"text-xs text-slate-400\" [dateTime]=\"operation.createdAt\">\n {{ operation.createdAt | date: 'dd.MM.yyyy HH:mm' }}\n </time>\n </div>\n\n @if (getPrimaryChanges(operation).length) {\n <div class=\"mt-4 space-y-2 border-t border-slate-100 pt-4\">\n @for (change of getPrimaryChanges(operation); track change.entityId + change.entityType) {\n @for (field of (change.changedFields | keyvalue); track field.key) {\n <div class=\"flex flex-wrap items-center gap-2 text-sm\">\n <span class=\"font-medium text-slate-700\">{{ field.value.label }}</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.from.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.from.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-slate-100\" (click)=\"openImageViewer(getImageUrls(field.value.from.value))\" [attr.aria-label]=\"'Відкрити старе фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Старе фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.from.url) {\n <a class=\"font-medium text-sky-700 underline\" [href]=\"field.value.from.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.from.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-500\" [innerHTML]=\"field.value.from.display\"></div>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else {\n <span class=\"font-medium text-slate-900\">{{ field.value.from.display }}</span>\n }\n <span class=\"text-slate-400\">→</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.to.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.to.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-slate-100\" (click)=\"openImageViewer(getImageUrls(field.value.to.value))\" [attr.aria-label]=\"'Відкрити нове фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Нове фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.to.url) {\n <a class=\"font-medium text-sky-700 underline\" [href]=\"field.value.to.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.to.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-900\" [innerHTML]=\"field.value.to.display\"></div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else {\n <span class=\"font-medium text-slate-900\">{{ field.value.to.display }}</span>\n }\n </div>\n }\n }\n </div>\n }\n\n @if (getRelatedChanges(operation).length) {\n <div class=\"mt-4 border-t border-slate-100 pt-4\">\n <button\n type=\"button\"\n class=\"flex w-full items-center justify-between gap-3 text-left text-sm text-slate-600\"\n [attr.aria-expanded]=\"isExpanded(operation.id)\"\n (click)=\"toggleOperation(operation.id)\"\n >\n <span>\n Деталі змін:\n <span class=\"font-medium text-slate-900\">{{ getAffectedSummary(operation) }}</span>\n </span>\n <span class=\"text-lg leading-none text-slate-400\">{{ isExpanded(operation.id) ? '−' : '+' }}</span>\n </button>\n\n @if (isExpanded(operation.id)) {\n <div class=\"mt-4 space-y-4\">\n @for (change of getRelatedChanges(operation); track change.entityId + change.entityType) {\n <div class=\"rounded-xl bg-slate-50 p-3\">\n <p class=\"mb-2 text-xs font-semibold uppercase tracking-[0.16em] text-slate-500\">\n {{ getEntityLabel(change.entityType) }} · {{ getActionLabel(change.action) }}\n </p>\n @for (field of (change.changedFields | keyvalue); track field.key) {\n <div class=\"flex flex-wrap items-center gap-2 text-sm\">\n <span class=\"font-medium text-slate-700\">{{ field.value.label }}</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.from.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.from.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-white\" (click)=\"openImageViewer(getImageUrls(field.value.from.value))\" [attr.aria-label]=\"'Відкрити старе фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Старе фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.from.url) {\n <a class=\"text-sky-700 underline\" [href]=\"field.value.from.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.from.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-500\" [innerHTML]=\"field.value.from.display\"></div>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else {\n <span class=\"text-slate-400\">{{ field.value.from.display }}</span>\n }\n <span class=\"text-slate-400\">→</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.to.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.to.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-white\" (click)=\"openImageViewer(getImageUrls(field.value.to.value))\" [attr.aria-label]=\"'Відкрити нове фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Нове фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.to.url) {\n <a class=\"font-medium text-sky-700 underline\" [href]=\"field.value.to.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.to.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-900\" [innerHTML]=\"field.value.to.display\"></div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else {\n <span class=\"font-medium text-slate-900\">{{ field.value.to.display }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </article>\n }\n </div>\n }\n</section>\n\n@if (isViewerOpen()) {\n <app-images-viewer [urls]=\"viewerUrls()\" (closed)=\"closeImageViewer()\" />\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, map } from 'rxjs';\nimport JsBarcode from 'jsbarcode';\nimport { UI_CARD_API_BASE_URL, cardApiResourceUrl } from '../../card-api';\n\nexport const ACTION_API = 'ACTION_API';\nexport const ACTION_FORM = 'ACTION_FORM';\nexport const ACTION_PRINT = 'ACTION_PRINT';\nexport type ActionType = string;\nexport const normalizeActionType = (value: string | null | undefined): string | null => {\n const raw = String(value || '').trim().toLowerCase();\n if (raw === 'api' || raw === ACTION_API.toLowerCase()) return ACTION_API;\n if (raw === 'form' || raw === ACTION_FORM.toLowerCase()) return ACTION_FORM;\n if (raw === 'print' || raw === ACTION_PRINT.toLowerCase()) return ACTION_PRINT;\n return raw ? raw.toUpperCase() : null;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class CardTableDataService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n\n getTableView(code: string, options: Record<string, unknown>): Observable<any> {\n let params = new HttpParams();\n for (const [key, value] of Object.entries(options)) {\n if (value !== undefined && value !== null && value !== '') params = params.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));\n }\n return this.http.get<any>(cardApiResourceUrl(this.baseUrl, `/api/crud/${encodeURIComponent(code)}`), { params }).pipe(\n map((response) => ({\n ...(response.config || response),\n rows: response.rows ?? response.items ?? [],\n pagination: {\n page: response.page,\n size: response.size,\n totalElements: response.total,\n totalPages: response.totalPages,\n },\n }))\n );\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardTableWarehouseService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n\n getWarehouses(): Observable<{ items: any[] }> {\n return this.http.get<any[]>(cardApiResourceUrl(this.baseUrl, '/api/warehouses')).pipe(map((items) => ({ items: items || [] })));\n }\n\n getWarehouseItems(id: string | number): Observable<any[]> {\n return this.http.get<any[]>(cardApiResourceUrl(this.baseUrl, `/api/warehouses/${encodeURIComponent(id)}/items`));\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardTableBarcodeService {\n printBarcode(options: { barcode: string; title: string }): void {\n const barcode = String(options.barcode || '').trim();\n if (!barcode || typeof window === 'undefined') return;\n const printWindow = window.open('', '_blank', 'width=860,height=920');\n if (!printWindow) return;\n const barcodeSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n try {\n JsBarcode(barcodeSvg, barcode, { format: 'CODE128', displayValue: false, margin: 0, width: 2.1, height: 88, lineColor: '#0f172a', background: '#ffffff' });\n } catch {\n printWindow.close();\n return;\n }\n printWindow.document.write(`<!doctype html><html><head><title>${this.escape(options.title)}</title><style>body{font-family:Arial;text-align:center;padding:10mm}.barcode{width:58mm;margin:auto}.barcode svg{width:100%;height:18mm}</style></head><body><h2>${this.escape(options.title)}</h2><div class=\"barcode\">${barcodeSvg.outerHTML}</div></body></html>`);\n printWindow.document.close();\n printWindow.focus();\n printWindow.print();\n }\n\n private escape(value: string): string { return value.replace(/[&<>'\"]/g, (char) => ({ '&': '&', '<': '<', '>': '>', \"'\": ''', '\"': '"' }[char] || char)); }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardTablePrintService {\n openPrintWindow(): Window | null { return typeof window === 'undefined' ? null : window.open('', '_blank', 'width=860,height=920'); }\n\n print(config: { html: string; title?: string }): boolean {\n const printWindow = this.openPrintWindow();\n return printWindow ? this.printInWindow(printWindow, config) : false;\n }\n\n printInWindow(printWindow: Window, config: { html: string; title?: string }): boolean {\n printWindow.document.write(`<!doctype html><html><head><title>${config.title || 'Друк'}</title></head><body>${config.html}</body></html>`);\n printWindow.document.close();\n printWindow.focus();\n printWindow.print();\n return true;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, computed, inject, signal } from '@angular/core';\nimport { UiActionFormModalComponent } from '@maro-tech/form';\nimport { UI_ENTITY_CARD_HOST, UiEntityCardHost, UiEntityCardAction } from '../../card-host.token';\nimport { UiCardTabConfig } from '../../card.models';\nimport { ENTITY_UPDATED, EntityUpdatedEvent } from '../../card-events';\nimport { UiTableCellChange, UiTableColumnConfig, UiTableFilter, UiTableResponse, UiTableRowAction, UiTableComponent } from '@maro-tech/table';\nimport { EventBus, UiButtonComponent } from '@maro-tech/core';\nimport { UiSelectOption } from '@maro-tech/form';\nimport { CardTableBarcodeService, CardTableDataService, CardTablePrintService, CardTableWarehouseService, ACTION_API, ACTION_FORM, ACTION_PRINT, ActionType, normalizeActionType } from './card-table-services';\n\ntype TableViewColumn = any;\ntype TableViewHeaderAction = any;\ntype TableViewResponse = any;\ntype TableViewRow = any;\n\ntype ConditionToken =\n | { type: 'identifier'; value: string }\n | { type: 'string'; value: string }\n | { type: 'number'; value: number }\n | { type: 'boolean'; value: boolean }\n | { type: 'null'; value: null }\n | { type: 'operator'; value: '==' | '!=' | '===' | '!==' | '&&' | '||' | '!' | '(' | ')' };\n\nconst getConditionPathValue = (source: any, pathRaw: string): any => {\n const path = String(pathRaw || '').trim();\n if (!path) return undefined;\n\n const parts = path.split('.');\n let current = source;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined;\n current = current[part];\n }\n return current;\n};\n\nconst evaluateCondition = (conditionRaw: string | undefined, context: Record<string, unknown>): boolean => {\n const condition = String(conditionRaw || '').trim();\n if (!condition) return true;\n\n const tokens: ConditionToken[] = [];\n let index = 0;\n\n const pushOperator = (value: ConditionToken['value']): void => {\n tokens.push({ type: 'operator', value } as ConditionToken);\n };\n\n while (index < condition.length) {\n const char = condition[index];\n\n if (/\\s/.test(char)) {\n index += 1;\n continue;\n }\n\n const nextThree = condition.slice(index, index + 3);\n const nextTwo = condition.slice(index, index + 2);\n if (nextThree === '===') {\n pushOperator('===');\n index += 3;\n continue;\n }\n if (nextThree === '!==') {\n pushOperator('!==');\n index += 3;\n continue;\n }\n if (nextTwo === '==') {\n pushOperator('==');\n index += 2;\n continue;\n }\n if (nextTwo === '!=') {\n pushOperator('!=');\n index += 2;\n continue;\n }\n if (nextTwo === '&&') {\n pushOperator('&&');\n index += 2;\n continue;\n }\n if (nextTwo === '||') {\n pushOperator('||');\n index += 2;\n continue;\n }\n if (char === '!' || char === '(' || char === ')') {\n pushOperator(char as ConditionToken['value']);\n index += 1;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n const quote = char;\n index += 1;\n let value = '';\n let escaped = false;\n let closed = false;\n while (index < condition.length) {\n const current = condition[index];\n index += 1;\n if (escaped) {\n value += current;\n escaped = false;\n continue;\n }\n if (current === '\\\\') {\n escaped = true;\n continue;\n }\n if (current === quote) {\n closed = true;\n break;\n }\n value += current;\n }\n if (!closed) return true;\n tokens.push({ type: 'string', value });\n continue;\n }\n if (/[0-9.-]/.test(char)) {\n const match = condition.slice(index).match(/^-?\\d+(?:\\.\\d+)?/);\n if (match) {\n tokens.push({ type: 'number', value: Number(match[0]) });\n index += match[0].length;\n continue;\n }\n }\n if (/[A-Za-z_$]/.test(char)) {\n const match = condition.slice(index).match(/^[A-Za-z_$][A-Za-z0-9_.$-]*/);\n if (match) {\n const raw = match[0];\n const normalized = raw.toLowerCase();\n if (normalized === 'true' || normalized === 'false') {\n tokens.push({ type: 'boolean', value: normalized === 'true' });\n } else if (normalized === 'null') {\n tokens.push({ type: 'null', value: null });\n } else {\n tokens.push({ type: 'identifier', value: raw });\n }\n index += raw.length;\n continue;\n }\n }\n\n return true;\n }\n\n let tokenIndex = 0;\n const peek = (): ConditionToken | undefined => tokens[tokenIndex];\n const consume = (): ConditionToken | undefined => {\n const token = tokens[tokenIndex];\n tokenIndex += 1;\n return token;\n };\n const matchOperator = (...values: Array<ConditionToken['value']>): boolean => {\n const token = peek();\n if (token?.type !== 'operator') return false;\n if (!values.includes(token.value)) return false;\n tokenIndex += 1;\n return true;\n };\n const toBoolean = (value: unknown): boolean => {\n if (typeof value === 'string') return value.trim().length > 0;\n return Boolean(value);\n };\n const getValue = (identifierRaw: string): unknown => {\n const identifier = String(identifierRaw || '').trim();\n if (!identifier) return undefined;\n if (identifier === 'data') return context;\n if (identifier.startsWith('data.')) return getConditionPathValue(context, identifier.slice(5));\n return getConditionPathValue(context, identifier);\n };\n const parseExpression = (): unknown => parseOr();\n const parseOr = (): unknown => {\n let left = parseAnd();\n while (matchOperator('||')) {\n const right = parseAnd();\n left = toBoolean(left) || toBoolean(right);\n }\n return left;\n };\n const parseAnd = (): unknown => {\n let left = parseEquality();\n while (matchOperator('&&')) {\n const right = parseEquality();\n left = toBoolean(left) && toBoolean(right);\n }\n return left;\n };\n const parseEquality = (): unknown => {\n let left = parseUnary();\n while (true) {\n if (matchOperator('==')) {\n left = left == parseUnary();\n continue;\n }\n if (matchOperator('!=')) {\n left = left != parseUnary();\n continue;\n }\n if (matchOperator('===')) {\n left = left === parseUnary();\n continue;\n }\n if (matchOperator('!==')) {\n left = left !== parseUnary();\n continue;\n }\n break;\n }\n return left;\n };\n const parseUnary = (): unknown => {\n if (matchOperator('!')) {\n return !toBoolean(parseUnary());\n }\n return parsePrimary();\n };\n const parsePrimary = (): unknown => {\n const token = consume();\n if (!token) return undefined;\n if (token.type === 'operator' && token.value === '(') {\n const value = parseExpression();\n matchOperator(')');\n return value;\n }\n if (token.type === 'identifier') return getValue(token.value);\n return token.value;\n };\n\n return toBoolean(parseExpression());\n};\n\n@Component({\n selector: 'app-card-table',\n standalone: true,\n imports: [\n CommonModule,\n UiTableComponent,\n UiButtonComponent,\n UiActionFormModalComponent,\n ],\n templateUrl: './card-table.component.html',\n})\nexport class CardTableComponent implements OnChanges {\n @Input({ required: true }) tab!: UiCardTabConfig;\n @Input() data: Record<string, unknown> | null = null;\n\n private readonly tableViewsService = inject(CardTableDataService);\n private readonly warehouseService = inject(CardTableWarehouseService);\n private readonly barcodePrintService = inject(CardTableBarcodeService);\n private readonly eventBus = inject(EventBus);\n private readonly host = inject<UiEntityCardHost | null>(UI_ENTITY_CARD_HOST, { optional: true });\n private readonly actionBus = inject(CardTablePrintService);\n\n private readonly tableColumnsSignal = signal<UiTableColumnConfig[]>([]);\n private readonly tableRowsSignal = signal<Record<string, unknown>[]>([]);\n private readonly tablePaginationSignal = signal({ page: 0, pageSize: 10, total: 0 });\n private readonly tableHeaderActionsSignal = signal<TableViewHeaderAction[]>([]);\n private readonly editableColumnOptionsSignal = signal<Record<string, UiSelectOption[]>>({});\n private readonly isTableLoadingSignal = signal(false);\n private readonly isTableActionRunningSignal = signal(false);\n private readonly activeEditableCellSignal = signal<{ rowId: string; columnKey: string } | null>(null);\n private readonly activeFormTargetSignal = signal<{ formId: string; recordId: string; initialValue: Record<string, unknown> } | null>(null);\n readonly activeFormTarget = computed(() => this.activeFormTargetSignal());\n\n readonly tableData = computed<UiTableResponse<Record<string, unknown>>>(() => ({\n items: this.tableRowsSignal(),\n pagination: this.tablePaginationSignal(),\n }));\n\n private pageIndex = 0;\n private pageSize = 10;\n private sortField = '';\n private sortDirection: '' | 'asc' | 'desc' = '';\n private tableViewColumns: TableViewColumn[] = [];\n private editableColumnsLoaded = false;\n\n ngOnChanges(): void {\n this.pageIndex = 0;\n this.pageSize = this.resolvePageSize();\n this.sortField = '';\n this.sortDirection = '';\n this.editableColumnsLoaded = false;\n this.activeEditableCellSignal.set(null);\n this.editableColumnOptionsSignal.set({});\n this.loadTable();\n }\n\n get disablePaging(): boolean {\n const value = this.tab?.props?.['disablePaging'];\n return value === true || value === 'true';\n }\n\n get tableColumns(): UiTableColumnConfig[] {\n return this.tableColumnsSignal();\n }\n\n get tableHeaderActions(): TableViewHeaderAction[] {\n return this.tableHeaderActionsSignal();\n }\n\n get tableActions(): Array<{\n id?: string;\n label: string;\n icon?: string;\n variant?: 'primary' | 'ghost' | 'danger';\n type?: ActionType;\n component?: string;\n formId?: string;\n api?: string;\n method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n title?: string;\n text?: string;\n submit?: boolean | string;\n payload?: Record<string, unknown>;\n size?: 'sm' | 'md' | 'lg';\n }> {\n const blockActions = Array.isArray(this.tab?.actions) ? this.tab.actions : [];\n return [\n ...blockActions.map((action: any, index: number) => {\n const rawAction = action as UiEntityCardAction & { variant?: 'primary' | 'ghost' | 'danger' };\n return {\n ...action,\n variant: rawAction.variant || (index === 0 ? 'primary' : 'ghost'),\n };\n }),\n ...this.tableHeaderActions.map((action) => ({\n ...action,\n variant: 'ghost' as const,\n })),\n ];\n }\n\n get isTableLoading(): boolean {\n return this.isTableLoadingSignal();\n }\n\n get isTableActionRunning(): boolean {\n return this.isTableActionRunningSignal();\n }\n\n get rowClickable(): boolean {\n return this.isEditEnabled();\n }\n\n onTablePageChange(event: UiTableFilter): void {\n this.pageIndex = Math.max(0, Number(event['pageIndex'] ?? this.pageIndex) || 0);\n this.pageSize = Math.max(1, Number(event['pageSize'] ?? this.pageSize) || this.pageSize);\n const active = String(event['active'] ?? '').trim();\n this.sortField = this.tableViewColumns.find((column) => column.id === active)?.id || '';\n const direction = String(event['direction'] ?? '').toLowerCase();\n this.sortDirection = direction === 'asc' || direction === 'desc' ? direction : '';\n this.loadTable();\n }\n\n onTableAction(event: { action: UiTableRowAction; row: Record<string, unknown> }): void {\n if (normalizeActionType(event.action.type) === ACTION_PRINT || event.action.component === 'warehouseBarcodePrint' || event.action.template || event.action.id === 'print-certificate') {\n this.runPrintAction(event.action, event.row);\n return;\n }\n\n if (normalizeActionType(event.action.type) === ACTION_FORM && String(event.action.formId || '').trim()) {\n this.runFormAction(event.action, event.row);\n return;\n }\n\n if (!event.action.api) {\n return;\n }\n\n const payload = this.resolveTemplatePayload(event.action.payload || {}, event.row);\n this.runApiAction({\n api: this.resolveTemplateString(event.action.api, {\n ...event.row,\n ...payload,\n }),\n method: event.action.method || 'POST',\n payload,\n title: event.action.title,\n text: event.action.text,\n submit: event.action.submit,\n danger: event.action.danger,\n successMessage:\n event.action.id === 'issue'\n ? 'Матеріали списано зі складу'\n : event.action.id === 'delete'\n ? 'Позицію видалено'\n : 'Дію виконано',\n errorMessage: 'Не вдалося виконати дію',\n });\n }\n\n onHeaderAction(action: TableViewHeaderAction): void {\n if (!action?.formId) {\n if (action?.api) {\n this.runApiAction({\n api: action.api,\n method: action.method || 'POST',\n payload: this.resolveTemplatePayload(action.payload || {}, this.data || {}),\n title: action.title,\n text: action.text,\n submit: action.submit,\n danger: action.variant === 'danger',\n successMessage: 'Дію виконано',\n errorMessage: 'Не вдалося виконати дію',\n });\n }\n return;\n }\n\n this.runHeaderFormAction(action);\n }\n\n onTableRowClick(row: Record<string, unknown>): void {\n if (!this.isEditEnabled()) {\n return;\n }\n\n this.runRowEditAction(row);\n }\n\n onTableCellChange(event: UiTableCellChange<Record<string, unknown>>): void {\n const editableConfig = this.resolveEditableColumnsConfig().find((column) => column.key === event.column.key);\n if (!editableConfig) {\n return;\n }\n\n const rowId = String(event.row['id'] ?? '').trim();\n if (!rowId) {\n return;\n }\n\n const nextValue = String(event.value ?? '').trim();\n const nextRow = {\n ...event.row,\n [event.column.bindKey || event.column.key]: nextValue,\n };\n\n if (editableConfig.editor === 'select') {\n nextRow[event.column.key] =\n this.resolveEditableColumnOptions(event.column.key).find((option) => String(option.value ?? '').trim() === nextValue)?.label ?? '';\n }\n\n this.tableRowsSignal.update((rows) =>\n rows.map((row) => (String(row['id'] ?? '').trim() === rowId ? nextRow : row))\n );\n\n if (editableConfig.api) {\n this.saveEditableColumnChange(editableConfig, nextRow);\n }\n }\n\n onEditableCellActivate(row: Record<string, unknown>, columnKey: string, event: MouseEvent): void {\n event.stopPropagation();\n const rowId = String(row['id'] ?? '').trim();\n const key = String(columnKey || '').trim();\n if (!rowId || !key) {\n return;\n }\n\n this.activeEditableCellSignal.set({ rowId, columnKey: key });\n }\n\n isEditableCellActive(row: Record<string, unknown>, columnKey: string): boolean {\n const active = this.activeEditableCellSignal();\n return !!active && active.rowId === String(row['id'] ?? '').trim() && active.columnKey === String(columnKey || '').trim();\n }\n\n resolveEditableDisplayValue(row: Record<string, unknown>, column: UiTableColumnConfig): string {\n const rawValue = this.getCellValue(row, column.bindKey || column.key);\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n return '—';\n }\n\n if (column.editor === 'select') {\n const value = String(rawValue).trim();\n const option = this.resolveEditableColumnOptions(column.key).find((item) => String(item.value ?? '').trim() === value);\n return String(option?.label || rawValue).trim() || '—';\n }\n\n return String(rawValue);\n }\n\n private getCellValue(row: Record<string, unknown>, column: string): unknown {\n return row?.[column];\n }\n\n private runPrintAction(action: UiTableRowAction, row: Record<string, unknown>): void {\n const template = String(action.template || (action.id === 'print-certificate' ? 'print-certificate' : '')).trim();\n const recordId = String(row['id'] || '').trim();\n if (template && recordId) {\n const printWindow = this.actionBus.openPrintWindow();\n const entity = encodeURIComponent(this.resolveTableSource());\n const id = encodeURIComponent(recordId);\n const actionId = encodeURIComponent(template);\n this.host?.callApi({\n api: `/api/crud/${entity}/${id}/action/${actionId}`,\n method: 'GET',\n }).subscribe({\n next: (response) => {\n const html = String((response as { data?: { html?: unknown } })?.data?.html || '').trim();\n const title = String((response as { data?: { title?: unknown } })?.data?.title || action.label || 'Друк');\n if (!html) {\n printWindow?.close();\n this.notify('Шаблон друку порожній', 'error');\n return;\n }\n const config = { html, title };\n if (printWindow) this.actionBus.printInWindow(printWindow, config);\n else this.actionBus.print(config);\n },\n error: (error) => {\n printWindow?.close();\n this.notify(error?.error?.message || 'Не вдалося завантажити сертифікат', 'error');\n },\n });\n return;\n }\n\n const payload = this.resolveTemplatePayload(action.payload || {}, row);\n const barcode = String(payload['barcode'] ?? row['barcode'] ?? '').trim();\n if (!barcode) {\n this.notify('У рядку немає штрихкоду', 'warning');\n return;\n }\n\n const title = String(payload['title'] ?? row['name'] ?? this.tab?.title ?? 'Штрихкод').trim() || 'Штрихкод';\n this.barcodePrintService.printBarcode({ barcode, title });\n }\n\n closeFormAction(): void {\n this.activeFormTargetSignal.set(null);\n }\n\n refreshTable(): void {\n this.loadTable();\n }\n\n onFormCompleted(): void {\n this.activeFormTargetSignal.set(null);\n this.activeEditableCellSignal.set(null);\n this.loadTable();\n }\n\n private loadTable(): void {\n const table = this.resolveTableSource();\n this.isTableLoadingSignal.set(true);\n this.tableRowsSignal.set([]);\n this.tablePaginationSignal.set({ page: this.pageIndex, pageSize: this.pageSize, total: 0 });\n\n if (!table) {\n this.tableColumnsSignal.set([]);\n this.isTableLoadingSignal.set(false);\n return;\n }\n\n this.tableViewsService.getTableView(table, {\n page: this.pageIndex,\n size: this.pageSize,\n sortField: this.sortField,\n sortDirection: this.sortDirection,\n filters: this.resolveTableFilters(),\n }).subscribe({\n next: (view) => {\n const rows = this.normalizeTableRows(view);\n this.tableViewColumns = view.columns || [];\n this.tableHeaderActionsSignal.set(view.actions?.header?.custom || []);\n this.tableColumnsSignal.set(this.normalizeTableColumns(this.tableViewColumns));\n this.tableRowsSignal.set(rows);\n this.activeEditableCellSignal.set(null);\n this.loadEditableColumnOptions();\n this.pageIndex = view.pagination?.page ?? this.pageIndex;\n this.pageSize = view.pagination?.size ?? this.pageSize;\n this.tablePaginationSignal.set({\n page: this.pageIndex,\n pageSize: this.pageSize,\n total: view.pagination?.totalElements ?? rows.length,\n });\n this.isTableLoadingSignal.set(false);\n },\n error: (error) => {\n this.tableRowsSignal.set([]);\n this.tableHeaderActionsSignal.set([]);\n this.tablePaginationSignal.set({ page: this.pageIndex, pageSize: this.pageSize, total: 0 });\n this.activeEditableCellSignal.set(null);\n this.isTableLoadingSignal.set(false);\n this.notify(error?.error?.message || 'Не вдалося завантажити таблицю', 'error');\n },\n });\n }\n\n private runApiAction(config: {\n api: string;\n method: UiTableRowAction['method'];\n payload: Record<string, unknown>;\n title?: string;\n text?: string;\n submit?: boolean | string;\n danger?: boolean;\n successMessage: string;\n errorMessage: string;\n }): void {\n const api = String(config.api || '').trim();\n if (!api) {\n return;\n }\n\n this.isTableActionRunningSignal.set(true);\n this.host?.callApi({\n api,\n method: config.method || 'POST',\n title: config.title,\n text: config.text,\n submit: typeof config.submit === 'string' ? config.submit : undefined,\n danger: config.danger,\n payload: config.payload,\n }).subscribe({\n next: () => {\n this.notify(config.successMessage, 'success');\n this.isTableActionRunningSignal.set(false);\n this.loadTable();\n this.eventBus.emit<EntityUpdatedEvent>(ENTITY_UPDATED, {\n source: 'card-table.row-action',\n });\n },\n error: (error) => {\n this.isTableActionRunningSignal.set(false);\n this.notify(error?.error?.message || config.errorMessage, 'error');\n },\n });\n }\n\n private runFormAction(action: UiTableRowAction, row: Record<string, unknown>): void {\n const formId = String(action.formId || '').trim();\n const recordId = String(row['id'] || '').trim();\n if (!formId || !recordId) {\n this.notify('Не вдалося відкрити форму редагування', 'warning');\n return;\n }\n\n const actionPayload = this.resolveTemplatePayload(action.payload || {}, row);\n this.activeFormTargetSignal.set({\n formId,\n recordId,\n initialValue: { ...row, ...actionPayload },\n });\n }\n\n private runRowEditAction(row: Record<string, unknown>): void {\n const recordId = String(row['id'] || '').trim();\n const formId = this.resolveTableSource();\n if (!recordId || !formId) {\n return;\n }\n\n this.activeFormTargetSignal.set({\n formId,\n recordId,\n initialValue: { ...row },\n });\n }\n\n private runHeaderFormAction(action: TableViewHeaderAction): void {\n const formId = String(action.formId || '').trim();\n if (!formId) {\n return;\n }\n\n this.activeFormTargetSignal.set({\n formId,\n recordId: '',\n initialValue: this.resolveTemplatePayload(action.payload || {}, this.data || {}),\n });\n }\n\n private normalizeTableColumns(columns: TableViewColumn[]): UiTableColumnConfig[] {\n const editableColumns = this.resolveEditableColumnsConfig();\n return (columns || [])\n .filter((column) => !column.hidden)\n .map((column): UiTableColumnConfig => {\n const editableConfig = editableColumns.find((item) => item.key === column.id);\n if (!editableConfig) {\n return {\n key: column.id,\n labelKey: column.label,\n sortable: true,\n type: column.type,\n width: column.width,\n link: column.link,\n };\n }\n\n return {\n key: column.id,\n labelKey: column.label,\n sortable: true,\n type: column.type,\n width: column.width,\n link: column.link,\n editable: true,\n editableCondition: this.resolveEditableCondition(),\n bindKey: editableConfig.bindKey || column.sourceColumn || column.dataKey || column.id,\n editor: editableConfig.editor,\n options: this.resolveEditableColumnOptions(column.id),\n includeBlankOption: editableConfig.includeBlankOption,\n blankOptionLabel: editableConfig.blankOptionLabel,\n placeholder: editableConfig.placeholder,\n inputType: editableConfig.inputType,\n };\n });\n }\n\n private normalizeTableRows(view: TableViewResponse): Record<string, unknown>[] {\n const columns = view.columns || [];\n const hiddenRowActions = new Set(\n Array.isArray(this.tab?.props?.['hiddenRowActions'])\n ? this.tab.props['hiddenRowActions'].map((id: unknown) => String(id || '').trim()).filter(Boolean)\n : []\n );\n const rowActions = (view.actions?.row?.custom || []).filter((action: any) => !hiddenRowActions.has(action.id));\n const configuredRowActions = view.actions?.row || {};\n const defaultRowActions = {\n edit: view.viewActions?.edit !== false && configuredRowActions.edit !== false,\n editCondition: configuredRowActions.edit && typeof configuredRowActions.edit === 'object'\n ? configuredRowActions.edit.condition\n : undefined,\n delete: view.viewActions?.delete !== false && configuredRowActions.delete !== false,\n deleteCondition: configuredRowActions.delete && typeof configuredRowActions.delete === 'object'\n ? configuredRowActions.delete.condition\n : undefined,\n };\n return (view.rows || []).map((row: any) => this.toTableRowData(row, columns, rowActions, defaultRowActions));\n }\n\n private toTableRowData(\n row: TableViewRow,\n columns: TableViewColumn[],\n rowActions: UiTableRowAction[] = [],\n configuredActions: {\n edit?: boolean;\n editCondition?: string;\n delete?: boolean;\n deleteCondition?: string;\n } = {}\n ): Record<string, unknown> {\n const baseRow: Record<string, unknown> = Array.isArray(row)\n ? columns.reduce<Record<string, unknown>>((acc, column, index) => {\n acc[column.id] = row[index] ?? '';\n return acc;\n }, { id: String(row[0] ?? '') })\n : {\n ...(row as Record<string, unknown>),\n id: String((row as Record<string, unknown>)['id'] ?? ''),\n };\n\n if (this.resolveTableSource() === 'invoice-lines' && String(baseRow['line_id'] || '').trim()) {\n baseRow['id'] = String(baseRow['line_id']).trim();\n }\n\n if (!Array.isArray(baseRow['actions']) && rowActions.length) {\n baseRow['actions'] = rowActions.map((action) => ({ ...action }));\n }\n\n if (!Array.isArray(baseRow['actions'])) {\n const actions: UiTableRowAction[] = [];\n const editAllowed = configuredActions.edit !== false\n && (this.isEditEnabled() || evaluateCondition(configuredActions.editCondition, baseRow));\n if (editAllowed) {\n actions.push({\n id: 'edit',\n label: 'Редагувати',\n type: ACTION_FORM,\n formId: this.resolveTableSource(),\n });\n }\n const deleteAllowed = configuredActions.delete !== false\n && (this.isDeleteEnabled(baseRow) || evaluateCondition(configuredActions.deleteCondition, baseRow));\n if (deleteAllowed) {\n actions.push({\n id: 'delete',\n label: 'Видалити',\n type: ACTION_API,\n api: `/api/${this.resolveTableSource()}/{{id}}`,\n method: 'DELETE',\n danger: true,\n payload: { id: '{{id}}' },\n });\n }\n if (actions.length) baseRow['actions'] = actions;\n }\n\n return baseRow;\n }\n\n private saveEditableColumnChange(\n editableConfig: ReturnType<typeof this.resolveEditableColumnsConfig>[number],\n row: Record<string, unknown>\n ): void {\n const api = String(editableConfig.api || '').trim();\n if (!api) {\n return;\n }\n\n const payload = this.resolveEditableColumnPayload(editableConfig, row);\n if (!payload) {\n return;\n }\n\n this.isTableActionRunningSignal.set(true);\n this.host?.callApi({\n api,\n method: editableConfig.method || 'PATCH',\n payload,\n }).subscribe({\n next: () => {\n this.isTableActionRunningSignal.set(false);\n this.notify(editableConfig.successMessage || 'Збережено', 'success');\n this.loadTable();\n this.eventBus.emit<EntityUpdatedEvent>(ENTITY_UPDATED, {\n source: 'card-table.editable-cell',\n });\n },\n error: (error) => {\n this.isTableActionRunningSignal.set(false);\n this.notify(error?.error?.message || editableConfig.errorMessage || 'Не вдалося зберегти зміни', 'error');\n },\n });\n }\n\n private loadEditableColumnOptions(): void {\n if (this.editableColumnsLoaded) {\n return;\n }\n\n const editableColumns = this.resolveEditableColumnsConfig();\n const columnsNeedingOptions = editableColumns.filter((column) => column.optionsSource === 'warehouses' || column.optionsSource === 'warehouse-items');\n if (!columnsNeedingOptions.length) {\n this.editableColumnsLoaded = true;\n return;\n }\n\n this.editableColumnsLoaded = true;\n this.warehouseService.getWarehouses().subscribe({\n next: (response) => {\n const warehouses = response.items ?? [];\n const warehouseOptions: UiSelectOption[] = warehouses\n .map((warehouse: any) => ({\n value: warehouse.id ? String(warehouse.id) : null,\n label: String(warehouse.name || warehouse.labelName || warehouse.id || 'Склад').trim() || 'Склад',\n }))\n .filter((option: any): option is UiSelectOption => !!option.value);\n\n const loadWarehouseItemOptions = (done: (options: UiSelectOption[]) => void): void => {\n if (!warehouses.length) {\n done([]);\n return;\n }\n\n const options: UiSelectOption[] = [];\n let remaining = warehouses.length;\n\n for (const warehouse of warehouses) {\n const warehouseId = String(warehouse.id || '').trim();\n if (!warehouseId) {\n remaining -= 1;\n continue;\n }\n\n this.warehouseService.getWarehouseItems(warehouseId).subscribe({\n next: (items) => {\n for (const item of items ?? []) {\n options.push({\n value: item.id ? String(item.id) : null,\n label: [\n String(warehouse.labelName || warehouse.name || warehouse.id || '').trim(),\n String(item.name || item.id || '').trim(),\n ]\n .filter(Boolean)\n .join(' / '),\n });\n }\n remaining -= 1;\n if (remaining <= 0) {\n done(options.filter((option) => !!option.value));\n }\n },\n error: () => {\n remaining -= 1;\n if (remaining <= 0) {\n done(options.filter((option) => !!option.value));\n }\n },\n });\n }\n };\n\n const applyOptions = (warehouseItemOptions: UiSelectOption[] = []): void => {\n this.editableColumnOptionsSignal.set(\n columnsNeedingOptions.reduce<Record<string, UiSelectOption[]>>((acc, column) => {\n acc[column.key] = column.optionsSource === 'warehouses' ? warehouseOptions : warehouseItemOptions;\n return acc;\n }, {})\n );\n this.tableColumnsSignal.set(this.normalizeTableColumns(this.tableViewColumns));\n };\n\n if (!columnsNeedingOptions.some((column) => column.optionsSource === 'warehouse-items')) {\n applyOptions();\n return;\n }\n\n loadWarehouseItemOptions(applyOptions);\n },\n error: () => {\n this.editableColumnOptionsSignal.set({});\n this.tableColumnsSignal.set(this.normalizeTableColumns(this.tableViewColumns));\n },\n });\n }\n\n private resolveEditableColumnsConfig(): Array<{\n key: string;\n bindKey?: string;\n editor?: 'text' | 'number' | 'select';\n optionsSource?: string;\n includeBlankOption?: boolean;\n blankOptionLabel?: string;\n placeholder?: string;\n inputType?: 'text' | 'number';\n api?: string;\n method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n payload?: Record<string, unknown>;\n successMessage?: string;\n errorMessage?: string;\n }> {\n const value = this.tab?.props?.['editableColumns'];\n return Array.isArray(value)\n ? value.filter((item): item is {\n key: string;\n bindKey?: string;\n editor?: 'text' | 'number' | 'select';\n optionsSource?: string;\n includeBlankOption?: boolean;\n blankOptionLabel?: string;\n placeholder?: string;\n inputType?: 'text' | 'number';\n } => !!item && typeof item === 'object' && typeof (item as { key?: unknown }).key === 'string')\n : [];\n }\n\n private resolveEditableColumnPayload(\n editableConfig: ReturnType<typeof this.resolveEditableColumnsConfig>[number],\n row: Record<string, unknown>\n ): Record<string, unknown> | null {\n const baseRow = {\n ...row,\n id: String(row['id'] ?? '').trim(),\n };\n\n const payloadConfig = editableConfig.payload && typeof editableConfig.payload === 'object' ? editableConfig.payload : {};\n const payload = this.resolveTemplatePayload(payloadConfig as Record<string, unknown>, {\n ...this.data,\n ...baseRow,\n });\n\n if (!Object.keys(payload).length) {\n return baseRow;\n }\n\n return {\n ...baseRow,\n ...payload,\n };\n }\n\n private resolveEditableColumnOptions(columnKey: string): UiSelectOption[] {\n return this.editableColumnOptionsSignal()[columnKey] || [];\n }\n\n private isEditEnabled(): boolean {\n const value = this.tab?.props?.['edit'];\n const enabled = value === true || String(value).trim().toLowerCase() === 'true';\n if (!enabled) {\n return false;\n }\n\n return evaluateCondition(String(this.tab?.props?.['editCondition'] || '').trim(), this.data || {});\n }\n\n private isDeleteEnabled(row: Record<string, unknown>): boolean {\n const value = this.tab?.props?.['delete'];\n const enabled = value === true || String(value).trim().toLowerCase() === 'true';\n if (!enabled) return false;\n\n return evaluateCondition(String(this.tab?.props?.['deleteCondition'] || '').trim(), row);\n }\n\n private resolveTableSource(): string {\n return this.resolveTemplateString(String(this.tab?.props?.['table'] || '').trim(), this.data || {});\n }\n\n private resolveTableFilters(): Record<string, unknown> {\n return {\n ...this.resolveFiltersObject(this.tab?.props?.['initialFilters']),\n ...this.resolveFiltersObject(this.tab?.props?.['filter']),\n };\n }\n\n private resolveFiltersObject(filter: unknown): Record<string, unknown> {\n if (!filter || typeof filter !== 'object' || Array.isArray(filter)) {\n return {};\n }\n\n return this.resolveTemplatePayload(filter as Record<string, unknown>, this.data || {});\n }\n\n private resolveTemplatePayload(payload: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown> {\n return Object.entries(payload || {}).reduce<Record<string, unknown>>((acc, [key, value]) => {\n const next = this.resolveTemplateValue(value, source);\n if (next !== null && next !== undefined && next !== '') {\n acc[key] = next;\n }\n return acc;\n }, {});\n }\n\n private resolveTemplateString(value: string, source: Record<string, unknown>): string {\n return String(value || '').replace(/\\{\\{([a-zA-Z_][a-zA-Z0-9_.]*)\\}\\}/g, (_match, key) => {\n const next = String(key).split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') return undefined;\n return (current as Record<string, unknown>)[part];\n }, source);\n return next == null || next === '' ? '' : encodeURIComponent(String(next));\n });\n }\n\n private resolveTemplateValue(value: unknown, source: Record<string, unknown>): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n\n const raw = value.trim();\n const match = raw.match(/^\\{\\{([a-zA-Z_][a-zA-Z0-9_.]*)\\}\\}$/);\n if (match) {\n return String(match[1]).split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') return undefined;\n return (current as Record<string, unknown>)[part];\n }, source) ?? '';\n }\n\n return value;\n }\n\n private resolvePageSize(): number {\n const value = Number(this.tab?.props?.['pageSize'] ?? 10);\n return Number.isFinite(value) && value > 0 ? Math.floor(value) : 10;\n }\n\n private resolveEditCondition(): string | undefined {\n const condition = String(this.tab?.props?.['editCondition'] || '').trim();\n return condition || undefined;\n }\n\n private resolveEditableCondition(): string | undefined {\n const condition = String(this.tab?.props?.['editableCondition'] || '').trim();\n return condition || this.resolveEditCondition();\n }\n\n private notify(message: string, variant: 'success' | 'error' | 'warning'): void {\n this.host?.notify(message, variant, 2800);\n }\n}\n","<section class=\"space-y-4\">\n @if (tableHeaderActions.length) {\n <div class=\"flex justify-end gap-2\">\n @for (action of tableHeaderActions; track action.id) {\n <ui-button\n [variant]=\"action.variant || 'ghost'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n type=\"button\"\n (click)=\"onHeaderAction(action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n\n <app-ui-table\n [data]=\"tableData()\"\n [columns]=\"tableColumns\"\n [isLoading]=\"isTableLoading\"\n [disablePaging]=\"disablePaging\"\n [rowClickable]=\"rowClickable\"\n (pageChange)=\"onTablePageChange($event)\"\n (actionClick)=\"onTableAction($event)\"\n (rowClick)=\"onTableRowClick($event)\"\n (cellChange)=\"onTableCellChange($event)\"\n ></app-ui-table>\n\n @if (activeFormTarget(); as target) {\n <forms-action-form-modal\n [isOpen]=\"true\"\n [formId]=\"target.formId\"\n [recordId]=\"target.recordId\"\n [initialValue]=\"target.initialValue\"\n (closed)=\"closeFormAction()\"\n (completed)=\"onFormCompleted()\"\n ></forms-action-form-modal>\n }\n</section>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"maro-tech-card.mjs","sources":["../../../src/lib/card-events.ts","../../../src/lib/components/card-section-header.component.ts","../../../src/lib/tabs/html/html-tab.component.ts","../../../src/lib/tabs/html/html-tab.component.html","../../../src/lib/tabs/images/images-viewer/images-viewer.component.ts","../../../src/lib/tabs/images/images-viewer/images-viewer.component.html","../../../src/lib/tabs/details-grid/details-grid.component.ts","../../../src/lib/tabs/details-grid/details-grid.component.html","../../../src/lib/tabs/images/images.component.ts","../../../src/lib/tabs/images/images.component.html","../../../src/lib/card-tab-registry.token.ts","../../../src/lib/layouts/panels/ui-card-panels-layout.component.ts","../../../src/lib/layouts/panels/ui-card-panels-layout.component.html","../../../src/lib/layouts/tabs/ui-card-tabs-layout.component.ts","../../../src/lib/layouts/tabs/ui-card-tabs-layout.component.html","../../../src/lib/card.component.ts","../../../src/lib/card.component.html","../../../src/lib/card-host.token.ts","../../../src/lib/card-api.ts","../../../src/lib/tabs/documents/documents.service.ts","../../../src/lib/tabs/documents/upload-modal/documents-upload-modal.component.ts","../../../src/lib/tabs/documents/upload-modal/documents-upload-modal.component.html","../../../src/lib/tabs/documents/text-modal/documents-text-modal.component.ts","../../../src/lib/tabs/documents/text-modal/documents-text-modal.component.html","../../../src/lib/tabs/documents/image-preview-modal/documents-image-preview-modal.component.ts","../../../src/lib/tabs/documents/image-preview-modal/documents-image-preview-modal.component.html","../../../src/lib/tabs/documents/documents.component.ts","../../../src/lib/tabs/documents/documents.component.html","../../../src/lib/tabs/history/history-tab.component.ts","../../../src/lib/tabs/history/history-tab.component.html","../../../src/lib/tabs/table/card-table-services.ts","../../../src/lib/tabs/table/card-table.component.ts","../../../src/lib/tabs/table/card-table.component.html","../../../src/maro-tech-card.ts"],"sourcesContent":["import type { UiEntityCardAction } from './card-host.token';\n\nexport interface CardActionContext {\n entity: string;\n recordId?: string;\n data?: Record<string, unknown> | null;\n}\n\nexport const CARD_ACTION_REQUESTED = 'card.action.requested';\nexport const CARD_ACTION_STARTED = 'card.action.started';\nexport const CARD_ACTION_COMPLETED = 'card.action.completed';\nexport const CARD_ACTION_FINISHED = 'card.action.finished';\nexport const ENTITY_UPDATED = 'entity.updated';\n\nexport interface CardActionRequestedEvent {\n action: UiEntityCardAction;\n context: CardActionContext;\n}\n\nexport interface CardActionLifecycleEvent {\n actionId: string;\n context: CardActionContext;\n}\n\nexport interface EntityUpdatedEvent {\n entity?: string;\n recordId?: string;\n source?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EventBus, UiButtonComponent } from '@maro-tech/core';\nimport type { UiEntityCardAction } from '../card-host.token';\nimport {\n CARD_ACTION_FINISHED,\n CARD_ACTION_REQUESTED,\n CardActionLifecycleEvent,\n CardActionRequestedEvent,\n} from '../card-events';\n\n@Component({\n selector: 'app-card-section-header',\n standalone: true,\n imports: [CommonModule, UiButtonComponent],\n template: `\n @if (variant() === 'tabs') {\n <header class=\"mb-4 flex justify-end\">\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of actions(); track trackAction($index, action); let i = $index) {\n <ui-button\n [variant]=\"i === 0 ? 'primary' : 'ghost'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"isActionPending(action)\"\n (click)=\"onActionClick(action)\"\n >\n {{ isActionPending(action) ? 'Зачекайте...' : action.label }}\n </ui-button>\n }\n </div>\n </header>\n } @else {\n <header class=\"mb-4 flex flex-col gap-3 border-b border-slate-100 pb-3 md:flex-row md:items-center md:justify-between\">\n @if (title()) {\n <h3 class=\"text-lg font-semibold text-slate-900\">{{ title() }}</h3>\n } @else {\n <span></span>\n }\n\n @if (actions().length) {\n <div class=\"flex flex-wrap gap-2 md:justify-end\">\n @for (action of actions(); track trackAction($index, action); let i = $index) {\n <ui-button\n [variant]=\"i === 0 ? 'primary' : 'ghost'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n [disabled]=\"isActionPending(action)\"\n (click)=\"onActionClick(action)\"\n >\n {{ isActionPending(action) ? 'Зачекайте...' : action.label }}\n </ui-button>\n }\n </div>\n }\n </header>\n }\n `,\n})\nexport class CardSectionHeaderComponent {\n readonly variant = input<'tabs' | 'panels'>('panels');\n readonly title = input<string>('');\n readonly actions = input<UiEntityCardAction[]>([]);\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly data = input<Record<string, unknown> | null>(null);\n\n private readonly eventBus = inject(EventBus);\n private readonly destroyRef = inject(DestroyRef);\n private readonly pendingActionIdSignal = signal('');\n\n constructor() {\n this.eventBus.on<CardActionLifecycleEvent>(CARD_ACTION_FINISHED)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (this.matchesContext(event.context)) {\n this.pendingActionIdSignal.set('');\n }\n });\n }\n\n trackAction(_: number, action: UiEntityCardAction): string {\n return action.id || `${action.label}:${action.type}:${action.api || ''}:${action.formId || ''}`;\n }\n\n isActionPending(action: UiEntityCardAction): boolean {\n const pendingId = String(this.pendingActionIdSignal() || '').trim();\n const actionId = String(action.id || '').trim();\n return !!pendingId && !!actionId && pendingId === actionId;\n }\n\n onActionClick(action: UiEntityCardAction): void {\n const context = {\n entity: this.entity(),\n recordId: this.recordId() || undefined,\n data: this.data(),\n };\n this.pendingActionIdSignal.set(String(action.id || '').trim());\n this.eventBus.emit<CardActionRequestedEvent>(CARD_ACTION_REQUESTED, { action, context });\n }\n\n private matchesContext(context: { entity: string; recordId?: string }): boolean {\n return context.entity === this.entity()\n && (!context.recordId || context.recordId === this.recordId());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input } from '@angular/core';\nimport { EventBus } from '@maro-tech/core';\nimport { UiCardTabConfig } from '../../card.models';\nimport type { UiEntityCardAction } from '../../card-host.token';\nimport { CARD_ACTION_REQUESTED, CardActionRequestedEvent } from '../../card-events';\n\n@Component({\n selector: 'app-card-html-tab',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './html-tab.component.html',\n})\nexport class CardHtmlTabComponent {\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tab = input<UiCardTabConfig | null>(null);\n readonly data = input<Record<string, unknown> | null>(null);\n\n private readonly eventBus = inject(EventBus);\n\n readonly html = computed(() => this.tab()?.html || '');\n\n onClick(event: MouseEvent): void {\n this.dispatchFromEvent(event);\n }\n\n onKeydown(event: Event): void {\n this.dispatchFromEvent(event as KeyboardEvent);\n }\n\n private dispatchFromEvent(event: MouseEvent | KeyboardEvent): void {\n const target = event.target as HTMLElement | null;\n const actionElement = target?.closest?.('[class*=\"card-action-\"]') as HTMLElement | null;\n if (!actionElement) return;\n\n const action = this.resolveAction(actionElement);\n if (!action) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.eventBus.emit<CardActionRequestedEvent>(CARD_ACTION_REQUESTED, {\n action,\n context: {\n entity: this.entity(),\n recordId: this.recordId() || undefined,\n data: this.data(),\n },\n });\n }\n\n private resolveAction(actionElement: HTMLElement | null): UiEntityCardAction | null {\n const tab = this.tab();\n const actions = Array.isArray(tab?.actions) ? tab.actions : [];\n if (!actions.length) return null;\n\n const actionId = Array.from(actionElement?.classList || [])\n .find((className) => className.startsWith('card-action-'))\n ?.slice('card-action-'.length)\n .trim();\n if (!actionId) return null;\n\n return actions.find((item) => String(item.id || '').trim() === actionId) || null;\n }\n}\n","<section\n [attr.data-card-tab-id]=\"tab()?.id || ''\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onKeydown($event)\"\n (keydown.space)=\"onKeydown($event)\"\n>\n <div [innerHTML]=\"html()\"></div>\n</section>\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, effect, input, output, signal } from '@angular/core';\n\n@Component({\n selector: 'app-images-viewer',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './images-viewer.component.html',\n})\nexport class ImagesViewerComponent {\n readonly urls = input<string[]>([]);\n readonly initialIndex = input(0);\n readonly currentIndex = signal(0);\n\n readonly closed = output<void>();\n\n constructor() {\n effect(() => {\n const urls = this.urls();\n if (!urls.length) {\n this.currentIndex.set(0);\n return;\n }\n\n const maxIndex = urls.length - 1;\n const startIndex = Math.max(0, Math.min(this.initialIndex(), maxIndex));\n this.currentIndex.set(startIndex);\n });\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.closed.emit();\n }\n\n @HostListener('document:keydown.arrowleft')\n onArrowLeft(): void {\n this.showPreviousImage();\n }\n\n @HostListener('document:keydown.arrowright')\n onArrowRight(): void {\n this.showNextImage();\n }\n\n closeViewer(): void {\n this.closed.emit();\n }\n\n showPreviousImage(): void {\n const total = this.urls().length;\n if (total <= 1) return;\n this.currentIndex.set((this.currentIndex() - 1 + total) % total);\n }\n\n showNextImage(): void {\n const total = this.urls().length;\n if (total <= 1) return;\n this.currentIndex.set((this.currentIndex() + 1) % total);\n }\n\n get imageViewerTransform(): string {\n return `translate3d(-${this.currentIndex() * 100}%, 0, 0)`;\n }\n\n get imageViewerTransitionStyle(): string {\n return 'transform 320ms cubic-bezier(0.22, 1, 0.36, 1)';\n }\n\n getThumbnailUrl(url: string): string {\n const match = String(url || '').match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : url;\n }\n}\n","<div class=\"fixed inset-0 z-[2300] flex items-center justify-center bg-black/80 p-3 md:p-4\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Перегляд фото\">\n <button type=\"button\" class=\"absolute inset-0\" aria-label=\"Закрити перегляд\" (click)=\"closeViewer()\"></button>\n <div class=\"relative z-[1] flex h-full w-full max-w-[1500px] flex-col items-center justify-center gap-4\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"absolute right-2 top-2 z-20 inline-flex h-11 w-11 items-center justify-center rounded-full bg-white/90 text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.22)] transition hover:bg-white md:right-3 md:top-3\"\n aria-label=\"Закрити\"\n (click)=\"closeViewer()\">\n ✕\n </button>\n\n <div class=\"relative flex min-h-0 w-full flex-1 items-center justify-center overflow-hidden rounded-[18px]\">\n <div class=\"h-full w-full overflow-hidden rounded-[18px]\">\n <div\n class=\"flex h-full w-full\"\n style=\"will-change: transform; backface-visibility: hidden;\"\n [style.transition]=\"imageViewerTransitionStyle\"\n [style.transform]=\"imageViewerTransform\">\n @for (url of urls(); track $index; let idx = $index) {\n <div class=\"flex h-full w-full min-w-full shrink-0 items-center justify-center overflow-hidden\">\n <img\n [src]=\"idx === currentIndex() ? url : getThumbnailUrl(url)\"\n [attr.alt]=\"'Фото ' + (idx + 1)\"\n [attr.loading]=\"idx === currentIndex() ? 'eager' : 'lazy'\"\n decoding=\"async\"\n class=\"block max-h-[74vh] max-w-[96vw] object-contain md:max-h-[78vh]\">\n </div>\n }\n </div>\n </div>\n\n @if (urls().length > 1) {\n <button type=\"button\" class=\"absolute left-0 top-0 z-10 flex h-full w-1/4 min-w-12 items-center justify-start pl-2 md:pl-3\" aria-label=\"Попереднє фото\" (click)=\"showPreviousImage()\">\n <span class=\"inline-flex h-11 w-11 items-center justify-center rounded-full bg-white/90 text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.22)] transition hover:bg-white\">‹</span>\n </button>\n <button type=\"button\" class=\"absolute right-0 top-0 z-10 flex h-full w-1/4 min-w-12 items-center justify-end pr-2 md:pr-3\" aria-label=\"Наступне фото\" (click)=\"showNextImage()\">\n <span class=\"inline-flex h-11 w-11 items-center justify-center rounded-full bg-white/90 text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.22)] transition hover:bg-white\">›</span>\n </button>\n }\n </div>\n\n @if (urls().length > 1) {\n <div class=\"flex w-full flex-col items-center gap-3 pb-1 md:pb-2\">\n <div class=\"flex max-w-[92vw] flex-wrap justify-center gap-2 md:max-w-[80vw]\">\n @for (url of urls(); track url; let idx = $index) {\n <button\n type=\"button\"\n class=\"h-14 w-14 overflow-hidden rounded-xl border bg-white p-1 transition\"\n [class.border-slate-900]=\"idx === currentIndex()\"\n [class.shadow-[0_0_0_2px_rgba(15,23,42,0.16)]]=\"idx === currentIndex()\"\n [class.border-slate-300]=\"idx !== currentIndex()\"\n [attr.aria-label]=\"'Фото ' + (idx + 1)\"\n (click)=\"currentIndex.set(idx)\">\n <img class=\"block aspect-square w-full rounded-lg object-contain\" [src]=\"getThumbnailUrl(url)\" [attr.alt]=\"'Мініатюра ' + (idx + 1)\" loading=\"lazy\" decoding=\"async\">\n </button>\n }\n </div>\n <div class=\"rounded-full bg-white/95 px-3 py-1.5 text-xs font-semibold text-slate-900 shadow-[0_12px_28px_rgba(15,23,42,0.2)]\">\n {{ currentIndex() + 1 }} / {{ urls().length }}\n </div>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, signal } from '@angular/core';\n\nimport { UiCardTabConfig, UiCardTabField } from '../../card.models';\nimport { ImagesViewerComponent } from '../images/images-viewer/images-viewer.component';\n\ninterface UiDetailsGridDisplayField extends UiCardTabField {\n displayValue: string;\n imageSrc?: string | null;\n}\n\n@Component({\n selector: 'app-details-grid',\n standalone: true,\n imports: [CommonModule, ImagesViewerComponent],\n templateUrl: './details-grid.component.html',\n})\nexport class DetailsGridComponent {\n readonly tab = input<UiCardTabConfig | null>(null);\n readonly hasExplicitColumns = computed(() => this.resolveFields().some((field) => this.isValidColumnSpan(field.col)));\n readonly displayFields = computed<UiDetailsGridDisplayField[]>(() =>\n this.resolveFields().map((field) => ({\n ...field,\n displayValue: this.formatFieldValue(field),\n imageSrc: this.getImageSrc(field),\n }))\n );\n readonly selectedImageSrc = signal<string | null>(null);\n\n openViewer(imageSrc: string): void {\n this.selectedImageSrc.set(imageSrc);\n }\n\n closeViewer(): void {\n this.selectedImageSrc.set(null);\n }\n\n private resolveFields(): UiCardTabField[] {\n const value = this.tab()?.props?.['fields'];\n return Array.isArray(value) ? (value as UiCardTabField[]) : [];\n }\n\n getFieldColumnClass(field: UiCardTabField): string {\n if (!this.isValidColumnSpan(field.col)) return '';\n const span = Math.min(12, Math.trunc(Number(field.col)));\n const classes: Record<number, string> = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n };\n return classes[span] || '';\n }\n\n private isValidColumnSpan(value: number | undefined): boolean {\n const span = Number(value);\n return Number.isFinite(span) && span > 0;\n }\n\n private formatFieldValue(field: UiCardTabField): string {\n const value = field.value;\n if (value == null) return '-';\n if (typeof value === 'boolean') return value ? 'Так' : 'Ні';\n const raw = String(value).trim();\n if (!raw) return '-';\n\n if (field.type === 'date' || field.type === 'datetime') {\n return this.formatDate(raw, field.type === 'datetime');\n }\n if (field.type === 'enum') {\n return this.formatEnum(raw, field.enumMap);\n }\n\n return raw;\n }\n\n private getImageSrc(field: UiCardTabField): string | null {\n if (field.type !== 'image') return null;\n\n const value = field.value;\n if (value == null) return null;\n\n const raw = String(value).trim();\n if (!raw) return null;\n if (/^https?:\\/\\//i.test(raw) || raw.startsWith('/')) {\n return raw;\n }\n\n const base = String(field.imageBaseUrl || '/api/files').trim().replace(/\\/+$/, '');\n return `${base}/${encodeURIComponent(raw)}`;\n }\n\n private formatEnum(raw: string, enumMap?: Record<string, string>): string {\n if (enumMap?.[raw]) {\n return enumMap[raw];\n }\n if (raw === 'true') return 'Так';\n if (raw === 'false') return 'Ні';\n return raw;\n }\n\n private formatDate(value: string, withTime: boolean): string {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n return value;\n }\n\n return new Intl.DateTimeFormat('uk-UA', withTime\n ? { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }\n : { day: '2-digit', month: '2-digit', year: 'numeric' }).format(date);\n }\n}\n","<div class=\"grid gap-4\" [class.grid-cols-1]=\"!hasExplicitColumns()\" [class.sm:grid-cols-3]=\"!hasExplicitColumns()\" [class.sm:grid-cols-12]=\"hasExplicitColumns()\">\n @for (field of displayFields(); track $index) {\n <div class=\"rounded-2xl border border-slate-100 bg-slate-200 p-4\" [ngClass]=\"getFieldColumnClass(field)\" [class.flex]=\"field.type === 'image'\" [class.flex-col]=\"field.type === 'image'\" [class.min-h-64]=\"field.type === 'image'\">\n <p class=\"text-xs uppercase tracking-[0.18em] text-slate-500\">{{ field.label }}</p>\n @if (field.type === 'image') {\n @if (field.imageSrc) {\n <button type=\"button\" class=\"mt-2 block flex-1 cursor-zoom-in overflow-hidden rounded-xl border border-slate-200 bg-white\" [attr.aria-label]=\"'Переглянути ' + field.label\" (click)=\"openViewer(field.imageSrc)\">\n <img [src]=\"field.imageSrc\" [alt]=\"field.label\" class=\"h-full w-full object-cover\" />\n </button>\n } @else {\n <p class=\"mt-2 text-base font-semibold text-slate-900\">-</p>\n }\n } @else {\n <p class=\"mt-2 text-base font-semibold text-slate-900\">{{ field.displayValue ?? '-' }}</p>\n }\n </div>\n }\n</div>\n\n@if (selectedImageSrc(); as imageSrc) {\n <app-images-viewer [urls]=\"[imageSrc]\" (closed)=\"closeViewer()\" />\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, signal } from '@angular/core';\nimport { UiCardTabConfig } from '../../card.models';\nimport { ImagesViewerComponent } from './images-viewer/images-viewer.component';\n\n@Component({\n selector: 'app-images',\n standalone: true,\n imports: [CommonModule, ImagesViewerComponent],\n templateUrl: './images.component.html',\n})\nexport class ImagesComponent {\n readonly tab = input<UiCardTabConfig | null>(null);\n readonly data = input<Record<string, unknown> | null>(null);\n\n readonly isViewerOpen = signal(false);\n readonly viewerStartIndex = signal(0);\n\n readonly resolvedImageIds = computed(() => {\n const tab = this.tab();\n const props = tab?.props || {};\n const explicit = this.normalizeIds(props['imageIds']);\n if (explicit.length) return explicit;\n\n const key = String(props['images'] || 'images').trim();\n const value = key ? this.data()?.[key] : null;\n return this.normalizeIds(value);\n });\n\n readonly resolvedImageUrls = computed(() => {\n const tab = this.tab();\n const props = tab?.props || {};\n const explicit = Array.isArray(props['imageUrls'])\n ? props['imageUrls'].filter((item): item is string => typeof item === 'string')\n : [];\n if (explicit.length) return explicit;\n return this.resolvedImageIds().map((id) => this.resolveImageUrl(id)).filter((item): item is string => !!item);\n });\n\n readonly resolvedImagePreviewUrls = computed(() => this.resolvedImageUrls().map((url) => this.resolvePreviewUrl(url)));\n\n readonly resolvedImageMaxHeight = computed(() => {\n const value = Number(this.tab()?.props?.['maxHeight']);\n return Number.isFinite(value) && value > 0 ? value : 400;\n });\n\n openViewer(index: number): void {\n this.viewerStartIndex.set(Math.max(0, index));\n if (this.resolvedImageUrls().length) this.isViewerOpen.set(true);\n }\n\n closeViewer(): void {\n this.isViewerOpen.set(false);\n }\n\n private resolveImageUrl(imageIdOrUrl: string): string {\n const value = String(imageIdOrUrl || '').trim();\n if (!value) {\n return '';\n }\n if (value.startsWith('http://') || value.startsWith('https://') || value.startsWith('data:') || value.startsWith('/')) {\n return value;\n }\n\n const base = String(this.tab()?.props?.['imageBaseUrl'] || '/api/files').trim().replace(/\\/+$/, '');\n return `${base}/${encodeURIComponent(value)}`;\n }\n\n private resolvePreviewUrl(url: string): string {\n const match = url.match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : url;\n }\n\n private normalizeIds(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return Array.from(new Set(\n value\n .map((item) => String(item || '').trim())\n .filter(Boolean)\n ));\n }\n}\n","@if (resolvedImageUrls().length === 0) {\n <p class=\"text-sm text-slate-500\">Фото відсутні</p>\n} @else {\n <div\n class=\"grid gap-3\"\n [ngClass]=\"resolvedImageUrls().length === 1 ? 'grid-cols-1' : 'sm:grid-cols-2 lg:grid-cols-4'\"\n >\n @for (image of resolvedImagePreviewUrls(); track image; let i = $index) {\n <button\n type=\"button\"\n class=\"group block overflow-hidden rounded-2xl border border-slate-200 bg-slate-50 text-left\"\n [attr.aria-label]=\"'Переглянути фото ' + (i + 1)\"\n (click)=\"openViewer(i)\"\n >\n <img\n [src]=\"image\"\n [alt]=\"'Фото ' + (i + 1)\"\n loading=\"lazy\"\n decoding=\"async\"\n class=\"w-full object-cover transition duration-200 group-hover:scale-[1.02]\"\n [style.max-height.px]=\"resolvedImageMaxHeight()\"\n [ngClass]=\"resolvedImageUrls().length === 1 ? 'h-auto' : 'h-48'\"\n />\n </button>\n }\n </div>\n\n @if (isViewerOpen()) {\n <app-images-viewer\n [urls]=\"resolvedImageUrls()\"\n [initialIndex]=\"viewerStartIndex()\"\n (closed)=\"closeViewer()\"\n ></app-images-viewer>\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { UiCardTabConfig } from './card.models';\n\nexport interface UiCardTabRegistration {\n key: string;\n component: Type<unknown>;\n resolveInputs?: (tab: UiCardTabConfig, data?: Record<string, unknown> | null) => Record<string, unknown>;\n}\n\nexport const UI_CARD_TAB_REGISTRY = new InjectionToken<UiCardTabRegistration[]>('UI_CARD_TAB_REGISTRY');\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, forwardRef, inject, input, signal, Type } from '@angular/core';\n\nimport { CardComponent } from '../../card.component';\nimport { CardSectionHeaderComponent } from '../../components/card-section-header.component';\nimport { CardHtmlTabComponent } from '../../tabs/html/html-tab.component';\nimport { DetailsGridComponent } from '../../tabs/details-grid/details-grid.component';\nimport { ImagesComponent } from '../../tabs/images/images.component';\nimport type { UiEntityCardAction } from '../../card-host.token';\nimport { UiCardTabConfig, UiCardLayout } from '../../card.models';\nimport { UI_CARD_TAB_REGISTRY, UiCardTabRegistration } from '../../card-tab-registry.token';\n\ntype NestedCardConfig = {\n tabs: UiCardTabConfig[];\n layout: UiCardLayout;\n};\n\n@Component({\n selector: 'app-ui-card-panels-layout',\n standalone: true,\n imports: [CommonModule, forwardRef(() => CardComponent), CardSectionHeaderComponent, CardHtmlTabComponent, DetailsGridComponent, ImagesComponent],\n templateUrl: './ui-card-panels-layout.component.html',\n})\nexport class UiCardPanelsLayoutComponent {\n private readonly registry: UiCardTabRegistration[] = inject(UI_CARD_TAB_REGISTRY, { optional: true }) || [];\n\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tabs = input<UiCardTabConfig[]>([]);\n readonly data = input<Record<string, unknown> | null>(null);\n readonly embedded = input(false);\n\n readonly firstTab = computed(() => this.tabs()[0] || null);\n\n getActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n const value = tab.actions;\n return Array.isArray(value) ? value : [];\n }\n\n getVisibleActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n return this.getActions(tab).filter((action) => !action.hidden);\n }\n\n shouldShowPanelHeader(tab: UiCardTabConfig): boolean {\n return !this.embedded() && !tab.html && tab.component !== 'html' && tab.header !== false;\n }\n\n getColSpanClass(tab: UiCardTabConfig): string {\n if (tab.col == null) return 'md:col-span-12';\n\n const raw = Number(tab.col);\n const span = !Number.isFinite(raw) || raw <= 0 ? 12 : Math.min(12, Math.trunc(raw));\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] || 'md:col-span-12';\n }\n\n getNestedCardConfig(tab: UiCardTabConfig): NestedCardConfig | null {\n if (Array.isArray(tab.tabs) && tab.tabs.length) {\n return { tabs: tab.tabs, layout: tab.layout || 'panels' };\n }\n return null;\n }\n\n getNestedPanels(tab: UiCardTabConfig): UiCardTabConfig[] | null {\n return Array.isArray(tab.panels) && tab.panels.length ? tab.panels : null;\n }\n\n getRegisteredComponent(tab: UiCardTabConfig): Type<unknown> | null {\n const key = tab.component;\n if (!key || key === 'images' || key === 'detailsGrid' || key === 'html') return null;\n const found = this.registry.find((item) => item.key === key);\n return found?.component || null;\n }\n\n getRegisteredInputs(tab: UiCardTabConfig): Record<string, unknown> {\n const key = tab.component;\n if (!key) return { tab };\n const found: UiCardTabRegistration | undefined = this.registry.find((item) => item.key === key);\n if (!found?.resolveInputs) return { tab };\n return found.resolveInputs(tab, this.data());\n }\n}\n","@if (tabs().length) {\n @if (!embedded()) {\n <section class=\"space-y-4\">\n <ng-container *ngTemplateOutlet=\"panelGrid\"></ng-container>\n </section>\n } @else {\n <ng-container *ngTemplateOutlet=\"panelGrid\"></ng-container>\n }\n}\n\n<ng-template #panelGrid>\n <div class=\"grid grid-cols-1 gap-4 md:grid-cols-12\">\n @for (tab of tabs(); track tab.id) {\n <section\n [class.rounded-3xl]=\"!embedded()\"\n [class.border]=\"!embedded()\"\n [class.border-slate-200]=\"!embedded()\"\n [class.bg-white]=\"!embedded()\"\n [class.p-6]=\"!embedded()\"\n [class.min-w-0]=\"embedded()\"\n [ngClass]=\"getColSpanClass(tab)\"\n [attr.data-card-panel-id]=\"tab.id\"\n >\n @if (shouldShowPanelHeader(tab)) {\n <app-card-section-header\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [data]=\"data()\"\n [title]=\"tab.title\"\n [actions]=\"getVisibleActions(tab)\"\n ></app-card-section-header>\n }\n\n @if (getNestedCardConfig(tab); as nestedCard) {\n <app-card [entity]=\"entity()\" [recordId]=\"recordId()\" [tabs]=\"nestedCard.tabs\" [data]=\"data()\" [layout]=\"nestedCard.layout\"></app-card>\n } @else if (getNestedPanels(tab); as nestedPanels) {\n <app-card [entity]=\"entity()\" [recordId]=\"recordId()\" [tabs]=\"nestedPanels\" [data]=\"data()\" layout=\"panels\" [embedded]=\"true\"></app-card>\n } @else if (tab.component === 'detailsGrid') {\n <app-details-grid [tab]=\"tab\"></app-details-grid>\n } @else if (tab.component === 'images') {\n <app-images [tab]=\"tab\" [data]=\"data()\"></app-images>\n } @else if (tab.component === 'html') {\n <app-card-html-tab [tab]=\"tab\" [entity]=\"entity()\" [recordId]=\"recordId()\" [data]=\"data()\"></app-card-html-tab>\n } @else if (getRegisteredComponent(tab); as customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: getRegisteredInputs(tab)\"></ng-container>\n }\n </section>\n }\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, DestroyRef, forwardRef, inject, input, OnInit, signal, Type } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { CardComponent } from '../../card.component';\nimport { CardSectionHeaderComponent } from '../../components/card-section-header.component';\nimport { CardHtmlTabComponent } from '../../tabs/html/html-tab.component';\nimport { DetailsGridComponent } from '../../tabs/details-grid/details-grid.component';\nimport { ImagesComponent } from '../../tabs/images/images.component';\nimport type { UiEntityCardAction } from '../../card-host.token';\nimport { UiCardTabConfig } from '../../card.models';\nimport { UI_CARD_TAB_REGISTRY, UiCardTabRegistration } from '../../card-tab-registry.token';\n\n@Component({\n selector: 'app-ui-card-tabs-layout',\n standalone: true,\n imports: [CommonModule, forwardRef(() => CardComponent), CardSectionHeaderComponent, CardHtmlTabComponent, ImagesComponent, DetailsGridComponent],\n templateUrl: './ui-card-tabs-layout.component.html',\n})\nexport class UiCardTabsLayoutComponent implements OnInit {\n private readonly registry: UiCardTabRegistration[] = inject(UI_CARD_TAB_REGISTRY, { optional: true }) || [];\n private readonly destroyRef = inject(DestroyRef);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tabs = input<UiCardTabConfig[]>([]);\n readonly data = input<Record<string, unknown> | null>(null);\n readonly activeTabId = signal<string>('');\n\n ngOnInit(): void {\n this.route.queryParamMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params) => {\n const tabId = params.get('tab');\n if (tabId) this.activeTabId.set(tabId);\n });\n }\n\n readonly activeTab = computed(() => {\n const items = this.tabs() || [];\n if (!items.length) return null;\n const currentId = this.activeTabId();\n return items.find((item) => item.id === currentId) || items[0];\n });\n\n setActiveTab(id: string): void {\n this.activeTabId.set(id);\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { tab: id },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n getActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n const value = tab.actions;\n return Array.isArray(value) ? value : [];\n }\n\n getVisibleActions(tab: UiCardTabConfig): UiEntityCardAction[] {\n return this.getActions(tab).filter((action) => !action.hidden);\n }\n\n getColSpan(tab: UiCardTabConfig): number {\n if (tab.col == null) return 12;\n\n const raw = Number(tab.col);\n if (!Number.isFinite(raw) || raw <= 0) return 12;\n return Math.min(12, Math.trunc(raw));\n }\n\n getRegisteredComponent(tab: UiCardTabConfig): Type<unknown> | null {\n const key = tab.component;\n if (!key || key === 'images' || key === 'detailsGrid' || key === 'html') return null;\n const found = this.registry.find((item) => item.key === key);\n return found?.component || null;\n }\n\n getRegisteredInputs(tab: UiCardTabConfig): Record<string, unknown> {\n const key = tab.component;\n if (!key) return { tab };\n const found: UiCardTabRegistration | undefined = this.registry.find((item) => item.key === key);\n if (!found?.resolveInputs) return { tab };\n return found.resolveInputs(tab, this.data());\n }\n}\n","@if (tabs().length) {\n <section class=\"space-y-4\">\n <nav class=\"flex flex-wrap gap-2\" aria-label=\"Card tabs\">\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"rounded-xl border px-4 py-2 text-sm font-medium transition\"\n [class.border-slate-900]=\"activeTab()?.id === tab.id\"\n [class.bg-slate-900]=\"activeTab()?.id === tab.id\"\n [class.text-white]=\"activeTab()?.id === tab.id\"\n [class.border-slate-200]=\"activeTab()?.id !== tab.id\"\n [class.bg-white]=\"activeTab()?.id !== tab.id\"\n [class.text-slate-700]=\"activeTab()?.id !== tab.id\"\n (click)=\"setActiveTab(tab.id)\"\n >\n {{ tab.title }}\n </button>\n }\n </nav>\n\n @if (activeTab(); as tab) {\n <section\n [attr.data-card-tab-id]=\"tab.id\"\n >\n @if (getVisibleActions(tab).length) {\n <app-card-section-header\n variant=\"tabs\"\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [data]=\"data()\"\n [actions]=\"getVisibleActions(tab)\"\n ></app-card-section-header>\n }\n\n @if (tab.tabs?.length) {\n <app-card [entity]=\"entity()\" [recordId]=\"recordId()\" [tabs]=\"tab.tabs || []\" [data]=\"data()\" [layout]=\"tab.layout || 'panels'\"></app-card>\n } @else if (tab.component === 'images') {\n <app-images\n [tab]=\"tab\"\n [data]=\"data()\"\n ></app-images>\n } @else if (tab.component === 'detailsGrid') {\n <app-details-grid [tab]=\"tab\"></app-details-grid>\n } @else if (tab.component === 'html') {\n <app-card-html-tab [tab]=\"tab\" [entity]=\"entity()\" [recordId]=\"recordId()\" [data]=\"data()\"></app-card-html-tab>\n } @else if (getRegisteredComponent(tab); as customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: getRegisteredInputs(tab)\"></ng-container>\n }\n </section>\n }\n </section>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, input } from '@angular/core';\nimport { UiCardPanelsLayoutComponent } from './layouts/panels/ui-card-panels-layout.component';\nimport { UiCardTabsLayoutComponent } from './layouts/tabs/ui-card-tabs-layout.component';\nimport { UiCardLayoutInput, UiCardTabConfig } from './card.models';\n\n@Component({\n selector: 'app-card',\n standalone: true,\n imports: [CommonModule, forwardRef(() => UiCardTabsLayoutComponent), forwardRef(() => UiCardPanelsLayoutComponent)],\n templateUrl: './card.component.html',\n})\nexport class CardComponent {\n readonly entity = input.required<string>();\n readonly recordId = input<string>('');\n readonly tabs = input<UiCardTabConfig[]>([]);\n readonly data = input<Record<string, unknown> | null>(null);\n readonly layout = input<UiCardLayoutInput>('panels');\n readonly embedded = input(false);\n\n}\n","@if (layout() === 'panels') {\n <app-ui-card-panels-layout\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [tabs]=\"tabs()\"\n [data]=\"data()\"\n [embedded]=\"embedded()\"\n ></app-ui-card-panels-layout>\n} @else {\n <app-ui-card-tabs-layout\n [entity]=\"entity()\"\n [recordId]=\"recordId()\"\n [tabs]=\"tabs()\"\n [data]=\"data()\"\n ></app-ui-card-tabs-layout>\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport type { UiCardLayoutInput } from './card.models';\n\nexport type ApiPluginMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\nexport interface ApiPluginConfig {\n api: string;\n method?: ApiPluginMethod;\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface UiEntityCardAction {\n id?: string;\n label: string;\n type: string;\n icon?: string;\n hidden?: boolean;\n html?: string;\n component?: string;\n formId?: string;\n size?: 'sm' | 'md' | 'lg';\n api?: string;\n template?: string;\n method?: ApiPluginMethod;\n title?: string;\n text?: string;\n submit?: boolean | string;\n payload?: Record<string, unknown>;\n redirectEntity?: string;\n condition?: string;\n}\n\nexport interface UiEntityCardTab {\n id: string;\n title: string;\n col?: number;\n layout?: UiCardLayoutInput;\n component?: string;\n html?: string;\n tabs?: UiEntityCardTab[];\n panels?: UiEntityCardTab[];\n actions?: UiEntityCardAction[];\n props?: Record<string, unknown> & {\n imageUrls?: string[];\n imageIds?: string[];\n images?: string;\n recordId?: string;\n recordIdKey?: string;\n imageBaseUrl?: string;\n fields?: Array<Record<string, unknown>>;\n warehouseId?: number | string;\n [key: string]: unknown;\n };\n}\n\nexport interface UiEntityCardResponse {\n meta?: Record<string, unknown>;\n title: string;\n layout?: UiCardLayoutInput;\n actions?: UiEntityCardAction[];\n viewActions?: {\n read: boolean;\n create: boolean;\n edit: boolean;\n delete: boolean;\n hasFormTemplate: boolean;\n };\n tabs?: UiEntityCardTab[];\n data?: Record<string, unknown>;\n}\n\nexport interface UiEntityCardHost {\n getCardView(entity: string, id: string): Observable<UiEntityCardResponse>;\n getFormView(entity: string, id: string): Observable<Record<string, unknown>>;\n callApi(config: ApiPluginConfig): Observable<unknown>;\n deleteCard(entity: string, id: string): Observable<void>;\n notify(message: string, variant: 'success' | 'error' | 'warning', durationMs?: number): void;\n goBack(entity: string, queryParams?: Record<string, unknown>, returnUrl?: string): void;\n goToEdit(entity: string, id: string): void;\n}\n\nexport const UI_ENTITY_CARD_HOST = new InjectionToken<UiEntityCardHost>('UI_ENTITY_CARD_HOST');\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { InjectionToken, Injectable, inject } from '@angular/core';\nimport { Observable, shareReplay } from 'rxjs';\n\nexport const UI_CARD_API_BASE_URL = new InjectionToken<string>('UI_CARD_API_BASE_URL', { factory: () => '' });\n\nconst apiUrl = (baseUrl: string, path: string): string => `${String(baseUrl || '').replace(/\\/$/, '')}${path}`;\n\nexport interface CardDictionarySuggestItem { key: string; label: string; imageId?: string | null; }\n\n@Injectable({ providedIn: 'root' })\nexport class CardDictionaryService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n getSuggestByName(name: string): Observable<CardDictionarySuggestItem[]> {\n return this.http.get<CardDictionarySuggestItem[]>(apiUrl(this.baseUrl, `/api/suggest/${encodeURIComponent(name)}`));\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardCurrentUserService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n private readonly user$ = this.http.get<{ role?: string }>(apiUrl(this.baseUrl, '/api/users/me'), { withCredentials: true }).pipe(shareReplay(1));\n getCurrentUser(): Observable<{ role?: string }> { return this.user$; }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardImageService {\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n getPhotoLink(id: string): string | undefined {\n return id ? apiUrl(this.baseUrl, `/api/files/${encodeURIComponent(id)}/preview?scale=25`) : undefined;\n }\n}\n\nexport const cardApiResourceUrl = (baseUrl: string, path: string): string => apiUrl(baseUrl, path);\nexport const cardApiParams = (params: Record<string, string | number | undefined>): HttpParams =>\n Object.entries(params).reduce((result, [key, value]) => value == null ? result : result.set(key, String(value)), new HttpParams());\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UI_CARD_API_BASE_URL, cardApiParams, cardApiResourceUrl } from '../../card-api';\n\nexport interface UiEntityDocumentFile {\n id: string;\n entity: string;\n entityId: string;\n fileId: string;\n name: string | null;\n type: string;\n size: number | string;\n documentTypeId?: string | null;\n documentTypeLabel?: string | null;\n text?: string | null;\n recognitionStatus?: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | null;\n createdAt?: string;\n updatedAt?: string;\n downloadUrl: string;\n}\n\nexport interface UiEntityDocumentRecognitionStatus {\n id: string;\n text?: string | null;\n recognitionStatus?: UiEntityDocumentFile['recognitionStatus'];\n updatedAt?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class UiEntityDocumentsService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n\n list(entity: string, entityId: string): Observable<UiEntityDocumentFile[]> {\n const params = cardApiParams({ entity, entityId });\n\n return this.http.get<UiEntityDocumentFile[]>(cardApiResourceUrl(this.baseUrl, '/api/entity-files'), { params });\n }\n\n recognitionStatus(id: string): Observable<UiEntityDocumentRecognitionStatus> {\n return this.http.get<UiEntityDocumentRecognitionStatus>(\n cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}/recognition-status`),\n );\n }\n\n upload(file: File): Observable<{ id: string }> {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('fileName', file.name);\n return this.http.post<{ id: string }>(cardApiResourceUrl(this.baseUrl, '/api/files'), formData);\n }\n\n attach(payload: { entity: string; entityId: string; fileId: string; documentTypeId?: string | null }): Observable<UiEntityDocumentFile> {\n return this.http.post<UiEntityDocumentFile>(cardApiResourceUrl(this.baseUrl, '/api/entity-files'), payload);\n }\n\n recognize(id: string): Observable<UiEntityDocumentFile> {\n return this.http.post<UiEntityDocumentFile>(cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}/recognize`), {});\n }\n\n rename(id: string, name: string): Observable<UiEntityDocumentFile> {\n return this.http.patch<UiEntityDocumentFile>(cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}`), { name });\n }\n\n remove(id: string): Observable<void> {\n return this.http.delete<void>(cardApiResourceUrl(this.baseUrl, `/api/entity-files/${encodeURIComponent(id)}`));\n }\n\n resolveDownloadUrl(fileId: string): string {\n return cardApiResourceUrl(this.baseUrl, `/api/files/${encodeURIComponent(fileId)}`);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, ViewChild, effect, inject, input, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { forkJoin, switchMap } from 'rxjs';\nimport { LucideAngularModule } from 'lucide-angular';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiModalComponent } from '@maro-tech/core';\nimport { UiToastService } from '@maro-tech/core';\nimport { UiSelectComponent } from '@maro-tech/form';\nimport { UiEntityDocumentsService } from '../documents.service';\n\n@Component({\n selector: 'app-documents-upload-modal',\n standalone: true,\n imports: [CommonModule, FormsModule, LucideAngularModule, UiButtonComponent, UiModalComponent, UiSelectComponent],\n templateUrl: './documents-upload-modal.component.html',\n})\nexport class DocumentsUploadModalComponent {\n readonly isOpen = input(false);\n readonly entity = input<string>('');\n readonly id = input<string>('');\n readonly closed = output<void>();\n readonly saved = output<void>();\n\n readonly documentTypeId = signal<string | null>(null);\n readonly fileNames = signal<string[]>([]);\n readonly isUploading = signal(false);\n\n @ViewChild('uploadFileInput') private uploadFileInput?: ElementRef<HTMLInputElement>;\n\n private readonly documentsService = inject(UiEntityDocumentsService);\n private readonly toast = inject(UiToastService);\n private uploadFiles: File[] = [];\n\n private readonly isOpenEffect = effect(() => {\n if (!this.isOpen()) {\n this.resetState();\n }\n });\n\n close(): void {\n this.closed.emit();\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement | null;\n const files = Array.from(input?.files ?? []);\n this.uploadFiles = files;\n this.fileNames.set(files.map((file) => file.name));\n }\n\n onDocumentTypeChange(value: string | string[] | null): void {\n this.documentTypeId.set(Array.isArray(value) ? value[0] ?? null : value);\n }\n\n submitUpload(): void {\n const entity = String(this.entity() || '').trim();\n const id = String(this.id() || '').trim();\n if (!entity || !id) {\n this.toast.show('Немає entity або id запису', 'warning', 2400);\n return;\n }\n\n if (!this.uploadFiles.length) {\n this.toast.show('Оберіть файл для завантаження', 'warning', 2400);\n return;\n }\n\n this.isUploading.set(true);\n forkJoin(\n this.uploadFiles.map((file) =>\n this.documentsService.upload(file).pipe(\n switchMap((result) =>\n this.documentsService.attach({\n entity,\n entityId: id,\n fileId: result.id,\n documentTypeId: this.documentTypeId(),\n })\n )\n )\n )\n ).subscribe({\n next: () => {\n this.toast.show(this.uploadFiles.length > 1 ? `Додано документів: ${this.uploadFiles.length}` : 'Документ додано', 'success', 2200);\n this.isUploading.set(false);\n this.saved.emit();\n this.closed.emit();\n },\n error: (error) => {\n this.toast.show(error?.error?.message || 'Не вдалося додати документи', 'error', 3200);\n this.isUploading.set(false);\n },\n });\n }\n\n private resetState(): void {\n this.documentTypeId.set(null);\n this.fileNames.set([]);\n this.isUploading.set(false);\n this.uploadFiles = [];\n if (this.uploadFileInput) {\n this.uploadFileInput.nativeElement.value = '';\n }\n }\n}\n","<core-modal\n title=\"Додати документ\"\n [isOpen]=\"isOpen()\"\n (closed)=\"close()\"\n>\n <div class=\"space-y-4\">\n <forms-select\n [data]=\"'doc_type'\"\n name=\"uploadDocumentTypeId\"\n label=\"Тип документа\"\n hint=\"Необов'язково\"\n [ngModel]=\"documentTypeId()\"\n (ngModelChange)=\"onDocumentTypeChange($event)\"\n placeholder=\"Тип документа\"\n [fullWidth]=\"true\"\n [searchable]=\"true\"\n ></forms-select>\n\n <div class=\"space-y-2\">\n <label class=\"block text-sm font-medium text-slate-700\" for=\"document-files\">Файли</label>\n <input\n #uploadFileInput\n id=\"document-files\"\n type=\"file\"\n class=\"block w-full rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-sm text-slate-900 outline-none transition 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 focus:border-slate-400 focus:ring-2 focus:ring-slate-200\"\n multiple\n (change)=\"onFilesSelected($event)\"\n />\n @if (fileNames().length) {\n <div class=\"rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-600\">\n @for (fileName of fileNames(); track fileName) {\n <div class=\"truncate\">{{ fileName }}</div>\n }\n </div>\n } @else {\n <p class=\"text-xs text-slate-500\">Можна обрати один або декілька файлів.</p>\n }\n </div>\n </div>\n\n <div slot=\"footer\" class=\"flex justify-end gap-2\">\n <ui-button variant=\"ghost\" [disabled]=\"isUploading()\" (click)=\"close()\">Скасувати</ui-button>\n <ui-button variant=\"primary\" [disabled]=\"isUploading()\" (click)=\"submitUpload()\">\n {{ isUploading() ? 'Завантаження...' : 'Зберегти' }}\n </ui-button>\n </div>\n</core-modal>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiModalComponent } from '@maro-tech/core';\nimport { UiEntityDocumentFile } from '../documents.service';\n\n@Component({\n selector: 'app-documents-text-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, UiModalComponent],\n templateUrl: './documents-text-modal.component.html',\n})\nexport class DocumentsTextModalComponent {\n readonly isOpen = input(false);\n readonly document = input<UiEntityDocumentFile | null>(null);\n readonly closed = output<void>();\n readonly recognizeRequested = output<void>();\n\n close(): void {\n this.closed.emit();\n }\n\n requestRecognize(): void {\n this.recognizeRequested.emit();\n }\n\n isImage(): boolean {\n return String(this.document()?.type || '').toLowerCase().startsWith('image/');\n }\n\n hasDocumentHtml(): boolean {\n return !!String(this.document()?.text || '').trim();\n }\n\n getDocumentHtml(): string {\n const text = String(this.document()?.text || '').trim();\n if (!text) {\n return '';\n }\n if (this.looksLikeHtml(text)) {\n return text;\n }\n\n return this.escapeHtml(text).replace(/\\r?\\n/g, '<br>');\n }\n\n private looksLikeHtml(value: string): boolean {\n return /<\\/?[a-z][\\s\\S]*>/i.test(value);\n }\n\n private escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n}\n","<core-modal\n title=\"Розпізнані дані\"\n size=\"lg\"\n [isOpen]=\"isOpen()\"\n (closed)=\"close()\"\n>\n <div class=\"space-y-3\">\n @if (hasDocumentHtml()) {\n <div\n class=\"max-h-[32rem] overflow-auto rounded-xl border border-slate-200 bg-slate-50 px-4 py-4 text-sm text-slate-900\"\n [innerHTML]=\"getDocumentHtml()\"\n ></div>\n } @else {\n <div class=\"rounded-xl border border-dashed border-slate-200 bg-slate-50 px-4 py-6 text-sm text-slate-500\">\n Дані ще не розпізнані. Натисни “Розпізнати дані”.\n </div>\n }\n </div>\n\n <div slot=\"footer\" class=\"flex justify-end gap-2\">\n @if (isImage()) {\n <ui-button variant=\"secondary\" (click)=\"requestRecognize()\">Розпізнати ще раз</ui-button>\n }\n <ui-button variant=\"primary\" (click)=\"close()\">Закрити</ui-button>\n </div>\n</core-modal>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiModalComponent } from '@maro-tech/core';\nimport { UiEntityDocumentFile } from '../documents.service';\n\n@Component({\n selector: 'app-documents-image-preview-modal',\n standalone: true,\n imports: [CommonModule, UiButtonComponent, UiModalComponent],\n templateUrl: './documents-image-preview-modal.component.html',\n})\nexport class DocumentsImagePreviewModalComponent {\n readonly isOpen = input(false);\n readonly document = input<UiEntityDocumentFile | null>(null);\n readonly closed = output<void>();\n\n close(): void {\n this.closed.emit();\n }\n\n getPreviewUrl(url: string): string {\n const match = String(url || '').match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : url;\n }\n}\n","<core-modal\n [title]=\"document()?.name || 'Перегляд документа'\"\n size=\"lg\"\n [isOpen]=\"isOpen()\"\n (closed)=\"close()\"\n>\n @if (document()) {\n <div class=\"overflow-hidden rounded-2xl bg-slate-100\">\n <img\n [src]=\"getPreviewUrl(document()!.downloadUrl)\"\n [alt]=\"document()!.name || 'Документ'\"\n decoding=\"async\"\n class=\"max-h-[75vh] w-full object-contain\"\n >\n </div>\n }\n\n <div slot=\"footer\" class=\"flex justify-end gap-2\">\n <ui-button variant=\"primary\" (click)=\"close()\">Закрити</ui-button>\n </div>\n</core-modal>\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, effect, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { forkJoin, of, Subscription, timer } from 'rxjs';\nimport { catchError, exhaustMap, finalize, map, takeUntil, takeWhile } from 'rxjs/operators';\nimport { Eye, FileText, LucideAngularModule, Plus, Sparkles, Trash } from 'lucide-angular';\nimport { CardCurrentUserService, CardDictionaryService } from '../../card-api';\nimport { UiButtonComponent } from '@maro-tech/core';\nimport { UiToastService } from '@maro-tech/core';\nimport { UiConfirmService } from '@maro-tech/core';\nimport { UiEntityDocumentsService, UiEntityDocumentFile, UiEntityDocumentRecognitionStatus } from './documents.service';\nimport { DocumentsUploadModalComponent } from './upload-modal/documents-upload-modal.component';\nimport { UiSelectOption } from '@maro-tech/form';\nimport { DocumentsTextModalComponent } from './text-modal/documents-text-modal.component';\nimport { DocumentsImagePreviewModalComponent } from './image-preview-modal/documents-image-preview-modal.component';\n\nconst DOCUMENT_TYPE_DICTIONARY = 'doc_type';\nconst RECOGNITION_POLLING_TIMEOUT_MS = 5 * 60 * 1000;\n\n@Component({\n selector: 'app-documents',\n standalone: true,\n imports: [\n CommonModule,\n LucideAngularModule,\n UiButtonComponent,\n DocumentsUploadModalComponent,\n DocumentsTextModalComponent,\n DocumentsImagePreviewModalComponent,\n ],\n templateUrl: './documents.component.html',\n})\nexport class DocumentsComponent {\n readonly entity = input<string>('');\n readonly id = input<string>('');\n readonly documentTypeDictionary = DOCUMENT_TYPE_DICTIONARY;\n\n readonly documents = signal<UiEntityDocumentFile[]>([]);\n readonly documentTypeOptions = signal<UiSelectOption[]>([]);\n readonly isUploadOpen = signal(false);\n readonly isLoading = signal(false);\n readonly recognizingDocumentId = signal<string | null>(null);\n readonly isTextOpen = signal(false);\n readonly isImagePreviewOpen = signal(false);\n readonly textTarget = signal<UiEntityDocumentFile | null>(null);\n readonly imagePreviewTarget = signal<UiEntityDocumentFile | null>(null);\n readonly deletingDocumentId = signal<string | null>(null);\n readonly eyeIcon = Eye;\n readonly fileIcon = FileText;\n readonly plusIcon = Plus;\n readonly sparkleIcon = Sparkles;\n readonly deleteIcon = Trash;\n readonly isAdmin = toSignal(\n inject(CardCurrentUserService).getCurrentUser().pipe(\n map((user) => String(user.role || '').trim().toUpperCase() === 'ADMIN'),\n ),\n { initialValue: false },\n );\n\n private readonly documentsService = inject(UiEntityDocumentsService);\n private readonly dictionaryService = inject(CardDictionaryService);\n private readonly toast = inject(UiToastService);\n private readonly confirmService = inject(UiConfirmService);\n private readonly destroyRef = inject(DestroyRef);\n private loadedDocumentTypeDictionary = '';\n private recognitionPolling?: Subscription;\n private readonly reloadEffect = effect(() => {\n this.entity();\n this.id();\n this.loadDocuments();\n });\n private readonly documentTypeDictionaryEffect = effect(() => {\n const dictionaryName = this.documentTypeDictionary.trim();\n if (!dictionaryName) {\n this.loadedDocumentTypeDictionary = '';\n this.documentTypeOptions.set([]);\n return;\n }\n\n if (dictionaryName === this.loadedDocumentTypeDictionary) {\n return;\n }\n\n this.loadedDocumentTypeDictionary = dictionaryName;\n this.dictionaryService.getSuggestByName(dictionaryName).subscribe({\n next: (items) => {\n this.documentTypeOptions.set(\n (items || [])\n .map((item) => ({\n value: String(item.key || ''),\n label: String(item.label || item.key || ''),\n }))\n .filter((item) => !!item.value),\n );\n },\n error: () => {\n this.documentTypeOptions.set([]);\n },\n });\n });\n\n openUploadModal(): void {\n this.isUploadOpen.set(true);\n }\n\n closeUploadModal(): void {\n this.isUploadOpen.set(false);\n }\n\n openTextModal(document: UiEntityDocumentFile): void {\n this.textTarget.set(document);\n this.isTextOpen.set(true);\n }\n\n closeTextModal(): void {\n this.isTextOpen.set(false);\n this.textTarget.set(null);\n }\n\n openImagePreview(document: UiEntityDocumentFile): void {\n if (!this.isImage(document)) {\n return;\n }\n this.imagePreviewTarget.set(document);\n this.isImagePreviewOpen.set(true);\n }\n\n closeImagePreview(): void {\n this.isImagePreviewOpen.set(false);\n this.imagePreviewTarget.set(null);\n }\n\n recognizeText(document: UiEntityDocumentFile): void {\n if (!this.isImage(document)) {\n return;\n }\n if (document.recognitionStatus === 'COMPLETED') {\n return;\n }\n if (this.isDocumentRecognizing(document)) {\n return;\n }\n\n this.recognizingDocumentId.set(document.id);\n this.documentsService.recognize(document.id).subscribe({\n next: (updated) => {\n this.recognizingDocumentId.set(null);\n this.upsertDocument(updated);\n this.updateRecognitionPolling();\n this.toast.show('Розпізнавання запущено', 'success', 2200);\n if (this.textTarget()?.id === updated.id) {\n this.textTarget.set(updated);\n }\n },\n error: (error) => {\n this.recognizingDocumentId.set(null);\n this.toast.show(error?.error?.message || 'Не вдалося розпізнати дані', 'error', 3200);\n },\n });\n }\n\n removeDocument(document: UiEntityDocumentFile): void {\n if (!this.isAdmin() || this.deletingDocumentId()) {\n return;\n }\n\n this.confirmService.open({\n title: 'Видалити документ',\n text: `Видалити документ «${document.name || 'Без назви'}»? Дію не можна буде скасувати.`,\n submit: 'Видалити',\n danger: true,\n }).subscribe((confirmed) => {\n if (!confirmed) return;\n\n this.deletingDocumentId.set(document.id);\n this.documentsService.remove(document.id).subscribe({\n next: () => {\n this.documents.update((documents) => documents.filter((item) => item.id !== document.id));\n if (this.textTarget()?.id === document.id) this.closeTextModal();\n if (this.imagePreviewTarget()?.id === document.id) this.closeImagePreview();\n this.deletingDocumentId.set(null);\n this.updateRecognitionPolling();\n this.toast.show('Документ видалено', 'success', 2200);\n },\n error: (error) => {\n this.deletingDocumentId.set(null);\n this.toast.show(error?.error?.message || 'Не вдалося видалити документ', 'error', 3200);\n },\n });\n });\n }\n\n isDocumentRecognizing(document: UiEntityDocumentFile | null): boolean {\n return !!document?.id && this.recognizingDocumentId() === document.id;\n }\n\n trackDocument(_: number, document: UiEntityDocumentFile): string {\n return document.id;\n }\n\n getImagePreviewUrl(document: UiEntityDocumentFile): string {\n const match = String(document.downloadUrl || '').match(/^(.*\\/api\\/files\\/[^/?#]+)(?:\\?.*)?$/i);\n return match ? `${match[1]}/preview?scale=25` : document.downloadUrl;\n }\n\n private upsertDocument(updated: Pick<UiEntityDocumentFile, 'id'> & Partial<UiEntityDocumentFile>): void {\n this.documents.update((current) => {\n const next = current.slice();\n const index = next.findIndex((item) => item.id === updated.id);\n if (index >= 0) {\n next[index] = { ...next[index], ...updated };\n }\n return next;\n });\n }\n\n private loadDocuments(): void {\n const entity = this.resolveEntity();\n const id = this.resolveId();\n if (!entity || !id) {\n this.documents.set([]);\n return;\n }\n\n this.isLoading.set(true);\n this.documentsService.list(entity, id).subscribe({\n next: (rows) => {\n this.documents.set(rows || []);\n this.isLoading.set(false);\n this.updateRecognitionPolling();\n },\n error: () => {\n this.documents.set([]);\n this.isLoading.set(false);\n },\n });\n }\n\n formatSize(size?: number | string | null): string {\n const normalizedSize = Number(size);\n if (!Number.isFinite(normalizedSize)) return '-';\n size = normalizedSize;\n const bytes = Number(size || 0);\n if (!Number.isFinite(bytes) || bytes <= 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB'];\n let value = bytes;\n let index = 0;\n while (value >= 1024 && index < units.length - 1) {\n value /= 1024;\n index += 1;\n }\n return `${value >= 10 || index === 0 ? Math.round(value) : value.toFixed(1)} ${units[index]}`;\n }\n\n private resolveEntity(): string {\n return String(this.entity() || '').trim();\n }\n\n private resolveId(): string {\n return String(this.id() || '').trim();\n }\n\n isImage(document: UiEntityDocumentFile): boolean {\n return String(document.type || '').startsWith('image/');\n }\n\n isPdf(document: UiEntityDocumentFile): boolean {\n const type = String(document.type || '').toLowerCase();\n const name = String(document.name || '').toLowerCase();\n return type === 'application/pdf' || name.endsWith('.pdf');\n }\n\n getFileBadge(document: UiEntityDocumentFile): string {\n if (this.isPdf(document)) return 'PDF';\n if (this.isImage(document)) return 'IMG';\n const name = String(document.name || '').trim();\n if (name.includes('.')) {\n return name.split('.').pop()!.slice(0, 5).toUpperCase();\n }\n return 'FILE';\n }\n\n getDocumentTypeLabel(document: UiEntityDocumentFile): string {\n const label = String(document.documentTypeLabel || '').trim();\n if (label) return label;\n\n const documentTypeId = String(document.documentTypeId || '').trim();\n if (!documentTypeId) return '';\n\n return this.documentTypeOptions().find((option) => option.value === documentTypeId)?.label ?? documentTypeId;\n }\n\n reloadDocuments(): void {\n this.loadDocuments();\n }\n\n isRecognitionPending(document: UiEntityDocumentFile): boolean {\n return this.isImage(document) && (document.recognitionStatus === 'PENDING' || document.recognitionStatus === 'PROCESSING');\n }\n\n isRecognitionCompleted(document: UiEntityDocumentFile): boolean {\n return this.isImage(document) && document.recognitionStatus === 'COMPLETED';\n }\n\n getRecognitionStatusLabel(document: UiEntityDocumentFile): string {\n if (document.recognitionStatus === 'FAILED') return 'Не вдалося розпізнати';\n if (this.isRecognitionPending(document)) {\n return document.recognitionStatus === 'PROCESSING' ? 'Розпізнається у фоні' : 'Очікує розпізнавання';\n }\n return document.recognitionStatus === 'COMPLETED' ? 'Розпізнано' : '';\n }\n\n private updateRecognitionPolling(): void {\n if (!this.documents().some((document) => this.isRecognitionPending(document))) {\n this.recognitionPolling?.unsubscribe();\n this.recognitionPolling = undefined;\n return;\n }\n if (this.recognitionPolling) return;\n\n this.recognitionPolling = timer(2500, 4000)\n .pipe(\n exhaustMap(() => {\n const pendingDocuments = this.documents().filter((document) => this.isRecognitionPending(document));\n if (!pendingDocuments.length) return of([] as UiEntityDocumentRecognitionStatus[]);\n\n return forkJoin(\n pendingDocuments.map((document) =>\n this.documentsService.recognitionStatus(document.id).pipe(\n catchError(() => of(null)),\n ),\n ),\n ).pipe(\n map((statuses) => statuses.filter((status): status is UiEntityDocumentRecognitionStatus => !!status)),\n );\n }),\n map((statuses) => {\n statuses.forEach((status) => this.upsertDocument(status));\n return statuses;\n }),\n takeWhile(() => this.documents().some((document) => this.isRecognitionPending(document)), true),\n takeUntilDestroyed(this.destroyRef),\n takeUntil(timer(RECOGNITION_POLLING_TIMEOUT_MS)),\n finalize(() => {\n this.recognitionPolling = undefined;\n }),\n )\n .subscribe();\n }\n}\n","<div class=\"space-y-4\">\n <div>\n @if (isLoading()) {\n <div class=\"rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-4 py-8 text-center text-sm text-slate-500\">\n Завантаження документів...\n </div>\n } @else if (documents().length === 0) {\n <div class=\"rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-4 py-8 text-center text-sm text-slate-500\">\n Документи відсутні\n </div>\n } @else {\n <div class=\"grid gap-3\">\n @for (document of documents(); track trackDocument($index, document)) {\n <article class=\"flex flex-col gap-4 rounded-2xl border border-slate-200 bg-white p-4 shadow-sm sm:flex-row sm:items-center sm:justify-between\">\n @if (isImage(document)) {\n <button\n type=\"button\"\n class=\"block shrink-0 overflow-hidden rounded-2xl border border-slate-200 bg-slate-50 transition hover:border-slate-300 hover:bg-slate-100 h-28 w-40\"\n (click)=\"openImagePreview(document)\"\n >\n <img [src]=\"getImagePreviewUrl(document)\" [alt]=\"document.name || 'Документ'\" loading=\"lazy\" decoding=\"async\" class=\"h-full w-full object-cover\">\n </button>\n } @else {\n <a\n class=\"block shrink-0 overflow-hidden rounded-2xl border border-slate-200 bg-slate-50 transition hover:border-slate-300 hover:bg-slate-100\"\n [href]=\"document.downloadUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [class.h-28]=\"isPdf(document)\"\n [class.w-40]=\"isPdf(document)\"\n [class.h-20]=\"!isPdf(document)\"\n [class.w-24]=\"!isPdf(document)\"\n >\n @if (isPdf(document)) {\n <div class=\"flex h-full w-full flex-col items-center justify-center gap-2 px-3 py-4 text-slate-700\">\n <div class=\"flex h-11 w-11 items-center justify-center rounded-2xl bg-white text-slate-900 shadow-sm\">\n <lucide-icon [img]=\"fileIcon\"></lucide-icon>\n </div>\n <span class=\"text-xs font-semibold uppercase tracking-[0.18em] text-slate-600\">PDF</span>\n </div>\n } @else {\n <div class=\"flex h-full w-full flex-col items-center justify-center gap-2 px-3 py-4 text-slate-700\">\n <div class=\"flex h-11 w-11 items-center justify-center rounded-2xl bg-white text-slate-900 shadow-sm\">\n <lucide-icon [img]=\"fileIcon\"></lucide-icon>\n </div>\n <span class=\"text-[10px] font-semibold uppercase tracking-[0.18em] text-slate-500\">\n {{ getFileBadge(document) }}\n </span>\n </div>\n }\n </a>\n }\n\n <div class=\"min-w-0 flex-1\">\n <div class=\"flex flex-col gap-2 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <h4 class=\"truncate text-sm font-semibold text-slate-900\">\n {{ document.name || 'Без назви' }}\n </h4>\n @if (getDocumentTypeLabel(document)) {\n <span class=\"inline-flex shrink-0 items-center rounded-full border border-sky-200 bg-sky-50 px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-sky-700\">\n {{ getDocumentTypeLabel(document) }}\n </span>\n }\n </div>\n <p class=\"mt-1 text-xs text-slate-500\">\n {{ formatSize(document.size) }} · {{ document.type }}\n </p>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-2\">\n <ui-button variant=\"ghost\" size=\"sm\" (click)=\"openTextModal(document)\">\n <lucide-icon [img]=\"eyeIcon\"></lucide-icon>\n Перегляд\n </ui-button>\n @if (isImage(document)) {\n <ui-button variant=\"ghost\" size=\"sm\" [disabled]=\"isDocumentRecognizing(document) || isRecognitionPending(document) || isRecognitionCompleted(document)\" (click)=\"recognizeText(document)\">\n <lucide-icon [img]=\"sparkleIcon\"></lucide-icon>\n {{ isDocumentRecognizing(document) ? 'Розпізнавання...' : 'Розпізнати дані' }}\n </ui-button>\n }\n @if (isAdmin()) {\n <ui-button variant=\"ghost\" size=\"sm\" [disabled]=\"deletingDocumentId() === document.id\" (click)=\"removeDocument(document)\">\n <lucide-icon [img]=\"deleteIcon\"></lucide-icon>\n {{ deletingDocumentId() === document.id ? 'Видалення...' : 'Видалити' }}\n </ui-button>\n }\n </div>\n </div>\n\n <div class=\"mt-3 flex flex-wrap items-center justify-between gap-2\">\n <a\n class=\"inline-flex items-center rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-700 transition hover:border-slate-300 hover:bg-slate-50\"\n [href]=\"document.downloadUrl\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Завантажити\n </a>\n @if (isImage(document) && getRecognitionStatusLabel(document)) {\n <span\n class=\"inline-flex items-center rounded-full border px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.12em]\"\n [class.border-amber-200]=\"isRecognitionPending(document)\"\n [class.bg-amber-50]=\"isRecognitionPending(document)\"\n [class.text-amber-700]=\"isRecognitionPending(document)\"\n [class.border-rose-200]=\"document.recognitionStatus === 'FAILED'\"\n [class.bg-rose-50]=\"document.recognitionStatus === 'FAILED'\"\n [class.text-rose-700]=\"document.recognitionStatus === 'FAILED'\"\n [class.border-emerald-200]=\"document.recognitionStatus === 'COMPLETED'\"\n [class.bg-emerald-50]=\"document.recognitionStatus === 'COMPLETED'\"\n [class.text-emerald-700]=\"document.recognitionStatus === 'COMPLETED'\"\n >\n {{ getRecognitionStatusLabel(document) }}\n </span>\n }\n </div>\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <div class=\"flex flex-col gap-3 rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-4 py-4\">\n <div>\n <h4 class=\"text-sm font-semibold text-slate-900\">Завантаження документів у файлове сховище</h4>\n <p class=\"mt-1 text-xs text-slate-500\">Додайте нові файли до картки безпосередньо тут.</p>\n </div>\n\n <div class=\"flex w-full flex-col gap-2 sm:w-auto\">\n <ui-button variant=\"secondary\" size=\"sm\" (click)=\"openUploadModal()\">\n <lucide-icon [img]=\"plusIcon\"></lucide-icon>\n Завантажити документ\n </ui-button>\n </div>\n </div>\n</div>\n\n<app-documents-text-modal\n [isOpen]=\"isTextOpen()\"\n [document]=\"textTarget()\"\n (closed)=\"closeTextModal()\"\n (recognizeRequested)=\"textTarget() && recognizeText(textTarget()!)\"\n></app-documents-text-modal>\n\n<app-documents-upload-modal\n [isOpen]=\"isUploadOpen()\"\n [entity]=\"entity()\"\n [id]=\"id()\"\n (closed)=\"closeUploadModal()\"\n (saved)=\"reloadDocuments()\"\n></app-documents-upload-modal>\n\n<app-documents-image-preview-modal\n [isOpen]=\"isImagePreviewOpen()\"\n [document]=\"imagePreviewTarget()\"\n (closed)=\"closeImagePreview()\"\n></app-documents-image-preview-modal>\n","import { CommonModule } from '@angular/common';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Component, DestroyRef, effect, inject, input, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EventBus } from '@maro-tech/core';\nimport { ENTITY_UPDATED, EntityUpdatedEvent } from '../../card-events';\nimport { CardImageService, UI_CARD_API_BASE_URL, cardApiResourceUrl } from '../../card-api';\nimport { ImagesViewerComponent } from '../images/images-viewer/images-viewer.component';\n\ninterface AuditFieldChange {\n label: string;\n type?: string;\n from: { value: unknown; display: string; url?: string };\n to: { value: unknown; display: string; url?: string };\n}\n\ninterface AuditChange {\n action: string;\n entityId: string;\n entityType: string;\n changedFields: Record<string, AuditFieldChange>;\n}\n\ninterface AuditOperation {\n id: string;\n actorName?: string | null;\n description: string;\n actionCode: string;\n createdAt: string;\n changes: AuditChange[];\n}\n\n@Component({\n selector: 'app-history-tab',\n standalone: true,\n imports: [CommonModule, ImagesViewerComponent],\n templateUrl: './history-tab.component.html',\n})\nexport class HistoryTabComponent {\n readonly entity = input<string>('');\n readonly primaryEntity = input<string>('');\n readonly id = input<string>('');\n readonly entityLabels = input<Record<string, string>>({});\n\n readonly operations = signal<AuditOperation[]>([]);\n readonly isLoading = signal(false);\n readonly hasError = signal(false);\n readonly expandedOperationIds = signal<Set<string>>(new Set());\n readonly viewerUrls = signal<string[]>([]);\n readonly isViewerOpen = signal(false);\n\n private readonly http = inject(HttpClient);\n private readonly imageService = inject(CardImageService);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n private readonly eventBus = inject(EventBus);\n private readonly destroyRef = inject(DestroyRef);\n private readonly refreshSequence = signal(0);\n private lastRequestKey = '';\n\n constructor() {\n this.eventBus.on<EntityUpdatedEvent>(ENTITY_UPDATED)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (event.entity && event.entity !== this.entity()) return;\n if (event.recordId && event.recordId !== this.id()) return;\n this.refreshSequence.update((value) => value + 1);\n });\n\n // Document events contain the useful information in the related entity\n // change. Keep those details visible without requiring an extra click.\n effect(() => {\n const documentOperationIds = new Set(\n this.operations()\n .filter((operation) => operation.actionCode.startsWith('documents.'))\n .map((operation) => operation.id),\n );\n if (!documentOperationIds.size) return;\n const next = new Set(untracked(() => this.expandedOperationIds()));\n documentOperationIds.forEach((id) => next.add(id));\n this.expandedOperationIds.set(next);\n });\n }\n\n private readonly loadEffect = effect(() => {\n const entity = this.entity().trim();\n const id = this.id().trim();\n const refreshSequence = this.refreshSequence();\n const requestKey = `${entity}:${id}:${refreshSequence}`;\n if (requestKey === this.lastRequestKey) return;\n this.lastRequestKey = requestKey;\n\n if (!entity || !id) {\n this.operations.set([]);\n return;\n }\n\n this.isLoading.set(true);\n this.hasError.set(false);\n const cacheBuster = Date.now();\n this.http\n .get<AuditOperation[]>(cardApiResourceUrl(this.baseUrl, `/api/crud/${encodeURIComponent(entity)}/${encodeURIComponent(id)}/history?_ts=${cacheBuster}`), {\n headers: new HttpHeaders({\n 'Cache-Control': 'no-cache, no-store, max-age=0',\n Pragma: 'no-cache',\n }),\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (operations) => {\n this.operations.set(operations || []);\n this.isLoading.set(false);\n },\n error: () => {\n this.operations.set([]);\n this.hasError.set(true);\n this.isLoading.set(false);\n },\n });\n });\n\n toggleOperation(id: string): void {\n const next = new Set(this.expandedOperationIds());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.expandedOperationIds.set(next);\n }\n\n isExpanded(id: string): boolean {\n return this.expandedOperationIds().has(id);\n }\n\n getEntityLabel(entityType: string): string {\n const labels: Record<string, string> = {\n entity_files: 'Документ',\n files: 'Файл',\n };\n return this.entityLabels()[entityType] || labels[entityType] || entityType;\n }\n\n getActionLabel(action: string): string {\n const labels: Record<string, string> = {\n created: 'Створено',\n updated: 'Змінено',\n deleted: 'Видалено',\n };\n return labels[action] || action;\n }\n\n isImageField(field: AuditFieldChange): boolean {\n return field.type === 'image';\n }\n\n isHtmlField(field: AuditFieldChange): boolean {\n return field.type === 'html';\n }\n\n isFileField(field: AuditFieldChange): boolean {\n return field.type === 'file';\n }\n\n getImageUrls(value: unknown): string[] {\n const values = Array.isArray(value) ? value : [value];\n return values\n .map((item) => String(item ?? '').trim())\n .filter(Boolean)\n .map((id) => this.imageService.getPhotoLink(id) || '')\n .filter(Boolean);\n }\n\n openImageViewer(urls: string[]): void {\n if (!urls.length) return;\n this.viewerUrls.set(urls);\n this.isViewerOpen.set(true);\n }\n\n closeImageViewer(): void {\n this.isViewerOpen.set(false);\n }\n\n getAffectedSummary(operation: AuditOperation): string {\n const counts = new Map<string, number>();\n for (const change of this.getRelatedChanges(operation)) {\n counts.set(change.entityType, (counts.get(change.entityType) || 0) + 1);\n }\n return [...counts.entries()]\n .map(([type, count]) => `${this.getEntityLabel(type)}: ${count}`)\n .join(' · ');\n }\n\n getPrimaryChanges(operation: AuditOperation): AuditChange[] {\n const primaryTypes = new Set([this.entity(), this.primaryEntity()].filter(Boolean));\n return (operation.changes || []).filter((change) => primaryTypes.has(change.entityType));\n }\n\n getRelatedChanges(operation: AuditOperation): AuditChange[] {\n const primaryChanges = this.getPrimaryChanges(operation);\n const primaryTypes = new Set([this.entity(), this.primaryEntity()].filter(Boolean));\n return primaryChanges.length\n ? (operation.changes || []).filter((change) => !primaryTypes.has(change.entityType))\n : operation.changes || [];\n }\n\n}\n","<section class=\"space-y-4\">\n @if (isLoading()) {\n <div class=\"rounded-2xl border border-slate-200 bg-white p-6 text-sm text-slate-500\">\n Завантаження історії…\n </div>\n } @else if (hasError()) {\n <div class=\"rounded-2xl border border-red-200 bg-red-50 p-6 text-sm text-red-700\">\n Не вдалося завантажити історію змін.\n </div>\n } @else if (!operations().length) {\n <div class=\"rounded-2xl border border-slate-200 bg-white p-6 text-sm text-slate-500\">\n Історія змін поки порожня.\n </div>\n } @else {\n <div class=\"space-y-3\">\n @for (operation of operations(); track operation.id) {\n <article class=\"rounded-2xl border border-slate-200 bg-white p-5 shadow-sm\">\n <div class=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h3 class=\"text-sm font-semibold text-slate-900\">{{ operation.description }}</h3>\n @if (operation.actorName) {\n <p class=\"mt-1 text-sm text-slate-500\">{{ operation.actorName }}</p>\n }\n </div>\n <time class=\"text-xs text-slate-400\" [dateTime]=\"operation.createdAt\">\n {{ operation.createdAt | date: 'dd.MM.yyyy HH:mm' }}\n </time>\n </div>\n\n @if (getPrimaryChanges(operation).length) {\n <div class=\"mt-4 space-y-2 border-t border-slate-100 pt-4\">\n @for (change of getPrimaryChanges(operation); track change.entityId + change.entityType) {\n @for (field of (change.changedFields | keyvalue); track field.key) {\n <div class=\"flex flex-wrap items-center gap-2 text-sm\">\n <span class=\"font-medium text-slate-700\">{{ field.value.label }}</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.from.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.from.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-slate-100\" (click)=\"openImageViewer(getImageUrls(field.value.from.value))\" [attr.aria-label]=\"'Відкрити старе фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Старе фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.from.url) {\n <a class=\"font-medium text-sky-700 underline\" [href]=\"field.value.from.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.from.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-500\" [innerHTML]=\"field.value.from.display\"></div>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else {\n <span class=\"font-medium text-slate-900\">{{ field.value.from.display }}</span>\n }\n <span class=\"text-slate-400\">→</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.to.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.to.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-slate-100\" (click)=\"openImageViewer(getImageUrls(field.value.to.value))\" [attr.aria-label]=\"'Відкрити нове фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Нове фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.to.url) {\n <a class=\"font-medium text-sky-700 underline\" [href]=\"field.value.to.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.to.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-900\" [innerHTML]=\"field.value.to.display\"></div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else {\n <span class=\"font-medium text-slate-900\">{{ field.value.to.display }}</span>\n }\n </div>\n }\n }\n </div>\n }\n\n @if (getRelatedChanges(operation).length) {\n <div class=\"mt-4 border-t border-slate-100 pt-4\">\n <button\n type=\"button\"\n class=\"flex w-full items-center justify-between gap-3 text-left text-sm text-slate-600\"\n [attr.aria-expanded]=\"isExpanded(operation.id)\"\n (click)=\"toggleOperation(operation.id)\"\n >\n <span>\n Деталі змін:\n <span class=\"font-medium text-slate-900\">{{ getAffectedSummary(operation) }}</span>\n </span>\n <span class=\"text-lg leading-none text-slate-400\">{{ isExpanded(operation.id) ? '−' : '+' }}</span>\n </button>\n\n @if (isExpanded(operation.id)) {\n <div class=\"mt-4 space-y-4\">\n @for (change of getRelatedChanges(operation); track change.entityId + change.entityType) {\n <div class=\"rounded-xl bg-slate-50 p-3\">\n <p class=\"mb-2 text-xs font-semibold uppercase tracking-[0.16em] text-slate-500\">\n {{ getEntityLabel(change.entityType) }} · {{ getActionLabel(change.action) }}\n </p>\n @for (field of (change.changedFields | keyvalue); track field.key) {\n <div class=\"flex flex-wrap items-center gap-2 text-sm\">\n <span class=\"font-medium text-slate-700\">{{ field.value.label }}</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.from.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.from.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-white\" (click)=\"openImageViewer(getImageUrls(field.value.from.value))\" [attr.aria-label]=\"'Відкрити старе фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Старе фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.from.url) {\n <a class=\"text-sky-700 underline\" [href]=\"field.value.from.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.from.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-500\" [innerHTML]=\"field.value.from.display\"></div>\n } @else {\n <span class=\"text-slate-400\">Не задано</span>\n }\n } @else {\n <span class=\"text-slate-400\">{{ field.value.from.display }}</span>\n }\n <span class=\"text-slate-400\">→</span>\n @if (isImageField(field.value)) {\n @if (getImageUrls(field.value.to.value).length) {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (url of getImageUrls(field.value.to.value); track url; let imageIndex = $index) {\n <button type=\"button\" class=\"h-14 w-14 overflow-hidden rounded-lg border border-slate-200 bg-white\" (click)=\"openImageViewer(getImageUrls(field.value.to.value))\" [attr.aria-label]=\"'Відкрити нове фото ' + (imageIndex + 1)\">\n <img [src]=\"url\" [alt]=\"'Нове фото ' + (imageIndex + 1)\" class=\"h-full w-full object-cover\" />\n </button>\n }\n </div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isFileField(field.value)) {\n @if (field.value.to.url) {\n <a class=\"font-medium text-sky-700 underline\" [href]=\"field.value.to.url\" target=\"_blank\" rel=\"noopener noreferrer\">Завантажити файл</a>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else if (isHtmlField(field.value)) {\n @if (field.value.to.display !== 'Не задано') {\n <div class=\"prose prose-sm max-w-none text-slate-900\" [innerHTML]=\"field.value.to.display\"></div>\n } @else {\n <span class=\"font-medium text-slate-900\">Не задано</span>\n }\n } @else {\n <span class=\"font-medium text-slate-900\">{{ field.value.to.display }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </article>\n }\n </div>\n }\n</section>\n\n@if (isViewerOpen()) {\n <app-images-viewer [urls]=\"viewerUrls()\" (closed)=\"closeImageViewer()\" />\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, map } from 'rxjs';\nimport JsBarcode from 'jsbarcode';\nimport { UI_CARD_API_BASE_URL, cardApiResourceUrl } from '../../card-api';\n\nexport const ACTION_API = 'ACTION_API';\nexport const ACTION_FORM = 'ACTION_FORM';\nexport const ACTION_PRINT = 'ACTION_PRINT';\nexport type ActionType = string;\nexport const normalizeActionType = (value: string | null | undefined): string | null => {\n const raw = String(value || '').trim().toLowerCase();\n if (raw === 'api' || raw === ACTION_API.toLowerCase()) return ACTION_API;\n if (raw === 'form' || raw === ACTION_FORM.toLowerCase()) return ACTION_FORM;\n if (raw === 'print' || raw === ACTION_PRINT.toLowerCase()) return ACTION_PRINT;\n return raw ? raw.toUpperCase() : null;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class CardTableDataService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n\n getTableView(code: string, options: Record<string, unknown>): Observable<any> {\n let params = new HttpParams();\n for (const [key, value] of Object.entries(options)) {\n if (value !== undefined && value !== null && value !== '') params = params.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));\n }\n return this.http.get<any>(cardApiResourceUrl(this.baseUrl, `/api/crud/${encodeURIComponent(code)}`), { params }).pipe(\n map((response) => ({\n ...(response.config || response),\n rows: response.rows ?? response.items ?? [],\n pagination: {\n page: response.page,\n size: response.size,\n totalElements: response.total,\n totalPages: response.totalPages,\n },\n }))\n );\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardTableWarehouseService {\n private readonly http = inject(HttpClient);\n private readonly baseUrl = inject(UI_CARD_API_BASE_URL);\n\n getWarehouses(): Observable<{ items: any[] }> {\n return this.http.get<any[]>(cardApiResourceUrl(this.baseUrl, '/api/warehouses')).pipe(map((items) => ({ items: items || [] })));\n }\n\n getWarehouseItems(id: string | number): Observable<any[]> {\n return this.http.get<any[]>(cardApiResourceUrl(this.baseUrl, `/api/warehouses/${encodeURIComponent(id)}/items`));\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardTableBarcodeService {\n printBarcode(options: { barcode: string; title: string }): void {\n const barcode = String(options.barcode || '').trim();\n if (!barcode || typeof window === 'undefined') return;\n const printWindow = window.open('', '_blank', 'width=860,height=920');\n if (!printWindow) return;\n const barcodeSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n try {\n JsBarcode(barcodeSvg, barcode, { format: 'CODE128', displayValue: false, margin: 0, width: 2.1, height: 88, lineColor: '#0f172a', background: '#ffffff' });\n } catch {\n printWindow.close();\n return;\n }\n printWindow.document.write(`<!doctype html><html><head><title>${this.escape(options.title)}</title><style>body{font-family:Arial;text-align:center;padding:10mm}.barcode{width:58mm;margin:auto}.barcode svg{width:100%;height:18mm}</style></head><body><h2>${this.escape(options.title)}</h2><div class=\"barcode\">${barcodeSvg.outerHTML}</div></body></html>`);\n printWindow.document.close();\n printWindow.focus();\n printWindow.print();\n }\n\n private escape(value: string): string { return value.replace(/[&<>'\"]/g, (char) => ({ '&': '&', '<': '<', '>': '>', \"'\": ''', '\"': '"' }[char] || char)); }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CardTablePrintService {\n openPrintWindow(): Window | null { return typeof window === 'undefined' ? null : window.open('', '_blank', 'width=860,height=920'); }\n\n print(config: { html: string; title?: string }): boolean {\n const printWindow = this.openPrintWindow();\n return printWindow ? this.printInWindow(printWindow, config) : false;\n }\n\n printInWindow(printWindow: Window, config: { html: string; title?: string }): boolean {\n printWindow.document.write(`<!doctype html><html><head><title>${config.title || 'Друк'}</title></head><body>${config.html}</body></html>`);\n printWindow.document.close();\n printWindow.focus();\n printWindow.print();\n return true;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, computed, inject, signal } from '@angular/core';\nimport { UiActionFormModalComponent } from '@maro-tech/form';\nimport { UI_ENTITY_CARD_HOST, UiEntityCardHost, UiEntityCardAction } from '../../card-host.token';\nimport { UiCardTabConfig } from '../../card.models';\nimport { ENTITY_UPDATED, EntityUpdatedEvent } from '../../card-events';\nimport { UiTableCellChange, UiTableColumnConfig, UiTableFilter, UiTableResponse, UiTableRowAction, UiTableComponent } from '@maro-tech/table';\nimport { EventBus, UiButtonComponent } from '@maro-tech/core';\nimport { UiSelectOption } from '@maro-tech/form';\nimport { CardTableBarcodeService, CardTableDataService, CardTablePrintService, CardTableWarehouseService, ACTION_API, ACTION_FORM, ACTION_PRINT, ActionType, normalizeActionType } from './card-table-services';\n\ntype TableViewColumn = any;\ntype TableViewHeaderAction = any;\ntype TableViewResponse = any;\ntype TableViewRow = any;\n\ntype ConditionToken =\n | { type: 'identifier'; value: string }\n | { type: 'string'; value: string }\n | { type: 'number'; value: number }\n | { type: 'boolean'; value: boolean }\n | { type: 'null'; value: null }\n | { type: 'operator'; value: '==' | '!=' | '===' | '!==' | '&&' | '||' | '!' | '(' | ')' };\n\nconst getConditionPathValue = (source: any, pathRaw: string): any => {\n const path = String(pathRaw || '').trim();\n if (!path) return undefined;\n\n const parts = path.split('.');\n let current = source;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined;\n current = current[part];\n }\n return current;\n};\n\nconst evaluateCondition = (conditionRaw: string | undefined, context: Record<string, unknown>): boolean => {\n const condition = String(conditionRaw || '').trim();\n if (!condition) return true;\n\n const tokens: ConditionToken[] = [];\n let index = 0;\n\n const pushOperator = (value: ConditionToken['value']): void => {\n tokens.push({ type: 'operator', value } as ConditionToken);\n };\n\n while (index < condition.length) {\n const char = condition[index];\n\n if (/\\s/.test(char)) {\n index += 1;\n continue;\n }\n\n const nextThree = condition.slice(index, index + 3);\n const nextTwo = condition.slice(index, index + 2);\n if (nextThree === '===') {\n pushOperator('===');\n index += 3;\n continue;\n }\n if (nextThree === '!==') {\n pushOperator('!==');\n index += 3;\n continue;\n }\n if (nextTwo === '==') {\n pushOperator('==');\n index += 2;\n continue;\n }\n if (nextTwo === '!=') {\n pushOperator('!=');\n index += 2;\n continue;\n }\n if (nextTwo === '&&') {\n pushOperator('&&');\n index += 2;\n continue;\n }\n if (nextTwo === '||') {\n pushOperator('||');\n index += 2;\n continue;\n }\n if (char === '!' || char === '(' || char === ')') {\n pushOperator(char as ConditionToken['value']);\n index += 1;\n continue;\n }\n if (char === '\"' || char === \"'\") {\n const quote = char;\n index += 1;\n let value = '';\n let escaped = false;\n let closed = false;\n while (index < condition.length) {\n const current = condition[index];\n index += 1;\n if (escaped) {\n value += current;\n escaped = false;\n continue;\n }\n if (current === '\\\\') {\n escaped = true;\n continue;\n }\n if (current === quote) {\n closed = true;\n break;\n }\n value += current;\n }\n if (!closed) return true;\n tokens.push({ type: 'string', value });\n continue;\n }\n if (/[0-9.-]/.test(char)) {\n const match = condition.slice(index).match(/^-?\\d+(?:\\.\\d+)?/);\n if (match) {\n tokens.push({ type: 'number', value: Number(match[0]) });\n index += match[0].length;\n continue;\n }\n }\n if (/[A-Za-z_$]/.test(char)) {\n const match = condition.slice(index).match(/^[A-Za-z_$][A-Za-z0-9_.$-]*/);\n if (match) {\n const raw = match[0];\n const normalized = raw.toLowerCase();\n if (normalized === 'true' || normalized === 'false') {\n tokens.push({ type: 'boolean', value: normalized === 'true' });\n } else if (normalized === 'null') {\n tokens.push({ type: 'null', value: null });\n } else {\n tokens.push({ type: 'identifier', value: raw });\n }\n index += raw.length;\n continue;\n }\n }\n\n return true;\n }\n\n let tokenIndex = 0;\n const peek = (): ConditionToken | undefined => tokens[tokenIndex];\n const consume = (): ConditionToken | undefined => {\n const token = tokens[tokenIndex];\n tokenIndex += 1;\n return token;\n };\n const matchOperator = (...values: Array<ConditionToken['value']>): boolean => {\n const token = peek();\n if (token?.type !== 'operator') return false;\n if (!values.includes(token.value)) return false;\n tokenIndex += 1;\n return true;\n };\n const toBoolean = (value: unknown): boolean => {\n if (typeof value === 'string') return value.trim().length > 0;\n return Boolean(value);\n };\n const getValue = (identifierRaw: string): unknown => {\n const identifier = String(identifierRaw || '').trim();\n if (!identifier) return undefined;\n if (identifier === 'data') return context;\n if (identifier.startsWith('data.')) return getConditionPathValue(context, identifier.slice(5));\n return getConditionPathValue(context, identifier);\n };\n const parseExpression = (): unknown => parseOr();\n const parseOr = (): unknown => {\n let left = parseAnd();\n while (matchOperator('||')) {\n const right = parseAnd();\n left = toBoolean(left) || toBoolean(right);\n }\n return left;\n };\n const parseAnd = (): unknown => {\n let left = parseEquality();\n while (matchOperator('&&')) {\n const right = parseEquality();\n left = toBoolean(left) && toBoolean(right);\n }\n return left;\n };\n const parseEquality = (): unknown => {\n let left = parseUnary();\n while (true) {\n if (matchOperator('==')) {\n left = left == parseUnary();\n continue;\n }\n if (matchOperator('!=')) {\n left = left != parseUnary();\n continue;\n }\n if (matchOperator('===')) {\n left = left === parseUnary();\n continue;\n }\n if (matchOperator('!==')) {\n left = left !== parseUnary();\n continue;\n }\n break;\n }\n return left;\n };\n const parseUnary = (): unknown => {\n if (matchOperator('!')) {\n return !toBoolean(parseUnary());\n }\n return parsePrimary();\n };\n const parsePrimary = (): unknown => {\n const token = consume();\n if (!token) return undefined;\n if (token.type === 'operator' && token.value === '(') {\n const value = parseExpression();\n matchOperator(')');\n return value;\n }\n if (token.type === 'identifier') return getValue(token.value);\n return token.value;\n };\n\n return toBoolean(parseExpression());\n};\n\n@Component({\n selector: 'app-card-table',\n standalone: true,\n imports: [\n CommonModule,\n UiTableComponent,\n UiButtonComponent,\n UiActionFormModalComponent,\n ],\n templateUrl: './card-table.component.html',\n})\nexport class CardTableComponent implements OnChanges {\n @Input({ required: true }) tab!: UiCardTabConfig;\n @Input() data: Record<string, unknown> | null = null;\n\n private readonly tableViewsService = inject(CardTableDataService);\n private readonly warehouseService = inject(CardTableWarehouseService);\n private readonly barcodePrintService = inject(CardTableBarcodeService);\n private readonly eventBus = inject(EventBus);\n private readonly host = inject<UiEntityCardHost | null>(UI_ENTITY_CARD_HOST, { optional: true });\n private readonly actionBus = inject(CardTablePrintService);\n\n private readonly tableColumnsSignal = signal<UiTableColumnConfig[]>([]);\n private readonly tableRowsSignal = signal<Record<string, unknown>[]>([]);\n private readonly tablePaginationSignal = signal({ page: 0, pageSize: 10, total: 0 });\n private readonly tableHeaderActionsSignal = signal<TableViewHeaderAction[]>([]);\n private readonly editableColumnOptionsSignal = signal<Record<string, UiSelectOption[]>>({});\n private readonly isTableLoadingSignal = signal(false);\n private readonly isTableActionRunningSignal = signal(false);\n private readonly activeEditableCellSignal = signal<{ rowId: string; columnKey: string } | null>(null);\n private readonly activeFormTargetSignal = signal<{ formId: string; recordId: string; initialValue: Record<string, unknown> } | null>(null);\n readonly activeFormTarget = computed(() => this.activeFormTargetSignal());\n\n readonly tableData = computed<UiTableResponse<Record<string, unknown>>>(() => ({\n items: this.tableRowsSignal(),\n pagination: this.tablePaginationSignal(),\n }));\n\n private pageIndex = 0;\n private pageSize = 10;\n private sortField = '';\n private sortDirection: '' | 'asc' | 'desc' = '';\n private tableViewColumns: TableViewColumn[] = [];\n private editableColumnsLoaded = false;\n private refreshAfterFormCompleted = false;\n\n ngOnChanges(): void {\n this.pageIndex = 0;\n this.pageSize = this.resolvePageSize();\n this.sortField = '';\n this.sortDirection = '';\n this.editableColumnsLoaded = false;\n this.activeEditableCellSignal.set(null);\n this.editableColumnOptionsSignal.set({});\n this.loadTable();\n }\n\n get disablePaging(): boolean {\n const value = this.tab?.props?.['disablePaging'];\n return value === true || value === 'true';\n }\n\n get tableColumns(): UiTableColumnConfig[] {\n return this.tableColumnsSignal();\n }\n\n get tableHeaderActions(): TableViewHeaderAction[] {\n return this.tableHeaderActionsSignal();\n }\n\n get tableActions(): Array<{\n id?: string;\n label: string;\n icon?: string;\n variant?: 'primary' | 'ghost' | 'danger';\n type?: ActionType;\n component?: string;\n formId?: string;\n api?: string;\n method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n title?: string;\n text?: string;\n submit?: boolean | string;\n payload?: Record<string, unknown>;\n size?: 'sm' | 'md' | 'lg';\n }> {\n const blockActions = Array.isArray(this.tab?.actions) ? this.tab.actions : [];\n return [\n ...blockActions.map((action: any, index: number) => {\n const rawAction = action as UiEntityCardAction & { variant?: 'primary' | 'ghost' | 'danger' };\n return {\n ...action,\n variant: rawAction.variant || (index === 0 ? 'primary' : 'ghost'),\n };\n }),\n ...this.tableHeaderActions.map((action) => ({\n ...action,\n variant: 'ghost' as const,\n })),\n ];\n }\n\n get isTableLoading(): boolean {\n return this.isTableLoadingSignal();\n }\n\n get isTableActionRunning(): boolean {\n return this.isTableActionRunningSignal();\n }\n\n get rowClickable(): boolean {\n return this.isEditEnabled();\n }\n\n onTablePageChange(event: UiTableFilter): void {\n this.pageIndex = Math.max(0, Number(event['pageIndex'] ?? this.pageIndex) || 0);\n this.pageSize = Math.max(1, Number(event['pageSize'] ?? this.pageSize) || this.pageSize);\n const active = String(event['active'] ?? '').trim();\n this.sortField = this.tableViewColumns.find((column) => column.id === active)?.id || '';\n const direction = String(event['direction'] ?? '').toLowerCase();\n this.sortDirection = direction === 'asc' || direction === 'desc' ? direction : '';\n this.loadTable();\n }\n\n onTableAction(event: { action: UiTableRowAction; row: Record<string, unknown> }): void {\n if (normalizeActionType(event.action.type) === ACTION_PRINT || event.action.component === 'warehouseBarcodePrint' || event.action.template || event.action.id === 'print-certificate') {\n this.runPrintAction(event.action, event.row);\n return;\n }\n\n if (normalizeActionType(event.action.type) === ACTION_FORM && String(event.action.formId || '').trim()) {\n this.runFormAction(event.action, event.row);\n return;\n }\n\n if (!event.action.api) {\n return;\n }\n\n const payload = this.resolveTemplatePayload(event.action.payload || {}, event.row);\n this.runApiAction({\n api: this.resolveTemplateString(event.action.api, {\n ...event.row,\n ...payload,\n }),\n method: event.action.method || 'POST',\n payload,\n title: event.action.title,\n text: event.action.text,\n submit: event.action.submit,\n danger: event.action.danger,\n successMessage:\n event.action.id === 'issue'\n ? 'Матеріали списано зі складу'\n : event.action.id === 'delete'\n ? 'Позицію видалено'\n : 'Дію виконано',\n errorMessage: 'Не вдалося виконати дію',\n });\n }\n\n onHeaderAction(action: TableViewHeaderAction): void {\n if (!action?.formId) {\n if (action?.api) {\n this.runApiAction({\n api: action.api,\n method: action.method || 'POST',\n payload: this.resolveTemplatePayload(action.payload || {}, this.data || {}),\n title: action.title,\n text: action.text,\n submit: action.submit,\n danger: action.variant === 'danger',\n successMessage: 'Дію виконано',\n errorMessage: 'Не вдалося виконати дію',\n });\n }\n return;\n }\n\n this.runHeaderFormAction(action);\n }\n\n onTableRowClick(row: Record<string, unknown>): void {\n if (!this.isEditEnabled()) {\n return;\n }\n\n this.runRowEditAction(row);\n }\n\n onTableCellChange(event: UiTableCellChange<Record<string, unknown>>): void {\n const editableConfig = this.resolveEditableColumnsConfig().find((column) => column.key === event.column.key);\n if (!editableConfig) {\n return;\n }\n\n const rowId = String(event.row['id'] ?? '').trim();\n if (!rowId) {\n return;\n }\n\n const nextValue = String(event.value ?? '').trim();\n const nextRow = {\n ...event.row,\n [event.column.bindKey || event.column.key]: nextValue,\n };\n\n if (editableConfig.editor === 'select') {\n nextRow[event.column.key] =\n this.resolveEditableColumnOptions(event.column.key).find((option) => String(option.value ?? '').trim() === nextValue)?.label ?? '';\n }\n\n this.tableRowsSignal.update((rows) =>\n rows.map((row) => (String(row['id'] ?? '').trim() === rowId ? nextRow : row))\n );\n\n if (editableConfig.api) {\n this.saveEditableColumnChange(editableConfig, nextRow);\n }\n }\n\n onEditableCellActivate(row: Record<string, unknown>, columnKey: string, event: MouseEvent): void {\n event.stopPropagation();\n const rowId = String(row['id'] ?? '').trim();\n const key = String(columnKey || '').trim();\n if (!rowId || !key) {\n return;\n }\n\n this.activeEditableCellSignal.set({ rowId, columnKey: key });\n }\n\n isEditableCellActive(row: Record<string, unknown>, columnKey: string): boolean {\n const active = this.activeEditableCellSignal();\n return !!active && active.rowId === String(row['id'] ?? '').trim() && active.columnKey === String(columnKey || '').trim();\n }\n\n resolveEditableDisplayValue(row: Record<string, unknown>, column: UiTableColumnConfig): string {\n const rawValue = this.getCellValue(row, column.bindKey || column.key);\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n return '—';\n }\n\n if (column.editor === 'select') {\n const value = String(rawValue).trim();\n const option = this.resolveEditableColumnOptions(column.key).find((item) => String(item.value ?? '').trim() === value);\n return String(option?.label || rawValue).trim() || '—';\n }\n\n return String(rawValue);\n }\n\n private getCellValue(row: Record<string, unknown>, column: string): unknown {\n return row?.[column];\n }\n\n private runPrintAction(action: UiTableRowAction, row: Record<string, unknown>): void {\n const template = String(action.template || (action.id === 'print-certificate' ? 'print-certificate' : '')).trim();\n const recordId = String(row['id'] || '').trim();\n if (template && recordId) {\n const printWindow = this.actionBus.openPrintWindow();\n const entity = encodeURIComponent(this.resolveTableSource());\n const id = encodeURIComponent(recordId);\n const actionId = encodeURIComponent(template);\n this.host?.callApi({\n api: `/api/crud/${entity}/${id}/action/${actionId}`,\n method: 'GET',\n }).subscribe({\n next: (response) => {\n const html = String((response as { data?: { html?: unknown } })?.data?.html || '').trim();\n const title = String((response as { data?: { title?: unknown } })?.data?.title || action.label || 'Друк');\n if (!html) {\n printWindow?.close();\n this.notify('Шаблон друку порожній', 'error');\n return;\n }\n const config = { html, title };\n if (printWindow) this.actionBus.printInWindow(printWindow, config);\n else this.actionBus.print(config);\n },\n error: (error) => {\n printWindow?.close();\n this.notify(error?.error?.message || 'Не вдалося завантажити сертифікат', 'error');\n },\n });\n return;\n }\n\n const payload = this.resolveTemplatePayload(action.payload || {}, row);\n const barcode = String(payload['barcode'] ?? row['barcode'] ?? '').trim();\n if (!barcode) {\n this.notify('У рядку немає штрихкоду', 'warning');\n return;\n }\n\n const title = String(payload['title'] ?? row['name'] ?? this.tab?.title ?? 'Штрихкод').trim() || 'Штрихкод';\n this.barcodePrintService.printBarcode({ barcode, title });\n }\n\n closeFormAction(): void {\n this.activeFormTargetSignal.set(null);\n }\n\n refreshTable(): void {\n this.loadTable();\n }\n\n onFormCompleted(response: unknown): void {\n this.refreshAfterFormCompleted = true;\n this.applyFormResultToRow(response);\n }\n\n onFormClosed(): void {\n this.activeFormTargetSignal.set(null);\n this.activeEditableCellSignal.set(null);\n if (!this.refreshAfterFormCompleted) return;\n\n this.refreshAfterFormCompleted = false;\n this.loadTable();\n }\n\n private applyFormResultToRow(response: unknown): void {\n const target = this.activeFormTargetSignal();\n if (!target || !response || typeof response !== 'object') return;\n\n const responseData = (response as { data?: unknown }).data;\n if (!responseData || typeof responseData !== 'object') return;\n\n const data = responseData as Record<string, unknown>;\n const warehouse = data['warehouse'];\n const warehouseData = warehouse && typeof warehouse === 'object'\n ? warehouse as Record<string, unknown>\n : null;\n const warehouseId = String(warehouseData?.['id'] ?? data['warehouseId'] ?? '').trim();\n const warehouseItemId = String(data['id'] ?? '').trim();\n if (!warehouseId || !warehouseItemId) return;\n\n this.tableRowsSignal.update((rows) => rows.map((row) => {\n if (String(row['id'] ?? '').trim() !== target.recordId) return row;\n return {\n ...row,\n warehouse_id: warehouseId,\n warehouse_item_id: warehouseItemId,\n warehouse_position: String(warehouseData?.['name'] ?? data['name'] ?? '').trim(),\n };\n }));\n }\n\n private loadTable(): void {\n const table = this.resolveTableSource();\n this.isTableLoadingSignal.set(true);\n this.tableRowsSignal.set([]);\n this.tablePaginationSignal.set({ page: this.pageIndex, pageSize: this.pageSize, total: 0 });\n\n if (!table) {\n this.tableColumnsSignal.set([]);\n this.isTableLoadingSignal.set(false);\n return;\n }\n\n this.tableViewsService.getTableView(table, {\n page: this.pageIndex,\n size: this.pageSize,\n sortField: this.sortField,\n sortDirection: this.sortDirection,\n filters: this.resolveTableFilters(),\n }).subscribe({\n next: (view) => {\n const rows = this.normalizeTableRows(view);\n this.tableViewColumns = view.columns || [];\n this.tableHeaderActionsSignal.set(view.actions?.header?.custom || []);\n this.tableColumnsSignal.set(this.normalizeTableColumns(this.tableViewColumns));\n this.tableRowsSignal.set(rows);\n this.activeEditableCellSignal.set(null);\n this.loadEditableColumnOptions();\n this.pageIndex = view.pagination?.page ?? this.pageIndex;\n this.pageSize = view.pagination?.size ?? this.pageSize;\n this.tablePaginationSignal.set({\n page: this.pageIndex,\n pageSize: this.pageSize,\n total: view.pagination?.totalElements ?? rows.length,\n });\n this.isTableLoadingSignal.set(false);\n },\n error: (error) => {\n this.tableRowsSignal.set([]);\n this.tableHeaderActionsSignal.set([]);\n this.tablePaginationSignal.set({ page: this.pageIndex, pageSize: this.pageSize, total: 0 });\n this.activeEditableCellSignal.set(null);\n this.isTableLoadingSignal.set(false);\n this.notify(error?.error?.message || 'Не вдалося завантажити таблицю', 'error');\n },\n });\n }\n\n private runApiAction(config: {\n api: string;\n method: UiTableRowAction['method'];\n payload: Record<string, unknown>;\n title?: string;\n text?: string;\n submit?: boolean | string;\n danger?: boolean;\n successMessage: string;\n errorMessage: string;\n }): void {\n const api = String(config.api || '').trim();\n if (!api) {\n return;\n }\n\n this.isTableActionRunningSignal.set(true);\n this.host?.callApi({\n api,\n method: config.method || 'POST',\n title: config.title,\n text: config.text,\n submit: typeof config.submit === 'string' ? config.submit : undefined,\n danger: config.danger,\n payload: config.payload,\n }).subscribe({\n next: () => {\n this.notify(config.successMessage, 'success');\n this.isTableActionRunningSignal.set(false);\n this.loadTable();\n this.eventBus.emit<EntityUpdatedEvent>(ENTITY_UPDATED, {\n source: 'card-table.row-action',\n });\n },\n error: (error) => {\n this.isTableActionRunningSignal.set(false);\n this.notify(error?.error?.message || config.errorMessage, 'error');\n },\n });\n }\n\n private runFormAction(action: UiTableRowAction, row: Record<string, unknown>): void {\n const formId = String(action.formId || '').trim();\n const recordId = String(row['id'] || '').trim();\n if (!formId || !recordId) {\n this.notify('Не вдалося відкрити форму редагування', 'warning');\n return;\n }\n\n const actionPayload = this.resolveTemplatePayload(action.payload || {}, row);\n this.activeFormTargetSignal.set({\n formId,\n recordId,\n initialValue: { ...row, ...actionPayload },\n });\n }\n\n private runRowEditAction(row: Record<string, unknown>): void {\n const recordId = String(row['id'] || '').trim();\n const formId = this.resolveTableSource();\n if (!recordId || !formId) {\n return;\n }\n\n this.activeFormTargetSignal.set({\n formId,\n recordId,\n initialValue: { ...row },\n });\n }\n\n private runHeaderFormAction(action: TableViewHeaderAction): void {\n const formId = String(action.formId || '').trim();\n if (!formId) {\n return;\n }\n\n this.activeFormTargetSignal.set({\n formId,\n recordId: '',\n initialValue: this.resolveTemplatePayload(action.payload || {}, this.data || {}),\n });\n }\n\n private normalizeTableColumns(columns: TableViewColumn[]): UiTableColumnConfig[] {\n const editableColumns = this.resolveEditableColumnsConfig();\n return (columns || [])\n .filter((column) => !column.hidden)\n .map((column): UiTableColumnConfig => {\n const editableConfig = editableColumns.find((item) => item.key === column.id);\n if (!editableConfig) {\n return {\n key: column.id,\n labelKey: column.label,\n sortable: true,\n type: column.type,\n width: column.width,\n link: column.link,\n };\n }\n\n return {\n key: column.id,\n labelKey: column.label,\n sortable: true,\n type: column.type,\n width: column.width,\n link: column.link,\n editable: true,\n editableCondition: this.resolveEditableCondition(),\n bindKey: editableConfig.bindKey || column.sourceColumn || column.dataKey || column.id,\n editor: editableConfig.editor,\n options: this.resolveEditableColumnOptions(column.id),\n includeBlankOption: editableConfig.includeBlankOption,\n blankOptionLabel: editableConfig.blankOptionLabel,\n placeholder: editableConfig.placeholder,\n inputType: editableConfig.inputType,\n };\n });\n }\n\n private normalizeTableRows(view: TableViewResponse): Record<string, unknown>[] {\n const columns = view.columns || [];\n const hiddenRowActions = new Set(\n Array.isArray(this.tab?.props?.['hiddenRowActions'])\n ? this.tab.props['hiddenRowActions'].map((id: unknown) => String(id || '').trim()).filter(Boolean)\n : []\n );\n const rowActions = (view.actions?.row?.custom || []).filter((action: any) => !hiddenRowActions.has(action.id));\n const configuredRowActions = view.actions?.row || {};\n const defaultRowActions = {\n edit: view.viewActions?.edit !== false && configuredRowActions.edit !== false,\n editCondition: configuredRowActions.edit && typeof configuredRowActions.edit === 'object'\n ? configuredRowActions.edit.condition\n : undefined,\n delete: view.viewActions?.delete !== false && configuredRowActions.delete !== false,\n deleteCondition: configuredRowActions.delete && typeof configuredRowActions.delete === 'object'\n ? configuredRowActions.delete.condition\n : undefined,\n };\n return (view.rows || []).map((row: any) => this.toTableRowData(row, columns, rowActions, defaultRowActions));\n }\n\n private toTableRowData(\n row: TableViewRow,\n columns: TableViewColumn[],\n rowActions: UiTableRowAction[] = [],\n configuredActions: {\n edit?: boolean;\n editCondition?: string;\n delete?: boolean;\n deleteCondition?: string;\n } = {}\n ): Record<string, unknown> {\n const baseRow: Record<string, unknown> = Array.isArray(row)\n ? columns.reduce<Record<string, unknown>>((acc, column, index) => {\n acc[column.id] = row[index] ?? '';\n return acc;\n }, { id: String(row[0] ?? '') })\n : {\n ...(row as Record<string, unknown>),\n id: String((row as Record<string, unknown>)['id'] ?? ''),\n };\n\n if (this.resolveTableSource() === 'invoice-lines' && String(baseRow['line_id'] || '').trim()) {\n baseRow['id'] = String(baseRow['line_id']).trim();\n }\n\n if (!Array.isArray(baseRow['actions']) && rowActions.length) {\n baseRow['actions'] = rowActions.map((action) => ({ ...action }));\n }\n\n if (!Array.isArray(baseRow['actions'])) {\n const actions: UiTableRowAction[] = [];\n const editAllowed = configuredActions.edit !== false\n && (this.isEditEnabled() || evaluateCondition(configuredActions.editCondition, baseRow));\n if (editAllowed) {\n actions.push({\n id: 'edit',\n label: 'Редагувати',\n type: ACTION_FORM,\n formId: this.resolveTableSource(),\n });\n }\n const deleteAllowed = configuredActions.delete !== false\n && (this.isDeleteEnabled(baseRow) || evaluateCondition(configuredActions.deleteCondition, baseRow));\n if (deleteAllowed) {\n actions.push({\n id: 'delete',\n label: 'Видалити',\n type: ACTION_API,\n api: `/api/${this.resolveTableSource()}/{{id}}`,\n method: 'DELETE',\n danger: true,\n payload: { id: '{{id}}' },\n });\n }\n if (actions.length) baseRow['actions'] = actions;\n }\n\n return baseRow;\n }\n\n private saveEditableColumnChange(\n editableConfig: ReturnType<typeof this.resolveEditableColumnsConfig>[number],\n row: Record<string, unknown>\n ): void {\n const api = String(editableConfig.api || '').trim();\n if (!api) {\n return;\n }\n\n const payload = this.resolveEditableColumnPayload(editableConfig, row);\n if (!payload) {\n return;\n }\n\n this.isTableActionRunningSignal.set(true);\n this.host?.callApi({\n api,\n method: editableConfig.method || 'PATCH',\n payload,\n }).subscribe({\n next: () => {\n this.isTableActionRunningSignal.set(false);\n this.notify(editableConfig.successMessage || 'Збережено', 'success');\n this.loadTable();\n this.eventBus.emit<EntityUpdatedEvent>(ENTITY_UPDATED, {\n source: 'card-table.editable-cell',\n });\n },\n error: (error) => {\n this.isTableActionRunningSignal.set(false);\n this.notify(error?.error?.message || editableConfig.errorMessage || 'Не вдалося зберегти зміни', 'error');\n },\n });\n }\n\n private loadEditableColumnOptions(): void {\n if (this.editableColumnsLoaded) {\n return;\n }\n\n const editableColumns = this.resolveEditableColumnsConfig();\n const columnsNeedingOptions = editableColumns.filter((column) => column.optionsSource === 'warehouses' || column.optionsSource === 'warehouse-items');\n if (!columnsNeedingOptions.length) {\n this.editableColumnsLoaded = true;\n return;\n }\n\n this.editableColumnsLoaded = true;\n this.warehouseService.getWarehouses().subscribe({\n next: (response) => {\n const warehouses = response.items ?? [];\n const warehouseOptions: UiSelectOption[] = warehouses\n .map((warehouse: any) => ({\n value: warehouse.id ? String(warehouse.id) : null,\n label: String(warehouse.name || warehouse.labelName || warehouse.id || 'Склад').trim() || 'Склад',\n }))\n .filter((option: any): option is UiSelectOption => !!option.value);\n\n const loadWarehouseItemOptions = (done: (options: UiSelectOption[]) => void): void => {\n if (!warehouses.length) {\n done([]);\n return;\n }\n\n const options: UiSelectOption[] = [];\n let remaining = warehouses.length;\n\n for (const warehouse of warehouses) {\n const warehouseId = String(warehouse.id || '').trim();\n if (!warehouseId) {\n remaining -= 1;\n continue;\n }\n\n this.warehouseService.getWarehouseItems(warehouseId).subscribe({\n next: (items) => {\n for (const item of items ?? []) {\n options.push({\n value: item.id ? String(item.id) : null,\n label: [\n String(warehouse.labelName || warehouse.name || warehouse.id || '').trim(),\n String(item.name || item.id || '').trim(),\n ]\n .filter(Boolean)\n .join(' / '),\n });\n }\n remaining -= 1;\n if (remaining <= 0) {\n done(options.filter((option) => !!option.value));\n }\n },\n error: () => {\n remaining -= 1;\n if (remaining <= 0) {\n done(options.filter((option) => !!option.value));\n }\n },\n });\n }\n };\n\n const applyOptions = (warehouseItemOptions: UiSelectOption[] = []): void => {\n this.editableColumnOptionsSignal.set(\n columnsNeedingOptions.reduce<Record<string, UiSelectOption[]>>((acc, column) => {\n acc[column.key] = column.optionsSource === 'warehouses' ? warehouseOptions : warehouseItemOptions;\n return acc;\n }, {})\n );\n this.tableColumnsSignal.set(this.normalizeTableColumns(this.tableViewColumns));\n };\n\n if (!columnsNeedingOptions.some((column) => column.optionsSource === 'warehouse-items')) {\n applyOptions();\n return;\n }\n\n loadWarehouseItemOptions(applyOptions);\n },\n error: () => {\n this.editableColumnOptionsSignal.set({});\n this.tableColumnsSignal.set(this.normalizeTableColumns(this.tableViewColumns));\n },\n });\n }\n\n private resolveEditableColumnsConfig(): Array<{\n key: string;\n bindKey?: string;\n editor?: 'text' | 'number' | 'select';\n optionsSource?: string;\n includeBlankOption?: boolean;\n blankOptionLabel?: string;\n placeholder?: string;\n inputType?: 'text' | 'number';\n api?: string;\n method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n payload?: Record<string, unknown>;\n successMessage?: string;\n errorMessage?: string;\n }> {\n const value = this.tab?.props?.['editableColumns'];\n return Array.isArray(value)\n ? value.filter((item): item is {\n key: string;\n bindKey?: string;\n editor?: 'text' | 'number' | 'select';\n optionsSource?: string;\n includeBlankOption?: boolean;\n blankOptionLabel?: string;\n placeholder?: string;\n inputType?: 'text' | 'number';\n } => !!item && typeof item === 'object' && typeof (item as { key?: unknown }).key === 'string')\n : [];\n }\n\n private resolveEditableColumnPayload(\n editableConfig: ReturnType<typeof this.resolveEditableColumnsConfig>[number],\n row: Record<string, unknown>\n ): Record<string, unknown> | null {\n const baseRow = {\n ...row,\n id: String(row['id'] ?? '').trim(),\n };\n\n const payloadConfig = editableConfig.payload && typeof editableConfig.payload === 'object' ? editableConfig.payload : {};\n const payload = this.resolveTemplatePayload(payloadConfig as Record<string, unknown>, {\n ...this.data,\n ...baseRow,\n });\n\n if (!Object.keys(payload).length) {\n return baseRow;\n }\n\n return {\n ...baseRow,\n ...payload,\n };\n }\n\n private resolveEditableColumnOptions(columnKey: string): UiSelectOption[] {\n return this.editableColumnOptionsSignal()[columnKey] || [];\n }\n\n private isEditEnabled(): boolean {\n const value = this.tab?.props?.['edit'];\n const enabled = value === true || String(value).trim().toLowerCase() === 'true';\n if (!enabled) {\n return false;\n }\n\n return evaluateCondition(String(this.tab?.props?.['editCondition'] || '').trim(), this.data || {});\n }\n\n private isDeleteEnabled(row: Record<string, unknown>): boolean {\n const value = this.tab?.props?.['delete'];\n const enabled = value === true || String(value).trim().toLowerCase() === 'true';\n if (!enabled) return false;\n\n return evaluateCondition(String(this.tab?.props?.['deleteCondition'] || '').trim(), row);\n }\n\n private resolveTableSource(): string {\n return this.resolveTemplateString(String(this.tab?.props?.['table'] || '').trim(), this.data || {});\n }\n\n private resolveTableFilters(): Record<string, unknown> {\n return {\n ...this.resolveFiltersObject(this.tab?.props?.['initialFilters']),\n ...this.resolveFiltersObject(this.tab?.props?.['filter']),\n };\n }\n\n private resolveFiltersObject(filter: unknown): Record<string, unknown> {\n if (!filter || typeof filter !== 'object' || Array.isArray(filter)) {\n return {};\n }\n\n return this.resolveTemplatePayload(filter as Record<string, unknown>, this.data || {});\n }\n\n private resolveTemplatePayload(payload: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown> {\n return Object.entries(payload || {}).reduce<Record<string, unknown>>((acc, [key, value]) => {\n const next = this.resolveTemplateValue(value, source);\n if (next !== null && next !== undefined && next !== '') {\n acc[key] = next;\n }\n return acc;\n }, {});\n }\n\n private resolveTemplateString(value: string, source: Record<string, unknown>): string {\n return String(value || '').replace(/\\{\\{([a-zA-Z_][a-zA-Z0-9_.]*)\\}\\}/g, (_match, key) => {\n const next = String(key).split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') return undefined;\n return (current as Record<string, unknown>)[part];\n }, source);\n return next == null || next === '' ? '' : encodeURIComponent(String(next));\n });\n }\n\n private resolveTemplateValue(value: unknown, source: Record<string, unknown>): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n\n const raw = value.trim();\n const match = raw.match(/^\\{\\{([a-zA-Z_][a-zA-Z0-9_.]*)\\}\\}$/);\n if (match) {\n return String(match[1]).split('.').reduce<unknown>((current, part) => {\n if (current == null || typeof current !== 'object') return undefined;\n return (current as Record<string, unknown>)[part];\n }, source) ?? '';\n }\n\n return value;\n }\n\n private resolvePageSize(): number {\n const value = Number(this.tab?.props?.['pageSize'] ?? 10);\n return Number.isFinite(value) && value > 0 ? Math.floor(value) : 10;\n }\n\n private resolveEditCondition(): string | undefined {\n const condition = String(this.tab?.props?.['editCondition'] || '').trim();\n return condition || undefined;\n }\n\n private resolveEditableCondition(): string | undefined {\n const condition = String(this.tab?.props?.['editableCondition'] || '').trim();\n return condition || this.resolveEditCondition();\n }\n\n private notify(message: string, variant: 'success' | 'error' | 'warning'): void {\n this.host?.notify(message, variant, 2800);\n }\n}\n","<section class=\"space-y-4\">\n @if (tableHeaderActions.length) {\n <div class=\"flex justify-end gap-2\">\n @for (action of tableHeaderActions; track action.id) {\n <ui-button\n [variant]=\"action.variant || 'ghost'\"\n [icon]=\"action.icon || ''\"\n size=\"sm\"\n type=\"button\"\n (click)=\"onHeaderAction(action)\"\n >\n {{ action.label }}\n </ui-button>\n }\n </div>\n }\n\n <app-ui-table\n [data]=\"tableData()\"\n [columns]=\"tableColumns\"\n [isLoading]=\"isTableLoading\"\n [disablePaging]=\"disablePaging\"\n [rowClickable]=\"rowClickable\"\n (pageChange)=\"onTablePageChange($event)\"\n (actionClick)=\"onTableAction($event)\"\n (rowClick)=\"onTableRowClick($event)\"\n (cellChange)=\"onTableCellChange($event)\"\n ></app-ui-table>\n\n @if (activeFormTarget(); as target) {\n <forms-action-form-modal\n [isOpen]=\"true\"\n [formId]=\"target.formId\"\n [recordId]=\"target.recordId\"\n [initialValue]=\"target.initialValue\"\n (closed)=\"onFormClosed()\"\n (completed)=\"onFormCompleted($event)\"\n ></forms-action-form-modal>\n }\n</section>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","map"],"mappings":"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"}
|