@yuuvis/client-framework 3.15.0 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/yuuvis-client-framework-actions.mjs +21 -25
- package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-app-bar.mjs +3 -3
- package/fesm2022/yuuvis-client-framework-badges.mjs +20 -13
- package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +3 -3
- package/fesm2022/yuuvis-client-framework-clipboard.mjs +3 -3
- package/fesm2022/yuuvis-client-framework-datepicker.mjs +31 -31
- package/fesm2022/yuuvis-client-framework-forms.mjs +286 -178
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-icons.mjs +9 -9
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs +18 -18
- package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -28
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +18 -18
- package/fesm2022/yuuvis-client-framework-object-form.mjs +34 -34
- package/fesm2022/yuuvis-client-framework-object-preview.mjs +9 -9
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs +73 -45
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +13 -13
- package/fesm2022/yuuvis-client-framework-object-versions.mjs +7 -7
- package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -3
- package/fesm2022/yuuvis-client-framework-query-list.mjs +7 -7
- package/fesm2022/yuuvis-client-framework-renderer.mjs +101 -74
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs +4 -4
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-simple-search.mjs +3 -3
- package/fesm2022/yuuvis-client-framework-smart-search.mjs +13 -13
- package/fesm2022/yuuvis-client-framework-sort.mjs +3 -3
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +97 -61
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-token-search.mjs +7 -7
- package/fesm2022/yuuvis-client-framework-tree.mjs +9 -9
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs +10 -10
- package/fesm2022/yuuvis-client-framework.mjs +25 -25
- package/lib/assets/i18n/de.json +10 -8
- package/lib/assets/i18n/en.json +10 -8
- package/package.json +10 -10
- package/types/yuuvis-client-framework-badges.d.ts +7 -0
- package/types/yuuvis-client-framework-forms.d.ts +28 -8
- package/types/yuuvis-client-framework-object-relationship.d.ts +6 -1
- package/types/yuuvis-client-framework-tile-list.d.ts +13 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-renderer.mjs","sources":["../../../../../libs/yuuvis/client-framework/renderer/src/lib/audit-renderer/abstract-audit.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/audit-renderer/default-audit.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/audit-renderer/audit-renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/abstract.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/boolean.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/datetime.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/decimal.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/filesize.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/i18n-catalog.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/integer.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/string.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/unknown.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/renderer/renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/directives/audit-renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/directives/renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/yuuvis-client-framework-renderer.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { AuditEntry } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by audit-entry renderers. The renderer controls the\n * inner content of an audit timeline entry; the surrounding framing (date column,\n * timeline line, version badge, creator) stays with the host component.\n */\n@Component({\n selector: 'yuv-abstract-audit-renderer',\n template: ''\n})\nexport abstract class AbstractAuditRendererComponent {\n auditEntry = input.required<AuditEntry>();\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AuditEntry, LocalizationService, TranslateService } from '@yuuvis/client-core';\nimport { AbstractAuditRendererComponent } from './abstract-audit.renderer';\n\ninterface ResolvedAuditLabel {\n label: string;\n more?: string;\n}\n\n@Component({\n selector: 'yuv-default-audit-renderer',\n standalone: true,\n template: `\n @let r = resolved();\n <span class=\"title\">{{ r.label }}</span>\n @if (r.more) {\n <div class=\"more meta\">{{ r.more }}</div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefaultAuditRendererComponent extends AbstractAuditRendererComponent {\n readonly #translate = inject(TranslateService);\n readonly #localization = inject(LocalizationService);\n\n readonly #auditLabels: Record<string, string> = {\n a100: this.#translate.instant('yuv.audit.label.create.metadata'),\n a101: this.#translate.instant('yuv.audit.label.create.metadata.withcontent'),\n a110: this.#translate.instant('yuv.audit.label.create.tag'),\n a143: this.#translate.instant('yuv.audit.label.create.relationship'),\n\n a200: this.#translate.instant('yuv.audit.label.delete'),\n a201: this.#translate.instant('yuv.audit.label.delete.content'),\n a202: this.#translate.instant('yuv.audit.label.delete.marked'),\n a210: this.#translate.instant('yuv.audit.label.delete.tag'),\n a220: this.#translate.instant('yuv.audit.label.delete.version'),\n a243: this.#translate.instant('yuv.audit.label.delete.relationship'),\n\n a300: this.#translate.instant('yuv.audit.label.update.metadata'),\n a301: this.#translate.instant('yuv.audit.label.update.content'),\n a302: this.#translate.instant('yuv.audit.label.update.metadata.withcontent'),\n a303: this.#translate.instant('yuv.audit.label.update.move.content'),\n a310: this.#translate.instant('yuv.audit.label.update.tag'),\n a325: this.#translate.instant('yuv.audit.label.update.restore'),\n a340: this.#translate.instant('yuv.audit.label.update.move'),\n a343: this.#translate.instant('yuv.audit.label.update.relationship'),\n\n a400: this.#translate.instant('yuv.audit.label.get.content'),\n a401: this.#translate.instant('yuv.audit.label.get.metadata'),\n a402: this.#translate.instant('yuv.audit.label.get.rendition.text'),\n a403: this.#translate.instant('yuv.audit.label.get.rendition.pdf'),\n a404: this.#translate.instant('yuv.audit.label.get.rendition.thumbnail'),\n\n a10000: this.#translate.instant('yuv.audit.label.get.custom')\n };\n\n protected resolved = computed<ResolvedAuditLabel>(() => this.#resolve(this.auditEntry()));\n\n #resolve(entry: AuditEntry): ResolvedAuditLabel {\n let label = this.#auditLabels[`a${entry.action}`];\n let more: string | undefined;\n\n if ([110, 210, 310].includes(entry.action)) {\n const params = this.#getParams(entry);\n if (params.length) {\n const localizedLabel = `${params[0]}:${params[1]}`;\n more = `${this.#localization.getLocalizedLabel(params[0]) ?? params[0]}: ${\n this.#localization.getLocalizedLabel(localizedLabel) ?? localizedLabel\n }`;\n }\n } else if ([143, 243, 343].includes(entry.action)) {\n // detail: OBJECT_RELATIONSHIP_{CREATED|DELETED|CHANGED}: [sourceId, relationshipType, targetId]\n const params = this.#getParams(entry);\n const relationshipType = params[1];\n if (relationshipType) {\n more = this.#localization.getLocalizedLabel(relationshipType) ?? relationshipType;\n }\n } else if (entry.action === 325) {\n const params = this.#getParams(entry);\n more = this.#translate.instant('yuv.audit.label.update.restore.more', {\n version: params[0] || '[?]'\n });\n } else if (entry.action === 10000) {\n label = this.#localization.getLocalizedLabel(`audit:custom:${entry.subaction}`) || `${entry.subaction}`;\n }\n\n return { label, more };\n }\n\n #getParams(entry: AuditEntry): string[] {\n const m = entry.detail.match(/\\[(.*?)\\]/);\n return m?.[1]?.split(',').map((i) => i.trim()) ?? [];\n }\n}\n","import { Injectable, Type, signal } from '@angular/core';\nimport {\n AbstractAuditRendererComponent,\n DefaultAuditRendererComponent\n} from '../../audit-renderer';\n\n/**\n * Service for managing audit-entry renderers. Renderers are components that render the\n * inner content of an audit entry in the timeline view of `ObjectAuditComponent`.\n *\n * Register a renderer for an `action` to override the default rendering of all audit\n * entries with that action, or for an `action` + `subaction` pair to override a specific\n * variant. Lookup prefers the subaction-specific renderer over the action-only renderer;\n * if neither is registered, `DefaultAuditRendererComponent` is used.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditRendererService {\n #renderers = signal<Record<string, Type<AbstractAuditRendererComponent>>>({});\n\n /**\n * Register a renderer for a specific audit `action`. Pass `subaction` to scope the\n * renderer to a particular (action, subaction) pair.\n */\n registerAuditRenderer(\n cmp: Type<AbstractAuditRendererComponent>,\n action: number,\n subaction?: number\n ): void {\n this.#renderers.update((curr) => ({ ...curr, [this.#getKey(action, subaction)]: cmp }));\n }\n\n /**\n * Resolve the renderer for an audit entry. Tries `(action, subaction)` first, falls\n * back to `(action)`, then to `DefaultAuditRendererComponent`.\n */\n getAuditRenderer(action: number, subaction?: number): Type<AbstractAuditRendererComponent> {\n const r = this.#renderers();\n if (subaction !== undefined) {\n const scoped = r[this.#getKey(action, subaction)];\n if (scoped) return scoped;\n }\n return r[this.#getKey(action)] || DefaultAuditRendererComponent;\n }\n\n #getKey(action: number, subaction?: number): string {\n const k = [String(action)];\n if (subaction !== undefined) k.push(String(subaction));\n return k.join('-');\n }\n}\n","import { Component, inject, input } from '@angular/core';\nimport { SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by property renderers\n */\n@Component({\n selector: 'yuv-abstract-renderer',\n template: ''\n})\nexport abstract class AbstractRendererComponent<T = string, U = null> {\n #system = inject(SystemService);\n\n propertyName = input.required<string>();\n value = input.required<T | null>();\n meta = input<Record<string, unknown> | U>();\n\n protected getProperty(): SchemaResponseFieldDefinition | undefined {\n return this.#system.system?.allFields[this.propertyName()];\n }\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-boolean-renderer',\n imports: [MatIcon],\n template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`,\n styles: [\n `\n :host {\n display: flex;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class BooleanRendererComponent extends AbstractRendererComponent {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { LocaleDatePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-datetime-renderer',\n imports: [LocaleDatePipe],\n template: '{{(value() || undefined) | localeDate}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DateTimeRendererComponent extends AbstractRendererComponent<Date> {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-decimal-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DecimalRendererComponent extends AbstractRendererComponent<number> {\n // TODO: deal with precision and scale\n}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { FileSizePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-string-renderer',\n imports: [FileSizePipe],\n template: '{{parsedValue() | fileSize}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class FileSizeRendererComponent extends AbstractRendererComponent {\n parsedValue = computed<number>(() => {\n let n = 0;\n const v = this.value();\n if (v)\n try {\n n = parseInt(v);\n } catch (e) {\n console.error(e);\n }\n return n;\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LocalizationService, TranslateService } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n/**\n * Renders the value(s) of an i18n catalog field (classification `i18n:catalog[one, two, three]`).\n *\n * Catalog fields store the technical value, so the label has to be resolved from the\n * localizations. This uses the same label keys as the `yuv-i18n-catalog` form element:\n * for property name `status` and value `open` the key is `catalog:status:open_label`.\n * Values without a matching localization fall back to the technical value.\n */\n@Component({\n selector: 'yuv-i18n-catalog-renderer',\n template: '{{ label() }}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class I18nCatalogRendererComponent extends AbstractRendererComponent<string | string[]> {\n readonly #localization = inject(LocalizationService);\n readonly #translate = inject(TranslateService);\n\n // Localizations are resolved for the current language, so a language switch has to\n // re-run the lookup. Tracked as a signal to keep `label` a pure computed.\n readonly #currentLang = signal(this.#translate.getCurrentLang());\n\n readonly label = computed<string>(() => {\n this.#currentLang();\n const value = this.value();\n if (value === null || value === undefined) return '';\n // Catalog fields may be multi-select, in which case the value is an array of technical values.\n return (Array.isArray(value) ? value : [value]).map((val) => this.#translateValue(val)).join(', ');\n });\n\n constructor() {\n super();\n this.#translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((evt) => this.#currentLang.set(evt.lang));\n }\n\n #translateValue(value: string): string {\n return this.#localization.getLocalizedLabel(`catalog:${this.propertyName()}:${value}`) || value;\n }\n}\n","import { Component, effect, inject } from '@angular/core';\nimport { MatIcon, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-icon-renderer',\n imports: [ObjectTypeIconComponent, MatIcon],\n templateUrl: `./icon.renderer.component.html`,\n styleUrls: ['./icon.renderer.component.scss']\n})\nexport class IconRendererComponent extends AbstractRendererComponent {\n readonly #iconRegistry = inject(MatIconRegistry);\n\n readonly #sanitizer = inject(DomSanitizer);\n protected readonly customId = crypto.randomUUID();\n\n #registerIconsEffect = effect(async () => {\n const meta = this.meta();\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.propertyName() === 'custom' &&\n !meta?.['isFontIcon'] &&\n this.#iconRegistry.addSvgIconLiteral(\n this.customId,\n this.#sanitizer.bypassSecurityTrustHtml(this.value() as string)\n );\n });\n}\n","@let icon = value();\n@if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n} @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-integer-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class IntegerRendererComponent extends AbstractRendererComponent<number> {}\n","import { Component, computed, inject } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { AppCacheService, IdmService, YuvUser } from '@yuuvis/client-core';\nimport { catchError, forkJoin, map, of, switchMap } from 'rxjs';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-organization-renderer',\n templateUrl: './organization.renderer.component.html',\n styleUrls: ['./organization.renderer.component.scss']\n})\nexport class OrganizationRendererComponent extends AbstractRendererComponent {\n readonly #idmService = inject(IdmService);\n readonly #appCache = inject(AppCacheService);\n\n readonly #STORAGE_USER_KEY = 'yuv.core.users.storage';\n readonly #STORAGE_ROLES_KEY = 'yuv.core.roles.storage';\n\n // Input may be a single id/role-name or an array of them; normalize to string[] so the resolver\n // pipeline always works on a uniform shape.\n resolvedValue = computed<string[]>(() => {\n const value = this.value();\n return value === null ? [] : Array.isArray(value) ? value : [value];\n });\n\n #userRoleResolver = rxResource({\n params: this.resolvedValue,\n stream: ({ params }) => {\n // Nothing to resolve — short-circuit so we don't show the loading indicator or hit the\n // backend for an empty input.\n if (params.length === 0) {\n return of<{ type: string; label: string | undefined }[]>([]);\n }\n // Step 1 — load the role catalog (cached) and use it to partition the input into role\n // names vs. user IDs. Roles are a closed set; anything that doesn't match is treated as\n // a user ID and resolved in step 2.\n // TODO: Move get Roles to App init or somewhere else to avoid multiple calls\n return this.#appCache.getItem<{ name: string; description: string }[]>(this.#STORAGE_ROLES_KEY).pipe(\n switchMap((cachedRoles) =>\n (cachedRoles\n ? of(cachedRoles)\n : this.#idmService.getRoles().pipe(\n // Only persist the role list when the backend actually returned something —\n // caching an empty array would mask later successful fetches.\n switchMap((roles) =>\n roles.length ? this.#appCache.setItem(this.#STORAGE_ROLES_KEY, roles).pipe(map(() => roles)) : of([])\n )\n )\n ).pipe(\n map((roles) =>\n params.reduce(\n (acc: { roles: string[]; users: string[] }, value: string) => {\n const matchingRole = roles.find((role) => role.name === value);\n // Role-name match → roles bucket; everything else is assumed to be a user ID.\n if (matchingRole) {\n acc.roles.push(matchingRole.name);\n } else {\n acc.users.push(value);\n }\n return acc;\n },\n { roles: [], users: [] }\n )\n )\n )\n ),\n // Step 2a — pull the persisted user cache. Defensive filter against null entries that\n // may linger from earlier buggy writes (see commit 2f3ff694f).\n switchMap(({ roles, users }) =>\n this.#appCache\n .getItem<YuvUser[]>(this.#STORAGE_USER_KEY)\n .pipe(\n map((cache) =>\n cache ? { roles, users, cache: cache.filter((entry) => entry !== null) } : { roles, users, cache: null }\n )\n )\n ),\n // Step 2b — resolve users: serve from cache where possible, fetch the rest from IDM.\n switchMap(({ roles, users, cache }) => {\n // Dedup the full stored cache by id up-front. A cache can hold multiple copies of the\n // same user either from the historical write bug, or because several renderer instances\n // (a view routinely mounts 2-3) each ran an unsynchronized getItem→resolve→setItem cycle\n // and interleaved. Collapsing here fixes the render; persisting it below (when it shrank)\n // heals storage permanently for every reader of this key (e.g. ActionsValidationService).\n const dedupedCache: YuvUser[] | null = cache ? this.#dedupById(cache) : null;\n const cacheShrank = !!cache && !!dedupedCache && dedupedCache.length < cache.length;\n\n let missingUsers: string[] = users;\n let filteredUsers: YuvUser[] = [];\n if (dedupedCache) {\n filteredUsers = dedupedCache.filter((entry) => users.includes(entry.id));\n missingUsers = users.filter((uid: string) => !filteredUsers.some((user) => user.id === uid));\n }\n // Pair every request with its uid so we can tell which IDs came back unresolved.\n // catchError keeps a single failing lookup from killing the whole forkJoin.\n const userRequests = missingUsers.map((uid: string) =>\n this.#idmService.getUserById(uid).pipe(\n catchError(() => of(null)),\n map((user) => ({ uid, user }))\n )\n );\n\n if (userRequests.length > 0) {\n return forkJoin(userRequests).pipe(\n switchMap((results) => {\n // Resolved users are real YuvUsers — safe to cache and render.\n // Unresolved IDs render as a synthetic { id, title: id } so the user still\n // sees the raw ID, but they are NOT written to the cache (a 404 today might\n // resolve tomorrow, and caching it would block that).\n const resolved = results.filter((res) => res.user != null).map((res) => res.user as YuvUser);\n const unresolved = results\n .filter((res) => res.user == null)\n .map((res) => ({ id: res.uid, title: res.uid }) as YuvUser);\n // Dedup by id AT WRITE TIME so the stored array stays clean no matter how two\n // instances interleave. `resolved` is appended after the cache, so a freshly\n // resolved real user always wins over any stale same-id entry — a synthetic\n // fallback (which is never in `resolved`/`cache`) can therefore never shadow it.\n const merged = this.#dedupById([...(dedupedCache || []), ...resolved]);\n return this.#appCache.setItem(this.#STORAGE_USER_KEY, merged).pipe(map(() => [...resolved, ...unresolved]));\n }),\n map((users) => ({ roles, users: [...users, ...filteredUsers] }))\n );\n } else if (cacheShrank && dedupedCache) {\n // Every requested user was already cached, but the stored array carried duplicates —\n // write the cleaned version back so the pollution heals instead of re-deduping forever.\n return this.#appCache.setItem(this.#STORAGE_USER_KEY, dedupedCache).pipe(map(() => ({ roles, users: [...filteredUsers] })));\n } else {\n // Every requested user was already in the cache and it was clean — no network needed.\n return of({ roles, users: [...filteredUsers] });\n }\n }),\n // Step 3 — project to the flat render-model the template iterates over. data-type\n // drives the chip styling (user vs role).\n map(({ roles, users }) => {\n const userNodes = users.map((user: YuvUser & { displayName?: string }) => ({\n type: 'user',\n label: user.title || user.displayName\n }));\n const roleNodes = roles.map((role: string) => ({\n type: 'role',\n label: role\n }));\n return [...userNodes, ...roleNodes];\n })\n );\n },\n defaultValue: []\n });\n\n userAndRole = this.#userRoleResolver.value;\n userAndRoleLoading = this.#userRoleResolver.isLoading;\n\n // Collapse a user list to one entry per id, keeping the LAST occurrence — callers order the\n // array so the freshest/real entry comes last and wins. Also drops any falsy entries.\n #dedupById(users: YuvUser[]): YuvUser[] {\n return [...new Map(users.filter((user) => user).map((user) => [user.id, user])).values()];\n }\n}\n","@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-string-renderer',\n template: `{{ value() }}`,\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StringRendererComponent extends AbstractRendererComponent {}\n","import { DatePipe, DecimalPipe } from '@angular/common';\nimport { Component, computed, inject } from '@angular/core';\nimport { SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-table-renderer',\n standalone: true,\n imports: [TranslatePipe],\n templateUrl: `./table.renderer.component.html`,\n styleUrls: ['./table.renderer.component.scss'],\n providers: [DecimalPipe, DatePipe]\n})\nexport class TableRendererComponent extends AbstractRendererComponent<any[]> {\n readonly #system = inject(SystemService);\n readonly translate = inject(TranslateService);\n readonly #decimalPipe = inject(DecimalPipe);\n readonly #datePipe = inject(DatePipe);\n\n protected tableHeaders = computed(() => [\n ...new Set(\n (this.value() || []).flat().map((item) => ({\n id: `header-${crypto.randomUUID()}`,\n key: item.propertyName,\n label: this.#system.getLocalizedLabel(`${item.propertyName}`) || item.propertyName\n }))\n )\n ]);\n\n protected tableData = computed(() => {\n const data = this.value() || [];\n return (data.length > 10 ? data.slice(0, 10) : data).map((row, rowIndex) =>\n row.map((item: any) => ({\n id: `row-${rowIndex}-cell-${crypto.randomUUID()}`,\n ...item,\n value: this.#cellValue(item)\n }))\n );\n });\n\n protected reducedData = computed(() => {\n const data = this.value() || [];\n return data.length > 10;\n });\n\n protected getCellValue(row: any[], key: string): string {\n const item = (row || []).find((i) => i.propertyName === key);\n return item ? item.value : '';\n }\n\n #cellValue(element: { propertyType: string; value: string }): string | null {\n switch (element.propertyType) {\n case 'datetime':\n return this.#datePipe.transform(element.value, 'short', undefined, this.translate.getCurrentLang());\n case 'string':\n return element.value;\n case 'decimal':\n return this.#decimalPipe.transform(element.value, '1.2-4', this.translate.getCurrentLang());\n default:\n return element.value;\n }\n }\n}\n","<div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <th>{{ header.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <td>{{ getCellValue(row, header.key) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>{{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}</p>\n }\n</div>\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-unknown-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class UnknownRendererComponent extends AbstractRendererComponent<any> {}\n","import { Injectable, Type, inject, signal } from '@angular/core';\nimport {\n ContentStreamField,\n InternalFieldType,\n RendererType,\n SchemaResponseFieldDefinition,\n SystemService\n} from '@yuuvis/client-core';\nimport {\n AbstractRendererComponent,\n BooleanRendererComponent,\n DateTimeRendererComponent,\n DecimalRendererComponent,\n FileSizeRendererComponent,\n I18nCatalogRendererComponent,\n IconRendererComponent,\n IntegerRendererComponent,\n OrganizationRendererComponent,\n StringRendererComponent,\n TableRendererComponent,\n UnknownRendererComponent\n} from '../../property-renderer';\nimport { RendererComponent } from './renderer.interface';\n\n/**\n * Service for managing property type renderers. Renderers are components that will render certain\n * property types.\n *\n * You are able to register your own renderer to overwrite an existing one or provide a custom\n * renderer for your context.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RendererService {\n private system = inject(SystemService);\n\n #renderers = signal<Record<string, Type<RendererComponent>>>({});\n\n constructor() {\n const initialRenderers: Record<string, Type<RendererComponent>> = {\n integer: IntegerRendererComponent,\n decimal: DecimalRendererComponent,\n datetime: DateTimeRendererComponent,\n icon: IconRendererComponent,\n string: StringRendererComponent,\n boolean: BooleanRendererComponent,\n table: TableRendererComponent\n };\n initialRenderers[InternalFieldType.STRING_ORGANIZATION] = OrganizationRendererComponent;\n initialRenderers[InternalFieldType.STRING_ORGANIZATION_SET] = OrganizationRendererComponent;\n // Only i18n catalogs need a dedicated renderer: their values are technical and the label\n // comes from the localizations. Static (`catalog[...]`) and dynamic catalog values are\n // already displayed as they are stored, so the default string renderer is fine for those.\n initialRenderers[InternalFieldType.STRING_CATALOG_I18N] = I18nCatalogRendererComponent;\n initialRenderers[ContentStreamField.LENGTH] = FileSizeRendererComponent;\n this.#renderers.set(initialRenderers);\n }\n\n getRendererByType(type: RendererType): Type<RendererComponent> {\n const r = this.#renderers();\n return r[type] || UnknownRendererComponent;\n }\n\n getRenderer(propertyName: string, typeName?: string): Type<RendererComponent> {\n // try to find a renderer based on property and object type\n let r = this.#renderers()[this._getKey(propertyName, typeName)];\n if (!r) {\n // not special renderer found so we'll try to get one for the internal type\n // of the given property\n const srf: SchemaResponseFieldDefinition | undefined =\n this.system.system && this.system.system.allFields[propertyName];\n\n if (srf) {\n r = this.getRendererByType(\n this.system.getInternalFormElementType(srf.propertyType, srf.classifications, srf.catalog)\n );\n }\n }\n\n return r || UnknownRendererComponent;\n }\n\n /**\n * Register a renderer for a particular property. Providing `typeName` will register that renderer\n * for a certain context (use same inputs when calling `getRenderer()`).\n * @param cmp The component to actually render the property\n * @param propertyName property name (used for registering the renderer for a certain context)\n * @param typeName Optional type name (used for registering the renderer for a certain context)\n */\n registerRenderer(cmp: Type<AbstractRendererComponent>, propertyName: string, typeName?: string) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [this._getKey(propertyName, typeName)]: cmp } }));\n }\n\n /**\n *\n * @param type The type of property this renderer is supposed to be used for\n */\n registerRendererByType(type: RendererType, cmp: Type<RendererComponent>) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [type]: cmp } }));\n }\n\n // Generate the unique key for a renderer\n private _getKey(propertyName: string, typeName?: string): string {\n const k = [propertyName];\n typeName && k.push(typeName);\n return k.join('-');\n }\n}\n","import { ComponentRef, Directive, Type, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { AuditEntry } from '@yuuvis/client-core';\nimport { AbstractAuditRendererComponent } from '../audit-renderer';\nimport { AuditRendererService } from '../services';\n\n/**\n * Attribute directive that renders an `AuditEntry` using the component registered with\n * `AuditRendererService` for the entry's `action` (and optionally `subaction`). Falls\n * back to `DefaultAuditRendererComponent` when no override is registered.\n */\n@Directive({\n selector: '[yuvAuditRenderer]',\n standalone: true\n})\nexport class AuditRendererDirective {\n #service = inject(AuditRendererService);\n #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<AbstractAuditRendererComponent>;\n #current?: AuditEntry;\n\n yuvAuditRenderer = input.required<AuditEntry>();\n\n #renderEffect = effect(() => {\n const entry = this.yuvAuditRenderer();\n if (this.#alreadyRendered(entry)) return;\n\n this.#current = entry;\n this.#containerRef.clear();\n const cmp: Type<AbstractAuditRendererComponent> = this.#service.getAuditRenderer(\n entry.action,\n entry.subaction\n );\n this.component = this.#containerRef.createComponent(cmp);\n this.component.setInput('auditEntry', entry);\n });\n\n #alreadyRendered(entry: AuditEntry): boolean {\n return !!this.#current && JSON.stringify(this.#current) === JSON.stringify(entry);\n }\n}\n","import { ComponentRef, Directive, Type, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { RendererComponent, RendererDirectiveInput, RendererService } from '../services';\n/**\n * Structural directive for rendering an obect type property\n */\n@Directive({\n selector: '[yuvRenderer]',\n standalone: true\n})\nexport class RendererDirective {\n #rendererService = inject(RendererService);\n #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<RendererComponent>;\n #rendererInput?: RendererDirectiveInput;\n yuvRenderer = input<RendererDirectiveInput | undefined>(undefined);\n\n #yuvRendererEffect = effect(() => {\n const i = this.yuvRenderer();\n if (i && !this.#alreadyRendered(i)) {\n this.#rendererInput = i;\n this.#containerRef.clear();\n const cmp: Type<RendererComponent> = i.rendererType\n ? this.#rendererService.getRendererByType(i.rendererType)\n : this.#rendererService.getRenderer(i.propertyName);\n\n this.component = this.#containerRef.createComponent(cmp);\n // pass inputs to the renderer. As they are signals they need an injection context\n this.component.setInput('propertyName', i.propertyName);\n this.component.setInput('value', i.value);\n if (i.meta) this.component.setInput('meta', i.meta);\n } else if (!i) {\n this.#containerRef.clear();\n this.#rendererInput = undefined;\n }\n });\n\n #alreadyRendered(i: RendererDirectiveInput): boolean {\n return !!this.#rendererInput && JSON.stringify(this.#rendererInput) === JSON.stringify(i);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-renderer.mjs","sources":["../../../../../libs/yuuvis/client-framework/renderer/src/lib/audit-renderer/abstract-audit.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/audit-renderer/default-audit.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/audit-renderer/audit-renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/abstract.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/boolean.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/datetime.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/decimal.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/filesize.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/i18n-catalog.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon-renderer/icon.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/integer.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization-renderer/organization.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/string.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table-renderer/table.renderer.component.html","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/unknown.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/renderer/renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/directives/audit-renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/directives/renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/yuuvis-client-framework-renderer.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { AuditEntry } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by audit-entry renderers. The renderer controls the\n * inner content of an audit timeline entry; the surrounding framing (date column,\n * timeline line, version badge, creator) stays with the host component.\n */\n@Component({\n selector: 'yuv-abstract-audit-renderer',\n template: ''\n})\nexport abstract class AbstractAuditRendererComponent {\n auditEntry = input.required<AuditEntry>();\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AuditEntry, LocalizationService, TranslateService } from '@yuuvis/client-core';\nimport { AbstractAuditRendererComponent } from './abstract-audit.renderer';\n\ninterface ResolvedAuditLabel {\n label: string;\n more?: string;\n}\n\n@Component({\n selector: 'yuv-default-audit-renderer',\n standalone: true,\n template: `\n @let r = resolved();\n <span class=\"title\">{{ r.label }}</span>\n @if (r.more) {\n <div class=\"more meta\">{{ r.more }}</div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefaultAuditRendererComponent extends AbstractAuditRendererComponent {\n readonly #translate = inject(TranslateService);\n readonly #localization = inject(LocalizationService);\n\n readonly #auditLabels: Record<string, string> = {\n a100: this.#translate.instant('yuv.audit.label.create.metadata'),\n a101: this.#translate.instant('yuv.audit.label.create.metadata.withcontent'),\n a110: this.#translate.instant('yuv.audit.label.create.tag'),\n a143: this.#translate.instant('yuv.audit.label.create.relationship'),\n\n a200: this.#translate.instant('yuv.audit.label.delete'),\n a201: this.#translate.instant('yuv.audit.label.delete.content'),\n a202: this.#translate.instant('yuv.audit.label.delete.marked'),\n a210: this.#translate.instant('yuv.audit.label.delete.tag'),\n a220: this.#translate.instant('yuv.audit.label.delete.version'),\n a243: this.#translate.instant('yuv.audit.label.delete.relationship'),\n\n a300: this.#translate.instant('yuv.audit.label.update.metadata'),\n a301: this.#translate.instant('yuv.audit.label.update.content'),\n a302: this.#translate.instant('yuv.audit.label.update.metadata.withcontent'),\n a303: this.#translate.instant('yuv.audit.label.update.move.content'),\n a310: this.#translate.instant('yuv.audit.label.update.tag'),\n a325: this.#translate.instant('yuv.audit.label.update.restore'),\n a340: this.#translate.instant('yuv.audit.label.update.move'),\n a343: this.#translate.instant('yuv.audit.label.update.relationship'),\n\n a400: this.#translate.instant('yuv.audit.label.get.content'),\n a401: this.#translate.instant('yuv.audit.label.get.metadata'),\n a402: this.#translate.instant('yuv.audit.label.get.rendition.text'),\n a403: this.#translate.instant('yuv.audit.label.get.rendition.pdf'),\n a404: this.#translate.instant('yuv.audit.label.get.rendition.thumbnail'),\n\n a10000: this.#translate.instant('yuv.audit.label.get.custom')\n };\n\n protected resolved = computed<ResolvedAuditLabel>(() => this.#resolve(this.auditEntry()));\n\n #resolve(entry: AuditEntry): ResolvedAuditLabel {\n let label = this.#auditLabels[`a${entry.action}`];\n let more: string | undefined;\n\n if ([110, 210, 310].includes(entry.action)) {\n const params = this.#getParams(entry);\n if (params.length) {\n const localizedLabel = `${params[0]}:${params[1]}`;\n more = `${this.#localization.getLocalizedLabel(params[0]) ?? params[0]}: ${\n this.#localization.getLocalizedLabel(localizedLabel) ?? localizedLabel\n }`;\n }\n } else if ([143, 243, 343].includes(entry.action)) {\n // detail: OBJECT_RELATIONSHIP_{CREATED|DELETED|CHANGED}: [sourceId, relationshipType, targetId]\n const params = this.#getParams(entry);\n const relationshipType = params[1];\n if (relationshipType) {\n more = this.#localization.getLocalizedLabel(relationshipType) ?? relationshipType;\n }\n } else if (entry.action === 325) {\n const params = this.#getParams(entry);\n more = this.#translate.instant('yuv.audit.label.update.restore.more', {\n version: params[0] || '[?]'\n });\n } else if (entry.action === 10000) {\n label = this.#localization.getLocalizedLabel(`audit:custom:${entry.subaction}`) || `${entry.subaction}`;\n }\n\n return { label, more };\n }\n\n #getParams(entry: AuditEntry): string[] {\n const m = entry.detail.match(/\\[(.*?)\\]/);\n return m?.[1]?.split(',').map((i) => i.trim()) ?? [];\n }\n}\n","import { Injectable, Type, signal } from '@angular/core';\nimport {\n AbstractAuditRendererComponent,\n DefaultAuditRendererComponent\n} from '../../audit-renderer';\n\n/**\n * Service for managing audit-entry renderers. Renderers are components that render the\n * inner content of an audit entry in the timeline view of `ObjectAuditComponent`.\n *\n * Register a renderer for an `action` to override the default rendering of all audit\n * entries with that action, or for an `action` + `subaction` pair to override a specific\n * variant. Lookup prefers the subaction-specific renderer over the action-only renderer;\n * if neither is registered, `DefaultAuditRendererComponent` is used.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditRendererService {\n #renderers = signal<Record<string, Type<AbstractAuditRendererComponent>>>({});\n\n /**\n * Register a renderer for a specific audit `action`. Pass `subaction` to scope the\n * renderer to a particular (action, subaction) pair.\n */\n registerAuditRenderer(\n cmp: Type<AbstractAuditRendererComponent>,\n action: number,\n subaction?: number\n ): void {\n this.#renderers.update((curr) => ({ ...curr, [this.#getKey(action, subaction)]: cmp }));\n }\n\n /**\n * Resolve the renderer for an audit entry. Tries `(action, subaction)` first, falls\n * back to `(action)`, then to `DefaultAuditRendererComponent`.\n */\n getAuditRenderer(action: number, subaction?: number): Type<AbstractAuditRendererComponent> {\n const r = this.#renderers();\n if (subaction !== undefined) {\n const scoped = r[this.#getKey(action, subaction)];\n if (scoped) return scoped;\n }\n return r[this.#getKey(action)] || DefaultAuditRendererComponent;\n }\n\n #getKey(action: number, subaction?: number): string {\n const k = [String(action)];\n if (subaction !== undefined) k.push(String(subaction));\n return k.join('-');\n }\n}\n","import { Component, inject, input } from '@angular/core';\nimport { SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by property renderers\n */\n@Component({\n selector: 'yuv-abstract-renderer',\n template: ''\n})\nexport abstract class AbstractRendererComponent<T = string, U = null> {\n #system = inject(SystemService);\n\n propertyName = input.required<string>();\n value = input.required<T | null>();\n meta = input<Record<string, unknown> | U>();\n\n protected getProperty(): SchemaResponseFieldDefinition | undefined {\n return this.#system.system?.allFields[this.propertyName()];\n }\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-boolean-renderer',\n imports: [MatIcon],\n template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`,\n styles: [\n `\n :host {\n display: flex;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class BooleanRendererComponent extends AbstractRendererComponent {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { LocaleDatePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-datetime-renderer',\n imports: [LocaleDatePipe],\n template: '{{(value() || undefined) | localeDate}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DateTimeRendererComponent extends AbstractRendererComponent<Date> {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-decimal-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DecimalRendererComponent extends AbstractRendererComponent<number> {\n // TODO: deal with precision and scale\n}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { FileSizePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-string-renderer',\n imports: [FileSizePipe],\n template: '{{parsedValue() | fileSize}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class FileSizeRendererComponent extends AbstractRendererComponent {\n parsedValue = computed<number>(() => {\n let n = 0;\n const v = this.value();\n if (v)\n try {\n n = parseInt(v);\n } catch (e) {\n console.error(e);\n }\n return n;\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LocalizationService, TranslateService } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n/**\n * Renders the value(s) of an i18n catalog field (classification `i18n:catalog[one, two, three]`).\n *\n * Catalog fields store the technical value, so the label has to be resolved from the\n * localizations. This uses the same label keys as the `yuv-i18n-catalog` form element:\n * for property name `status` and value `open` the key is `catalog:status:open_label`.\n * Values without a matching localization fall back to the technical value.\n */\n@Component({\n selector: 'yuv-i18n-catalog-renderer',\n template: '{{ label() }}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class I18nCatalogRendererComponent extends AbstractRendererComponent<string | string[]> {\n readonly #localization = inject(LocalizationService);\n readonly #translate = inject(TranslateService);\n\n // Localizations are resolved for the current language, so a language switch has to\n // re-run the lookup. Tracked as a signal to keep `label` a pure computed.\n readonly #currentLang = signal(this.#translate.getCurrentLang());\n\n readonly label = computed<string>(() => {\n this.#currentLang();\n const value = this.value();\n if (value === null || value === undefined) return '';\n // Catalog fields may be multi-select, in which case the value is an array of technical values.\n return (Array.isArray(value) ? value : [value]).map((val) => this.#translateValue(val)).join(', ');\n });\n\n constructor() {\n super();\n this.#translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((evt) => this.#currentLang.set(evt.lang));\n }\n\n #translateValue(value: string): string {\n return this.#localization.getLocalizedLabel(`catalog:${this.propertyName()}:${value}`) || value;\n }\n}\n","import { Component, effect, inject } from '@angular/core';\nimport { MatIcon, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-icon-renderer',\n imports: [ObjectTypeIconComponent, MatIcon],\n templateUrl: `./icon.renderer.component.html`,\n styleUrls: ['./icon.renderer.component.scss']\n})\nexport class IconRendererComponent extends AbstractRendererComponent {\n readonly #iconRegistry = inject(MatIconRegistry);\n\n readonly #sanitizer = inject(DomSanitizer);\n protected readonly customId = crypto.randomUUID();\n\n #registerIconsEffect = effect(async () => {\n const meta = this.meta();\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.propertyName() === 'custom' &&\n !meta?.['isFontIcon'] &&\n this.#iconRegistry.addSvgIconLiteral(\n this.customId,\n this.#sanitizer.bypassSecurityTrustHtml(this.value() as string)\n );\n });\n}\n","@let icon = value();\n@if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n} @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-integer-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class IntegerRendererComponent extends AbstractRendererComponent<number> {}\n","import { Component, computed, inject } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport {\n AppCacheService,\n FREE_TEXT_OPTION,\n IdmService,\n STORAGE_ROLES_KEY,\n STORAGE_USERS_KEY,\n SystemService,\n USER_ID_REGEX,\n YuvUser\n} from '@yuuvis/client-core';\nimport { catchError, forkJoin, map, of, switchMap } from 'rxjs';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-organization-renderer',\n templateUrl: './organization.renderer.component.html',\n styleUrls: ['./organization.renderer.component.scss']\n})\nexport class OrganizationRendererComponent extends AbstractRendererComponent {\n readonly #idmService = inject(IdmService);\n readonly #appCache = inject(AppCacheService);\n readonly #systemService = inject(SystemService);\n\n // Only fields that opted into free text may hold values that are neither a user ID nor a\n // role name. Everywhere else every non-role value stays a user-ID lookup, unchanged.\n #freeTextField = computed<boolean>(() => {\n const field = this.getProperty();\n // The raw schema uses `classification`, the mapped field model `classifications`.\n const classifications = field?.classifications ?? field?.classification;\n if (!classifications?.length) return false;\n for (const entry of this.#systemService.getClassifications(classifications).values()) {\n if (entry.options.includes(FREE_TEXT_OPTION)) return true;\n }\n return false;\n });\n\n // Input may be a single id/role-name or an array of them; normalize to string[] so the resolver\n // pipeline always works on a uniform shape.\n resolvedValue = computed<string[]>(() => {\n const value = this.value();\n return value === null ? [] : Array.isArray(value) ? value : [value];\n });\n\n #userRoleResolver = rxResource({\n params: this.resolvedValue,\n stream: ({ params }) => {\n // Nothing to resolve — short-circuit so we don't show the loading indicator or hit the\n // backend for an empty input.\n if (params.length === 0) {\n return of<{ type: string; label: string | undefined }[]>([]);\n }\n // Step 1 — load the role catalog (cached) and use it to partition the input into role\n // names vs. user IDs. Roles are a closed set; anything that doesn't match is treated as\n // a user ID and resolved in step 2.\n // TODO: Move get Roles to App init or somewhere else to avoid multiple calls\n return this.#appCache.getItem<{ name: string; description: string }[]>(STORAGE_ROLES_KEY).pipe(\n switchMap((cachedRoles) =>\n (cachedRoles\n ? of(cachedRoles)\n : this.#idmService.getRoles().pipe(\n // Only persist the role list when the backend actually returned something —\n // caching an empty array would mask later successful fetches.\n switchMap((roles) =>\n roles.length ? this.#appCache.setItem(STORAGE_ROLES_KEY, roles).pipe(map(() => roles)) : of([])\n )\n )\n ).pipe(\n map((roles) =>\n params.reduce(\n (acc: { roles: string[]; users: string[]; texts: string[] }, value: string) => {\n const matchingRole = roles.find((role) => role.name === value);\n // Role-name match → roles bucket; everything else is assumed to be a user ID.\n if (matchingRole) {\n acc.roles.push(matchingRole.name);\n } else if (this.#freeTextField() && !USER_ID_REGEX.test(value)) {\n // Free text is stored as a plain string, so there is nothing to look up.\n acc.texts.push(value);\n } else {\n acc.users.push(value);\n }\n return acc;\n },\n { roles: [], users: [], texts: [] }\n )\n )\n )\n ),\n // Step 2a — pull the persisted user cache. Defensive filter against null entries that\n // may linger from earlier buggy writes (see commit 2f3ff694f).\n switchMap(({ roles, users, texts }) =>\n this.#appCache\n .getItem<YuvUser[]>(STORAGE_USERS_KEY)\n .pipe(\n map((cache) =>\n cache\n ? { roles, users, texts, cache: cache.filter((entry) => entry !== null) }\n : { roles, users, texts, cache: null }\n )\n )\n ),\n // Step 2b — resolve users: serve from cache where possible, fetch the rest from IDM.\n switchMap(({ roles, users, texts, cache }) => {\n // Dedup the full stored cache by id up-front. A cache can hold multiple copies of the\n // same user either from the historical write bug, or because several renderer instances\n // (a view routinely mounts 2-3) each ran an unsynchronized getItem→resolve→setItem cycle\n // and interleaved. Collapsing here fixes the render; persisting it below (when it shrank)\n // heals storage permanently for every reader of this key (e.g. ActionsValidationService).\n const dedupedCache: YuvUser[] | null = cache ? this.#dedupById(cache) : null;\n const cacheShrank = !!cache && !!dedupedCache && dedupedCache.length < cache.length;\n\n let missingUsers: string[] = users;\n let filteredUsers: YuvUser[] = [];\n if (dedupedCache) {\n filteredUsers = dedupedCache.filter((entry) => users.includes(entry.id));\n missingUsers = users.filter((uid: string) => !filteredUsers.some((user) => user.id === uid));\n }\n // Pair every request with its uid so we can tell which IDs came back unresolved.\n // catchError keeps a single failing lookup from killing the whole forkJoin.\n const userRequests = missingUsers.map((uid: string) =>\n this.#idmService.getUserById(uid).pipe(\n catchError(() => of(null)),\n map((user) => ({ uid, user }))\n )\n );\n\n if (userRequests.length > 0) {\n return forkJoin(userRequests).pipe(\n switchMap((results) => {\n // Resolved users are real YuvUsers — safe to cache and render.\n // Unresolved IDs render as a synthetic { id, title: id } so the user still\n // sees the raw ID, but they are NOT written to the cache (a 404 today might\n // resolve tomorrow, and caching it would block that).\n const resolved = results.filter((res) => res.user != null).map((res) => res.user as YuvUser);\n const unresolved = results\n .filter((res) => res.user == null)\n .map((res) => ({ id: res.uid, title: res.uid }) as YuvUser);\n // Dedup by id AT WRITE TIME so the stored array stays clean no matter how two\n // instances interleave. `resolved` is appended after the cache, so a freshly\n // resolved real user always wins over any stale same-id entry — a synthetic\n // fallback (which is never in `resolved`/`cache`) can therefore never shadow it.\n const merged = this.#dedupById([...(dedupedCache || []), ...resolved]);\n return this.#appCache.setItem(STORAGE_USERS_KEY, merged).pipe(map(() => [...resolved, ...unresolved]));\n }),\n map((users) => ({ roles, texts, users: [...users, ...filteredUsers] }))\n );\n } else if (cacheShrank && dedupedCache) {\n // Every requested user was already cached, but the stored array carried duplicates —\n // write the cleaned version back so the pollution heals instead of re-deduping forever.\n return this.#appCache\n .setItem(STORAGE_USERS_KEY, dedupedCache)\n .pipe(map(() => ({ roles, texts, users: [...filteredUsers] })));\n } else {\n // Every requested user was already in the cache and it was clean — no network needed.\n return of({ roles, texts, users: [...filteredUsers] });\n }\n }),\n // Step 3 — project to the flat render-model the template iterates over. data-type\n // drives the chip styling (user vs role vs free text).\n map(({ roles, users, texts }) => {\n const userNodes = users.map((user: YuvUser & { displayName?: string }) => ({\n type: 'user',\n label: user.title || user.displayName\n }));\n const roleNodes = roles.map((role: string) => ({\n type: 'role',\n label: role\n }));\n const textNodes = texts.map((text: string) => ({\n type: 'text',\n label: text\n }));\n return [...userNodes, ...roleNodes, ...textNodes];\n })\n );\n },\n defaultValue: []\n });\n\n userAndRole = this.#userRoleResolver.value;\n userAndRoleLoading = this.#userRoleResolver.isLoading;\n\n // Collapse a user list to one entry per id, keeping the LAST occurrence — callers order the\n // array so the freshest/real entry comes last and wins. Also drops any falsy entries.\n #dedupById(users: YuvUser[]): YuvUser[] {\n return [...new Map(users.filter((user) => user).map((user) => [user.id, user])).values()];\n }\n}\n","@if (userAndRoleLoading()) {\n <span class=\"loading\"><i>.</i><i>.</i><i>.</i></span>\n} @else {\n @for (node of userAndRole(); track $index) {\n <span class=\"node\" [attr.data-type]=\"node.type\">{{ node.label }}</span>\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-string-renderer',\n template: `{{ value() }}`,\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StringRendererComponent extends AbstractRendererComponent {}\n","import { DatePipe, DecimalPipe } from '@angular/common';\nimport { Component, computed, inject } from '@angular/core';\nimport { SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from '../abstract.renderer';\n\n@Component({\n selector: 'yuv-table-renderer',\n standalone: true,\n imports: [TranslatePipe],\n templateUrl: `./table.renderer.component.html`,\n styleUrls: ['./table.renderer.component.scss'],\n providers: [DecimalPipe, DatePipe]\n})\nexport class TableRendererComponent extends AbstractRendererComponent<any[]> {\n readonly #system = inject(SystemService);\n readonly translate = inject(TranslateService);\n readonly #decimalPipe = inject(DecimalPipe);\n readonly #datePipe = inject(DatePipe);\n\n protected tableHeaders = computed(() => [\n ...new Set(\n (this.value() || []).flat().map((item) => ({\n id: `header-${crypto.randomUUID()}`,\n key: item.propertyName,\n label: this.#system.getLocalizedLabel(`${item.propertyName}`) || item.propertyName\n }))\n )\n ]);\n\n protected tableData = computed(() => {\n const data = this.value() || [];\n return (data.length > 10 ? data.slice(0, 10) : data).map((row, rowIndex) =>\n row.map((item: any) => ({\n id: `row-${rowIndex}-cell-${crypto.randomUUID()}`,\n ...item,\n value: this.#cellValue(item)\n }))\n );\n });\n\n protected reducedData = computed(() => {\n const data = this.value() || [];\n return data.length > 10;\n });\n\n protected getCellValue(row: any[], key: string): string {\n const item = (row || []).find((i) => i.propertyName === key);\n return item ? item.value : '';\n }\n\n #cellValue(element: { propertyType: string; value: string }): string | null {\n switch (element.propertyType) {\n case 'datetime':\n return this.#datePipe.transform(element.value, 'short', undefined, this.translate.getCurrentLang());\n case 'string':\n return element.value;\n case 'decimal':\n return this.#decimalPipe.transform(element.value, '1.2-4', this.translate.getCurrentLang());\n default:\n return element.value;\n }\n }\n}\n","<div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <th>{{ header.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header.id) {\n <td>{{ getCellValue(row, header.key) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>{{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}</p>\n }\n</div>\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-unknown-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class UnknownRendererComponent extends AbstractRendererComponent<any> {}\n","import { Injectable, Type, inject, signal } from '@angular/core';\nimport {\n ContentStreamField,\n InternalFieldType,\n RendererType,\n SchemaResponseFieldDefinition,\n SystemService\n} from '@yuuvis/client-core';\nimport {\n AbstractRendererComponent,\n BooleanRendererComponent,\n DateTimeRendererComponent,\n DecimalRendererComponent,\n FileSizeRendererComponent,\n I18nCatalogRendererComponent,\n IconRendererComponent,\n IntegerRendererComponent,\n OrganizationRendererComponent,\n StringRendererComponent,\n TableRendererComponent,\n UnknownRendererComponent\n} from '../../property-renderer';\nimport { RendererComponent } from './renderer.interface';\n\n/**\n * Service for managing property type renderers. Renderers are components that will render certain\n * property types.\n *\n * You are able to register your own renderer to overwrite an existing one or provide a custom\n * renderer for your context.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RendererService {\n private system = inject(SystemService);\n\n #renderers = signal<Record<string, Type<RendererComponent>>>({});\n\n constructor() {\n const initialRenderers: Record<string, Type<RendererComponent>> = {\n integer: IntegerRendererComponent,\n decimal: DecimalRendererComponent,\n datetime: DateTimeRendererComponent,\n icon: IconRendererComponent,\n string: StringRendererComponent,\n boolean: BooleanRendererComponent,\n table: TableRendererComponent\n };\n initialRenderers[InternalFieldType.STRING_ORGANIZATION] = OrganizationRendererComponent;\n initialRenderers[InternalFieldType.STRING_ORGANIZATION_SET] = OrganizationRendererComponent;\n // Only i18n catalogs need a dedicated renderer: their values are technical and the label\n // comes from the localizations. Static (`catalog[...]`) and dynamic catalog values are\n // already displayed as they are stored, so the default string renderer is fine for those.\n initialRenderers[InternalFieldType.STRING_CATALOG_I18N] = I18nCatalogRendererComponent;\n initialRenderers[ContentStreamField.LENGTH] = FileSizeRendererComponent;\n this.#renderers.set(initialRenderers);\n }\n\n getRendererByType(type: RendererType): Type<RendererComponent> {\n const r = this.#renderers();\n return r[type] || UnknownRendererComponent;\n }\n\n getRenderer(propertyName: string, typeName?: string): Type<RendererComponent> {\n // try to find a renderer based on property and object type\n let r = this.#renderers()[this._getKey(propertyName, typeName)];\n if (!r) {\n // not special renderer found so we'll try to get one for the internal type\n // of the given property\n const srf: SchemaResponseFieldDefinition | undefined =\n this.system.system && this.system.system.allFields[propertyName];\n\n if (srf) {\n r = this.getRendererByType(\n this.system.getInternalFormElementType(srf.propertyType, srf.classifications, srf.catalog)\n );\n }\n }\n\n return r || UnknownRendererComponent;\n }\n\n /**\n * Register a renderer for a particular property. Providing `typeName` will register that renderer\n * for a certain context (use same inputs when calling `getRenderer()`).\n * @param cmp The component to actually render the property\n * @param propertyName property name (used for registering the renderer for a certain context)\n * @param typeName Optional type name (used for registering the renderer for a certain context)\n */\n registerRenderer(cmp: Type<AbstractRendererComponent>, propertyName: string, typeName?: string) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [this._getKey(propertyName, typeName)]: cmp } }));\n }\n\n /**\n *\n * @param type The type of property this renderer is supposed to be used for\n */\n registerRendererByType(type: RendererType, cmp: Type<RendererComponent>) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [type]: cmp } }));\n }\n\n // Generate the unique key for a renderer\n private _getKey(propertyName: string, typeName?: string): string {\n const k = [propertyName];\n typeName && k.push(typeName);\n return k.join('-');\n }\n}\n","import { ComponentRef, Directive, Type, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { AuditEntry } from '@yuuvis/client-core';\nimport { AbstractAuditRendererComponent } from '../audit-renderer';\nimport { AuditRendererService } from '../services';\n\n/**\n * Attribute directive that renders an `AuditEntry` using the component registered with\n * `AuditRendererService` for the entry's `action` (and optionally `subaction`). Falls\n * back to `DefaultAuditRendererComponent` when no override is registered.\n */\n@Directive({\n selector: '[yuvAuditRenderer]',\n standalone: true\n})\nexport class AuditRendererDirective {\n #service = inject(AuditRendererService);\n #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<AbstractAuditRendererComponent>;\n #current?: AuditEntry;\n\n yuvAuditRenderer = input.required<AuditEntry>();\n\n #renderEffect = effect(() => {\n const entry = this.yuvAuditRenderer();\n if (this.#alreadyRendered(entry)) return;\n\n this.#current = entry;\n this.#containerRef.clear();\n const cmp: Type<AbstractAuditRendererComponent> = this.#service.getAuditRenderer(\n entry.action,\n entry.subaction\n );\n this.component = this.#containerRef.createComponent(cmp);\n this.component.setInput('auditEntry', entry);\n });\n\n #alreadyRendered(entry: AuditEntry): boolean {\n return !!this.#current && JSON.stringify(this.#current) === JSON.stringify(entry);\n }\n}\n","import { ComponentRef, Directive, Type, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { RendererComponent, RendererDirectiveInput, RendererService } from '../services';\n/**\n * Structural directive for rendering an obect type property\n */\n@Directive({\n selector: '[yuvRenderer]',\n standalone: true\n})\nexport class RendererDirective {\n #rendererService = inject(RendererService);\n #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<RendererComponent>;\n #rendererInput?: RendererDirectiveInput;\n yuvRenderer = input<RendererDirectiveInput | undefined>(undefined);\n\n #yuvRendererEffect = effect(() => {\n const i = this.yuvRenderer();\n if (i && !this.#alreadyRendered(i)) {\n this.#rendererInput = i;\n this.#containerRef.clear();\n const cmp: Type<RendererComponent> = i.rendererType\n ? this.#rendererService.getRendererByType(i.rendererType)\n : this.#rendererService.getRenderer(i.propertyName);\n\n this.component = this.#containerRef.createComponent(cmp);\n // pass inputs to the renderer. As they are signals they need an injection context\n this.component.setInput('propertyName', i.propertyName);\n this.component.setInput('value', i.value);\n if (i.meta) this.component.setInput('meta', i.meta);\n } else if (!i) {\n this.#containerRef.clear();\n this.#rendererInput = undefined;\n }\n });\n\n #alreadyRendered(i: RendererDirectiveInput): boolean {\n return !!this.#rendererInput && JSON.stringify(this.#rendererInput) === JSON.stringify(i);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -131,8 +131,8 @@ class SequenceListComponent {
|
|
|
131
131
|
items[idx]?.scrollIntoView?.({ behavior: 'smooth', block: 'nearest' });
|
|
132
132
|
}, { injector: this.#injector });
|
|
133
133
|
}
|
|
134
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
135
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
134
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SequenceListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
135
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: SequenceListComponent, isStandalone: true, selector: "yuv-sequence-list", inputs: { maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0" } }, providers: [
|
|
136
136
|
{
|
|
137
137
|
provide: NG_VALUE_ACCESSOR,
|
|
138
138
|
useExisting: forwardRef(() => SequenceListComponent),
|
|
@@ -143,9 +143,9 @@ class SequenceListComponent {
|
|
|
143
143
|
useExisting: forwardRef(() => SequenceListComponent),
|
|
144
144
|
multi: true
|
|
145
145
|
}
|
|
146
|
-
], viewQueries: [{ propertyName: "orgComponent", first: true, predicate: OrganizationComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track item; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button mat-icon-button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItemAt($index)\">\n <mat-icon>add</mat-icon>\n </button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button ymtIconButton icon-button-size=\"small\" class=\"remove hidden\" [class.hidden]=\"controlCount() <= minLength()\" type=\"button\" (click)=\"removeItem($index)\" [disabled]=\"controlCount() <= minLength()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.task' | translate }}</mat-label>\n <input matInput [maxLength]=\"128\" formControlName=\"title\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.nextAssignee' | translate }}</mat-label>\n <yuv-organization [classifications]=\"['id:organization:set[user,role]']\"\n [matTooltip]=\"'yuv.sequence-list.form.nextAssignee' | translate\"\n [multiselect]=\"true\"\n [withMetadata]=\"true\"\n [required]=\"true\"\n formControlName=\"nextAssignee\">\n </yuv-organization>\n </mat-form-field>\n </div>\n @if ($last) {\n <button mat-icon-button class=\"add after\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </div>\n }\n @if (controlCount() === 0) {\n <button mat-icon-button class=\"add empty\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </section>\n</form>\n", styles: [":host{--_sequence-list-item-background: var(--sequence-list-item-background, var(--ymt-surface-panel));--_sequence-list-item-border-color: var(--sequence-list-item-border-color, var(--ymt-outline-variant));--_sequence-list-item-border-radius: var(--sequence-list-item-border-radius, var(--ymt-spacing-xs));--_sequence-list-line-color: var(--sequence-list-line-color, var(--ymt-text-color-subtle));--_sequence-list-line-width: var(--sequence-list-line-width, 2px);--_sequence-list-line-item-background: var(--sequence-list-line-item-background, var(--ymt-surface-panel));--_sequence-list-line-item-border-radius: var(--sequence-list-line-item-border-radius, .25em)}:host form section{margin-inline-end:4px}:host form section button.add{--icon-size: 18px;border-radius:var(--_sequence-list-line-item-border-radius);padding:0;display:flex;align-items:center;justify-content:center;background-color:var(--_sequence-list-line-item-background);border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section button.add:focus{outline:2px solid rgb(from var(--ymt-primary) r g b/.5);outline-offset:-2px;border-color:var(--ymt-primary)}:host form section .item{display:grid;grid-template-columns:6ch 1fr;grid-template-rows:auto auto;column-gap:1em;grid-template-areas:\"addBefore .\" \"index form\" \"addAfter .\"}:host form section .item.ng-invalid.ng-dirty .item-form{border-color:var(--ymt-danger);outline:3px solid rgb(from var(--ymt-danger) r g b/.5)}:host form section .item .add.before{grid-area:addBefore;justify-self:center}:host form section .item .add.after{grid-area:addAfter;justify-self:center}:host form section .item .index{grid-area:index;display:grid;align-items:center;justify-content:center}:host form section .item .index:after{content:attr(data-index);grid-row:1;grid-column:1;background-color:var(--_sequence-list-line-item-background);font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);font-weight:700;border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color);border-radius:var(--_sequence-list-line-item-border-radius);line-height:1em;padding:1px .25em;outline:3px solid rgb(from var(--_sequence-list-line-color) r g b/.1)}:host form section .item .index:before{content:\"\";grid-row:1;grid-column:1;height:100%;width:calc(50% + var(--_sequence-list-line-width) / 2);border-inline-end:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section .item .item-form{grid-area:form;background-color:var(--_sequence-list-item-background);border:1px solid var(--_sequence-list-item-border-color);border-radius:var(--_sequence-list-item-border-radius);padding:var(--ymt-spacing-xs);display:grid;column-gap:var(--ymt-spacing-m);row-gap:4px;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"task remove\" \"user user\" \"date date\"}:host form section .item .item-form input{border:1px solid transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);grid-area:task;outline-offset:0;line-height:1em;padding:var(--ymt-spacing-2xs);background-color:transparent;color:var(--ymt-text-color)}:host form section .item .item-form input:focus{border-color:var(--yvc-form-element-focus-border-color);outline:var(--yvc-form-element-focus-outline-with) solid var(--yvc-form-element-focus-outline-color)}:host form section .item .item-form yvc-datepicker{--form-element-border-color: transparent;grid-area:date;padding:0}:host form section .item .item-form yuv-organization{--form-element-border-color: transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);border:1px solid var(--form-element-border-color);grid-area:user}:host form section .item .item-form .remove{--icon-size: 18px;padding:var(--ymt-spacing-2xs);grid-area:remove;padding:0}:host form section .item .item-form .remove.hidden{visibility:hidden}:host mat-form-field{margin-block-start:var(--ymt-spacing-s)}\n"], dependencies: [{ kind: "component", type: OrganizationComponent, selector: "yuv-organization", inputs: ["situation", "multiselect", "classifications", "readonly", "excludeMe", "withMetadata"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
146
|
+
], viewQueries: [{ propertyName: "orgComponent", first: true, predicate: OrganizationComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track item; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button mat-icon-button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItemAt($index)\">\n <mat-icon>add</mat-icon>\n </button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button ymtIconButton icon-button-size=\"small\" class=\"remove hidden\" [class.hidden]=\"controlCount() <= minLength()\" type=\"button\" (click)=\"removeItem($index)\" [disabled]=\"controlCount() <= minLength()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.task' | translate }}</mat-label>\n <input matInput [maxLength]=\"128\" formControlName=\"title\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.nextAssignee' | translate }}</mat-label>\n <yuv-organization [classifications]=\"['id:organization:set[user,role]']\"\n [matTooltip]=\"'yuv.sequence-list.form.nextAssignee' | translate\"\n [multiselect]=\"true\"\n [withMetadata]=\"true\"\n [required]=\"true\"\n formControlName=\"nextAssignee\">\n </yuv-organization>\n </mat-form-field>\n </div>\n @if ($last) {\n <button mat-icon-button class=\"add after\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </div>\n }\n @if (controlCount() === 0) {\n <button mat-icon-button class=\"add empty\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </section>\n</form>\n", styles: [":host{--_sequence-list-item-background: var(--sequence-list-item-background, var(--ymt-surface-panel));--_sequence-list-item-border-color: var(--sequence-list-item-border-color, var(--ymt-outline-variant));--_sequence-list-item-border-radius: var(--sequence-list-item-border-radius, var(--ymt-spacing-xs));--_sequence-list-line-color: var(--sequence-list-line-color, var(--ymt-text-color-subtle));--_sequence-list-line-width: var(--sequence-list-line-width, 2px);--_sequence-list-line-item-background: var(--sequence-list-line-item-background, var(--ymt-surface-panel));--_sequence-list-line-item-border-radius: var(--sequence-list-line-item-border-radius, .25em)}:host form section{margin-inline-end:4px}:host form section button.add{--icon-size: 18px;border-radius:var(--_sequence-list-line-item-border-radius);padding:0;display:flex;align-items:center;justify-content:center;background-color:var(--_sequence-list-line-item-background);border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section button.add:focus{outline:2px solid rgb(from var(--ymt-primary) r g b/.5);outline-offset:-2px;border-color:var(--ymt-primary)}:host form section .item{display:grid;grid-template-columns:6ch 1fr;grid-template-rows:auto auto;column-gap:1em;grid-template-areas:\"addBefore .\" \"index form\" \"addAfter .\"}:host form section .item.ng-invalid.ng-dirty .item-form{border-color:var(--ymt-danger);outline:3px solid rgb(from var(--ymt-danger) r g b/.5)}:host form section .item .add.before{grid-area:addBefore;justify-self:center}:host form section .item .add.after{grid-area:addAfter;justify-self:center}:host form section .item .index{grid-area:index;display:grid;align-items:center;justify-content:center}:host form section .item .index:after{content:attr(data-index);grid-row:1;grid-column:1;background-color:var(--_sequence-list-line-item-background);font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle);font-weight:700;border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color);border-radius:var(--_sequence-list-line-item-border-radius);line-height:1em;padding:1px .25em;outline:3px solid rgb(from var(--_sequence-list-line-color) r g b/.1)}:host form section .item .index:before{content:\"\";grid-row:1;grid-column:1;height:100%;width:calc(50% + var(--_sequence-list-line-width) / 2);border-inline-end:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section .item .item-form{grid-area:form;background-color:var(--_sequence-list-item-background);border:1px solid var(--_sequence-list-item-border-color);border-radius:var(--_sequence-list-item-border-radius);padding:var(--ymt-spacing-xs);display:grid;column-gap:var(--ymt-spacing-m);row-gap:4px;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"task remove\" \"user user\" \"date date\"}:host form section .item .item-form input{border:1px solid transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);grid-area:task;outline-offset:0;line-height:1em;padding:var(--ymt-spacing-2xs);background-color:transparent;color:var(--ymt-text-color)}:host form section .item .item-form input:focus{border-color:var(--yvc-form-element-focus-border-color);outline:var(--yvc-form-element-focus-outline-with) solid var(--yvc-form-element-focus-outline-color)}:host form section .item .item-form yvc-datepicker{--form-element-border-color: transparent;grid-area:date;padding:0}:host form section .item .item-form yuv-organization{--form-element-border-color: transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);border:1px solid var(--form-element-border-color);grid-area:user}:host form section .item .item-form .remove{--icon-size: 18px;padding:var(--ymt-spacing-2xs);grid-area:remove;padding:0}:host form section .item .item-form .remove.hidden{visibility:hidden}:host mat-form-field{margin-block-start:var(--ymt-spacing-s)}\n"], dependencies: [{ kind: "component", type: OrganizationComponent, selector: "yuv-organization", inputs: ["situation", "multiselect", "classifications", "readonly", "excludeMe", "withMetadata", "allowFreeText"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
147
147
|
}
|
|
148
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SequenceListComponent, decorators: [{
|
|
149
149
|
type: Component,
|
|
150
150
|
args: [{ selector: 'yuv-sequence-list', standalone: true, imports: [
|
|
151
151
|
TranslatePipe,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-sequence-list.mjs","sources":["../../../../../libs/yuuvis/client-framework/sequence-list/src/lib/sequence-list.component.ts","../../../../../libs/yuuvis/client-framework/sequence-list/src/lib/sequence-list.component.html","../../../../../libs/yuuvis/client-framework/sequence-list/src/yuuvis-client-framework-sequence-list.ts"],"sourcesContent":["import {\n afterNextRender,\n Component,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormArray,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SequenceItem, SequenceListAssignee } from './sequence-list.interface';\n\ntype SequenceFormItem = FormGroup<{\n title: FormControl<string>;\n nextAssignee: FormControl<SequenceListAssignee[]>;\n expiryDatetime: FormControl<any>;\n}>;\ntype SequenceForm = FormGroup<{\n items: FormArray<SequenceFormItem>;\n}>;\n\n/**\n * Task sequence list.\n */\n@Component({\n selector: 'yuv-sequence-list',\n standalone: true,\n imports: [\n TranslatePipe,\n OrganizationComponent,\n MatButtonModule,\n MatIconModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatInputModule,\n MatFormFieldModule,\n YmtIconButtonDirective\n ],\n templateUrl: './sequence-list.component.html',\n styleUrls: ['./sequence-list.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SequenceListComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SequenceListComponent),\n multi: true\n }\n ],\n host: {\n tabindex: '0'\n }\n})\nexport class SequenceListComponent implements ControlValueAccessor, Validator {\n #formBuilder = inject(NonNullableFormBuilder);\n #eleRef = inject(ElementRef);\n #injector = inject(Injector);\n\n readonly orgComponent = viewChild.required(OrganizationComponent);\n\n /**\n * Maximum number of sequence items (defaults to 100).\n */\n maxLength = input<number>(100);\n /**\n * Minimum number of sequence items that must remain (defaults to 1, matching\n * the original behaviour where a list can never be emptied). Consumers that\n * represent a tail of optional follow-up items (e.g. the remaining steps of\n * an already-started routing list) can set this to 0 to allow removing the\n * last remaining item.\n */\n minLength = input<number>(1);\n maxLengthExceeded = signal<boolean>(false);\n readonly controlCount = signal<number>(0);\n\n // dynamic form for sequence items\n sequenceForm: SequenceForm = this.#formBuilder.group({\n items: this.#formBuilder.array<SequenceFormItem>([this.#generateSequenceItem()])\n });\n\n entries: SequenceItem[] = [];\n\n get formItemArray(): FormArray<SequenceFormItem> {\n return this.sequenceForm.controls.items as FormArray<SequenceFormItem>;\n }\n\n constructor() {\n this.#updateState();\n this.sequenceForm.valueChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n this.#propagate();\n });\n }\n\n addItem(): void {\n this.sequenceForm.controls.items.push(this.#generateSequenceItem());\n this.#updateState();\n this.#scrollToItem(this.formItemArray.length - 1);\n }\n\n addItemAt(idx: number): void {\n this.sequenceForm.controls.items.insert(idx, this.#generateSequenceItem());\n this.#updateState();\n this.#scrollToItem(idx);\n }\n\n removeItem(idx: number): void {\n this.sequenceForm.controls.items.removeAt(idx);\n this.#updateState();\n }\n\n writeValue(value: SequenceItem[]): void {\n this.entries = value || [];\n this.formItemArray.clear();\n if (this.entries.length === 0 && this.minLength() > 0) this.addItem();\n this.entries.forEach((entry) => {\n this.formItemArray.push(this.#generateSequenceItem(entry));\n });\n this.#updateState();\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n validate(): ValidationErrors | null {\n const maxLength = this.maxLength();\n const mlExceeded = maxLength !== undefined && this.formItemArray.length > maxLength;\n const valid = this.sequenceForm.valid && !mlExceeded;\n\n return !valid\n ? {\n sequencelist: {\n invalid: this.sequenceForm.invalid,\n maxLengthExceeded: mlExceeded\n }\n }\n : null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any): void => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n #updateState(): void {\n const maxLength = this.maxLength();\n this.maxLengthExceeded.set(maxLength !== undefined && this.formItemArray.length >= maxLength);\n this.controlCount.set(this.sequenceForm.controls.items.length);\n }\n\n #generateSequenceItem(sequenceItem?: SequenceItem): SequenceFormItem {\n return this.#formBuilder.group({\n title: [sequenceItem?.title || '', Validators.required],\n nextAssignee: [sequenceItem?.nextAssignee || [], Validators.required],\n expiryDatetime: [sequenceItem?.expiryDatetime || undefined]\n });\n }\n\n #propagate(): void {\n const res: SequenceItem[] = [];\n (this.sequenceForm.value.items || []).forEach((item: any) => {\n const i: SequenceItem = {\n title: item.title,\n nextAssignee: item.nextAssignee\n };\n if (item.expiryDatetime) {\n i.expiryDatetime = item.expiryDatetime;\n }\n res.push(i);\n });\n\n this.propagateChange(res);\n }\n\n #scrollToItem(idx: number): void {\n afterNextRender(\n () => {\n const items = this.#eleRef.nativeElement.querySelectorAll('.item');\n items[idx]?.scrollIntoView?.({ behavior: 'smooth', block: 'nearest' });\n },\n { injector: this.#injector }\n );\n }\n}\n","<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track item; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button mat-icon-button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItemAt($index)\">\n <mat-icon>add</mat-icon>\n </button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button ymtIconButton icon-button-size=\"small\" class=\"remove hidden\" [class.hidden]=\"controlCount() <= minLength()\" type=\"button\" (click)=\"removeItem($index)\" [disabled]=\"controlCount() <= minLength()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.task' | translate }}</mat-label>\n <input matInput [maxLength]=\"128\" formControlName=\"title\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.nextAssignee' | translate }}</mat-label>\n <yuv-organization [classifications]=\"['id:organization:set[user,role]']\"\n [matTooltip]=\"'yuv.sequence-list.form.nextAssignee' | translate\"\n [multiselect]=\"true\"\n [withMetadata]=\"true\"\n [required]=\"true\"\n formControlName=\"nextAssignee\">\n </yuv-organization>\n </mat-form-field>\n </div>\n @if ($last) {\n <button mat-icon-button class=\"add after\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </div>\n }\n @if (controlCount() === 0) {\n <button mat-icon-button class=\"add empty\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </section>\n</form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-sequence-list.mjs","sources":["../../../../../libs/yuuvis/client-framework/sequence-list/src/lib/sequence-list.component.ts","../../../../../libs/yuuvis/client-framework/sequence-list/src/lib/sequence-list.component.html","../../../../../libs/yuuvis/client-framework/sequence-list/src/yuuvis-client-framework-sequence-list.ts"],"sourcesContent":["import {\n afterNextRender,\n Component,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormArray,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NonNullableFormBuilder,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SequenceItem, SequenceListAssignee } from './sequence-list.interface';\n\ntype SequenceFormItem = FormGroup<{\n title: FormControl<string>;\n nextAssignee: FormControl<SequenceListAssignee[]>;\n expiryDatetime: FormControl<any>;\n}>;\ntype SequenceForm = FormGroup<{\n items: FormArray<SequenceFormItem>;\n}>;\n\n/**\n * Task sequence list.\n */\n@Component({\n selector: 'yuv-sequence-list',\n standalone: true,\n imports: [\n TranslatePipe,\n OrganizationComponent,\n MatButtonModule,\n MatIconModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatInputModule,\n MatFormFieldModule,\n YmtIconButtonDirective\n ],\n templateUrl: './sequence-list.component.html',\n styleUrls: ['./sequence-list.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SequenceListComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SequenceListComponent),\n multi: true\n }\n ],\n host: {\n tabindex: '0'\n }\n})\nexport class SequenceListComponent implements ControlValueAccessor, Validator {\n #formBuilder = inject(NonNullableFormBuilder);\n #eleRef = inject(ElementRef);\n #injector = inject(Injector);\n\n readonly orgComponent = viewChild.required(OrganizationComponent);\n\n /**\n * Maximum number of sequence items (defaults to 100).\n */\n maxLength = input<number>(100);\n /**\n * Minimum number of sequence items that must remain (defaults to 1, matching\n * the original behaviour where a list can never be emptied). Consumers that\n * represent a tail of optional follow-up items (e.g. the remaining steps of\n * an already-started routing list) can set this to 0 to allow removing the\n * last remaining item.\n */\n minLength = input<number>(1);\n maxLengthExceeded = signal<boolean>(false);\n readonly controlCount = signal<number>(0);\n\n // dynamic form for sequence items\n sequenceForm: SequenceForm = this.#formBuilder.group({\n items: this.#formBuilder.array<SequenceFormItem>([this.#generateSequenceItem()])\n });\n\n entries: SequenceItem[] = [];\n\n get formItemArray(): FormArray<SequenceFormItem> {\n return this.sequenceForm.controls.items as FormArray<SequenceFormItem>;\n }\n\n constructor() {\n this.#updateState();\n this.sequenceForm.valueChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n this.#propagate();\n });\n }\n\n addItem(): void {\n this.sequenceForm.controls.items.push(this.#generateSequenceItem());\n this.#updateState();\n this.#scrollToItem(this.formItemArray.length - 1);\n }\n\n addItemAt(idx: number): void {\n this.sequenceForm.controls.items.insert(idx, this.#generateSequenceItem());\n this.#updateState();\n this.#scrollToItem(idx);\n }\n\n removeItem(idx: number): void {\n this.sequenceForm.controls.items.removeAt(idx);\n this.#updateState();\n }\n\n writeValue(value: SequenceItem[]): void {\n this.entries = value || [];\n this.formItemArray.clear();\n if (this.entries.length === 0 && this.minLength() > 0) this.addItem();\n this.entries.forEach((entry) => {\n this.formItemArray.push(this.#generateSequenceItem(entry));\n });\n this.#updateState();\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n validate(): ValidationErrors | null {\n const maxLength = this.maxLength();\n const mlExceeded = maxLength !== undefined && this.formItemArray.length > maxLength;\n const valid = this.sequenceForm.valid && !mlExceeded;\n\n return !valid\n ? {\n sequencelist: {\n invalid: this.sequenceForm.invalid,\n maxLengthExceeded: mlExceeded\n }\n }\n : null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any): void => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n #updateState(): void {\n const maxLength = this.maxLength();\n this.maxLengthExceeded.set(maxLength !== undefined && this.formItemArray.length >= maxLength);\n this.controlCount.set(this.sequenceForm.controls.items.length);\n }\n\n #generateSequenceItem(sequenceItem?: SequenceItem): SequenceFormItem {\n return this.#formBuilder.group({\n title: [sequenceItem?.title || '', Validators.required],\n nextAssignee: [sequenceItem?.nextAssignee || [], Validators.required],\n expiryDatetime: [sequenceItem?.expiryDatetime || undefined]\n });\n }\n\n #propagate(): void {\n const res: SequenceItem[] = [];\n (this.sequenceForm.value.items || []).forEach((item: any) => {\n const i: SequenceItem = {\n title: item.title,\n nextAssignee: item.nextAssignee\n };\n if (item.expiryDatetime) {\n i.expiryDatetime = item.expiryDatetime;\n }\n res.push(i);\n });\n\n this.propagateChange(res);\n }\n\n #scrollToItem(idx: number): void {\n afterNextRender(\n () => {\n const items = this.#eleRef.nativeElement.querySelectorAll('.item');\n items[idx]?.scrollIntoView?.({ behavior: 'smooth', block: 'nearest' });\n },\n { injector: this.#injector }\n );\n }\n}\n","<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track item; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button mat-icon-button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItemAt($index)\">\n <mat-icon>add</mat-icon>\n </button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button ymtIconButton icon-button-size=\"small\" class=\"remove hidden\" [class.hidden]=\"controlCount() <= minLength()\" type=\"button\" (click)=\"removeItem($index)\" [disabled]=\"controlCount() <= minLength()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.task' | translate }}</mat-label>\n <input matInput [maxLength]=\"128\" formControlName=\"title\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ 'yuv.sequence-list.form.nextAssignee' | translate }}</mat-label>\n <yuv-organization [classifications]=\"['id:organization:set[user,role]']\"\n [matTooltip]=\"'yuv.sequence-list.form.nextAssignee' | translate\"\n [multiselect]=\"true\"\n [withMetadata]=\"true\"\n [required]=\"true\"\n formControlName=\"nextAssignee\">\n </yuv-organization>\n </mat-form-field>\n </div>\n @if ($last) {\n <button mat-icon-button class=\"add after\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </div>\n }\n @if (controlCount() === 0) {\n <button mat-icon-button class=\"add empty\" type=\"button\" [disabled]=\"maxLengthExceeded()\" (click)=\"addItem()\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </section>\n</form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA4CA;;AAEG;MAiCU,qBAAqB,CAAA;AAChC,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,SAAS;AA0BT,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAoC;IACxE;AAEA,IAAA,WAAA,GAAA;AAhCA,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC7C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAEnB,QAAA,IAAA,CAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC;AAEjE;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,GAAG,gFAAC;AAC9B;;;;;;AAMG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,CAAC,gFAAC;AAC5B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,wFAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAS,CAAC,mFAAC;;AAGzC,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnD,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAmB,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAChF,SAAA,CAAC;QAEF,IAAA,CAAA,OAAO,GAAmB,EAAE;;AA4D5B,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAU,EAAE,CAAC;QArDpC,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;YACvE,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACnE,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD;AAEA,IAAA,SAAS,CAAC,GAAW,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC1E,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IACzB;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9C,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,UAAU,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;YAAE,IAAI,CAAC,OAAO,EAAE;QACrE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,UAAU,GAAG,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,SAAS;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,UAAU;AAEpD,QAAA,OAAO,CAAC;AACN,cAAE;AACE,gBAAA,YAAY,EAAE;AACZ,oBAAA,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;AAClC,oBAAA,iBAAiB,EAAE;AACpB;AACF;cACD,IAAI;IACV;;AAKA,IAAA,iBAAiB,KAAU;IAE3B,YAAY,GAAA;AACV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,SAAS,CAAC;AAC7F,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IAChE;AAEA,IAAA,qBAAqB,CAAC,YAA2B,EAAA;AAC/C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC7B,KAAK,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YACvD,YAAY,EAAE,CAAC,YAAY,EAAE,YAAY,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACrE,YAAA,cAAc,EAAE,CAAC,YAAY,EAAE,cAAc,IAAI,SAAS;AAC3D,SAAA,CAAC;IACJ;IAEA,UAAU,GAAA;QACR,MAAM,GAAG,GAAmB,EAAE;AAC9B,QAAA,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAS,KAAI;AAC1D,YAAA,MAAM,CAAC,GAAiB;gBACtB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,IAAI,CAAC;aACpB;AACD,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;YACxC;AACA,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;IAC3B;AAEA,IAAA,aAAa,CAAC,GAAW,EAAA;QACvB,eAAe,CACb,MAAK;AACH,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAClE,YAAA,KAAK,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxE,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7B;IACH;+GAjIW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAhBrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAU0C,qBAAqB,gECpFlE,ykEA0CA,EAAA,MAAA,EAAA,CAAA,+2HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDUI,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,eAAe,qNACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,gBAAgB,4TAChB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,sBAAsB,4NARtB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FA4BJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhCjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP;wBACP,aAAa;wBACb,qBAAqB;wBACrB,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,gBAAgB;wBAChB,cAAc;wBACd,kBAAkB;wBAClB;qBACD,EAAA,SAAA,EAGU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE;AACR;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,QAAQ,EAAE;AACX,qBAAA,EAAA,QAAA,EAAA,ykEAAA,EAAA,MAAA,EAAA,CAAA,+2HAAA,CAAA,EAAA;wHAO0C,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpFlE;;AAEG;;;;"}
|
|
@@ -136,8 +136,8 @@ class SimpleSearchComponent {
|
|
|
136
136
|
}
|
|
137
137
|
$event.stopPropagation();
|
|
138
138
|
}
|
|
139
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
140
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.
|
|
139
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SimpleSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
140
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.20", type: SimpleSearchComponent, isStandalone: true, selector: "yuv-simple-search", inputs: { query: "query" }, outputs: { querySubmit: "querySubmit", clearInput: "clearInput", targetSelectionChanged: "targetSelectionChanged", queryChange: "queryChange", typeAggregation: "typeAggregation" }, providers: [
|
|
141
141
|
{
|
|
142
142
|
provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,
|
|
143
143
|
useValue: {
|
|
@@ -146,7 +146,7 @@ class SimpleSearchComponent {
|
|
|
146
146
|
}
|
|
147
147
|
], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<form role=\"search\" class=\"search-form\" [formGroup]=\"form\" (ngSubmit)=\"onSearch()\">\n <!-- Todo: String Translations-->\n <mat-form-field appearance=\"outline\">\n <label>\n <span class=\"ymt-hide-sr\">{{ 'yuv.simple-search.label' | translate }}</span>\n <input\n #searchInput\n matInput\n type=\"text\"\n autocomplete=\"off\"\n name=\"{{ 'yuv.simple-search.label' | translate }}\"\n formControlName=\"term\"\n [placeholder]=\"'yuv.simple-search.label' | translate\"\n />\n </label>\n\n <button\n ymtIconButton\n matSuffix\n type=\"button\"\n [attr.aria-label]=\"'yuv.simple-search.clear' | translate\"\n [attr.title]=\"'yuv.simple-search.clear' | translate\"\n [attr.inert]=\"form.get('term')?.value ? null : true\"\n (click)=\"onClear($event)\"\n >\n <mat-icon aria-hidden=\"true\">close</mat-icon>\n </button>\n\n <button ymtIconButton matSuffix type=\"submit\" [attr.aria-label]=\"'yuv.simple-search.submit' | translate\" [disabled]=\"form.invalid\">\n <mat-icon aria-hidden=\"true\">search</mat-icon>\n </button>\n </mat-form-field>\n</form>\n", styles: [":host{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--ymt-spacing-xs)}:host [inert=true]{opacity:0}:host [type=submit]{margin-inline-end:var(--ymt-spacing-xs)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
148
148
|
}
|
|
149
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: SimpleSearchComponent, decorators: [{
|
|
150
150
|
type: Component,
|
|
151
151
|
args: [{ selector: 'yuv-simple-search', standalone: true, imports: [
|
|
152
152
|
ReactiveFormsModule,
|