@yuuvis/client-framework 3.0.0 → 3.0.1
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.
|
@@ -3,7 +3,6 @@ import { input, output, viewChild, ChangeDetectionStrategy, Component, forwardRe
|
|
|
3
3
|
import * as i3 from '@angular/material/icon';
|
|
4
4
|
import { MatIcon, MatIconModule } from '@angular/material/icon';
|
|
5
5
|
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
|
|
6
|
-
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
|
7
6
|
import * as i4 from '@angular/material/tooltip';
|
|
8
7
|
import { MatTooltip, MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipModule } from '@angular/material/tooltip';
|
|
9
8
|
import { ObjectConfigService, DmsService, SearchService, DmsObject, BaseObjectTypeField, TranslatePipe, SystemService, ContentStreamField, Utils, Sort } from '@yuuvis/client-core';
|
|
@@ -50,15 +49,7 @@ class TileActionsMenuComponent {
|
|
|
50
49
|
}
|
|
51
50
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TileActionsMenuComponent, decorators: [{
|
|
52
51
|
type: Component,
|
|
53
|
-
args: [{ selector: 'yuv-tile-actions-menu', imports: [
|
|
54
|
-
MatMenu,
|
|
55
|
-
MatIcon,
|
|
56
|
-
MatMenuItem,
|
|
57
|
-
MatMenuTrigger,
|
|
58
|
-
MatProgressSpinner,
|
|
59
|
-
MatTooltip,
|
|
60
|
-
forwardRef(() => TileActionsMenuComponent)
|
|
61
|
-
], providers: [{ provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { position: 'right' } }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-menu #menuRef>\n <!-- @if (loading() && !actions().length) {\n <div class=\"loading-indicator\">\n <mat-spinner diameter=\"24\"></mat-spinner>\n </div>\n } -->\n @for (action of actions(); track action.id) {\n @if (action.children?.length) {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n [matMenuTriggerFor]=\"subMenu.matMenu()\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n <yuv-tile-actions-menu #subMenu [actions]=\"action.children!\" (itemSelect)=\"itemSelect.emit($event)\" />\n </span>\n } @else {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n (click)=\"itemClicked($event, action)\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n </span>\n }\n }\n</mat-menu>\n", styles: [":host{display:block}.loading-indicator{display:flex;justify-content:center;padding:8px 16px}button[mat-menu-item][disabled]{opacity:var(--ymt-disabled-opacity, .38);cursor:default;pointer-events:none}\n"] }]
|
|
52
|
+
args: [{ selector: 'yuv-tile-actions-menu', imports: [MatMenu, MatIcon, MatMenuItem, MatMenuTrigger, MatTooltip, forwardRef(() => TileActionsMenuComponent)], providers: [{ provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { position: 'right' } }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-menu #menuRef>\n <!-- @if (loading() && !actions().length) {\n <div class=\"loading-indicator\">\n <mat-spinner diameter=\"24\"></mat-spinner>\n </div>\n } -->\n @for (action of actions(); track action.id) {\n @if (action.children?.length) {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n [matMenuTriggerFor]=\"subMenu.matMenu()\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n <yuv-tile-actions-menu #subMenu [actions]=\"action.children!\" (itemSelect)=\"itemSelect.emit($event)\" />\n </span>\n } @else {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n (click)=\"itemClicked($event, action)\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n </span>\n }\n }\n</mat-menu>\n", styles: [":host{display:block}.loading-indicator{display:flex;justify-content:center;padding:8px 16px}button[mat-menu-item][disabled]{opacity:var(--ymt-disabled-opacity, .38);cursor:default;pointer-events:none}\n"] }]
|
|
62
53
|
}], propDecorators: { actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: true }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], itemSelect: [{ type: i0.Output, args: ["itemSelect"] }], matMenu: [{ type: i0.ViewChild, args: ['menuRef', { isSignal: true }] }] } });
|
|
63
54
|
|
|
64
55
|
class TileExtensionService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-tile-list.mjs","sources":["../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-actions-menu/tile-actions-menu.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-actions-menu/tile-actions-menu.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-extension/tile-extension.service.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-extension/directive/tile-extension.directive.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-list/tile-list.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-list/tile-list.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/action-select/action-select.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/action-select/action-select.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/property-select/property-select.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/property-select/property-select.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/icon-select/icon-select.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/icon-select/icon-select.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-tile/tile-config-tile.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-tile/tile-config-tile.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-trigger/tile-config-trigger.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-trigger/tile-config-trigger.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-extension/extensions/email.extension.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/yuuvis-client-framework-tile-list.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, forwardRef, input, output, viewChild } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltip } from '@angular/material/tooltip';\nimport { Action } from '@yuuvis/client-framework/actions';\n\n@Component({\n selector: 'yuv-tile-actions-menu',\n imports: [\n MatMenu,\n MatIcon,\n MatMenuItem,\n MatMenuTrigger,\n MatProgressSpinner,\n MatTooltip,\n forwardRef(() => TileActionsMenuComponent)\n ],\n templateUrl: './tile-actions-menu.component.html',\n styleUrls: ['./tile-actions-menu.component.scss'],\n providers: [{ provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { position: 'right' } }],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TileActionsMenuComponent {\n actions = input.required<Action[]>();\n loading = input(false);\n\n itemSelect = output<Action>();\n\n matMenu = viewChild.required<MatMenu>('menuRef');\n\n itemClicked(event: Event, action: Action): void {\n event.stopPropagation();\n event.preventDefault();\n if (action.disabled) return;\n this.itemSelect.emit(action);\n }\n}\n","<mat-menu #menuRef>\n <!-- @if (loading() && !actions().length) {\n <div class=\"loading-indicator\">\n <mat-spinner diameter=\"24\"></mat-spinner>\n </div>\n } -->\n @for (action of actions(); track action.id) {\n @if (action.children?.length) {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n [matMenuTriggerFor]=\"subMenu.matMenu()\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n <yuv-tile-actions-menu #subMenu [actions]=\"action.children!\" (itemSelect)=\"itemSelect.emit($event)\" />\n </span>\n } @else {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n (click)=\"itemClicked($event, action)\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n </span>\n }\n }\n</mat-menu>\n","import { Injectable } from '@angular/core';\nimport { TileExtension } from '@yuuvis/client-shell-core';\nimport { EmailTileExtensionComponent } from './extensions/email.extension';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TileExtensionService {\n private _extensions: Record<string, TileExtension> = {};\n\n constructor() {\n // this.registerTileExtension({\n // // typeId: 'appSystemmail:email',\n // typeId: 'system:document',\n // cmp: EmailTileExtensionComponent\n // });\n }\n\n registerTileExtension(ext: TileExtension) {\n this._extensions[ext.typeId] = ext;\n }\n\n hasTileExtension(objectTypeId: string): boolean {\n return !!this._extensions[objectTypeId];\n }\n\n /**\n * Get tile extensions for a certain type\n * @param typeId ID of the type to fetch extesion for (objectTypeID or secondaryObjectTypeID)\n * @returns\n */\n getTileExtension(typeId: string): TileExtension | undefined {\n return this._extensions[typeId];\n }\n}\n","import { ComponentRef, Directive, Input, ViewContainerRef, effect, inject, input, signal } from '@angular/core';\nimport { TileExtensionService } from '../tile-extension.service';\nimport { TileExtension, TileExtensionComponent, TileExtensionDirectiveInput } from '@yuuvis/client-shell-core';\n\n@Directive({\n selector: '[yuvTileExtension]',\n standalone: true\n})\nexport class TileExtensionDirective {\n readonly #tileExtensioService = inject(TileExtensionService);\n readonly #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<TileExtensionComponent>;\n\n yuvTileExtension = input.required<TileExtensionDirectiveInput>();\n\n #yuvTileExtensionEffect = effect(() => {\n const tile = this.yuvTileExtension();\n if (tile.typeId) {\n const ext = this.#tileExtensioService.getTileExtension(tile.typeId);\n if (ext) this._render(ext, tile.data);\n }\n });\n\n private _render(ext: TileExtension, data?: any) {\n if (this.component) this.#containerRef.clear();\n this.component = this.#containerRef.createComponent(ext.cmp);\n this.component.setInput('data', data);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n EffectCleanupRegisterFn,\n ElementRef,\n inject,\n input,\n linkedSignal,\n OnInit,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n ObjectConfigAction,\n ObjectConfigRecord,\n ObjectConfigService,\n ResolvedObjectConfigItem,\n SearchQuery,\n SearchResultItem,\n SearchService,\n TranslatePipe\n} from '@yuuvis/client-core';\n\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { QueryListComponent, YuvQueryListModule } from '@yuuvis/client-framework/query-list';\nimport { RendererDirective } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\nimport { YmtIconButtonDirective, YmtMatIconRegistryService } from '@yuuvis/material';\nimport { forkJoin, switchMap, take } from 'rxjs';\nimport { TileActionsMenuComponent } from '../tile-actions-menu/tile-actions-menu.component';\nimport { TileExtensionDirective } from '../tile-extension/directive/tile-extension.directive';\nimport { TileData, TileListConfigOptions, TileListHighlight } from './tile-list.interface';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InnerTileData = TileData & { actions: any };\nconst MATERIAL_IMPORTS = [MatIconModule, MatPaginatorModule, MatTooltipModule, MatMenuTrigger];\n\n/**\n * Query-driven tile list that renders `DmsObject` search results as rich, configurable\n * tiles based on `ObjectConfig` definitions.\n *\n * The component wraps `yuv-query-list` and adds DMS-specific concerns: it resolves the\n * `ObjectConfigRecord` for each result item (via `ObjectConfigService`), maps raw\n * `SearchResultItem` data to the `TileData` view model, and supports per-object-type\n * flavors, inline actions, context menus, and keyboard shortcuts for copy/cut.\n *\n * **Key Features:**\n * - Automatic object config resolution (title, description, icon, meta, aside, actions)\n * - Per-tile action buttons rendered from the resolved `ObjectConfigRecord`\n * - Optional `ObjectFlavor` overlay to switch the visual representation of specific SOTs\n * - Server-side pagination forwarded from the inner `yuv-query-list`\n * - Multi-selection with Shift/Ctrl modifier keys and mouse drag-to-select\n * - Programmatic pre-selection by object ID (`preselect` input, `selectById()` method)\n * - Per-item CSS highlight styles via the `highlights` input\n * - Optimistic list updates without a full re-fetch (`updateListItems`, `updateTileList`, `dropItems`)\n * - Keyboard shortcuts: **Ctrl+C** emits `tileCopy`, **Ctrl+X** emits `tileCut`\n * - Optional custom context menu via projected `TileActionsMenuComponent`\n * - Isolated tile config bucket so multiple instances can have different column layouts\n *\n * **Content Projection Slots:**\n * - `TileActionsMenuComponent` — optional; project a `<yuv-tile-actions-menu>` to attach\n * a context menu to every tile's action trigger.\n * - `#empty` — optional template reference; shown when the query returns no results.\n *\n * **Basic usage:**\n * ```html\n * <yuv-tile-list [query]=\"query\" (itemSelect)=\"onSelect($event)\" />\n * ```\n *\n * **Multi-select with custom bucket and highlights:**\n * ```html\n * <yuv-tile-list\n * bucket=\"my-feature\"\n * [query]=\"query\"\n * [multiselect]=\"true\"\n * [highlights]=\"highlights\"\n * (selectionChange)=\"onSelectionChange($event)\"\n * />\n * ```\n *\n * **With context menu:**\n * ```html\n * <yuv-tile-list [query]=\"query\" (ctxMenu)=\"onCtxMenu($event)\">\n * <yuv-tile-actions-menu>\n * <button mat-menu-item (click)=\"openDetails()\">Open</button>\n * </yuv-tile-actions-menu>\n * </yuv-tile-list>\n * ```\n */\n@Component({\n selector: 'yuv-tile-list',\n standalone: true,\n providers: [],\n imports: [\n TranslatePipe,\n ReactiveFormsModule,\n YuvListModule,\n YuvQueryListModule,\n YuvListModule,\n RendererDirective,\n TileExtensionDirective,\n YmtIconButtonDirective,\n ...MATERIAL_IMPORTS\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tile-list.component.html',\n styleUrl: './tile-list.component.scss',\n host: {\n '[class.dense]': 'dense()',\n '(keydown.control.c)': 'onCopy($event)',\n '(keydown.control.x)': 'onCut($event)'\n }\n})\nexport class TileListComponent implements OnInit {\n //#region Dependencies\n\n #objectConfigService = inject(ObjectConfigService);\n #destroyRef = inject(DestroyRef);\n #elRef = inject(ElementRef);\n #cdr = inject(ChangeDetectorRef);\n #actionService = inject(ActionsService);\n #dmsService = inject(DmsService);\n\n //#endregion\n\n //#region Angular stuff\n\n /**\n * Optional projected `TileActionsMenuComponent` instance.\n *\n * When present, its `matMenu()` is wired as the context menu for every tile's\n * action trigger button. The menu closes automatically whenever the user selects\n * a menu item (managed by `#closeMenuEffect`).\n *\n * Project it into the component:\n * ```html\n * <yuv-tile-list ...>\n * <yuv-tile-actions-menu>\n * <button mat-menu-item>Open</button>\n * </yuv-tile-actions-menu>\n * </yuv-tile-list>\n * ```\n */\n menuComponent = contentChild(TileActionsMenuComponent);\n\n /**\n * Optional projected element shown when the query returns an empty result set.\n *\n * Reference the element with the `#empty` template variable:\n * ```html\n * <yuv-tile-list ...>\n * <div #empty>No items found.</div>\n * </yuv-tile-list>\n * ```\n */\n emptyContent = contentChild<ElementRef>('empty');\n\n /**\n * Reference to the inner `QueryListComponent` instance.\n *\n * Used internally to delegate imperative operations (select, multiSelect, refresh, …).\n * Prefer the public API methods on this component over accessing `list()` directly from\n * the parent, as the inner list's API may change independently.\n */\n list = viewChild.required<QueryListComponent<TileData>>('list');\n\n /**\n * All `MatMenuTrigger` instances rendered inside the tile list.\n *\n * Used by `#closeMenuEffect` to close every open context/action menu when the user\n * selects a menu item, ensuring only one menu is open at a time.\n */\n menuTriggers = viewChildren(MatMenuTrigger);\n\n /**\n * Namespace key for storing and retrieving this instance's tile configuration.\n *\n * Tile column/field layout is persisted globally via `ObjectConfigService`. Providing\n * a bucket isolates this instance's configuration from the global default, so two\n * tile lists with different purposes (e.g. inbox vs. archive) can each remember their\n * own preferred layout independently.\n *\n * Use a unique, stable string — e.g. `\"my-app.inbox-list\"`. If omitted, the global\n * default configuration is used.\n */\n bucket = input<string>();\n\n /**\n * Number of result items to request per page from the search service.\n *\n * Forwarded to the inner `QueryListComponent`. When the total result count exceeds\n * this value, pagination controls appear. Reducing this number improves initial load\n * time; increasing it reduces the need for pagination.\n *\n * @default SearchService.DEFAULT_QUERY_SIZE\n */\n pageSize = input<number>(SearchService.DEFAULT_QUERY_SIZE);\n\n /**\n * Enables multi-selection mode.\n *\n * When `true`, the user can hold **Shift** to range-select or **Ctrl** to toggle\n * individual tiles, and mouse drag-to-select becomes available. `selectionChange`\n * then emits the full selection array; `itemSelect` still emits only the most\n * recently added single tile.\n *\n * @default false\n */\n multiselect = input<boolean>(false);\n\n /**\n * Renders tiles in a compact, reduced-height style.\n *\n * Drives the `[class.dense]` host binding. Use this when vertical space is limited\n * or when many items need to be visible at once without scrolling.\n *\n * @default false\n */\n dense = input<boolean>(false);\n\n /**\n * Extended configuration options for the tile list.\n *\n * See `TileListConfigOptions` for the full set of options, including:\n * - `actionContext` — passed to `ActionsService.getActionById()` when resolving inline\n * tile actions, so actions can behave differently per context.\n * - `configTypes` — virtual config type overrides that let you map specific\n * object-type / SOT combinations to a different `ObjectConfigRecord` entry.\n */\n options = input<TileListConfigOptions | undefined>(undefined);\n\n /**\n * Object flavor to overlay on matching tiles.\n *\n * An `ObjectFlavor` defines an alternative visual representation for objects that carry\n * a specific SOT. When set, tiles whose `DmsObject.sots` array includes\n * `flavor.sot` are rendered using the config entry identified by `flavor.id` instead\n * of their own object-type config.\n *\n * Changes are applied reactively via `#flavorEffect` and re-evaluated against the\n * last raw result set via `applyFlavor()`.\n */\n flavor = input<ObjectFlavor>();\n\n /**\n * The search query to execute.\n *\n * Accepts a structured `SearchQuery` object or a raw CMIS query string. The query is\n * re-executed reactively every time this input changes. The result set must include the\n * `system:objectTypeId` field — tiles without a resolved object type will throw at\n * mapping time.\n */\n query = input<SearchQuery | string | null>();\n\n /**\n * Object IDs to select as soon as the list finishes loading.\n *\n * If the list is still busy when this input is set, the IDs are stored internally and\n * applied once the query completes (via `#preselectEffect`). Items whose IDs are not\n * found in the current result set are silently ignored.\n *\n * For programmatic selection after the list is loaded, prefer `selectById()`.\n *\n * @default []\n */\n preselect = input<string[]>([]);\n\n /**\n * Per-item CSS style overrides rendered as inline styles on matching tiles.\n *\n * Each `TileListHighlight` entry specifies an array of object IDs and a\n * `cssStyles` record. All styles for the same ID are merged, with later entries in\n * the array taking precedence. Used to visually call out specific items (e.g. newly\n * created, recently modified, flagged).\n *\n * @default []\n */\n highlights = input<TileListHighlight[] | null>([]);\n\n /**\n * Guard function that temporarily blocks all selection changes.\n *\n * Forwarded to the inner `ListComponent`. As long as the returned predicate evaluates\n * to `true`, any attempt to change the selection is silently ignored. Useful when the\n * parent has unsaved changes tied to the current selection.\n *\n * @default () => false (never prevents)\n */\n preventChangeUntil = input<() => boolean>(() => false);\n\n /**\n * Automatically selects an item when the list is first rendered.\n *\n * Follows the same priority as `ListComponent.autoSelect`: first non-disabled item\n * with the `selected` attribute, then index 0. Accepts any truthy string so it can\n * be set as a plain HTML attribute: `<yuv-tile-list autoSelect>`.\n *\n * @default false\n */\n autoSelect = input<boolean, BooleanInput>(false, {\n transform: (value: BooleanInput) => coerceBooleanProperty(value)\n });\n\n /**\n * Suppresses the component's built-in context menu handling.\n *\n * When `true`, right-clicking a tile does not call `event.preventDefault()`, does not\n * auto-select the right-clicked tile, and does not emit `ctxMenu`. Use this when the\n * parent wants to handle `contextmenu` events itself.\n *\n * @default false\n */\n disableCustomContextMenu = input<boolean>(false);\n\n /**\n * Emits the `TileData` of the most recently selected tile.\n *\n * In single-select mode this fires for every selection change. In multi-select mode\n * it fires only when exactly one tile ends up selected (i.e. a plain click with no\n * modifier keys). For the full multi-selection result, listen to `selectionChange`.\n */\n itemSelect = output<TileData>();\n\n /**\n * Emits the currently selected tiles when the user presses **Ctrl+C**.\n *\n * The parent is responsible for handling the actual copy operation (e.g. writing to\n * the clipboard or storing the objects for a subsequent paste action). The default\n * browser copy behavior is suppressed.\n */\n tileCopy = output<TileData[]>();\n\n /**\n * Emits the currently selected tiles when the user presses **Ctrl+X**.\n *\n * The parent is responsible for handling the cut operation. The default browser cut\n * behavior is suppressed. Typically used together with `dropItems()` on a target list\n * to implement a move-via-clipboard interaction.\n */\n tileCut = output<TileData[]>();\n\n /**\n * Mirrors the inner `QueryListComponent.busy` signal as an output event.\n *\n * Emits `true` when a query request starts and `false` when it completes (or errors).\n * Useful when the parent needs to react to loading state changes without holding a\n * `@ViewChild` reference to this component.\n */\n busy = output<boolean>();\n\n /**\n * Emits once per query execution when the search result arrives.\n *\n * Provides the server-side total item count and the raw `SearchResultItem[]` for the\n * current page. Forwarded directly from the inner `QueryListComponent`.\n */\n queryResult = output<{ totalCount: number; items: SearchResultItem[] }>();\n\n /**\n * Emits the full current selection as `TileData[]` on every selection change.\n *\n * Unlike `itemSelect` — which emits a single tile — this output always reflects the\n * complete selection. In single-select mode the array contains at most one element.\n * Emits an empty array when the selection is cleared.\n */\n selectionChange = output<TileData[]>();\n\n /**\n * Emits the `TileData` of a tile when it is double-clicked.\n *\n * The primary single-click selection is handled separately via `itemSelect`. Use this\n * output to trigger a secondary action such as opening a detail view or navigating\n * to a route.\n */\n itemDblClick = output<TileData>();\n\n /**\n * Emits when the user right-clicks a tile and `disableCustomContextMenu` is `false`.\n *\n * Provides the originating mouse event (for positioning a custom menu overlay) and\n * the current selection as an array of object IDs. The right-clicked tile is\n * auto-selected before the event fires if it was not already part of the selection.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ctxMenu = output<{ event: MouseEvent | PointerEvent; selection: any }>();\n\n //#endregion\n\n //#region Properties\n\n /**\n * The `MatMenu` instance resolved from the projected `TileActionsMenuComponent`.\n *\n * `null` when no `TileActionsMenuComponent` is projected. Used in the template to\n * conditionally bind `[matMenuTriggerFor]` on tile action buttons.\n */\n menu = computed(() => {\n const comp = this.menuComponent();\n return comp?.matMenu() ?? null;\n });\n\n /**\n * The full `TileData` objects for all currently selected tiles.\n *\n * Updated on every selection change alongside `selection`. Prefer this signal when\n * the parent needs rich tile data (fields, DMS object reference, actions) rather than\n * just IDs.\n */\n selectedTile = signal<TileData[]>([]);\n\n /**\n * Object IDs of the currently selected tiles.\n *\n * A flat `string[]` signal — convenient for ID comparisons, permission checks, or\n * passing to services that work with IDs. For the full tile data, use `selectedTile`.\n */\n selection = signal<string[]>([]);\n\n /**\n * The `ObjectFlavor` currently applied to matching tiles, or `undefined` if none.\n *\n * Toggled by `applyFlavor()`: calling it with the same flavor a second time clears it\n * (acts as a toggle). Persisted across query refreshes until explicitly changed.\n */\n appliedFlavor?: ObjectFlavor;\n\n #busy = computed(() => this.list().busy());\n\n #preselect = linkedSignal(this.preselect);\n\n /**\n * Computed map of per-object-ID inline CSS styles derived from the `highlights` input.\n *\n * Merges all `TileListHighlight` entries that reference the same ID so the template\n * only needs a single lookup: `highlightStyles()[item.id]`. Returns an empty object\n * for IDs with no highlight rules.\n */\n highlightStyles = computed<Record<string, Record<string, unknown>>>(() => {\n const x: Record<string, Record<string, unknown>> = {};\n (this.highlights() || []).forEach((highlight) => {\n highlight.ids.forEach((id) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!x[id]) x[id] = {};\n x[id] = { ...x[id], ...highlight.cssStyles };\n });\n });\n return x;\n });\n\n /**\n * The `TileData` view models currently rendered in the list.\n *\n * Populated by `onQueryResult()` after each successful search response and also\n * prepended by `dropItems()`. The template iterates over this signal directly.\n * Read this from the parent to access displayed tile data without an extra query.\n */\n items = signal<TileData[]>([]);\n\n /**\n * Indicates whether at least one search has been executed successfully.\n *\n * Remains `false` until the first `onQueryResult()` call. Use this in the template\n * to distinguish between \"initial loading\" (show a spinner) and \"empty result\"\n * (show the empty-state slot) without relying on `items().length` alone.\n */\n searchExecuted = signal(false);\n\n #rawResultItems?: SearchResultItem[];\n\n private objectConfig?: ObjectConfigRecord;\n private _selection: number[] = [];\n private _lastSelection?: number;\n\n //#endregion\n\n constructor() {\n effect(this.#flavorEffect);\n effect(this.#preselectEffect);\n effect(this.#closeMenuEffect);\n }\n\n //#region Lifecycle hooks\n\n ngOnInit(): void {\n this.#getObjectConfig();\n }\n\n //#endregion\n\n //#region UI Methods\n\n /**\n * Host **Ctrl+C** handler — emits the current selection via `tileCopy`.\n *\n * Suppresses the default browser copy behavior. Fires only when at least one tile\n * is selected. Bound via the `host` metadata as `(keydown.control.c)`.\n *\n * @param event The keyboard event (used to call `preventDefault`).\n */\n onCopy(event: Event): void {\n event.preventDefault();\n if (this._selection.length) this.tileCopy.emit(this._selectionToTileData(this._selection));\n }\n\n /**\n * Host **Ctrl+X** handler — emits the current selection via `tileCut`.\n *\n * Suppresses the default browser cut behavior. Fires only when at least one tile\n * is selected. Bound via the `host` metadata as `(keydown.control.x)`.\n *\n * @param event The keyboard event (used to call `preventDefault`).\n */\n onCut(event: Event): void {\n event.preventDefault();\n if (this._selection.length) this.tileCut.emit(this._selectionToTileData(this._selection));\n }\n\n /**\n * Handles a double-click event forwarded from the inner `QueryListComponent`.\n *\n * If the double-clicked tile is not already the sole selected item, it is selected\n * first (without modifier keys) so that `itemDblClick` always fires in the context\n * of a known selection state. Then `itemDblClick` is emitted with the tile's data.\n *\n * Called from the template via `(itemDoubleClick)`. Not intended for external callers.\n *\n * @param index Zero-based index of the double-clicked tile in the current `items` array.\n */\n onItemDoubleClick(index: number): void {\n const selectionIsEqual = this._selection.length === 1 && this._selection[0] === index;\n if (!selectionIsEqual) this.#internalSelectByIndex(index);\n this.itemDblClick.emit(this.items()[index]);\n }\n\n /**\n * Handles the query result emitted by the inner `QueryListComponent`.\n *\n * Marks the component as having executed at least one search (`searchExecuted`),\n * updates the `items` signal with the freshly mapped `TileData` view models, and\n * re-emits the raw result via `queryResult` so the parent can update counters or\n * analytics without a separate query.\n *\n * Called from the template via `(queryResult)`. Not intended for external callers.\n *\n * @param result The search result object containing `totalCount` and `items`.\n */\n onQueryResult(result: { totalCount: number; items: SearchResultItem[] }): void {\n this.searchExecuted.set(true);\n const newItems = this.#mapToTileData(result.items.map((i) => new DmsObject(i)));\n\n // Preserve drop-in items at the top so that `items` indices stay in sync with\n // the rendered `resultItems` from QueryListComponent (which prepends drop-ins).\n const dropInCount = this.list().dropInSize();\n const currentItems = this.items();\n const dropInItems = currentItems.slice(0, dropInCount);\n\n let merged: TileData[];\n if (dropInItems.length > 0) {\n const dropInIds = new Set(dropInItems.map((item) => item.id));\n const filtered = newItems.filter((item) => !dropInIds.has(item.id));\n merged = [...dropInItems, ...filtered];\n } else {\n merged = newItems;\n }\n\n // If any selected items are absent from the new result set (e.g. after deletion),\n // clear the internal selection indices. Without this, #isSelectionEqual would return\n // true when the inner list auto-selects the same index (now pointing to a different\n // item), causing selectionChange to be silently skipped and the right panel to stay\n // stale with the deleted item's content.\n if (this._selection.length > 0) {\n const mergedIds = new Set(merged.map((i) => i.id));\n const selectionOutdated = this._selection.some((idx) => !mergedIds.has(this.items()[idx]?.id));\n if (selectionOutdated) {\n this._selection = [];\n this._lastSelection = undefined;\n }\n }\n\n this.items.set(merged);\n this.queryResult.emit(result);\n }\n\n /**\n * Handles the committed selection emitted by the inner list.\n *\n * For a single-item selection the full `#select()` path is taken so that `itemSelect`\n * is also emitted. For multi-item selections only `#updateSelectionState()` runs to\n * keep `selectionChange` and the internal state in sync without the single-item emit.\n *\n * Called from the template via `(itemSelect)` on `yuv-query-list`.\n * Not intended for external callers.\n *\n * @param sel Array of zero-based indices representing the new selection.\n */\n onListItemsSelect(sel: number[]): void {\n if (sel.length === 1) {\n this.#internalSelectByIndex(sel[0]);\n return;\n }\n this.#updateSelectionState(sel);\n }\n\n /**\n * Handles live drag-selection changes forwarded from the inner `QueryListComponent`.\n *\n * Fires continuously while the user drags across tiles, updating the selection state\n * in real time so the visual highlight tracks the gesture. Does not emit `itemSelect`\n * (that fires only on the final committed selection via `onListItemsSelect`).\n *\n * Called from the template via `(dragSelectChange)`. Not intended for external callers.\n *\n * @param sel Current array of zero-based indices covered by the drag gesture.\n */\n onDragSelectChange(sel: number[]): void {\n this.#updateSelectionState(sel);\n }\n\n //#endregion\n\n //#region Public methods\n\n /**\n * Transformer function passed to the inner `QueryListComponent`.\n *\n * Maps raw `SearchResultItem[]` to the `InnerTileData` view model by:\n * 1. Storing the raw items in `#rawResultItems` so `applyFlavor()` can re-map them\n * without a new server request.\n * 2. Calling `#mapToTileData()` to resolve `ObjectConfig` fields (title, icon, …).\n * 3. Resolving each tile's action IDs to full `Action` objects via `ActionsService`,\n * filtering out any IDs that are not registered.\n *\n * Re-runs automatically whenever the query result or the `ObjectConfigRecord` changes\n * (the latter is triggered by calling `list().runTransformerAgain()` from\n * `#getObjectConfig()`).\n */\n transformer = (res: SearchResultItem[]): InnerTileData[] => {\n this.#rawResultItems = res;\n const mappedItems = this.#mapToTileData(res.map((i) => new DmsObject(i)));\n const items = mappedItems.map((item) => ({\n ...item,\n actions: (item.actions || [])\n .map((action: ObjectConfigAction) =>\n this.#actionService.getActionById(action.id, this.options()?.actionContext)\n )\n .filter((action: Action | undefined) => action !== undefined)\n }));\n this.#resolveInlineActionsDisabledState(items);\n return items;\n };\n\n /**\n * Handles a right-click (contextmenu) event on a tile.\n *\n * Suppresses the browser's native context menu. If the clicked tile is not already\n * part of the selection, it is selected first. After a short delay (to allow the\n * selection state to propagate), `ctxMenu` is emitted with the originating event and\n * the current selection so the parent can position and populate a custom menu.\n *\n * The delay is intentional: it gives Angular change detection a tick to apply the\n * selection update before the parent reads `selection()` in the `ctxMenu` handler.\n *\n * No-ops when `disableCustomContextMenu` is `true`.\n *\n * Called from the template via `(contextmenu)` on each tile. Not intended for\n * external callers.\n *\n * @param event The originating mouse event (used to suppress default and for positioning).\n * @param index Zero-based index of the right-clicked tile.\n */\n contextMenuHandler(event: MouseEvent, index: number): void {\n if (this.disableCustomContextMenu()) return;\n event.preventDefault();\n\n // if not yet selected, select\n // if (this._selection.length === 0 || !this._selection.includes(index)) {\n // this.#internalSelectByIndex(index, event);\n // }\n\n setTimeout(() => {\n this.ctxMenu.emit({ event, selection: this.selection() });\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n }, 200);\n }\n\n /**\n * Executes a tile inline action against the appropriate set of DMS objects.\n *\n * Resolves the target objects from the DMS service: if the tile whose action button\n * was clicked is part of the current selection, the action runs against all selected\n * objects (batch action); otherwise it runs against only that single tile's object.\n *\n * Suppresses the click event to prevent the tile's own selection handler from firing.\n * Called from the template via the tile action buttons. Not intended for external callers.\n *\n * @param tileData The tile whose action button was clicked.\n * @param action The resolved `Action` to execute.\n * @param event The originating click event (stopped to prevent tile selection).\n */\n executeAction(tileData: InnerTileData, action: Action, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n if (action.disabled) return;\n\n const selectedIds = this.selection();\n const ids = selectedIds.includes(tileData.id) ? selectedIds : [tileData.id];\n\n this.#dmsService\n .getDmsObjects(ids)\n .pipe(switchMap((objects: DmsObject[]) => action.run(objects)))\n .subscribe();\n }\n\n /**\n * Selects tiles by their object IDs.\n *\n * Looks up each ID in the current `items` array and selects the matching indices\n * in the inner list. If the list is still loading when this is called, the IDs are\n * stored and applied automatically once the query completes (via `#preselectEffect`).\n *\n * IDs not found in the current result set are silently ignored. The first found item\n * also receives keyboard focus via `setActiveItem()`.\n *\n * @param ids Array of object IDs (`system:objectId`) to select.\n */\n selectById(ids: string[]): void {\n if (this.#busy()) {\n this.#preselect.set(ids);\n } else {\n this.#executeSelectById(ids);\n }\n }\n\n /**\n * Programmatically replaces the entire selection with the given indices.\n *\n * Only effective when `multiselect` is `true`. Delegates to the inner\n * `QueryListComponent`. Out-of-range indices are silently discarded.\n *\n * @param index Array of zero-based item indices to select.\n */\n multiSelect(index: number[]): void {\n this.list().multiSelect(index);\n }\n\n /**\n * Selects the tile at the given zero-based index.\n *\n * Delegates to the inner `QueryListComponent`. Clamps the index to the valid range.\n * Use `selectById()` when you have object IDs rather than positional indices.\n *\n * @param index Zero-based index of the tile to select.\n */\n select(index: number): void {\n this.list().select(index);\n }\n\n /**\n * Re-executes the current query without changing the page or query parameters.\n *\n * If pagination is active, re-fetches the same page. Use this to reflect server-side\n * changes (e.g. after a create/delete operation) without navigating away.\n */\n refresh(): void {\n this.list().refresh();\n }\n\n /**\n * Prepends `DmsObject` instances to the top of the tile list as temporary drop-in items.\n *\n * The objects are mapped through the same `ObjectConfig` resolution pipeline as regular\n * query results, including action resolution. The existing selection is shifted so that\n * currently selected tiles remain selected after the prepend.\n *\n * Use this for optimistic UI: show newly created or pasted objects immediately before\n * the server index reflects them in the query results.\n *\n * Drop-in items are cleared automatically when the user navigates to a different page.\n *\n * @param objects `DmsObject` instances to prepend to the visible list.\n */\n dropItems(objects: DmsObject[]): void {\n const items = this.#updateItems(objects);\n if (items.length > 0 && this._selection.length > 0) {\n this._selection = this._selection.map((i) => i + items.length);\n if (this._lastSelection !== undefined) {\n this._lastSelection += items.length;\n }\n }\n this.list().dropItems(items);\n }\n\n /**\n * Toggles an `ObjectFlavor` on or off and re-maps the current result set.\n *\n * If the given flavor is already the active `appliedFlavor`, it is cleared (toggle\n * off). Otherwise the flavor is applied and all tiles whose `DmsObject.sots` includes\n * `flavor.sot` are re-rendered using the config entry for `flavor.id`.\n *\n * Re-mapping runs against the last raw `SearchResultItem[]` (`#rawResultItems`) so\n * no server round-trip is needed. Called automatically by `#flavorEffect` when the\n * `flavor` input changes.\n *\n * @param flavor The `ObjectFlavor` to apply or remove.\n */\n applyFlavor(flavor: ObjectFlavor): void {\n this.appliedFlavor = this.appliedFlavor?.id === flavor.id ? undefined : flavor;\n if (this.#rawResultItems) this.items.set(this.#mapToTileData(this.#rawResultItems.map((i) => new DmsObject(i))));\n }\n\n /**\n * Applies per-index optimistic overrides to the displayed tile data.\n *\n * Delegates to the inner `QueryListComponent.updateListItems()`. Each entry patches\n * the tile at the given `index` with a new `TileData` value. Overrides accumulate\n * until the user navigates to a different page, at which point the fresh server\n * response replaces all local data.\n *\n * For DMS-object-based updates, prefer `updateTileList()` which resolves indices\n * from object IDs automatically.\n *\n * @param updates Array of `{ index, value }` pairs describing which tiles to patch.\n */\n updateListItems(updates: { index: number; value: TileData }[]): void {\n if (updates.length > 0) {\n const patched = [...this.items()];\n for (const update of updates) {\n patched[update.index] = update.value;\n }\n this.items.set(patched);\n this.#refreshSelectedTile();\n }\n this.list().updateListItems(updates);\n }\n\n /**\n * Optimistically updates tiles in the list that correspond to the given `DmsObject` instances.\n *\n * For each provided object, finds its matching tile by `id` in the current `items`\n * array, re-maps it through `#mapToTileData()` to get a fresh `TileData` view model,\n * and applies it via `updateListItems()`. Tiles not currently visible in the list are\n * silently skipped.\n *\n * This is the preferred way to reflect server-confirmed changes (e.g. rename, metadata\n * edit) without issuing a full query refresh. Updates are scoped to the current page\n * and are discarded on the next page navigation.\n *\n * @param listItems Updated `DmsObject` instances to apply to the list.\n */\n updateTileList(listItems: DmsObject[]): void {\n const mappedItems = this.#mapToTileData(listItems);\n const updates: { index: number; value: TileData }[] = mappedItems\n .map((item) => {\n const idx = this.items().findIndex((listItem) => listItem.id === item.id);\n if (idx < 0) return undefined;\n const value: TileData = {\n ...item,\n actions: (item.actions || [])\n .map((action: ObjectConfigAction) =>\n this.#actionService.getActionById(action.id, this.options()?.actionContext)\n )\n .filter((action: Action | undefined) => action !== undefined)\n };\n return { index: idx, value };\n })\n .filter((update) => update !== undefined) as { index: number; value: TileData }[];\n this.#resolveInlineActionsDisabledState(updates.map((u) => u.value) as InnerTileData[]);\n this.updateListItems(updates);\n }\n\n /**\n * Clears the current selection and resets all internal selection state.\n *\n * Resets `_selection`, `_lastSelection`, the `selection` signal, and `selectedTile`\n * to empty. Also delegates to the inner list's `clear()` to sync the visual state.\n * If the selection is already empty, the method is a no-op.\n *\n * @param silent When `true`, skips emitting `selectionChange`. Use this when the\n * parent needs to reset state programmatically without triggering\n * downstream reactions.\n */\n clearSelection(silent = false): void {\n if (this._selection.length) {\n this.list().clear(silent);\n this._selection = [];\n this._lastSelection = undefined;\n this.selection.set([]);\n this.selectedTile.set([]);\n if (!silent) this.selectionChange.emit([]);\n }\n }\n\n /**\n * Advances the selection to the next tile in the list.\n *\n * Moves from the last selected index forward by one. Wraps around to index 0\n * when the last tile is currently selected. Does nothing if no tile is selected\n * (`_lastSelection` is `undefined`).\n *\n * Useful for implementing keyboard-driven \"next item\" navigation from a parent\n * detail panel without giving focus back to the list.\n */\n selectNext(): void {\n if (this._lastSelection !== undefined) {\n let i = this._lastSelection + 1;\n if (i >= this.items().length) i = 0;\n this.#select(i);\n }\n }\n\n /**\n * Moves the selection to the previous tile in the list.\n *\n * Moves from the last selected index backward by one. Wraps around to the last tile\n * when index 0 is currently selected. Does nothing if no tile is selected\n * (`_lastSelection` is `undefined`).\n *\n * Useful for implementing keyboard-driven \"previous item\" navigation from a parent\n * detail panel without giving focus back to the list.\n */\n selectPrev(): void {\n if (this._lastSelection !== undefined) {\n let i = this._lastSelection - 1;\n if (i < 0) i = this.items().length - 1;\n this.#select(i);\n }\n }\n\n /**\n * Handles a click on a projected `TileActionsMenuComponent` menu item.\n *\n * If the tile that owns the clicked menu item is part of the current selection,\n * the click event is stopped from propagating so the tile's own `(click)` handler\n * does not deselect other tiles. If the tile is not selected, the event is allowed\n * to propagate normally so the tile gets selected as a side effect.\n *\n * Called from the template via the `TileActionsMenuComponent` item click binding.\n * Not intended for external callers.\n *\n * @param tileData The tile that owns the clicked menu item.\n * @param event The originating click event.\n */\n menuItemClicked(tileData: TileData, event: Event): void {\n if (this.selection().includes(tileData.id)) {\n // only prevent event propagation if the click came from an element that\n // is part of the current selection\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n //#endregion\n\n //#region Utilities\n\n /**\n * Maps `DmsObject` instances to `TileData`, resolves their actions, and updates the\n * internal `items` signal.\n *\n * @param objects `DmsObject` instances to map and update.\n * @returns Array of `TileData` corresponding to the provided `DmsObject` instances.\n */\n #updateItems(objects: DmsObject[]): TileData[] {\n const mappedItems = this.#mapToTileData(objects);\n const items = mappedItems.map((item) => ({\n ...item,\n actions: (item.actions || [])\n .map((objectConfigAction: ObjectConfigAction) =>\n this.#actionService.getActionById(objectConfigAction.id, this.options()?.actionContext)\n )\n .filter((action: Action | undefined) => action !== undefined)\n }));\n this.#resolveInlineActionsDisabledState(items);\n this.items.set([...items, ...this.items()]);\n return items;\n }\n\n /**\n * Asynchronously resolves the `disabled` state for inline actions of the given tiles.\n * Mutates `action.disabled` on the existing action instances and triggers change detection.\n */\n #resolveInlineActionsDisabledState(items: InnerTileData[]): void {\n const itemsWithActions = items.filter((item) => item.actions?.length > 0);\n if (!itemsWithActions.length) return;\n\n const resolvers = itemsWithActions.map((item) =>\n this.#actionService.resolveDisabledState(item.actions, [item.dmsObject])\n );\n\n forkJoin(resolvers)\n .pipe(take(1))\n .subscribe(() => this.#cdr.markForCheck());\n }\n\n #getObjectConfig(): void {\n this.#objectConfigService\n .getObjectConfigs$(this.bucket() || '', true)\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe({\n next: (res: ObjectConfigRecord) => {\n this.objectConfig = res;\n this.list().runTransformerAgain();\n }\n });\n }\n\n #refreshSelectedTile(): void {\n if (this._selection.length > 0) {\n const tiles = this._selectionToTileData(this._selection);\n this.selectedTile.set(tiles);\n }\n }\n\n #internalSelectByIndex(idx: number, evt?: MouseEvent | KeyboardEvent): void {\n this.#select(idx, evt?.shiftKey, evt?.ctrlKey);\n }\n\n #executeSelectById(ids: string[]): void {\n const indices: number[] = ids.map((id) => this.items().findIndex((i) => i.id === id)).filter((i) => i !== -1);\n this.list().multiSelect(indices);\n if (indices.length > 0) {\n this.list().setActiveItem(indices[0]);\n }\n this.#elRef.nativeElement.focus();\n this.#updateSelectionState(indices);\n }\n\n /**\n * Shared method to update all selection state and emit outputs.\n * Used by `onListItemsSelect`, `onDragSelectChange`, and `selectById`.\n */\n #updateSelectionState(sel: number[]): void {\n const sorted = [...sel].sort();\n\n // skip if selection hasn't changed\n if (this.#isSelectionEqual(sorted)) return;\n this.#preselect.set([]);\n this._selection = sorted;\n this._lastSelection = this._selection.length ? this._selection[this._selection.length - 1] : undefined;\n const tiles = this._selectionToTileData(this._selection);\n this.selection.set(tiles.map((tile) => tile.id));\n this.selectionChange.emit(tiles);\n this.selectedTile.set(tiles);\n }\n\n #select(index: number, shiftKey = false, ctrlKey = false): void {\n this.#elRef.nativeElement.focus();\n let newSelection: number[];\n if (index === -1) {\n newSelection = [];\n } else {\n if (this.multiselect()) {\n newSelection = this._selection.filter((i) => i !== index);\n if (ctrlKey) {\n // if ctrl key add to selection\n newSelection.push(index);\n } else if (shiftKey) {\n // add range\n if (this._lastSelection !== undefined) {\n const startIndex = this._lastSelection < index ? this._lastSelection : index;\n const endIndex = this._lastSelection > index ? this._lastSelection : index;\n for (let i = startIndex; i <= endIndex; i++) {\n newSelection.push(i);\n }\n } else {\n newSelection = [index];\n }\n } else {\n newSelection = [index];\n }\n } else {\n newSelection = [index];\n }\n newSelection = [...new Set(newSelection)];\n }\n newSelection.sort();\n\n // skip if selection hasn't changed\n if (this.#isSelectionEqual(newSelection)) return;\n this.#preselect.set([]);\n this._selection = newSelection;\n this._lastSelection = this._selection.length === 0 ? undefined : index;\n\n const tiles = this._selectionToTileData(this._selection);\n this.selection.set(tiles.map((tile) => tile.id));\n this.selectionChange.emit(tiles);\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n tiles.length === 1 && this.itemSelect.emit(tiles[0]);\n this.selectedTile.set(tiles);\n }\n\n #isSelectionEqual(newSelection: number[]): boolean {\n if (newSelection.length !== this._selection.length) return false;\n return newSelection.every((value, index) => value === this._selection[index]);\n }\n\n private _selectionToTileData(selection: number[]): TileData[] {\n return selection.map((idx) => this.items()[idx]);\n }\n\n #mapToTileData(objects: DmsObject[]): TileData[] {\n return objects.map((dmsObject) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const sots = dmsObject.sots || [];\n\n if (!dmsObject.objectTypeId) {\n throw new Error(\n // eslint-disable-next-line max-len\n `DmsObject with id '${dmsObject.id}' is missing objectTypeId. Please make sure that your query includes the object type ID field.`\n );\n }\n\n let objectConfig = this.objectConfig![dmsObject.objectTypeId];\n\n // check if result item matches virtual config type\n const cfgTypes = this.options()?.configTypes || [];\n\n cfgTypes.forEach((cft) => {\n const matchesType = !cft.objectType || cft.objectType === dmsObject.objectTypeId;\n const matchesSOTs = !cft.sots?.length || cft.sots.every((sot) => sots.includes(sot));\n\n if (matchesType && matchesSOTs) {\n objectConfig = this.objectConfig![cft.id];\n }\n });\n\n // only apply a flavor if the object has that SOT\n const ownAppliedFlavor =\n this.appliedFlavor && sots.includes(this.appliedFlavor.sot) && this.objectConfig![this.appliedFlavor.sot];\n if (ownAppliedFlavor) {\n objectConfig = this.objectConfig![this.appliedFlavor!.id];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!objectConfig) objectConfig = this.#objectConfigService.getDefaultConfig(dmsObject.objectTypeId);\n\n const tli: TileData = {\n objectTypeId: dmsObject.objectTypeId,\n id: dmsObject.id,\n actions: objectConfig.actions,\n badges: objectConfig.badges,\n instanceData: dmsObject.data,\n dmsObject,\n title: objectConfig.title\n ? this.#getResolvedObjectConfigItem(objectConfig.title.propertyName, dmsObject.data)\n : { propertyName: '', value: '' }\n };\n\n tli.icon = objectConfig.icon\n ? {\n rendererType: 'icon',\n propertyName: 'custom',\n value: objectConfig.icon.svg,\n meta: { isFontIcon: YmtMatIconRegistryService.isFontIcon(objectConfig.icon.svg), objectTypeId: '' }\n }\n : {\n rendererType: 'icon',\n propertyName: BaseObjectTypeField.OBJECT_TYPE_ID,\n value: ownAppliedFlavor && this.appliedFlavor ? this.appliedFlavor.sot : dmsObject.objectTypeId\n };\n if (objectConfig.description)\n tli.description = this.#getResolvedObjectConfigItem(objectConfig.description.propertyName, dmsObject.data);\n if (objectConfig.meta)\n tli.meta = this.#getResolvedObjectConfigItem(objectConfig.meta.propertyName, dmsObject.data);\n if (objectConfig.aside)\n tli.aside = this.#getResolvedObjectConfigItem(objectConfig.aside.propertyName, dmsObject.data);\n\n return tli;\n });\n }\n\n #getResolvedObjectConfigItem(propertyName: string, instanceData: Record<string, unknown>): ResolvedObjectConfigItem {\n const item: ResolvedObjectConfigItem = {\n propertyName: propertyName,\n value: instanceData[propertyName]\n };\n // Meta data are considered properties that start with the property name followed by an underscore.\n // Organization fields for example have an additional property 'xyz_title' that contains the resolved\n // name of a user while the value itself is the users ID.\n const metaData = Object.keys(instanceData)\n .filter((key) => key.startsWith(propertyName + '_'))\n .map((key) => ({ [key.substring(key.indexOf('_') + 1)]: instanceData[key] }));\n\n // If there are meta data properties, they'll be merged into a Record where the\n // key is the property name without the underscore and the actual properties name.\n // So { 'xyz_title': 'John Doe' } will be merged into { title: 'John Doe' }\n if (metaData.length) {\n const meta = metaData.reduce((acc, cur) => ({ ...acc, ...cur }), {});\n item.meta = meta;\n }\n\n return item;\n }\n\n //#endregion\n\n // #region Effect Methods\n\n readonly #flavorEffect = (): void => {\n const flavor = this.flavor();\n if (flavor) this.applyFlavor(flavor);\n };\n\n readonly #preselectEffect = (): void => {\n const preselect = this.#preselect();\n const busy = this.#busy();\n const items = this.items();\n\n if (!busy && preselect.length && items.length) {\n untracked(() => {\n this.#executeSelectById(preselect);\n this.#preselect.set([]);\n });\n }\n };\n\n readonly #closeMenuEffect = (onCleanup: EffectCleanupRegisterFn): void => {\n const menuComponent = this.menuComponent();\n if (!menuComponent) return;\n\n const closeMenu$ = menuComponent.itemSelect.subscribe(() => {\n this.menuTriggers().forEach((trigger) => trigger.closeMenu());\n });\n\n onCleanup(() => closeMenu$.unsubscribe());\n };\n}\n","<yuv-query-list\n #list\n [query]=\"query()\"\n [transformer]=\"transformer\"\n idProperty=\"id\"\n [preventChangeUntil]=\"preventChangeUntil()\"\n [autoSelect]=\"autoSelect()\"\n [pageSize]=\"pageSize()\"\n [multiselect]=\"multiselect()\"\n (itemDoubleClick)=\"onItemDoubleClick($event)\"\n (itemSelect)=\"onListItemsSelect($event)\"\n (queryResult)=\"onQueryResult($event)\"\n (dragSelectChange)=\"onDragSelectChange($event)\"\n>\n <ng-template #yuvQueryListItem let-item let-index=\"index\">\n <yuv-list-tile [class.dense]=\"dense()\" [style]=\"highlightStyles()[item.id]\" (contextmenu)=\"contextMenuHandler($event, index)\">\n <ng-template #iconSlot><ng-container *yuvRenderer=\"item.icon\" /></ng-template>\n <ng-template #titleSlot><ng-container *yuvRenderer=\"item.title\" /></ng-template>\n <ng-template #descriptionSlot><ng-container *yuvRenderer=\"item.description\" /></ng-template>\n <ng-template #metaSlot><ng-container *yuvRenderer=\"item.meta\" /></ng-template>\n <ng-template #asideSlot><ng-container *yuvRenderer=\"item.aside\" /></ng-template>\n <ng-template #actionsSlot>\n @for (a of item.actions; track a.id) {\n <button\n ymt-icon-button\n [matTooltip]=\"a.label\"\n icon-button-size=\"small\"\n [disabled]=\"a.disabled\"\n (click)=\"executeAction(item, a, $event)\"\n >\n <mat-icon inert=\"true\">{{ a.icon }}</mat-icon>\n </button>\n }\n\n @if (menu()) {\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n (click)=\"menuItemClicked(item, $event)\"\n [matTooltip]=\"'yuv.tile-list.item.actions-menu.button.tooltip' | translate\"\n [matMenuTriggerFor]=\"menu()\"\n >\n <mat-icon inert=\"true\">more_vert</mat-icon>\n </button>\n }\n <ng-content select=\"yuv-tile-actions-menu, [yuv-tile-actions-menu]\" />\n </ng-template>\n <ng-template #extensionSlot>\n <ng-container *yuvTileExtension=\"{ typeId: item.objectTypeId, data: item.instanceData }\" />\n </ng-template>\n <ng-template #badgesSlot>{{ item.badges }}</ng-template>\n </yuv-list-tile>\n </ng-template>\n\n <ng-template #yuvQueryListEmpty>\n <div class=\"empty-list\">\n @let searchExe = searchExecuted();\n @if (searchExe && emptyContent()) {\n <ng-content />\n }\n </div>\n </ng-template>\n <div class=\"offset\" (click)=\"clearSelection()\"></div>\n</yuv-query-list>\n","import { NgClass } from '@angular/common';\nimport { Component, Signal, computed, inject, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { VirtualObjectType } from '@yuuvis/client-core';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\n\n@Component({\n selector: 'yuv-tile-action-select',\n standalone: true,\n imports: [NgClass, MatIconModule],\n templateUrl: './action-select.component.html',\n styleUrl: './action-select.component.scss'\n})\nexport class ActionSelectComponent {\n private actionService = inject(ActionsService);\n\n objectType = input.required<VirtualObjectType>();\n actions: Signal<Action[]> = computed<Action[]>(() => {\n const ot = this.objectType();\n return ot.objectType ? this.actionService.getActionsForType(ot.objectType) : [];\n });\n\n selectedActionIds = input<string[]>([]);\n actionSelect = output<Action>();\n}\n","<div class=\"actions\">\n @for (a of actions(); track a.id) {\n <button [ngClass]=\"{ selected: selectedActionIds().includes(a.id) }\" (click)=\"actionSelect.emit(a)\">\n <mat-icon>{{ a.icon }}</mat-icon\n >{{ a.label }}\n </button>\n }\n</div>\n","import { NgClass } from '@angular/common';\nimport { Component, computed, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n BaseObjectTypeField,\n ContentStreamField,\n ObjectConfigProperty,\n ObjectTypeField,\n SecondaryObjectType,\n Sort,\n SystemService,\n Utils,\n VirtualObjectType\n} from '@yuuvis/client-core';\n\ntype TypeProperty = { label: string; baseProperty?: boolean } & Partial<ObjectTypeField>;\n\n@Component({\n selector: 'yuv-tile-property-select',\n standalone: true,\n imports: [NgClass, FormsModule, MatButtonModule, MatIconModule],\n templateUrl: './property-select.component.html',\n styleUrl: './property-select.component.scss'\n})\nexport class PropertySelectComponent {\n private system = inject(SystemService);\n\n // fields that should not be available to be placed in the slots\n readonly #excludeFields: string[] = [\n BaseObjectTypeField.PARENT_ID,\n BaseObjectTypeField.PARENT_OBJECT_TYPE_ID,\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.OBJECT_TYPE_ID,\n BaseObjectTypeField.BASE_TYPE_ID,\n BaseObjectTypeField.PARENT_VERSION_NUMBER,\n BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,\n BaseObjectTypeField.TAGS,\n BaseObjectTypeField.TENANT,\n BaseObjectTypeField.TRACE_ID,\n ContentStreamField.REPOSITORY_ID,\n ContentStreamField.DIGEST,\n ContentStreamField.ARCHIVE_PATH,\n ContentStreamField.ID,\n ContentStreamField.RANGE\n ];\n\n objectTypeFields: TypeProperty[] = [];\n\n query = signal<string | null>(null);\n\n objectType = input<VirtualObjectType>();\n filteredObjectTypeFields = computed<TypeProperty[]>(() => {\n return this.query() !== null\n ? this.objectTypeFields.filter(\n (otf) => otf.label.toLowerCase().indexOf(this.query()?.toLocaleLowerCase() || '') !== -1\n )\n : this.getObjectTypeFields(this.objectType());\n });\n\n objectTypesEffect = effect(() => {\n untracked(() => this.getObjectTypeFields(this.objectType()));\n });\n\n selectedProperty = input<ObjectConfigProperty>();\n\n propertySelect = output<TypeProperty | undefined>();\n\n selectProperty(field: TypeProperty) {\n this.propertySelect.emit(field);\n }\n\n selectPropertyOnKeydown(event: Event, field: TypeProperty) {\n event.preventDefault();\n this.selectProperty(field);\n }\n\n removeProperty(event: Event) {\n event.stopPropagation();\n this.propertySelect.emit(undefined);\n }\n\n removePropertyOnKeydown(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n this.removeProperty(event);\n }\n\n private getObjectTypeFields(type?: VirtualObjectType) {\n if (!type) return [];\n const otf: Record<string, TypeProperty> = {};\n if (type.sots && type.sots.length > 0) {\n type.sots.forEach((s: string) => {\n const sot: SecondaryObjectType | undefined = this.system.getSecondaryObjectType(s);\n if (sot)\n sot.fields.forEach(\n (of) =>\n (otf[of.id] = {\n id: of.id,\n label: this._getLabel(of)\n })\n );\n });\n }\n\n let objectTypeProperties: Record<string, TypeProperty> = {};\n if (type.objectType) {\n const ot = this.system.getObjectType(type.objectType);\n if (ot) {\n ot.fields.forEach((of) => {\n objectTypeProperties[of.id] = {\n id: of.id,\n label: this._getLabel(of),\n baseProperty: true\n };\n });\n }\n }\n\n this.objectTypeFields = [...Object.values(objectTypeProperties), ...Object.values(otf)]\n .filter((f) => f.id && !this.#excludeFields.includes(f.id))\n // sort alphanummeric by label\n .sort(Utils.sortValues('label', Sort.ASC))\n // put base properties at the end\n .sort(Utils.sortValues('baseProperty', Sort.ASC));\n return this.objectTypeFields;\n }\n\n private _getLabel(otf: ObjectTypeField): string {\n return this.system.getLocalizedLabel(otf.id) || otf.id;\n }\n}\n","<!-- TODO: enable once filtering of properties makes sense -->\n<!-- <form class=\"filter\">\n <div class=\"filter-input\">\n <input type=\"text\" [placeholder]=\"'yuv.tile-config.property-select.filter.placeholder' | translate\" name=\"query\" [(ngModel)]=\"query\" />\n @if (query()) {\n <button class=\"icn\" (click)=\"query.set(null)\">\n <yuv-icon [svg]=\"clearIcon\"></yuv-icon>\n </button>\n }\n </div>\n</form> -->\n\n<ul class=\"properties\">\n @for (p of filteredObjectTypeFields(); track $index) {\n <li\n tabindex=\"0\"\n [ngClass]=\"{ baseProperty: p.baseProperty, selected: p.id === selectedProperty()?.propertyName }\"\n (click)=\"selectProperty(p)\"\n (keydown.enter)=\"selectPropertyOnKeydown($event, p)\"\n (keydown.space)=\"selectPropertyOnKeydown($event, p)\"\n >\n <div class=\"label\">{{ p.label }}</div>\n <button\n mat-icon-button\n (click)=\"removeProperty($event)\"\n (keydown.enter)=\"removePropertyOnKeydown($event)\"\n (keydown.space)=\"removePropertyOnKeydown($event)\"\n >\n <mat-icon aria-hidden=\"true\" [attr.inert]=\"true\">close</mat-icon>\n </button>\n </li>\n }\n</ul>\n","import { Component, input, output } from '@angular/core';\nimport { TranslatePipe, VirtualObjectType } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-icon-select',\n standalone: true,\n imports: [TranslatePipe],\n templateUrl: './icon-select.component.html',\n styleUrl: './icon-select.component.scss'\n})\nexport class IconSelectComponent {\n objectType = input<VirtualObjectType>();\n iconSelect = output<string | null>();\n\n async createIcon(inputEl: HTMLInputElement) {\n const file: File | undefined = inputEl.files ? inputEl.files[0] : undefined;\n if (file) {\n const text = await file.text();\n this.#emit(text);\n } else this.#emit(null);\n }\n\n reset() {\n this.#emit(null);\n }\n\n #emit(data: string | null) {\n this.iconSelect.emit(data);\n }\n}\n","<input style=\"display: none\" #fileInput type=\"file\" accept=\".svg\" (change)=\"createIcon(fileInput)\" />\n\n<button class=\"primary\" (click)=\"fileInput.click()\">{{ 'yuv.tile-config.icon-select.pick' | translate }}</button>\n<button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.tile-config.icon-select.reset' | translate }}</button>\n","\nimport { Component, ElementRef, computed, inject, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ObjectConfig, ObjectConfigAction, ObjectConfigProperty, SystemService } from '@yuuvis/client-core';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\n\n/**\n * Component for setting up a tile config\n */\n@Component({\n selector: 'yuv-tile-config-tile',\n standalone: true,\n imports: [MatButtonModule, MatTooltipModule, MatIconModule, ObjectTypeIconComponent],\n templateUrl: './tile-config-tile.component.html',\n styleUrl: './tile-config-tile.component.scss'\n})\nexport class TileConfigTileComponent {\n private readonly actionService = inject(ActionsService);\n private readonly elRef = inject(ElementRef);\n #system = inject(SystemService);\n\n disableIconSlot = input<boolean>();\n disableBadgesSlot = input<boolean>();\n\n objectConfig = input.required<ObjectConfig >();\n _objectConfig = computed<ObjectConfig>(() => {\n const oc = this.objectConfig();\n if (oc) {\n [oc.title, oc.description, oc.meta, oc.aside].forEach((field: ObjectConfigProperty | undefined) => {\n if (field) {\n const label = this.#system.getLocalizedLabel(field.propertyName);\n field.label = label || field.label || field.propertyName;\n }\n });\n }\n return oc;\n });\n\n actions = computed<Action[]>(() => {\n const actionsList: Action[] = [];\n const ocActions = this.objectConfig();\n if (ocActions?.actions?.length) {\n ocActions.actions?.forEach((a: ObjectConfigAction) => {\n const aa: Action | undefined = this.actionService.getActionById(a.id);\n if (aa) actionsList.push(aa);\n });\n }\n return actionsList;\n });\n\n slotSelect = output<string>();\n\n selectSlot(slot: string) {\n if (this.disableIconSlot() && slot === 'icon') return;\n this.slotSelect.emit(slot);\n\n // set active state\n (this.elRef.nativeElement as HTMLElement).querySelectorAll('[data-slot]').forEach((e) => {\n if (e.getAttribute('data-slot') === slot) e.classList.add('active');\n else e.classList.remove('active');\n });\n }\n}\n","@let oc = _objectConfig();\n\n<div\n data-slot=\"icon\"\n [attr.disabled]=\"disableIconSlot()\"\n tabindex=\"0\"\n (click)=\"selectSlot('icon')\"\n (keydown.enter)=\"selectSlot('icon')\"\n (keydown.space)=\"selectSlot('icon'); $event.preventDefault()\"\n>\n @if (oc && oc.icon) {\n <mat-icon aria-hidden=\"true\" [attr.inert]=\"true\">{{ oc.icon.svg }}</mat-icon>\n } @else if (oc && oc.objectTypeId) {\n <yuv-object-type-icon [objectTypeId]=\"oc.objectTypeId\"></yuv-object-type-icon>\n }\n</div>\n<div\n data-slot=\"title\"\n tabindex=\"0\"\n (click)=\"selectSlot('title')\"\n (keydown.enter)=\"selectSlot('title')\"\n (keydown.space)=\"selectSlot('title'); $event.preventDefault()\"\n>\n {{ oc?.title?.label }}\n</div>\n<div\n data-slot=\"actions\"\n tabindex=\"0\"\n (click)=\"selectSlot('actions')\"\n (keydown.enter)=\"selectSlot('actions')\"\n (keydown.space)=\"selectSlot('actions'); $event.preventDefault()\"\n>\n @for (a of actions(); track a.id) {\n <button mat-icon-button [matTooltip]=\"a.label\" [attr.inert]=\"true\" aria-hidden=\"true\">\n <mat-icon inert=\"true\" aria-hidden=\"true\">{{ a.icon }}</mat-icon>\n </button>\n }\n</div>\n<div\n data-slot=\"description\"\n tabindex=\"0\"\n (click)=\"selectSlot('description')\"\n (keydown.enter)=\"selectSlot('description')\"\n (keydown.space)=\"selectSlot('description'); $event.preventDefault()\"\n>\n {{ oc?.description?.label }}\n</div>\n<div\n data-slot=\"aside\"\n tabindex=\"0\"\n (click)=\"selectSlot('aside')\"\n (keydown.enter)=\"selectSlot('aside')\"\n (keydown.space)=\"selectSlot('aside'); $event.preventDefault()\"\n>\n {{ oc?.aside?.label }}\n</div>\n<div\n data-slot=\"meta\"\n tabindex=\"0\"\n (click)=\"selectSlot('meta')\"\n (keydown.enter)=\"selectSlot('meta')\"\n (keydown.space)=\"selectSlot('meta'); $event.preventDefault()\"\n>\n {{ oc?.meta?.label }}\n</div>\n@if (!disableBadgesSlot()) {\n <div\n data-slot=\"badges\"\n tabindex=\"0\"\n (click)=\"selectSlot('badges')\"\n (keydown.enter)=\"selectSlot('badges')\"\n (keydown.space)=\"selectSlot('badges'); $event.preventDefault()\"\n >\n {{ oc?.badges }}\n </div>\n}\n","import { Component, computed, effect, inject, input, output, Signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n GenericObjectType,\n ObjectConfig,\n ObjectConfigAction,\n ObjectConfigBadge,\n ObjectConfigIcon,\n ObjectConfigProperty,\n ObjectConfigService,\n ObjectTypeField,\n SystemService,\n TranslatePipe,\n VirtualObjectType\n} from '@yuuvis/client-core';\nimport { Action } from '@yuuvis/client-framework/actions';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { ActionSelectComponent } from './action-select/action-select.component';\nimport { IconSelectComponent } from './icon-select/icon-select.component';\nimport { PropertySelectComponent } from './property-select/property-select.component';\nimport { TileConfigTileComponent } from './tile-config-tile/tile-config-tile.component';\n\ninterface InnerType {\n id: string;\n icon?: string;\n flavor?: boolean;\n data: ObjectFlavor | VirtualObjectType;\n}\n\n@Component({\n selector: 'yuv-tile-config',\n standalone: true,\n imports: [\n FormsModule,\n TileConfigTileComponent,\n IconSelectComponent,\n PropertySelectComponent,\n ActionSelectComponent,\n TranslatePipe,\n YuvListModule,\n MatIconModule,\n MatDialogModule,\n MatSelectModule,\n MatButtonModule,\n DialogComponent,\n MatFormFieldModule,\n YmtButtonDirective\n ],\n templateUrl: './tile-config.component.html',\n styleUrls: ['./tile-config.component.scss']\n})\nexport class TileConfigComponent {\n #objectConfigService = inject(ObjectConfigService);\n #system = inject(SystemService);\n\n /**\n * Tile configurations are stored globally for all apps. If you want a\n * separate config for your app/component you can specify a bucket. A bucket\n * is basically an ID where your custom tile config will be stored and\n * retrieved. Buckets should be unique so be sure to use a unique namespace.\n */\n bucket = input<string | undefined>(undefined);\n bucketLabel = input<string | undefined>(undefined);\n\n configTypes = input<VirtualObjectType[] | undefined>(undefined);\n configFlavors = input<ObjectFlavor[]>([]);\n get configChanged(): boolean {\n return Object.keys(this.changes).length > 0;\n }\n\n types: Signal<InnerType[]> = computed(() => {\n const ct = this.configTypes() || [];\n const cf: VirtualObjectType[] = [];\n // TODO: enable when flavors are supported in tile config\n // const cf = this.configFlavors() || [];\n return [\n ...ct.map((t) => ({ id: t.id, icon: t.icon, data: t })),\n ...cf.map((f) => ({ id: f.id, icon: f.icon, flavor: true, data: f }))\n ];\n });\n #typesEffect = effect(() => {\n const t = this.types();\n if (t.length && !this.selectedType) {\n this.typeSelected(t[0]);\n }\n });\n\n save = output();\n canceled = output();\n\n selectedType?: VirtualObjectType;\n selectedTypeProperties: ObjectTypeField[] = [];\n\n #emptyObjectConfig: ObjectConfig = {\n objectTypeId: '',\n title: { propertyName: '', label: '' },\n description: { propertyName: '', label: '' },\n meta: { propertyName: '', label: '' },\n aside: { propertyName: '', label: '' },\n actions: [],\n badges: []\n };\n\n objectConfig?: ObjectConfig;\n selectedSlot?: string;\n flavors: ObjectFlavor[] = [];\n\n changes: Record<string, ObjectConfig | undefined> = {};\n\n getConfigValue(\n p: string\n ): ObjectConfigIcon | ObjectConfigProperty | ObjectConfigAction | ObjectConfigBadge | undefined {\n return this.objectConfig ? (this.objectConfig as any)[p] : undefined;\n }\n\n getConfigProperty(p: string): ObjectConfigProperty | undefined {\n return this.getConfigValue(p) as ObjectConfigProperty;\n }\n\n getSelectedActions(): string[] {\n return this.objectConfig?.actions ? this.objectConfig.actions.map((a) => a.id) : [];\n }\n\n slotSelect(item: string) {\n this.selectedSlot = item;\n }\n\n typeSelected(type: InnerType) {\n const t = this.types().find((ty) => ty.id === type.id);\n if (!t) return;\n if (t.flavor) this.#selectFlavor(t.data as ObjectFlavor);\n else this.#selectType(t.data as VirtualObjectType);\n }\n\n #selectFlavor(flavor: ObjectFlavor) {\n const t: GenericObjectType | undefined = this.#system.getObjectType(flavor.sot);\n if (t)\n this.#selectType({\n id: flavor.id,\n objectType: flavor.objectTypeID,\n sots: [flavor.sot]\n });\n }\n\n async #selectType(t: VirtualObjectType) {\n this.selectedType = t;\n\n const alreadyChanged = this.changes[t.id];\n // load tile config\n // if the type has been changed before load that config instead of the persisted one\n this.objectConfig = { ...(alreadyChanged || this.#objectConfigService.getObjectConfig(t, this.bucket() || '')) };\n\n if (!this.objectConfig) {\n this.objectConfig = {\n ...this.#emptyObjectConfig,\n objectTypeId: t.id\n };\n }\n }\n\n iconSelected(icon: string | null) {\n if (!this.selectedType) return;\n if (this.objectConfig) {\n this.objectConfig.icon = icon ? { svg: icon } : undefined;\n this.changes[this.selectedType.id] = this.objectConfig;\n }\n }\n\n propertySelected(tileSlot: string, field?: Partial<ObjectTypeField>) {\n if (!this.selectedType) return;\n const p: any = {};\n p[tileSlot] = field\n ? {\n label: field.label,\n propertyName: field.id\n }\n : null;\n\n this.objectConfig = structuredClone({\n ...this.objectConfig,\n ...p\n });\n this.changes[this.selectedType.id] = this.objectConfig;\n }\n\n actionSelected(action: Action) {\n if (!this.selectedType) return;\n if (this.objectConfig) {\n const actions = this.objectConfig?.actions ? [...this.objectConfig.actions] : [];\n const idx = actions.findIndex((a) => a.id === action.id);\n if (idx !== -1) actions.splice(idx, 1);\n else actions.push({ id: action.id });\n this.objectConfig = { ...this.objectConfig, actions };\n this.changes[this.selectedType.id] = { ...this.objectConfig };\n }\n }\n\n saveConfig() {\n if (Object.keys(this.changes).length) {\n this.#objectConfigService.saveObjectConfigs(this.changes, this.bucket()).subscribe((_) => this.save.emit());\n }\n }\n\n resetConfig() {\n if (this.selectedType) {\n const defaults =\n this.#objectConfigService.getRegisteredDefault(this.selectedType.id, this.bucket()) || this.#emptyObjectConfig;\n this.changes[this.selectedType.id] = { ...defaults };\n this.objectConfig = { ...defaults };\n const originalConfig = this.#objectConfigService.getObjectConfig(this.selectedType, this.bucket());\n if (this.#deepEqual(defaults, originalConfig)) {\n this.changes[this.selectedType.id] = undefined;\n delete this.changes[this.selectedType.id];\n } else {\n this.changes[this.selectedType.id] = { ...defaults };\n }\n }\n }\n\n cancelConfig() {\n this.changes = {};\n this.canceled.emit();\n }\n\n #deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!this.#deepEqual((a as any)[key], (b as any)[key])) return false;\n }\n return true;\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <section class=\"picker\">\n <mat-form-field>\n <mat-select [panelWidth]=\"null\" [(ngModel)]=\"selectedType\" (ngModelChange)=\"typeSelected($event)\">\n @for (t of types() || []; track t.id; let i = $index) {\n <mat-option [value]=\"t.data\">{{ t.id | translate }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (selectedType) {\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n }\n </section>\n\n <section class=\"details\">\n @if (selectedType) {\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [disableBadgesSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n (slotSelect)=\"slotSelect($event)\"\n ></yuv-tile-config-tile>\n </div>\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\"></yuv-icon-select>\n } @else if (selectedSlot === 'badges') {\n <div class=\"placeholder empty\">\n <p>Future feature: Select badges (like: is favorite, ratings, ...)</p>\n </div>\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n ></yuv-tile-action-select>\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n ></yuv-tile-property-select>\n }\n </main>\n } @else {\n <div class=\"placeholder empty\"></div>\n }\n </section>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged\" (click)=\"saveConfig()\">{{ 'yuv.tile-config.button.save' | translate }}</button>\n </footer>\n</yuv-dialog>\n","import { Component, TemplateRef, inject, input, viewChild } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { TileListConfigOptions } from '../../tile-list/tile-list.interface';\nimport { TileConfigComponent } from '../tile-config.component';\n\n@Component({\n selector: 'yuv-tile-config-trigger',\n standalone: true,\n imports: [TileConfigComponent, TranslatePipe, YmtIconButtonDirective, MatButtonModule, MatTooltipModule, MatIcon],\n templateUrl: './tile-config-trigger.component.html',\n styleUrl: './tile-config-trigger.component.scss'\n})\nexport class TileConfigTriggerComponent {\n #dialog = inject(MatDialog);\n\n tplTileConfig = viewChild.required<TemplateRef<any>>('tplTileConfig');\n\n #dialogRef?: MatDialogRef<any>;\n\n icon = input<string>('settings');\n bucket = input<string>();\n bucketLabel = input<string | undefined>();\n options = input<TileListConfigOptions | undefined>(undefined);\n // If true, renders a smaller icon button\n small = input<boolean>(false);\n\n openTileConfigOverlay() {\n const popoverConfig: MatDialogConfig = {\n height: '80vh',\n width: '80vw',\n maxWidth: '80vw'\n };\n this.#dialogRef = this.#dialog.open(this.tplTileConfig(), popoverConfig);\n }\n\n onObjectConfigSave() {\n if (this.#dialogRef) this.#dialogRef.close();\n }\n\n onObjectConfigCancel() {\n if (this.#dialogRef) this.#dialogRef.close();\n }\n}\n","<button ymt-icon-button [icon-button-size]=\"small() ? 'small' : 'medium'\" class=\"settings icon\" (click)=\"openTileConfigOverlay()\" [matTooltip]=\"'yuv.tile-config.trigger.tooltip' | translate\">\n <mat-icon>settings</mat-icon>\n</button>\n\n<ng-template #tplTileConfig>\n <yuv-tile-config\n (save)=\"onObjectConfigSave()\"\n (canceled)=\"onObjectConfigCancel()\"\n [bucket]=\"bucket() || undefined\"\n [bucketLabel]=\"bucketLabel()\"\n [configTypes]=\"options()?.configTypes\"\n [configFlavors]=\"options()?.configFlavors || []\"\n ></yuv-tile-config>\n</ng-template>\n","import { Component, computed, input } from '@angular/core';\nimport { TileExtensionComponent } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-email-tile-extension',\n standalone: true,\n imports: [],\n template: `\n @if (hasAttachements()) {\n <span>{{ attachments().length }}</span>\n <svg class=\"icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#5f6368\" viewBox=\"0 -960 960 960\">\n <path\n d=\"M720-330q0 104-73 177T470-80q-104 0-177-73t-73-177v-370q0-75 52.5-127.5T400-880q75 0 127.5 52.5T580-700v350q0 46-32 78t-78 32q-46 0-78-32t-32-78v-370h80v370q0 13 8.5 21.5T470-320q13 0 21.5-8.5T500-350v-350q-1-42-29.5-71T400-800q-42 0-71 29t-29 71v370q-1 71 49 120.5T470-160q70 0 119-49.5T640-330v-390h80v390Z\"\n />\n </svg>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n justify-content: end;\n margin-top: 0.5rem;\n\n .icon {\n height: 1rem;\n }\n }\n `\n ],\n host: {\n '[class.attachments]': 'hasAttachements()'\n }\n})\nexport class EmailTileExtensionComponent implements TileExtensionComponent {\n data = input.required<any>();\n attachments = computed(() => this.data()['appSystemmail:attachments'] || []);\n hasAttachements = computed(() => !!this.data()['appSystemmail:attachmentCount']);\n\n onClick(a: string, evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n\n alert(`You clicked '${a}' my friend.`);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","TranslatePipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-tile-list.mjs","sources":["../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-actions-menu/tile-actions-menu.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-actions-menu/tile-actions-menu.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-extension/tile-extension.service.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-extension/directive/tile-extension.directive.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-list/tile-list.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-list/tile-list.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/action-select/action-select.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/action-select/action-select.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/property-select/property-select.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/property-select/property-select.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/icon-select/icon-select.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/icon-select/icon-select.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-tile/tile-config-tile.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-tile/tile-config-tile.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-trigger/tile-config-trigger.component.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-config/tile-config-trigger/tile-config-trigger.component.html","../../../../../libs/yuuvis/client-framework/tile-list/src/lib/tile-extension/extensions/email.extension.ts","../../../../../libs/yuuvis/client-framework/tile-list/src/yuuvis-client-framework-tile-list.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, forwardRef, input, output, viewChild } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltip } from '@angular/material/tooltip';\nimport { Action } from '@yuuvis/client-framework/actions';\n\n@Component({\n selector: 'yuv-tile-actions-menu',\n imports: [MatMenu, MatIcon, MatMenuItem, MatMenuTrigger, MatTooltip, forwardRef(() => TileActionsMenuComponent)],\n templateUrl: './tile-actions-menu.component.html',\n styleUrls: ['./tile-actions-menu.component.scss'],\n providers: [{ provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: { position: 'right' } }],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TileActionsMenuComponent {\n actions = input.required<Action[]>();\n loading = input(false);\n\n itemSelect = output<Action>();\n\n matMenu = viewChild.required<MatMenu>('menuRef');\n\n itemClicked(event: Event, action: Action): void {\n event.stopPropagation();\n event.preventDefault();\n if (action.disabled) return;\n this.itemSelect.emit(action);\n }\n}\n","<mat-menu #menuRef>\n <!-- @if (loading() && !actions().length) {\n <div class=\"loading-indicator\">\n <mat-spinner diameter=\"24\"></mat-spinner>\n </div>\n } -->\n @for (action of actions(); track action.id) {\n @if (action.children?.length) {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n [matMenuTriggerFor]=\"subMenu.matMenu()\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n <yuv-tile-actions-menu #subMenu [actions]=\"action.children!\" (itemSelect)=\"itemSelect.emit($event)\" />\n </span>\n } @else {\n <span [matTooltip]=\"action.description\" [matTooltipDisabled]=\"!action.description\">\n <button\n mat-menu-item\n [disabled]=\"!!action.disabled\"\n [attr.disabled]=\"!!action.disabled\"\n (click)=\"itemClicked($event, action)\"\n >\n @if (action.icon) {\n <mat-icon>{{ action.icon }}</mat-icon>\n }\n <span>{{ action.label }}</span>\n </button>\n </span>\n }\n }\n</mat-menu>\n","import { Injectable } from '@angular/core';\nimport { TileExtension } from '@yuuvis/client-shell-core';\nimport { EmailTileExtensionComponent } from './extensions/email.extension';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TileExtensionService {\n private _extensions: Record<string, TileExtension> = {};\n\n constructor() {\n // this.registerTileExtension({\n // // typeId: 'appSystemmail:email',\n // typeId: 'system:document',\n // cmp: EmailTileExtensionComponent\n // });\n }\n\n registerTileExtension(ext: TileExtension) {\n this._extensions[ext.typeId] = ext;\n }\n\n hasTileExtension(objectTypeId: string): boolean {\n return !!this._extensions[objectTypeId];\n }\n\n /**\n * Get tile extensions for a certain type\n * @param typeId ID of the type to fetch extesion for (objectTypeID or secondaryObjectTypeID)\n * @returns\n */\n getTileExtension(typeId: string): TileExtension | undefined {\n return this._extensions[typeId];\n }\n}\n","import { ComponentRef, Directive, Input, ViewContainerRef, effect, inject, input, signal } from '@angular/core';\nimport { TileExtensionService } from '../tile-extension.service';\nimport { TileExtension, TileExtensionComponent, TileExtensionDirectiveInput } from '@yuuvis/client-shell-core';\n\n@Directive({\n selector: '[yuvTileExtension]',\n standalone: true\n})\nexport class TileExtensionDirective {\n readonly #tileExtensioService = inject(TileExtensionService);\n readonly #containerRef = inject(ViewContainerRef);\n\n component!: ComponentRef<TileExtensionComponent>;\n\n yuvTileExtension = input.required<TileExtensionDirectiveInput>();\n\n #yuvTileExtensionEffect = effect(() => {\n const tile = this.yuvTileExtension();\n if (tile.typeId) {\n const ext = this.#tileExtensioService.getTileExtension(tile.typeId);\n if (ext) this._render(ext, tile.data);\n }\n });\n\n private _render(ext: TileExtension, data?: any) {\n if (this.component) this.#containerRef.clear();\n this.component = this.#containerRef.createComponent(ext.cmp);\n this.component.setInput('data', data);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n EffectCleanupRegisterFn,\n ElementRef,\n inject,\n input,\n linkedSignal,\n OnInit,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {\n BaseObjectTypeField,\n DmsObject,\n DmsService,\n ObjectConfigAction,\n ObjectConfigRecord,\n ObjectConfigService,\n ResolvedObjectConfigItem,\n SearchQuery,\n SearchResultItem,\n SearchService,\n TranslatePipe\n} from '@yuuvis/client-core';\n\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { QueryListComponent, YuvQueryListModule } from '@yuuvis/client-framework/query-list';\nimport { RendererDirective } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\nimport { YmtIconButtonDirective, YmtMatIconRegistryService } from '@yuuvis/material';\nimport { forkJoin, switchMap, take } from 'rxjs';\nimport { TileActionsMenuComponent } from '../tile-actions-menu/tile-actions-menu.component';\nimport { TileExtensionDirective } from '../tile-extension/directive/tile-extension.directive';\nimport { TileData, TileListConfigOptions, TileListHighlight } from './tile-list.interface';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InnerTileData = TileData & { actions: any };\nconst MATERIAL_IMPORTS = [MatIconModule, MatPaginatorModule, MatTooltipModule, MatMenuTrigger];\n\n/**\n * Query-driven tile list that renders `DmsObject` search results as rich, configurable\n * tiles based on `ObjectConfig` definitions.\n *\n * The component wraps `yuv-query-list` and adds DMS-specific concerns: it resolves the\n * `ObjectConfigRecord` for each result item (via `ObjectConfigService`), maps raw\n * `SearchResultItem` data to the `TileData` view model, and supports per-object-type\n * flavors, inline actions, context menus, and keyboard shortcuts for copy/cut.\n *\n * **Key Features:**\n * - Automatic object config resolution (title, description, icon, meta, aside, actions)\n * - Per-tile action buttons rendered from the resolved `ObjectConfigRecord`\n * - Optional `ObjectFlavor` overlay to switch the visual representation of specific SOTs\n * - Server-side pagination forwarded from the inner `yuv-query-list`\n * - Multi-selection with Shift/Ctrl modifier keys and mouse drag-to-select\n * - Programmatic pre-selection by object ID (`preselect` input, `selectById()` method)\n * - Per-item CSS highlight styles via the `highlights` input\n * - Optimistic list updates without a full re-fetch (`updateListItems`, `updateTileList`, `dropItems`)\n * - Keyboard shortcuts: **Ctrl+C** emits `tileCopy`, **Ctrl+X** emits `tileCut`\n * - Optional custom context menu via projected `TileActionsMenuComponent`\n * - Isolated tile config bucket so multiple instances can have different column layouts\n *\n * **Content Projection Slots:**\n * - `TileActionsMenuComponent` — optional; project a `<yuv-tile-actions-menu>` to attach\n * a context menu to every tile's action trigger.\n * - `#empty` — optional template reference; shown when the query returns no results.\n *\n * **Basic usage:**\n * ```html\n * <yuv-tile-list [query]=\"query\" (itemSelect)=\"onSelect($event)\" />\n * ```\n *\n * **Multi-select with custom bucket and highlights:**\n * ```html\n * <yuv-tile-list\n * bucket=\"my-feature\"\n * [query]=\"query\"\n * [multiselect]=\"true\"\n * [highlights]=\"highlights\"\n * (selectionChange)=\"onSelectionChange($event)\"\n * />\n * ```\n *\n * **With context menu:**\n * ```html\n * <yuv-tile-list [query]=\"query\" (ctxMenu)=\"onCtxMenu($event)\">\n * <yuv-tile-actions-menu>\n * <button mat-menu-item (click)=\"openDetails()\">Open</button>\n * </yuv-tile-actions-menu>\n * </yuv-tile-list>\n * ```\n */\n@Component({\n selector: 'yuv-tile-list',\n standalone: true,\n providers: [],\n imports: [\n TranslatePipe,\n ReactiveFormsModule,\n YuvListModule,\n YuvQueryListModule,\n YuvListModule,\n RendererDirective,\n TileExtensionDirective,\n YmtIconButtonDirective,\n ...MATERIAL_IMPORTS\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tile-list.component.html',\n styleUrl: './tile-list.component.scss',\n host: {\n '[class.dense]': 'dense()',\n '(keydown.control.c)': 'onCopy($event)',\n '(keydown.control.x)': 'onCut($event)'\n }\n})\nexport class TileListComponent implements OnInit {\n //#region Dependencies\n\n #objectConfigService = inject(ObjectConfigService);\n #destroyRef = inject(DestroyRef);\n #elRef = inject(ElementRef);\n #cdr = inject(ChangeDetectorRef);\n #actionService = inject(ActionsService);\n #dmsService = inject(DmsService);\n\n //#endregion\n\n //#region Angular stuff\n\n /**\n * Optional projected `TileActionsMenuComponent` instance.\n *\n * When present, its `matMenu()` is wired as the context menu for every tile's\n * action trigger button. The menu closes automatically whenever the user selects\n * a menu item (managed by `#closeMenuEffect`).\n *\n * Project it into the component:\n * ```html\n * <yuv-tile-list ...>\n * <yuv-tile-actions-menu>\n * <button mat-menu-item>Open</button>\n * </yuv-tile-actions-menu>\n * </yuv-tile-list>\n * ```\n */\n menuComponent = contentChild(TileActionsMenuComponent);\n\n /**\n * Optional projected element shown when the query returns an empty result set.\n *\n * Reference the element with the `#empty` template variable:\n * ```html\n * <yuv-tile-list ...>\n * <div #empty>No items found.</div>\n * </yuv-tile-list>\n * ```\n */\n emptyContent = contentChild<ElementRef>('empty');\n\n /**\n * Reference to the inner `QueryListComponent` instance.\n *\n * Used internally to delegate imperative operations (select, multiSelect, refresh, …).\n * Prefer the public API methods on this component over accessing `list()` directly from\n * the parent, as the inner list's API may change independently.\n */\n list = viewChild.required<QueryListComponent<TileData>>('list');\n\n /**\n * All `MatMenuTrigger` instances rendered inside the tile list.\n *\n * Used by `#closeMenuEffect` to close every open context/action menu when the user\n * selects a menu item, ensuring only one menu is open at a time.\n */\n menuTriggers = viewChildren(MatMenuTrigger);\n\n /**\n * Namespace key for storing and retrieving this instance's tile configuration.\n *\n * Tile column/field layout is persisted globally via `ObjectConfigService`. Providing\n * a bucket isolates this instance's configuration from the global default, so two\n * tile lists with different purposes (e.g. inbox vs. archive) can each remember their\n * own preferred layout independently.\n *\n * Use a unique, stable string — e.g. `\"my-app.inbox-list\"`. If omitted, the global\n * default configuration is used.\n */\n bucket = input<string>();\n\n /**\n * Number of result items to request per page from the search service.\n *\n * Forwarded to the inner `QueryListComponent`. When the total result count exceeds\n * this value, pagination controls appear. Reducing this number improves initial load\n * time; increasing it reduces the need for pagination.\n *\n * @default SearchService.DEFAULT_QUERY_SIZE\n */\n pageSize = input<number>(SearchService.DEFAULT_QUERY_SIZE);\n\n /**\n * Enables multi-selection mode.\n *\n * When `true`, the user can hold **Shift** to range-select or **Ctrl** to toggle\n * individual tiles, and mouse drag-to-select becomes available. `selectionChange`\n * then emits the full selection array; `itemSelect` still emits only the most\n * recently added single tile.\n *\n * @default false\n */\n multiselect = input<boolean>(false);\n\n /**\n * Renders tiles in a compact, reduced-height style.\n *\n * Drives the `[class.dense]` host binding. Use this when vertical space is limited\n * or when many items need to be visible at once without scrolling.\n *\n * @default false\n */\n dense = input<boolean>(false);\n\n /**\n * Extended configuration options for the tile list.\n *\n * See `TileListConfigOptions` for the full set of options, including:\n * - `actionContext` — passed to `ActionsService.getActionById()` when resolving inline\n * tile actions, so actions can behave differently per context.\n * - `configTypes` — virtual config type overrides that let you map specific\n * object-type / SOT combinations to a different `ObjectConfigRecord` entry.\n */\n options = input<TileListConfigOptions | undefined>(undefined);\n\n /**\n * Object flavor to overlay on matching tiles.\n *\n * An `ObjectFlavor` defines an alternative visual representation for objects that carry\n * a specific SOT. When set, tiles whose `DmsObject.sots` array includes\n * `flavor.sot` are rendered using the config entry identified by `flavor.id` instead\n * of their own object-type config.\n *\n * Changes are applied reactively via `#flavorEffect` and re-evaluated against the\n * last raw result set via `applyFlavor()`.\n */\n flavor = input<ObjectFlavor>();\n\n /**\n * The search query to execute.\n *\n * Accepts a structured `SearchQuery` object or a raw CMIS query string. The query is\n * re-executed reactively every time this input changes. The result set must include the\n * `system:objectTypeId` field — tiles without a resolved object type will throw at\n * mapping time.\n */\n query = input<SearchQuery | string | null>();\n\n /**\n * Object IDs to select as soon as the list finishes loading.\n *\n * If the list is still busy when this input is set, the IDs are stored internally and\n * applied once the query completes (via `#preselectEffect`). Items whose IDs are not\n * found in the current result set are silently ignored.\n *\n * For programmatic selection after the list is loaded, prefer `selectById()`.\n *\n * @default []\n */\n preselect = input<string[]>([]);\n\n /**\n * Per-item CSS style overrides rendered as inline styles on matching tiles.\n *\n * Each `TileListHighlight` entry specifies an array of object IDs and a\n * `cssStyles` record. All styles for the same ID are merged, with later entries in\n * the array taking precedence. Used to visually call out specific items (e.g. newly\n * created, recently modified, flagged).\n *\n * @default []\n */\n highlights = input<TileListHighlight[] | null>([]);\n\n /**\n * Guard function that temporarily blocks all selection changes.\n *\n * Forwarded to the inner `ListComponent`. As long as the returned predicate evaluates\n * to `true`, any attempt to change the selection is silently ignored. Useful when the\n * parent has unsaved changes tied to the current selection.\n *\n * @default () => false (never prevents)\n */\n preventChangeUntil = input<() => boolean>(() => false);\n\n /**\n * Automatically selects an item when the list is first rendered.\n *\n * Follows the same priority as `ListComponent.autoSelect`: first non-disabled item\n * with the `selected` attribute, then index 0. Accepts any truthy string so it can\n * be set as a plain HTML attribute: `<yuv-tile-list autoSelect>`.\n *\n * @default false\n */\n autoSelect = input<boolean, BooleanInput>(false, {\n transform: (value: BooleanInput) => coerceBooleanProperty(value)\n });\n\n /**\n * Suppresses the component's built-in context menu handling.\n *\n * When `true`, right-clicking a tile does not call `event.preventDefault()`, does not\n * auto-select the right-clicked tile, and does not emit `ctxMenu`. Use this when the\n * parent wants to handle `contextmenu` events itself.\n *\n * @default false\n */\n disableCustomContextMenu = input<boolean>(false);\n\n /**\n * Emits the `TileData` of the most recently selected tile.\n *\n * In single-select mode this fires for every selection change. In multi-select mode\n * it fires only when exactly one tile ends up selected (i.e. a plain click with no\n * modifier keys). For the full multi-selection result, listen to `selectionChange`.\n */\n itemSelect = output<TileData>();\n\n /**\n * Emits the currently selected tiles when the user presses **Ctrl+C**.\n *\n * The parent is responsible for handling the actual copy operation (e.g. writing to\n * the clipboard or storing the objects for a subsequent paste action). The default\n * browser copy behavior is suppressed.\n */\n tileCopy = output<TileData[]>();\n\n /**\n * Emits the currently selected tiles when the user presses **Ctrl+X**.\n *\n * The parent is responsible for handling the cut operation. The default browser cut\n * behavior is suppressed. Typically used together with `dropItems()` on a target list\n * to implement a move-via-clipboard interaction.\n */\n tileCut = output<TileData[]>();\n\n /**\n * Mirrors the inner `QueryListComponent.busy` signal as an output event.\n *\n * Emits `true` when a query request starts and `false` when it completes (or errors).\n * Useful when the parent needs to react to loading state changes without holding a\n * `@ViewChild` reference to this component.\n */\n busy = output<boolean>();\n\n /**\n * Emits once per query execution when the search result arrives.\n *\n * Provides the server-side total item count and the raw `SearchResultItem[]` for the\n * current page. Forwarded directly from the inner `QueryListComponent`.\n */\n queryResult = output<{ totalCount: number; items: SearchResultItem[] }>();\n\n /**\n * Emits the full current selection as `TileData[]` on every selection change.\n *\n * Unlike `itemSelect` — which emits a single tile — this output always reflects the\n * complete selection. In single-select mode the array contains at most one element.\n * Emits an empty array when the selection is cleared.\n */\n selectionChange = output<TileData[]>();\n\n /**\n * Emits the `TileData` of a tile when it is double-clicked.\n *\n * The primary single-click selection is handled separately via `itemSelect`. Use this\n * output to trigger a secondary action such as opening a detail view or navigating\n * to a route.\n */\n itemDblClick = output<TileData>();\n\n /**\n * Emits when the user right-clicks a tile and `disableCustomContextMenu` is `false`.\n *\n * Provides the originating mouse event (for positioning a custom menu overlay) and\n * the current selection as an array of object IDs. The right-clicked tile is\n * auto-selected before the event fires if it was not already part of the selection.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ctxMenu = output<{ event: MouseEvent | PointerEvent; selection: any }>();\n\n //#endregion\n\n //#region Properties\n\n /**\n * The `MatMenu` instance resolved from the projected `TileActionsMenuComponent`.\n *\n * `null` when no `TileActionsMenuComponent` is projected. Used in the template to\n * conditionally bind `[matMenuTriggerFor]` on tile action buttons.\n */\n menu = computed(() => {\n const comp = this.menuComponent();\n return comp?.matMenu() ?? null;\n });\n\n /**\n * The full `TileData` objects for all currently selected tiles.\n *\n * Updated on every selection change alongside `selection`. Prefer this signal when\n * the parent needs rich tile data (fields, DMS object reference, actions) rather than\n * just IDs.\n */\n selectedTile = signal<TileData[]>([]);\n\n /**\n * Object IDs of the currently selected tiles.\n *\n * A flat `string[]` signal — convenient for ID comparisons, permission checks, or\n * passing to services that work with IDs. For the full tile data, use `selectedTile`.\n */\n selection = signal<string[]>([]);\n\n /**\n * The `ObjectFlavor` currently applied to matching tiles, or `undefined` if none.\n *\n * Toggled by `applyFlavor()`: calling it with the same flavor a second time clears it\n * (acts as a toggle). Persisted across query refreshes until explicitly changed.\n */\n appliedFlavor?: ObjectFlavor;\n\n #busy = computed(() => this.list().busy());\n\n #preselect = linkedSignal(this.preselect);\n\n /**\n * Computed map of per-object-ID inline CSS styles derived from the `highlights` input.\n *\n * Merges all `TileListHighlight` entries that reference the same ID so the template\n * only needs a single lookup: `highlightStyles()[item.id]`. Returns an empty object\n * for IDs with no highlight rules.\n */\n highlightStyles = computed<Record<string, Record<string, unknown>>>(() => {\n const x: Record<string, Record<string, unknown>> = {};\n (this.highlights() || []).forEach((highlight) => {\n highlight.ids.forEach((id) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!x[id]) x[id] = {};\n x[id] = { ...x[id], ...highlight.cssStyles };\n });\n });\n return x;\n });\n\n /**\n * The `TileData` view models currently rendered in the list.\n *\n * Populated by `onQueryResult()` after each successful search response and also\n * prepended by `dropItems()`. The template iterates over this signal directly.\n * Read this from the parent to access displayed tile data without an extra query.\n */\n items = signal<TileData[]>([]);\n\n /**\n * Indicates whether at least one search has been executed successfully.\n *\n * Remains `false` until the first `onQueryResult()` call. Use this in the template\n * to distinguish between \"initial loading\" (show a spinner) and \"empty result\"\n * (show the empty-state slot) without relying on `items().length` alone.\n */\n searchExecuted = signal(false);\n\n #rawResultItems?: SearchResultItem[];\n\n private objectConfig?: ObjectConfigRecord;\n private _selection: number[] = [];\n private _lastSelection?: number;\n\n //#endregion\n\n constructor() {\n effect(this.#flavorEffect);\n effect(this.#preselectEffect);\n effect(this.#closeMenuEffect);\n }\n\n //#region Lifecycle hooks\n\n ngOnInit(): void {\n this.#getObjectConfig();\n }\n\n //#endregion\n\n //#region UI Methods\n\n /**\n * Host **Ctrl+C** handler — emits the current selection via `tileCopy`.\n *\n * Suppresses the default browser copy behavior. Fires only when at least one tile\n * is selected. Bound via the `host` metadata as `(keydown.control.c)`.\n *\n * @param event The keyboard event (used to call `preventDefault`).\n */\n onCopy(event: Event): void {\n event.preventDefault();\n if (this._selection.length) this.tileCopy.emit(this._selectionToTileData(this._selection));\n }\n\n /**\n * Host **Ctrl+X** handler — emits the current selection via `tileCut`.\n *\n * Suppresses the default browser cut behavior. Fires only when at least one tile\n * is selected. Bound via the `host` metadata as `(keydown.control.x)`.\n *\n * @param event The keyboard event (used to call `preventDefault`).\n */\n onCut(event: Event): void {\n event.preventDefault();\n if (this._selection.length) this.tileCut.emit(this._selectionToTileData(this._selection));\n }\n\n /**\n * Handles a double-click event forwarded from the inner `QueryListComponent`.\n *\n * If the double-clicked tile is not already the sole selected item, it is selected\n * first (without modifier keys) so that `itemDblClick` always fires in the context\n * of a known selection state. Then `itemDblClick` is emitted with the tile's data.\n *\n * Called from the template via `(itemDoubleClick)`. Not intended for external callers.\n *\n * @param index Zero-based index of the double-clicked tile in the current `items` array.\n */\n onItemDoubleClick(index: number): void {\n const selectionIsEqual = this._selection.length === 1 && this._selection[0] === index;\n if (!selectionIsEqual) this.#internalSelectByIndex(index);\n this.itemDblClick.emit(this.items()[index]);\n }\n\n /**\n * Handles the query result emitted by the inner `QueryListComponent`.\n *\n * Marks the component as having executed at least one search (`searchExecuted`),\n * updates the `items` signal with the freshly mapped `TileData` view models, and\n * re-emits the raw result via `queryResult` so the parent can update counters or\n * analytics without a separate query.\n *\n * Called from the template via `(queryResult)`. Not intended for external callers.\n *\n * @param result The search result object containing `totalCount` and `items`.\n */\n onQueryResult(result: { totalCount: number; items: SearchResultItem[] }): void {\n this.searchExecuted.set(true);\n const newItems = this.#mapToTileData(result.items.map((i) => new DmsObject(i)));\n\n // Preserve drop-in items at the top so that `items` indices stay in sync with\n // the rendered `resultItems` from QueryListComponent (which prepends drop-ins).\n const dropInCount = this.list().dropInSize();\n const currentItems = this.items();\n const dropInItems = currentItems.slice(0, dropInCount);\n\n let merged: TileData[];\n if (dropInItems.length > 0) {\n const dropInIds = new Set(dropInItems.map((item) => item.id));\n const filtered = newItems.filter((item) => !dropInIds.has(item.id));\n merged = [...dropInItems, ...filtered];\n } else {\n merged = newItems;\n }\n\n // If any selected items are absent from the new result set (e.g. after deletion),\n // clear the internal selection indices. Without this, #isSelectionEqual would return\n // true when the inner list auto-selects the same index (now pointing to a different\n // item), causing selectionChange to be silently skipped and the right panel to stay\n // stale with the deleted item's content.\n if (this._selection.length > 0) {\n const mergedIds = new Set(merged.map((i) => i.id));\n const selectionOutdated = this._selection.some((idx) => !mergedIds.has(this.items()[idx]?.id));\n if (selectionOutdated) {\n this._selection = [];\n this._lastSelection = undefined;\n }\n }\n\n this.items.set(merged);\n this.queryResult.emit(result);\n }\n\n /**\n * Handles the committed selection emitted by the inner list.\n *\n * For a single-item selection the full `#select()` path is taken so that `itemSelect`\n * is also emitted. For multi-item selections only `#updateSelectionState()` runs to\n * keep `selectionChange` and the internal state in sync without the single-item emit.\n *\n * Called from the template via `(itemSelect)` on `yuv-query-list`.\n * Not intended for external callers.\n *\n * @param sel Array of zero-based indices representing the new selection.\n */\n onListItemsSelect(sel: number[]): void {\n if (sel.length === 1) {\n this.#internalSelectByIndex(sel[0]);\n return;\n }\n this.#updateSelectionState(sel);\n }\n\n /**\n * Handles live drag-selection changes forwarded from the inner `QueryListComponent`.\n *\n * Fires continuously while the user drags across tiles, updating the selection state\n * in real time so the visual highlight tracks the gesture. Does not emit `itemSelect`\n * (that fires only on the final committed selection via `onListItemsSelect`).\n *\n * Called from the template via `(dragSelectChange)`. Not intended for external callers.\n *\n * @param sel Current array of zero-based indices covered by the drag gesture.\n */\n onDragSelectChange(sel: number[]): void {\n this.#updateSelectionState(sel);\n }\n\n //#endregion\n\n //#region Public methods\n\n /**\n * Transformer function passed to the inner `QueryListComponent`.\n *\n * Maps raw `SearchResultItem[]` to the `InnerTileData` view model by:\n * 1. Storing the raw items in `#rawResultItems` so `applyFlavor()` can re-map them\n * without a new server request.\n * 2. Calling `#mapToTileData()` to resolve `ObjectConfig` fields (title, icon, …).\n * 3. Resolving each tile's action IDs to full `Action` objects via `ActionsService`,\n * filtering out any IDs that are not registered.\n *\n * Re-runs automatically whenever the query result or the `ObjectConfigRecord` changes\n * (the latter is triggered by calling `list().runTransformerAgain()` from\n * `#getObjectConfig()`).\n */\n transformer = (res: SearchResultItem[]): InnerTileData[] => {\n this.#rawResultItems = res;\n const mappedItems = this.#mapToTileData(res.map((i) => new DmsObject(i)));\n const items = mappedItems.map((item) => ({\n ...item,\n actions: (item.actions || [])\n .map((action: ObjectConfigAction) =>\n this.#actionService.getActionById(action.id, this.options()?.actionContext)\n )\n .filter((action: Action | undefined) => action !== undefined)\n }));\n this.#resolveInlineActionsDisabledState(items);\n return items;\n };\n\n /**\n * Handles a right-click (contextmenu) event on a tile.\n *\n * Suppresses the browser's native context menu. If the clicked tile is not already\n * part of the selection, it is selected first. After a short delay (to allow the\n * selection state to propagate), `ctxMenu` is emitted with the originating event and\n * the current selection so the parent can position and populate a custom menu.\n *\n * The delay is intentional: it gives Angular change detection a tick to apply the\n * selection update before the parent reads `selection()` in the `ctxMenu` handler.\n *\n * No-ops when `disableCustomContextMenu` is `true`.\n *\n * Called from the template via `(contextmenu)` on each tile. Not intended for\n * external callers.\n *\n * @param event The originating mouse event (used to suppress default and for positioning).\n * @param index Zero-based index of the right-clicked tile.\n */\n contextMenuHandler(event: MouseEvent, index: number): void {\n if (this.disableCustomContextMenu()) return;\n event.preventDefault();\n\n // if not yet selected, select\n // if (this._selection.length === 0 || !this._selection.includes(index)) {\n // this.#internalSelectByIndex(index, event);\n // }\n\n setTimeout(() => {\n this.ctxMenu.emit({ event, selection: this.selection() });\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n }, 200);\n }\n\n /**\n * Executes a tile inline action against the appropriate set of DMS objects.\n *\n * Resolves the target objects from the DMS service: if the tile whose action button\n * was clicked is part of the current selection, the action runs against all selected\n * objects (batch action); otherwise it runs against only that single tile's object.\n *\n * Suppresses the click event to prevent the tile's own selection handler from firing.\n * Called from the template via the tile action buttons. Not intended for external callers.\n *\n * @param tileData The tile whose action button was clicked.\n * @param action The resolved `Action` to execute.\n * @param event The originating click event (stopped to prevent tile selection).\n */\n executeAction(tileData: InnerTileData, action: Action, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n if (action.disabled) return;\n\n const selectedIds = this.selection();\n const ids = selectedIds.includes(tileData.id) ? selectedIds : [tileData.id];\n\n this.#dmsService\n .getDmsObjects(ids)\n .pipe(switchMap((objects: DmsObject[]) => action.run(objects)))\n .subscribe();\n }\n\n /**\n * Selects tiles by their object IDs.\n *\n * Looks up each ID in the current `items` array and selects the matching indices\n * in the inner list. If the list is still loading when this is called, the IDs are\n * stored and applied automatically once the query completes (via `#preselectEffect`).\n *\n * IDs not found in the current result set are silently ignored. The first found item\n * also receives keyboard focus via `setActiveItem()`.\n *\n * @param ids Array of object IDs (`system:objectId`) to select.\n */\n selectById(ids: string[]): void {\n if (this.#busy()) {\n this.#preselect.set(ids);\n } else {\n this.#executeSelectById(ids);\n }\n }\n\n /**\n * Programmatically replaces the entire selection with the given indices.\n *\n * Only effective when `multiselect` is `true`. Delegates to the inner\n * `QueryListComponent`. Out-of-range indices are silently discarded.\n *\n * @param index Array of zero-based item indices to select.\n */\n multiSelect(index: number[]): void {\n this.list().multiSelect(index);\n }\n\n /**\n * Selects the tile at the given zero-based index.\n *\n * Delegates to the inner `QueryListComponent`. Clamps the index to the valid range.\n * Use `selectById()` when you have object IDs rather than positional indices.\n *\n * @param index Zero-based index of the tile to select.\n */\n select(index: number): void {\n this.list().select(index);\n }\n\n /**\n * Re-executes the current query without changing the page or query parameters.\n *\n * If pagination is active, re-fetches the same page. Use this to reflect server-side\n * changes (e.g. after a create/delete operation) without navigating away.\n */\n refresh(): void {\n this.list().refresh();\n }\n\n /**\n * Prepends `DmsObject` instances to the top of the tile list as temporary drop-in items.\n *\n * The objects are mapped through the same `ObjectConfig` resolution pipeline as regular\n * query results, including action resolution. The existing selection is shifted so that\n * currently selected tiles remain selected after the prepend.\n *\n * Use this for optimistic UI: show newly created or pasted objects immediately before\n * the server index reflects them in the query results.\n *\n * Drop-in items are cleared automatically when the user navigates to a different page.\n *\n * @param objects `DmsObject` instances to prepend to the visible list.\n */\n dropItems(objects: DmsObject[]): void {\n const items = this.#updateItems(objects);\n if (items.length > 0 && this._selection.length > 0) {\n this._selection = this._selection.map((i) => i + items.length);\n if (this._lastSelection !== undefined) {\n this._lastSelection += items.length;\n }\n }\n this.list().dropItems(items);\n }\n\n /**\n * Toggles an `ObjectFlavor` on or off and re-maps the current result set.\n *\n * If the given flavor is already the active `appliedFlavor`, it is cleared (toggle\n * off). Otherwise the flavor is applied and all tiles whose `DmsObject.sots` includes\n * `flavor.sot` are re-rendered using the config entry for `flavor.id`.\n *\n * Re-mapping runs against the last raw `SearchResultItem[]` (`#rawResultItems`) so\n * no server round-trip is needed. Called automatically by `#flavorEffect` when the\n * `flavor` input changes.\n *\n * @param flavor The `ObjectFlavor` to apply or remove.\n */\n applyFlavor(flavor: ObjectFlavor): void {\n this.appliedFlavor = this.appliedFlavor?.id === flavor.id ? undefined : flavor;\n if (this.#rawResultItems) this.items.set(this.#mapToTileData(this.#rawResultItems.map((i) => new DmsObject(i))));\n }\n\n /**\n * Applies per-index optimistic overrides to the displayed tile data.\n *\n * Delegates to the inner `QueryListComponent.updateListItems()`. Each entry patches\n * the tile at the given `index` with a new `TileData` value. Overrides accumulate\n * until the user navigates to a different page, at which point the fresh server\n * response replaces all local data.\n *\n * For DMS-object-based updates, prefer `updateTileList()` which resolves indices\n * from object IDs automatically.\n *\n * @param updates Array of `{ index, value }` pairs describing which tiles to patch.\n */\n updateListItems(updates: { index: number; value: TileData }[]): void {\n if (updates.length > 0) {\n const patched = [...this.items()];\n for (const update of updates) {\n patched[update.index] = update.value;\n }\n this.items.set(patched);\n this.#refreshSelectedTile();\n }\n this.list().updateListItems(updates);\n }\n\n /**\n * Optimistically updates tiles in the list that correspond to the given `DmsObject` instances.\n *\n * For each provided object, finds its matching tile by `id` in the current `items`\n * array, re-maps it through `#mapToTileData()` to get a fresh `TileData` view model,\n * and applies it via `updateListItems()`. Tiles not currently visible in the list are\n * silently skipped.\n *\n * This is the preferred way to reflect server-confirmed changes (e.g. rename, metadata\n * edit) without issuing a full query refresh. Updates are scoped to the current page\n * and are discarded on the next page navigation.\n *\n * @param listItems Updated `DmsObject` instances to apply to the list.\n */\n updateTileList(listItems: DmsObject[]): void {\n const mappedItems = this.#mapToTileData(listItems);\n const updates: { index: number; value: TileData }[] = mappedItems\n .map((item) => {\n const idx = this.items().findIndex((listItem) => listItem.id === item.id);\n if (idx < 0) return undefined;\n const value: TileData = {\n ...item,\n actions: (item.actions || [])\n .map((action: ObjectConfigAction) =>\n this.#actionService.getActionById(action.id, this.options()?.actionContext)\n )\n .filter((action: Action | undefined) => action !== undefined)\n };\n return { index: idx, value };\n })\n .filter((update) => update !== undefined) as { index: number; value: TileData }[];\n this.#resolveInlineActionsDisabledState(updates.map((u) => u.value) as InnerTileData[]);\n this.updateListItems(updates);\n }\n\n /**\n * Clears the current selection and resets all internal selection state.\n *\n * Resets `_selection`, `_lastSelection`, the `selection` signal, and `selectedTile`\n * to empty. Also delegates to the inner list's `clear()` to sync the visual state.\n * If the selection is already empty, the method is a no-op.\n *\n * @param silent When `true`, skips emitting `selectionChange`. Use this when the\n * parent needs to reset state programmatically without triggering\n * downstream reactions.\n */\n clearSelection(silent = false): void {\n if (this._selection.length) {\n this.list().clear(silent);\n this._selection = [];\n this._lastSelection = undefined;\n this.selection.set([]);\n this.selectedTile.set([]);\n if (!silent) this.selectionChange.emit([]);\n }\n }\n\n /**\n * Advances the selection to the next tile in the list.\n *\n * Moves from the last selected index forward by one. Wraps around to index 0\n * when the last tile is currently selected. Does nothing if no tile is selected\n * (`_lastSelection` is `undefined`).\n *\n * Useful for implementing keyboard-driven \"next item\" navigation from a parent\n * detail panel without giving focus back to the list.\n */\n selectNext(): void {\n if (this._lastSelection !== undefined) {\n let i = this._lastSelection + 1;\n if (i >= this.items().length) i = 0;\n this.#select(i);\n }\n }\n\n /**\n * Moves the selection to the previous tile in the list.\n *\n * Moves from the last selected index backward by one. Wraps around to the last tile\n * when index 0 is currently selected. Does nothing if no tile is selected\n * (`_lastSelection` is `undefined`).\n *\n * Useful for implementing keyboard-driven \"previous item\" navigation from a parent\n * detail panel without giving focus back to the list.\n */\n selectPrev(): void {\n if (this._lastSelection !== undefined) {\n let i = this._lastSelection - 1;\n if (i < 0) i = this.items().length - 1;\n this.#select(i);\n }\n }\n\n /**\n * Handles a click on a projected `TileActionsMenuComponent` menu item.\n *\n * If the tile that owns the clicked menu item is part of the current selection,\n * the click event is stopped from propagating so the tile's own `(click)` handler\n * does not deselect other tiles. If the tile is not selected, the event is allowed\n * to propagate normally so the tile gets selected as a side effect.\n *\n * Called from the template via the `TileActionsMenuComponent` item click binding.\n * Not intended for external callers.\n *\n * @param tileData The tile that owns the clicked menu item.\n * @param event The originating click event.\n */\n menuItemClicked(tileData: TileData, event: Event): void {\n if (this.selection().includes(tileData.id)) {\n // only prevent event propagation if the click came from an element that\n // is part of the current selection\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n //#endregion\n\n //#region Utilities\n\n /**\n * Maps `DmsObject` instances to `TileData`, resolves their actions, and updates the\n * internal `items` signal.\n *\n * @param objects `DmsObject` instances to map and update.\n * @returns Array of `TileData` corresponding to the provided `DmsObject` instances.\n */\n #updateItems(objects: DmsObject[]): TileData[] {\n const mappedItems = this.#mapToTileData(objects);\n const items = mappedItems.map((item) => ({\n ...item,\n actions: (item.actions || [])\n .map((objectConfigAction: ObjectConfigAction) =>\n this.#actionService.getActionById(objectConfigAction.id, this.options()?.actionContext)\n )\n .filter((action: Action | undefined) => action !== undefined)\n }));\n this.#resolveInlineActionsDisabledState(items);\n this.items.set([...items, ...this.items()]);\n return items;\n }\n\n /**\n * Asynchronously resolves the `disabled` state for inline actions of the given tiles.\n * Mutates `action.disabled` on the existing action instances and triggers change detection.\n */\n #resolveInlineActionsDisabledState(items: InnerTileData[]): void {\n const itemsWithActions = items.filter((item) => item.actions?.length > 0);\n if (!itemsWithActions.length) return;\n\n const resolvers = itemsWithActions.map((item) =>\n this.#actionService.resolveDisabledState(item.actions, [item.dmsObject])\n );\n\n forkJoin(resolvers)\n .pipe(take(1))\n .subscribe(() => this.#cdr.markForCheck());\n }\n\n #getObjectConfig(): void {\n this.#objectConfigService\n .getObjectConfigs$(this.bucket() || '', true)\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe({\n next: (res: ObjectConfigRecord) => {\n this.objectConfig = res;\n this.list().runTransformerAgain();\n }\n });\n }\n\n #refreshSelectedTile(): void {\n if (this._selection.length > 0) {\n const tiles = this._selectionToTileData(this._selection);\n this.selectedTile.set(tiles);\n }\n }\n\n #internalSelectByIndex(idx: number, evt?: MouseEvent | KeyboardEvent): void {\n this.#select(idx, evt?.shiftKey, evt?.ctrlKey);\n }\n\n #executeSelectById(ids: string[]): void {\n const indices: number[] = ids.map((id) => this.items().findIndex((i) => i.id === id)).filter((i) => i !== -1);\n this.list().multiSelect(indices);\n if (indices.length > 0) {\n this.list().setActiveItem(indices[0]);\n }\n this.#elRef.nativeElement.focus();\n this.#updateSelectionState(indices);\n }\n\n /**\n * Shared method to update all selection state and emit outputs.\n * Used by `onListItemsSelect`, `onDragSelectChange`, and `selectById`.\n */\n #updateSelectionState(sel: number[]): void {\n const sorted = [...sel].sort();\n\n // skip if selection hasn't changed\n if (this.#isSelectionEqual(sorted)) return;\n this.#preselect.set([]);\n this._selection = sorted;\n this._lastSelection = this._selection.length ? this._selection[this._selection.length - 1] : undefined;\n const tiles = this._selectionToTileData(this._selection);\n this.selection.set(tiles.map((tile) => tile.id));\n this.selectionChange.emit(tiles);\n this.selectedTile.set(tiles);\n }\n\n #select(index: number, shiftKey = false, ctrlKey = false): void {\n this.#elRef.nativeElement.focus();\n let newSelection: number[];\n if (index === -1) {\n newSelection = [];\n } else {\n if (this.multiselect()) {\n newSelection = this._selection.filter((i) => i !== index);\n if (ctrlKey) {\n // if ctrl key add to selection\n newSelection.push(index);\n } else if (shiftKey) {\n // add range\n if (this._lastSelection !== undefined) {\n const startIndex = this._lastSelection < index ? this._lastSelection : index;\n const endIndex = this._lastSelection > index ? this._lastSelection : index;\n for (let i = startIndex; i <= endIndex; i++) {\n newSelection.push(i);\n }\n } else {\n newSelection = [index];\n }\n } else {\n newSelection = [index];\n }\n } else {\n newSelection = [index];\n }\n newSelection = [...new Set(newSelection)];\n }\n newSelection.sort();\n\n // skip if selection hasn't changed\n if (this.#isSelectionEqual(newSelection)) return;\n this.#preselect.set([]);\n this._selection = newSelection;\n this._lastSelection = this._selection.length === 0 ? undefined : index;\n\n const tiles = this._selectionToTileData(this._selection);\n this.selection.set(tiles.map((tile) => tile.id));\n this.selectionChange.emit(tiles);\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n tiles.length === 1 && this.itemSelect.emit(tiles[0]);\n this.selectedTile.set(tiles);\n }\n\n #isSelectionEqual(newSelection: number[]): boolean {\n if (newSelection.length !== this._selection.length) return false;\n return newSelection.every((value, index) => value === this._selection[index]);\n }\n\n private _selectionToTileData(selection: number[]): TileData[] {\n return selection.map((idx) => this.items()[idx]);\n }\n\n #mapToTileData(objects: DmsObject[]): TileData[] {\n return objects.map((dmsObject) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const sots = dmsObject.sots || [];\n\n if (!dmsObject.objectTypeId) {\n throw new Error(\n // eslint-disable-next-line max-len\n `DmsObject with id '${dmsObject.id}' is missing objectTypeId. Please make sure that your query includes the object type ID field.`\n );\n }\n\n let objectConfig = this.objectConfig![dmsObject.objectTypeId];\n\n // check if result item matches virtual config type\n const cfgTypes = this.options()?.configTypes || [];\n\n cfgTypes.forEach((cft) => {\n const matchesType = !cft.objectType || cft.objectType === dmsObject.objectTypeId;\n const matchesSOTs = !cft.sots?.length || cft.sots.every((sot) => sots.includes(sot));\n\n if (matchesType && matchesSOTs) {\n objectConfig = this.objectConfig![cft.id];\n }\n });\n\n // only apply a flavor if the object has that SOT\n const ownAppliedFlavor =\n this.appliedFlavor && sots.includes(this.appliedFlavor.sot) && this.objectConfig![this.appliedFlavor.sot];\n if (ownAppliedFlavor) {\n objectConfig = this.objectConfig![this.appliedFlavor!.id];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!objectConfig) objectConfig = this.#objectConfigService.getDefaultConfig(dmsObject.objectTypeId);\n\n const tli: TileData = {\n objectTypeId: dmsObject.objectTypeId,\n id: dmsObject.id,\n actions: objectConfig.actions,\n badges: objectConfig.badges,\n instanceData: dmsObject.data,\n dmsObject,\n title: objectConfig.title\n ? this.#getResolvedObjectConfigItem(objectConfig.title.propertyName, dmsObject.data)\n : { propertyName: '', value: '' }\n };\n\n tli.icon = objectConfig.icon\n ? {\n rendererType: 'icon',\n propertyName: 'custom',\n value: objectConfig.icon.svg,\n meta: { isFontIcon: YmtMatIconRegistryService.isFontIcon(objectConfig.icon.svg), objectTypeId: '' }\n }\n : {\n rendererType: 'icon',\n propertyName: BaseObjectTypeField.OBJECT_TYPE_ID,\n value: ownAppliedFlavor && this.appliedFlavor ? this.appliedFlavor.sot : dmsObject.objectTypeId\n };\n if (objectConfig.description)\n tli.description = this.#getResolvedObjectConfigItem(objectConfig.description.propertyName, dmsObject.data);\n if (objectConfig.meta)\n tli.meta = this.#getResolvedObjectConfigItem(objectConfig.meta.propertyName, dmsObject.data);\n if (objectConfig.aside)\n tli.aside = this.#getResolvedObjectConfigItem(objectConfig.aside.propertyName, dmsObject.data);\n\n return tli;\n });\n }\n\n #getResolvedObjectConfigItem(propertyName: string, instanceData: Record<string, unknown>): ResolvedObjectConfigItem {\n const item: ResolvedObjectConfigItem = {\n propertyName: propertyName,\n value: instanceData[propertyName]\n };\n // Meta data are considered properties that start with the property name followed by an underscore.\n // Organization fields for example have an additional property 'xyz_title' that contains the resolved\n // name of a user while the value itself is the users ID.\n const metaData = Object.keys(instanceData)\n .filter((key) => key.startsWith(propertyName + '_'))\n .map((key) => ({ [key.substring(key.indexOf('_') + 1)]: instanceData[key] }));\n\n // If there are meta data properties, they'll be merged into a Record where the\n // key is the property name without the underscore and the actual properties name.\n // So { 'xyz_title': 'John Doe' } will be merged into { title: 'John Doe' }\n if (metaData.length) {\n const meta = metaData.reduce((acc, cur) => ({ ...acc, ...cur }), {});\n item.meta = meta;\n }\n\n return item;\n }\n\n //#endregion\n\n // #region Effect Methods\n\n readonly #flavorEffect = (): void => {\n const flavor = this.flavor();\n if (flavor) this.applyFlavor(flavor);\n };\n\n readonly #preselectEffect = (): void => {\n const preselect = this.#preselect();\n const busy = this.#busy();\n const items = this.items();\n\n if (!busy && preselect.length && items.length) {\n untracked(() => {\n this.#executeSelectById(preselect);\n this.#preselect.set([]);\n });\n }\n };\n\n readonly #closeMenuEffect = (onCleanup: EffectCleanupRegisterFn): void => {\n const menuComponent = this.menuComponent();\n if (!menuComponent) return;\n\n const closeMenu$ = menuComponent.itemSelect.subscribe(() => {\n this.menuTriggers().forEach((trigger) => trigger.closeMenu());\n });\n\n onCleanup(() => closeMenu$.unsubscribe());\n };\n}\n","<yuv-query-list\n #list\n [query]=\"query()\"\n [transformer]=\"transformer\"\n idProperty=\"id\"\n [preventChangeUntil]=\"preventChangeUntil()\"\n [autoSelect]=\"autoSelect()\"\n [pageSize]=\"pageSize()\"\n [multiselect]=\"multiselect()\"\n (itemDoubleClick)=\"onItemDoubleClick($event)\"\n (itemSelect)=\"onListItemsSelect($event)\"\n (queryResult)=\"onQueryResult($event)\"\n (dragSelectChange)=\"onDragSelectChange($event)\"\n>\n <ng-template #yuvQueryListItem let-item let-index=\"index\">\n <yuv-list-tile [class.dense]=\"dense()\" [style]=\"highlightStyles()[item.id]\" (contextmenu)=\"contextMenuHandler($event, index)\">\n <ng-template #iconSlot><ng-container *yuvRenderer=\"item.icon\" /></ng-template>\n <ng-template #titleSlot><ng-container *yuvRenderer=\"item.title\" /></ng-template>\n <ng-template #descriptionSlot><ng-container *yuvRenderer=\"item.description\" /></ng-template>\n <ng-template #metaSlot><ng-container *yuvRenderer=\"item.meta\" /></ng-template>\n <ng-template #asideSlot><ng-container *yuvRenderer=\"item.aside\" /></ng-template>\n <ng-template #actionsSlot>\n @for (a of item.actions; track a.id) {\n <button\n ymt-icon-button\n [matTooltip]=\"a.label\"\n icon-button-size=\"small\"\n [disabled]=\"a.disabled\"\n (click)=\"executeAction(item, a, $event)\"\n >\n <mat-icon inert=\"true\">{{ a.icon }}</mat-icon>\n </button>\n }\n\n @if (menu()) {\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n (click)=\"menuItemClicked(item, $event)\"\n [matTooltip]=\"'yuv.tile-list.item.actions-menu.button.tooltip' | translate\"\n [matMenuTriggerFor]=\"menu()\"\n >\n <mat-icon inert=\"true\">more_vert</mat-icon>\n </button>\n }\n <ng-content select=\"yuv-tile-actions-menu, [yuv-tile-actions-menu]\" />\n </ng-template>\n <ng-template #extensionSlot>\n <ng-container *yuvTileExtension=\"{ typeId: item.objectTypeId, data: item.instanceData }\" />\n </ng-template>\n <ng-template #badgesSlot>{{ item.badges }}</ng-template>\n </yuv-list-tile>\n </ng-template>\n\n <ng-template #yuvQueryListEmpty>\n <div class=\"empty-list\">\n @let searchExe = searchExecuted();\n @if (searchExe && emptyContent()) {\n <ng-content />\n }\n </div>\n </ng-template>\n <div class=\"offset\" (click)=\"clearSelection()\"></div>\n</yuv-query-list>\n","import { NgClass } from '@angular/common';\nimport { Component, Signal, computed, inject, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { VirtualObjectType } from '@yuuvis/client-core';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\n\n@Component({\n selector: 'yuv-tile-action-select',\n standalone: true,\n imports: [NgClass, MatIconModule],\n templateUrl: './action-select.component.html',\n styleUrl: './action-select.component.scss'\n})\nexport class ActionSelectComponent {\n private actionService = inject(ActionsService);\n\n objectType = input.required<VirtualObjectType>();\n actions: Signal<Action[]> = computed<Action[]>(() => {\n const ot = this.objectType();\n return ot.objectType ? this.actionService.getActionsForType(ot.objectType) : [];\n });\n\n selectedActionIds = input<string[]>([]);\n actionSelect = output<Action>();\n}\n","<div class=\"actions\">\n @for (a of actions(); track a.id) {\n <button [ngClass]=\"{ selected: selectedActionIds().includes(a.id) }\" (click)=\"actionSelect.emit(a)\">\n <mat-icon>{{ a.icon }}</mat-icon\n >{{ a.label }}\n </button>\n }\n</div>\n","import { NgClass } from '@angular/common';\nimport { Component, computed, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n BaseObjectTypeField,\n ContentStreamField,\n ObjectConfigProperty,\n ObjectTypeField,\n SecondaryObjectType,\n Sort,\n SystemService,\n Utils,\n VirtualObjectType\n} from '@yuuvis/client-core';\n\ntype TypeProperty = { label: string; baseProperty?: boolean } & Partial<ObjectTypeField>;\n\n@Component({\n selector: 'yuv-tile-property-select',\n standalone: true,\n imports: [NgClass, FormsModule, MatButtonModule, MatIconModule],\n templateUrl: './property-select.component.html',\n styleUrl: './property-select.component.scss'\n})\nexport class PropertySelectComponent {\n private system = inject(SystemService);\n\n // fields that should not be available to be placed in the slots\n readonly #excludeFields: string[] = [\n BaseObjectTypeField.PARENT_ID,\n BaseObjectTypeField.PARENT_OBJECT_TYPE_ID,\n BaseObjectTypeField.OBJECT_ID,\n BaseObjectTypeField.OBJECT_TYPE_ID,\n BaseObjectTypeField.BASE_TYPE_ID,\n BaseObjectTypeField.PARENT_VERSION_NUMBER,\n BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,\n BaseObjectTypeField.TAGS,\n BaseObjectTypeField.TENANT,\n BaseObjectTypeField.TRACE_ID,\n ContentStreamField.REPOSITORY_ID,\n ContentStreamField.DIGEST,\n ContentStreamField.ARCHIVE_PATH,\n ContentStreamField.ID,\n ContentStreamField.RANGE\n ];\n\n objectTypeFields: TypeProperty[] = [];\n\n query = signal<string | null>(null);\n\n objectType = input<VirtualObjectType>();\n filteredObjectTypeFields = computed<TypeProperty[]>(() => {\n return this.query() !== null\n ? this.objectTypeFields.filter(\n (otf) => otf.label.toLowerCase().indexOf(this.query()?.toLocaleLowerCase() || '') !== -1\n )\n : this.getObjectTypeFields(this.objectType());\n });\n\n objectTypesEffect = effect(() => {\n untracked(() => this.getObjectTypeFields(this.objectType()));\n });\n\n selectedProperty = input<ObjectConfigProperty>();\n\n propertySelect = output<TypeProperty | undefined>();\n\n selectProperty(field: TypeProperty) {\n this.propertySelect.emit(field);\n }\n\n selectPropertyOnKeydown(event: Event, field: TypeProperty) {\n event.preventDefault();\n this.selectProperty(field);\n }\n\n removeProperty(event: Event) {\n event.stopPropagation();\n this.propertySelect.emit(undefined);\n }\n\n removePropertyOnKeydown(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n this.removeProperty(event);\n }\n\n private getObjectTypeFields(type?: VirtualObjectType) {\n if (!type) return [];\n const otf: Record<string, TypeProperty> = {};\n if (type.sots && type.sots.length > 0) {\n type.sots.forEach((s: string) => {\n const sot: SecondaryObjectType | undefined = this.system.getSecondaryObjectType(s);\n if (sot)\n sot.fields.forEach(\n (of) =>\n (otf[of.id] = {\n id: of.id,\n label: this._getLabel(of)\n })\n );\n });\n }\n\n let objectTypeProperties: Record<string, TypeProperty> = {};\n if (type.objectType) {\n const ot = this.system.getObjectType(type.objectType);\n if (ot) {\n ot.fields.forEach((of) => {\n objectTypeProperties[of.id] = {\n id: of.id,\n label: this._getLabel(of),\n baseProperty: true\n };\n });\n }\n }\n\n this.objectTypeFields = [...Object.values(objectTypeProperties), ...Object.values(otf)]\n .filter((f) => f.id && !this.#excludeFields.includes(f.id))\n // sort alphanummeric by label\n .sort(Utils.sortValues('label', Sort.ASC))\n // put base properties at the end\n .sort(Utils.sortValues('baseProperty', Sort.ASC));\n return this.objectTypeFields;\n }\n\n private _getLabel(otf: ObjectTypeField): string {\n return this.system.getLocalizedLabel(otf.id) || otf.id;\n }\n}\n","<!-- TODO: enable once filtering of properties makes sense -->\n<!-- <form class=\"filter\">\n <div class=\"filter-input\">\n <input type=\"text\" [placeholder]=\"'yuv.tile-config.property-select.filter.placeholder' | translate\" name=\"query\" [(ngModel)]=\"query\" />\n @if (query()) {\n <button class=\"icn\" (click)=\"query.set(null)\">\n <yuv-icon [svg]=\"clearIcon\"></yuv-icon>\n </button>\n }\n </div>\n</form> -->\n\n<ul class=\"properties\">\n @for (p of filteredObjectTypeFields(); track $index) {\n <li\n tabindex=\"0\"\n [ngClass]=\"{ baseProperty: p.baseProperty, selected: p.id === selectedProperty()?.propertyName }\"\n (click)=\"selectProperty(p)\"\n (keydown.enter)=\"selectPropertyOnKeydown($event, p)\"\n (keydown.space)=\"selectPropertyOnKeydown($event, p)\"\n >\n <div class=\"label\">{{ p.label }}</div>\n <button\n mat-icon-button\n (click)=\"removeProperty($event)\"\n (keydown.enter)=\"removePropertyOnKeydown($event)\"\n (keydown.space)=\"removePropertyOnKeydown($event)\"\n >\n <mat-icon aria-hidden=\"true\" [attr.inert]=\"true\">close</mat-icon>\n </button>\n </li>\n }\n</ul>\n","import { Component, input, output } from '@angular/core';\nimport { TranslatePipe, VirtualObjectType } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-icon-select',\n standalone: true,\n imports: [TranslatePipe],\n templateUrl: './icon-select.component.html',\n styleUrl: './icon-select.component.scss'\n})\nexport class IconSelectComponent {\n objectType = input<VirtualObjectType>();\n iconSelect = output<string | null>();\n\n async createIcon(inputEl: HTMLInputElement) {\n const file: File | undefined = inputEl.files ? inputEl.files[0] : undefined;\n if (file) {\n const text = await file.text();\n this.#emit(text);\n } else this.#emit(null);\n }\n\n reset() {\n this.#emit(null);\n }\n\n #emit(data: string | null) {\n this.iconSelect.emit(data);\n }\n}\n","<input style=\"display: none\" #fileInput type=\"file\" accept=\".svg\" (change)=\"createIcon(fileInput)\" />\n\n<button class=\"primary\" (click)=\"fileInput.click()\">{{ 'yuv.tile-config.icon-select.pick' | translate }}</button>\n<button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.tile-config.icon-select.reset' | translate }}</button>\n","\nimport { Component, ElementRef, computed, inject, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ObjectConfig, ObjectConfigAction, ObjectConfigProperty, SystemService } from '@yuuvis/client-core';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\n\n/**\n * Component for setting up a tile config\n */\n@Component({\n selector: 'yuv-tile-config-tile',\n standalone: true,\n imports: [MatButtonModule, MatTooltipModule, MatIconModule, ObjectTypeIconComponent],\n templateUrl: './tile-config-tile.component.html',\n styleUrl: './tile-config-tile.component.scss'\n})\nexport class TileConfigTileComponent {\n private readonly actionService = inject(ActionsService);\n private readonly elRef = inject(ElementRef);\n #system = inject(SystemService);\n\n disableIconSlot = input<boolean>();\n disableBadgesSlot = input<boolean>();\n\n objectConfig = input.required<ObjectConfig >();\n _objectConfig = computed<ObjectConfig>(() => {\n const oc = this.objectConfig();\n if (oc) {\n [oc.title, oc.description, oc.meta, oc.aside].forEach((field: ObjectConfigProperty | undefined) => {\n if (field) {\n const label = this.#system.getLocalizedLabel(field.propertyName);\n field.label = label || field.label || field.propertyName;\n }\n });\n }\n return oc;\n });\n\n actions = computed<Action[]>(() => {\n const actionsList: Action[] = [];\n const ocActions = this.objectConfig();\n if (ocActions?.actions?.length) {\n ocActions.actions?.forEach((a: ObjectConfigAction) => {\n const aa: Action | undefined = this.actionService.getActionById(a.id);\n if (aa) actionsList.push(aa);\n });\n }\n return actionsList;\n });\n\n slotSelect = output<string>();\n\n selectSlot(slot: string) {\n if (this.disableIconSlot() && slot === 'icon') return;\n this.slotSelect.emit(slot);\n\n // set active state\n (this.elRef.nativeElement as HTMLElement).querySelectorAll('[data-slot]').forEach((e) => {\n if (e.getAttribute('data-slot') === slot) e.classList.add('active');\n else e.classList.remove('active');\n });\n }\n}\n","@let oc = _objectConfig();\n\n<div\n data-slot=\"icon\"\n [attr.disabled]=\"disableIconSlot()\"\n tabindex=\"0\"\n (click)=\"selectSlot('icon')\"\n (keydown.enter)=\"selectSlot('icon')\"\n (keydown.space)=\"selectSlot('icon'); $event.preventDefault()\"\n>\n @if (oc && oc.icon) {\n <mat-icon aria-hidden=\"true\" [attr.inert]=\"true\">{{ oc.icon.svg }}</mat-icon>\n } @else if (oc && oc.objectTypeId) {\n <yuv-object-type-icon [objectTypeId]=\"oc.objectTypeId\"></yuv-object-type-icon>\n }\n</div>\n<div\n data-slot=\"title\"\n tabindex=\"0\"\n (click)=\"selectSlot('title')\"\n (keydown.enter)=\"selectSlot('title')\"\n (keydown.space)=\"selectSlot('title'); $event.preventDefault()\"\n>\n {{ oc?.title?.label }}\n</div>\n<div\n data-slot=\"actions\"\n tabindex=\"0\"\n (click)=\"selectSlot('actions')\"\n (keydown.enter)=\"selectSlot('actions')\"\n (keydown.space)=\"selectSlot('actions'); $event.preventDefault()\"\n>\n @for (a of actions(); track a.id) {\n <button mat-icon-button [matTooltip]=\"a.label\" [attr.inert]=\"true\" aria-hidden=\"true\">\n <mat-icon inert=\"true\" aria-hidden=\"true\">{{ a.icon }}</mat-icon>\n </button>\n }\n</div>\n<div\n data-slot=\"description\"\n tabindex=\"0\"\n (click)=\"selectSlot('description')\"\n (keydown.enter)=\"selectSlot('description')\"\n (keydown.space)=\"selectSlot('description'); $event.preventDefault()\"\n>\n {{ oc?.description?.label }}\n</div>\n<div\n data-slot=\"aside\"\n tabindex=\"0\"\n (click)=\"selectSlot('aside')\"\n (keydown.enter)=\"selectSlot('aside')\"\n (keydown.space)=\"selectSlot('aside'); $event.preventDefault()\"\n>\n {{ oc?.aside?.label }}\n</div>\n<div\n data-slot=\"meta\"\n tabindex=\"0\"\n (click)=\"selectSlot('meta')\"\n (keydown.enter)=\"selectSlot('meta')\"\n (keydown.space)=\"selectSlot('meta'); $event.preventDefault()\"\n>\n {{ oc?.meta?.label }}\n</div>\n@if (!disableBadgesSlot()) {\n <div\n data-slot=\"badges\"\n tabindex=\"0\"\n (click)=\"selectSlot('badges')\"\n (keydown.enter)=\"selectSlot('badges')\"\n (keydown.space)=\"selectSlot('badges'); $event.preventDefault()\"\n >\n {{ oc?.badges }}\n </div>\n}\n","import { Component, computed, effect, inject, input, output, Signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n GenericObjectType,\n ObjectConfig,\n ObjectConfigAction,\n ObjectConfigBadge,\n ObjectConfigIcon,\n ObjectConfigProperty,\n ObjectConfigService,\n ObjectTypeField,\n SystemService,\n TranslatePipe,\n VirtualObjectType\n} from '@yuuvis/client-core';\nimport { Action } from '@yuuvis/client-framework/actions';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { YuvListModule } from '@yuuvis/client-framework/list';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { ActionSelectComponent } from './action-select/action-select.component';\nimport { IconSelectComponent } from './icon-select/icon-select.component';\nimport { PropertySelectComponent } from './property-select/property-select.component';\nimport { TileConfigTileComponent } from './tile-config-tile/tile-config-tile.component';\n\ninterface InnerType {\n id: string;\n icon?: string;\n flavor?: boolean;\n data: ObjectFlavor | VirtualObjectType;\n}\n\n@Component({\n selector: 'yuv-tile-config',\n standalone: true,\n imports: [\n FormsModule,\n TileConfigTileComponent,\n IconSelectComponent,\n PropertySelectComponent,\n ActionSelectComponent,\n TranslatePipe,\n YuvListModule,\n MatIconModule,\n MatDialogModule,\n MatSelectModule,\n MatButtonModule,\n DialogComponent,\n MatFormFieldModule,\n YmtButtonDirective\n ],\n templateUrl: './tile-config.component.html',\n styleUrls: ['./tile-config.component.scss']\n})\nexport class TileConfigComponent {\n #objectConfigService = inject(ObjectConfigService);\n #system = inject(SystemService);\n\n /**\n * Tile configurations are stored globally for all apps. If you want a\n * separate config for your app/component you can specify a bucket. A bucket\n * is basically an ID where your custom tile config will be stored and\n * retrieved. Buckets should be unique so be sure to use a unique namespace.\n */\n bucket = input<string | undefined>(undefined);\n bucketLabel = input<string | undefined>(undefined);\n\n configTypes = input<VirtualObjectType[] | undefined>(undefined);\n configFlavors = input<ObjectFlavor[]>([]);\n get configChanged(): boolean {\n return Object.keys(this.changes).length > 0;\n }\n\n types: Signal<InnerType[]> = computed(() => {\n const ct = this.configTypes() || [];\n const cf: VirtualObjectType[] = [];\n // TODO: enable when flavors are supported in tile config\n // const cf = this.configFlavors() || [];\n return [\n ...ct.map((t) => ({ id: t.id, icon: t.icon, data: t })),\n ...cf.map((f) => ({ id: f.id, icon: f.icon, flavor: true, data: f }))\n ];\n });\n #typesEffect = effect(() => {\n const t = this.types();\n if (t.length && !this.selectedType) {\n this.typeSelected(t[0]);\n }\n });\n\n save = output();\n canceled = output();\n\n selectedType?: VirtualObjectType;\n selectedTypeProperties: ObjectTypeField[] = [];\n\n #emptyObjectConfig: ObjectConfig = {\n objectTypeId: '',\n title: { propertyName: '', label: '' },\n description: { propertyName: '', label: '' },\n meta: { propertyName: '', label: '' },\n aside: { propertyName: '', label: '' },\n actions: [],\n badges: []\n };\n\n objectConfig?: ObjectConfig;\n selectedSlot?: string;\n flavors: ObjectFlavor[] = [];\n\n changes: Record<string, ObjectConfig | undefined> = {};\n\n getConfigValue(\n p: string\n ): ObjectConfigIcon | ObjectConfigProperty | ObjectConfigAction | ObjectConfigBadge | undefined {\n return this.objectConfig ? (this.objectConfig as any)[p] : undefined;\n }\n\n getConfigProperty(p: string): ObjectConfigProperty | undefined {\n return this.getConfigValue(p) as ObjectConfigProperty;\n }\n\n getSelectedActions(): string[] {\n return this.objectConfig?.actions ? this.objectConfig.actions.map((a) => a.id) : [];\n }\n\n slotSelect(item: string) {\n this.selectedSlot = item;\n }\n\n typeSelected(type: InnerType) {\n const t = this.types().find((ty) => ty.id === type.id);\n if (!t) return;\n if (t.flavor) this.#selectFlavor(t.data as ObjectFlavor);\n else this.#selectType(t.data as VirtualObjectType);\n }\n\n #selectFlavor(flavor: ObjectFlavor) {\n const t: GenericObjectType | undefined = this.#system.getObjectType(flavor.sot);\n if (t)\n this.#selectType({\n id: flavor.id,\n objectType: flavor.objectTypeID,\n sots: [flavor.sot]\n });\n }\n\n async #selectType(t: VirtualObjectType) {\n this.selectedType = t;\n\n const alreadyChanged = this.changes[t.id];\n // load tile config\n // if the type has been changed before load that config instead of the persisted one\n this.objectConfig = { ...(alreadyChanged || this.#objectConfigService.getObjectConfig(t, this.bucket() || '')) };\n\n if (!this.objectConfig) {\n this.objectConfig = {\n ...this.#emptyObjectConfig,\n objectTypeId: t.id\n };\n }\n }\n\n iconSelected(icon: string | null) {\n if (!this.selectedType) return;\n if (this.objectConfig) {\n this.objectConfig.icon = icon ? { svg: icon } : undefined;\n this.changes[this.selectedType.id] = this.objectConfig;\n }\n }\n\n propertySelected(tileSlot: string, field?: Partial<ObjectTypeField>) {\n if (!this.selectedType) return;\n const p: any = {};\n p[tileSlot] = field\n ? {\n label: field.label,\n propertyName: field.id\n }\n : null;\n\n this.objectConfig = structuredClone({\n ...this.objectConfig,\n ...p\n });\n this.changes[this.selectedType.id] = this.objectConfig;\n }\n\n actionSelected(action: Action) {\n if (!this.selectedType) return;\n if (this.objectConfig) {\n const actions = this.objectConfig?.actions ? [...this.objectConfig.actions] : [];\n const idx = actions.findIndex((a) => a.id === action.id);\n if (idx !== -1) actions.splice(idx, 1);\n else actions.push({ id: action.id });\n this.objectConfig = { ...this.objectConfig, actions };\n this.changes[this.selectedType.id] = { ...this.objectConfig };\n }\n }\n\n saveConfig() {\n if (Object.keys(this.changes).length) {\n this.#objectConfigService.saveObjectConfigs(this.changes, this.bucket()).subscribe((_) => this.save.emit());\n }\n }\n\n resetConfig() {\n if (this.selectedType) {\n const defaults =\n this.#objectConfigService.getRegisteredDefault(this.selectedType.id, this.bucket()) || this.#emptyObjectConfig;\n this.changes[this.selectedType.id] = { ...defaults };\n this.objectConfig = { ...defaults };\n const originalConfig = this.#objectConfigService.getObjectConfig(this.selectedType, this.bucket());\n if (this.#deepEqual(defaults, originalConfig)) {\n this.changes[this.selectedType.id] = undefined;\n delete this.changes[this.selectedType.id];\n } else {\n this.changes[this.selectedType.id] = { ...defaults };\n }\n }\n }\n\n cancelConfig() {\n this.changes = {};\n this.canceled.emit();\n }\n\n #deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!this.#deepEqual((a as any)[key], (b as any)[key])) return false;\n }\n return true;\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <section class=\"picker\">\n <mat-form-field>\n <mat-select [panelWidth]=\"null\" [(ngModel)]=\"selectedType\" (ngModelChange)=\"typeSelected($event)\">\n @for (t of types() || []; track t.id; let i = $index) {\n <mat-option [value]=\"t.data\">{{ t.id | translate }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (selectedType) {\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n }\n </section>\n\n <section class=\"details\">\n @if (selectedType) {\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [disableBadgesSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n (slotSelect)=\"slotSelect($event)\"\n ></yuv-tile-config-tile>\n </div>\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\"></yuv-icon-select>\n } @else if (selectedSlot === 'badges') {\n <div class=\"placeholder empty\">\n <p>Future feature: Select badges (like: is favorite, ratings, ...)</p>\n </div>\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n ></yuv-tile-action-select>\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n ></yuv-tile-property-select>\n }\n </main>\n } @else {\n <div class=\"placeholder empty\"></div>\n }\n </section>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged\" (click)=\"saveConfig()\">{{ 'yuv.tile-config.button.save' | translate }}</button>\n </footer>\n</yuv-dialog>\n","import { Component, TemplateRef, inject, input, viewChild } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { TileListConfigOptions } from '../../tile-list/tile-list.interface';\nimport { TileConfigComponent } from '../tile-config.component';\n\n@Component({\n selector: 'yuv-tile-config-trigger',\n standalone: true,\n imports: [TileConfigComponent, TranslatePipe, YmtIconButtonDirective, MatButtonModule, MatTooltipModule, MatIcon],\n templateUrl: './tile-config-trigger.component.html',\n styleUrl: './tile-config-trigger.component.scss'\n})\nexport class TileConfigTriggerComponent {\n #dialog = inject(MatDialog);\n\n tplTileConfig = viewChild.required<TemplateRef<any>>('tplTileConfig');\n\n #dialogRef?: MatDialogRef<any>;\n\n icon = input<string>('settings');\n bucket = input<string>();\n bucketLabel = input<string | undefined>();\n options = input<TileListConfigOptions | undefined>(undefined);\n // If true, renders a smaller icon button\n small = input<boolean>(false);\n\n openTileConfigOverlay() {\n const popoverConfig: MatDialogConfig = {\n height: '80vh',\n width: '80vw',\n maxWidth: '80vw'\n };\n this.#dialogRef = this.#dialog.open(this.tplTileConfig(), popoverConfig);\n }\n\n onObjectConfigSave() {\n if (this.#dialogRef) this.#dialogRef.close();\n }\n\n onObjectConfigCancel() {\n if (this.#dialogRef) this.#dialogRef.close();\n }\n}\n","<button ymt-icon-button [icon-button-size]=\"small() ? 'small' : 'medium'\" class=\"settings icon\" (click)=\"openTileConfigOverlay()\" [matTooltip]=\"'yuv.tile-config.trigger.tooltip' | translate\">\n <mat-icon>settings</mat-icon>\n</button>\n\n<ng-template #tplTileConfig>\n <yuv-tile-config\n (save)=\"onObjectConfigSave()\"\n (canceled)=\"onObjectConfigCancel()\"\n [bucket]=\"bucket() || undefined\"\n [bucketLabel]=\"bucketLabel()\"\n [configTypes]=\"options()?.configTypes\"\n [configFlavors]=\"options()?.configFlavors || []\"\n ></yuv-tile-config>\n</ng-template>\n","import { Component, computed, input } from '@angular/core';\nimport { TileExtensionComponent } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-email-tile-extension',\n standalone: true,\n imports: [],\n template: `\n @if (hasAttachements()) {\n <span>{{ attachments().length }}</span>\n <svg class=\"icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#5f6368\" viewBox=\"0 -960 960 960\">\n <path\n d=\"M720-330q0 104-73 177T470-80q-104 0-177-73t-73-177v-370q0-75 52.5-127.5T400-880q75 0 127.5 52.5T580-700v350q0 46-32 78t-78 32q-46 0-78-32t-32-78v-370h80v370q0 13 8.5 21.5T470-320q13 0 21.5-8.5T500-350v-350q-1-42-29.5-71T400-800q-42 0-71 29t-29 71v370q-1 71 49 120.5T470-160q70 0 119-49.5T640-330v-390h80v390Z\"\n />\n </svg>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n justify-content: end;\n margin-top: 0.5rem;\n\n .icon {\n height: 1rem;\n }\n }\n `\n ],\n host: {\n '[class.attachments]': 'hasAttachements()'\n }\n})\nexport class EmailTileExtensionComponent implements TileExtensionComponent {\n data = input.required<any>();\n attachments = computed(() => this.data()['appSystemmail:attachments'] || []);\n hasAttachements = computed(() => !!this.data()['appSystemmail:attachmentCount']);\n\n onClick(a: string, evt: Event) {\n evt.preventDefault();\n evt.stopPropagation();\n\n alert(`You clicked '${a}' my friend.`);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","TranslatePipe"],"mappings":"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"}
|
package/lib/assets/i18n/de.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"yuv.session.expires.message": "Sitzung läuft in einer Minute ab",
|
|
2
|
+
"yuv.session.expires.message": "Ihre Sitzung läuft in einer Minute ab.",
|
|
3
3
|
"yuv.session.extend.action": "Sitzung verlängern",
|
|
4
4
|
"yuv.action-menu.action.copy.dms.object.description": "",
|
|
5
5
|
"yuv.action-menu.action.copy.dms.object.label": "Kopieren",
|
|
6
6
|
"yuv.action-menu.action.cut.dms.object.description": "",
|
|
7
7
|
"yuv.action-menu.action.cut.dms.object.label": "Ausschneiden",
|
|
8
8
|
"yuv.action-menu.action.delete.dms.object.confirm.cancel": "Abbrechen",
|
|
9
|
-
"yuv.action-menu.action.delete.dms.object.confirm.message": "Möchten Sie die ausgewählen Objekte wirklich löschen?",
|
|
9
|
+
"yuv.action-menu.action.delete.dms.object.confirm.message": "Möchten Sie die ausgewählen Objekte wirklich löschen? Dieser Vorgang kann nicht rückgängig gemacht werden.",
|
|
10
10
|
"yuv.action-menu.action.delete.dms.object.confirm.ok": "Löschen",
|
|
11
11
|
"yuv.action-menu.action.delete.dms.object.description": "Löscht das Objekt.",
|
|
12
12
|
"yuv.action-menu.action.delete.dms.object.label": "Löschen",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"yuv.action-menu.action.delete.error.default": "Das Objekt konnte nicht gelöscht werden.",
|
|
16
16
|
"yuv.action-menu.action.download.dms.object.content.description": "Lädt die Dokumentdatei des Objekts herunter.",
|
|
17
17
|
"yuv.action-menu.action.download.dms.object.content.label": "Dokumentdatei herunterladen",
|
|
18
|
-
"yuv.framework.breadcrumb.nav-label": "
|
|
18
|
+
"yuv.framework.breadcrumb.nav-label": "Breadcrumb-Navigation",
|
|
19
19
|
"yuv.clipboard.button.cancel": "Abbrechen",
|
|
20
20
|
"yuv.clipboard.button.paste": "Einfügen",
|
|
21
21
|
"yuv.clipboard.text.copy.multiple": "{{count}} Elemente kopiert",
|
|
@@ -101,33 +101,33 @@
|
|
|
101
101
|
"yuv.object-flavor.picker.button.cancel": "Abbrechen",
|
|
102
102
|
"yuv.object-flavor.picker.text": "Typen sind Erweiterungen für Dateien, die zusätzliche Informationen zu deren Inhalt/Bedeutung bereitstellen.",
|
|
103
103
|
"yuv.object-flavor.picker.title": "Typ hinzufügen",
|
|
104
|
-
"yuv.shell.action.manage-flavors.applicable.button.remove.tooltip": "",
|
|
105
|
-
"yuv.shell.action.manage-flavors.button.remove": "",
|
|
104
|
+
"yuv.shell.action.manage-flavors.applicable.button.remove.tooltip": "Typ entfernen",
|
|
105
|
+
"yuv.shell.action.manage-flavors.button.remove": "Entfernen",
|
|
106
106
|
"yuv.object-preview.tiff-warning": "Dieses Dokument ist nicht die Original-TIFF-Datei, sondern nur eine Repräsentation. TIFF-Dateien werden nicht für die Vorschau unterstützt. Bitte laden Sie das Dokument herunter, um das Original anzuzeigen.",
|
|
107
|
-
"yuv.object-relationship.action.add-link.search.relation.label": "
|
|
107
|
+
"yuv.object-relationship.action.add-link.search.relation.label": "Verknüpfungstyp",
|
|
108
108
|
"yuv.object-relationship.action.add-relationship.description": "",
|
|
109
|
-
"yuv.object-relationship.action.add-relationship.label": "
|
|
110
|
-
"yuv.object-relationship.add-relation.error-message": "Fehler beim Hinzufügen
|
|
109
|
+
"yuv.object-relationship.action.add-relationship.label": "Verknüpfung hinzufügen",
|
|
110
|
+
"yuv.object-relationship.add-relation.error-message": "Fehler beim Hinzufügen der Verknüpfung.",
|
|
111
111
|
"yuv.object-relationship.add-relationship.action.cancel": "Abbrechen",
|
|
112
|
-
"yuv.object-relationship.add-relationship.action.submit": "
|
|
113
|
-
"yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination": "Der ausgewählte
|
|
114
|
-
"yuv.object-relationship.add-relationship.headline": "
|
|
112
|
+
"yuv.object-relationship.add-relationship.action.submit": "Verknüpfung hinzufügen",
|
|
113
|
+
"yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination": "Der ausgewählte Verknüpfungstyp ist für dieses Zielobjekt nicht gültig.",
|
|
114
|
+
"yuv.object-relationship.add-relationship.headline": "Neue Verknüpfung hinzufügen",
|
|
115
115
|
"yuv.object-relationship.add-relationship.target-search.clear": "Auswahl entfernen",
|
|
116
116
|
"yuv.object-relationship.add-relationship.target-search.label": "Zielobjekt",
|
|
117
|
-
"yuv.object-relationship.add-relationship.target-type.filter.label": "Ziel
|
|
118
|
-
"yuv.object-relationship.add.tooltip": "
|
|
119
|
-
"yuv.object-relationship.delete-relation.confirm-message": "Sind Sie sicher, dass Sie
|
|
120
|
-
"yuv.object-relationship.delete-relation.error-message": "Fehler beim Löschen
|
|
121
|
-
"yuv.object-relationship.delete-relation.tooltip": "
|
|
117
|
+
"yuv.object-relationship.add-relationship.target-type.filter.label": "Ziel-Objekttyp",
|
|
118
|
+
"yuv.object-relationship.add.tooltip": "Neue Verknüpfung hinzufügen",
|
|
119
|
+
"yuv.object-relationship.delete-relation.confirm-message": "Sind Sie sicher, dass Sie die ausgewählte Verknüpfung löschen möchten?",
|
|
120
|
+
"yuv.object-relationship.delete-relation.error-message": "Fehler beim Löschen der ausgewählten Verknüpfung.",
|
|
121
|
+
"yuv.object-relationship.delete-relation.tooltip": "Ausgewählte Verknüpfung löschen",
|
|
122
122
|
"yuv.object-relationship.download.tooltip": "Als Bild herunterladen",
|
|
123
|
-
"yuv.object-relationship.list.incoming": "Eingehende
|
|
124
|
-
"yuv.object-relationship.list.outgoing": "Ausgehende
|
|
125
|
-
"yuv.object-relationship.mode.graph.tooltip": "
|
|
123
|
+
"yuv.object-relationship.list.incoming": "Eingehende Verknüpfungen",
|
|
124
|
+
"yuv.object-relationship.list.outgoing": "Ausgehende Verknüpfungen",
|
|
125
|
+
"yuv.object-relationship.mode.graph.tooltip": "Grafische Ansicht",
|
|
126
126
|
"yuv.object-relationship.mode.list.tooltip": "Listenansicht",
|
|
127
|
-
"yuv.object-relationship.no-relations": "Keine
|
|
127
|
+
"yuv.object-relationship.no-relations": "Keine Verknüpfungen gefunden.",
|
|
128
128
|
"yuv.object-relationship.node-summary.open-object.button": "Öffnen",
|
|
129
|
-
"yuv.object-relationship.selected.add-relationship.tooltip": "
|
|
130
|
-
"yuv.object-relationship.selected.expand.tooltip": "
|
|
129
|
+
"yuv.object-relationship.selected.add-relationship.tooltip": "Neue Verknüpfung hinzufügen",
|
|
130
|
+
"yuv.object-relationship.selected.expand.tooltip": "Ausgewählte Verknüpfung erweitern",
|
|
131
131
|
"yuv.object-summary-data.base.headline": "Basismetadaten",
|
|
132
132
|
"yuv.object-summary.load.error": "Fehler beim Laden der Zusammenfassung",
|
|
133
133
|
"yuv.object-versions.actions.download": "Version herunterladen",
|
package/lib/assets/i18n/en.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"yuv.session.expires.message": "
|
|
2
|
+
"yuv.session.expires.message": "Your session will expire in one minute.",
|
|
3
3
|
"yuv.session.extend.action": "Extend session",
|
|
4
4
|
"yuv.action-menu.action.copy.dms.object.description": "",
|
|
5
5
|
"yuv.action-menu.action.copy.dms.object.label": "Copy",
|
|
6
6
|
"yuv.action-menu.action.cut.dms.object.description": "",
|
|
7
7
|
"yuv.action-menu.action.cut.dms.object.label": "Cut",
|
|
8
8
|
"yuv.action-menu.action.delete.dms.object.confirm.cancel": "Cancel",
|
|
9
|
-
"yuv.action-menu.action.delete.dms.object.confirm.message": "
|
|
9
|
+
"yuv.action-menu.action.delete.dms.object.confirm.message": "Do you really want to delete the selected objects? This action cannot be undone.",
|
|
10
10
|
"yuv.action-menu.action.delete.dms.object.confirm.ok": "Delete",
|
|
11
11
|
"yuv.action-menu.action.delete.dms.object.description": "Deletes the object.",
|
|
12
12
|
"yuv.action-menu.action.delete.dms.object.label": "Delete",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"yuv.action-menu.action.delete.error.default": "Unable to delete the object.",
|
|
16
16
|
"yuv.action-menu.action.download.dms.object.content.description": "Downloads the document file of the object.",
|
|
17
17
|
"yuv.action-menu.action.download.dms.object.content.label": "Download document file",
|
|
18
|
-
"yuv.framework.breadcrumb.nav-label": "Breadcrumb",
|
|
18
|
+
"yuv.framework.breadcrumb.nav-label": "Breadcrumb navigation",
|
|
19
19
|
"yuv.clipboard.button.cancel": "Cancel",
|
|
20
20
|
"yuv.clipboard.button.paste": "Paste",
|
|
21
21
|
"yuv.clipboard.text.copy.multiple": "{{count}} elements copied",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"yuv.form.element.data.grid.edit": "Edit",
|
|
29
29
|
"yuv.form.element.data.grid.edit.add": "Add",
|
|
30
30
|
"yuv.form.element.data.grid.edit.cancel": "Cancel",
|
|
31
|
-
"yuv.form.element.data.grid.edit.headline": "Edit row '{{headline}}'",
|
|
31
|
+
"yuv.form.element.data.grid.edit.headline": "Edit row in '{{headline}}'",
|
|
32
32
|
"yuv.form.element.data.grid.noData": "No data available",
|
|
33
33
|
"yuv.form.element.data.grid.remove": "Remove",
|
|
34
34
|
"yuv.form.element.data.grid.row.button.actions.tooltip": "Open actions menu",
|
|
@@ -96,13 +96,13 @@
|
|
|
96
96
|
"yuv.object-flavor.apply-flavor.headline": "Add type '{{name}}'",
|
|
97
97
|
"yuv.object-flavor.button.add": "Add type",
|
|
98
98
|
"yuv.object-flavor.button.clear-selection": "Unselect",
|
|
99
|
-
"yuv.object-flavor.flavor.remove.confirm.message": "
|
|
99
|
+
"yuv.object-flavor.flavor.remove.confirm.message": "Do you really want to remove the type '{{flavor}}'?",
|
|
100
100
|
"yuv.object-flavor.label": "Types",
|
|
101
101
|
"yuv.object-flavor.picker.button.cancel": "Cancel",
|
|
102
102
|
"yuv.object-flavor.picker.text": "Types are extensions for files that provide additional information about their content/meaning.",
|
|
103
103
|
"yuv.object-flavor.picker.title": "Add type",
|
|
104
|
-
"yuv.shell.action.manage-flavors.applicable.button.remove.tooltip": "",
|
|
105
|
-
"yuv.shell.action.manage-flavors.button.remove": "",
|
|
104
|
+
"yuv.shell.action.manage-flavors.applicable.button.remove.tooltip": "Remove type",
|
|
105
|
+
"yuv.shell.action.manage-flavors.button.remove": "Remove",
|
|
106
106
|
"yuv.object-preview.tiff-warning": "This document is not the original *.tiff file, but only a representation. The preview does not support *.tiff files. Please download the document to view the original.",
|
|
107
107
|
"yuv.object-relationship.action.add-link.search.relation.label": "Link type",
|
|
108
108
|
"yuv.object-relationship.action.add-relationship.description": "",
|
|
@@ -112,27 +112,27 @@
|
|
|
112
112
|
"yuv.object-relationship.add-relationship.action.submit": "Add link",
|
|
113
113
|
"yuv.object-relationship.add-relationship.error.invalidRelationTargetCombination": "The selected link type is not valid for this target object.",
|
|
114
114
|
"yuv.object-relationship.add-relationship.headline": "Add new link",
|
|
115
|
-
"yuv.object-relationship.add-relationship.target-search.clear": "
|
|
115
|
+
"yuv.object-relationship.add-relationship.target-search.clear": "Remove selection",
|
|
116
116
|
"yuv.object-relationship.add-relationship.target-search.label": "Target object",
|
|
117
117
|
"yuv.object-relationship.add-relationship.target-type.filter.label": "Target object type",
|
|
118
118
|
"yuv.object-relationship.add.tooltip": "Add new link",
|
|
119
|
-
"yuv.object-relationship.delete-relation.confirm-message": "
|
|
119
|
+
"yuv.object-relationship.delete-relation.confirm-message": "Do you really want to delete the selected link?",
|
|
120
120
|
"yuv.object-relationship.delete-relation.error-message": "Error while deleting the selected link.",
|
|
121
121
|
"yuv.object-relationship.delete-relation.tooltip": "Delete selected link",
|
|
122
122
|
"yuv.object-relationship.download.tooltip": "Download as image",
|
|
123
123
|
"yuv.object-relationship.list.incoming": "Incoming links",
|
|
124
124
|
"yuv.object-relationship.list.outgoing": "Outgoing links",
|
|
125
|
-
"yuv.object-relationship.mode.graph.tooltip": "
|
|
125
|
+
"yuv.object-relationship.mode.graph.tooltip": "Graphical view",
|
|
126
126
|
"yuv.object-relationship.mode.list.tooltip": "List view",
|
|
127
127
|
"yuv.object-relationship.no-relations": "No links found.",
|
|
128
128
|
"yuv.object-relationship.node-summary.open-object.button": "Open",
|
|
129
129
|
"yuv.object-relationship.selected.add-relationship.tooltip": "Add new link",
|
|
130
130
|
"yuv.object-relationship.selected.expand.tooltip": "Expand selected link",
|
|
131
131
|
"yuv.object-summary-data.base.headline": "Basic metadata",
|
|
132
|
-
"yuv.object-summary.load.error": "Error while loading the summary
|
|
132
|
+
"yuv.object-summary.load.error": "Error while loading the summary",
|
|
133
133
|
"yuv.object-versions.actions.download": "Download version",
|
|
134
134
|
"yuv.object-versions.actions.restore": "Restore version",
|
|
135
|
-
"yuv.object-versions.actions.restore.confirm.message": "
|
|
135
|
+
"yuv.object-versions.actions.restore.confirm.message": "Do you really want to restore version {{version}}?",
|
|
136
136
|
"yuv.object-versions.error.fetch-versions": "Unable to load versions",
|
|
137
137
|
"yuv.object-versions.list.version": "Version {{version}}",
|
|
138
138
|
"yuv.object-versions.tabs.content.title": "Content",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,17 +8,17 @@
|
|
|
8
8
|
"@angular/common": "^21.2.9",
|
|
9
9
|
"@angular/core": "^21.2.9",
|
|
10
10
|
"angular-gridster2": "^21.0.1",
|
|
11
|
-
"@yuuvis/client-core": "^3.0.
|
|
12
|
-
"@yuuvis/client-shell-core": "^3.0.
|
|
13
|
-
"@yuuvis/client-components": "^3.0.
|
|
11
|
+
"@yuuvis/client-core": "^3.0.1",
|
|
12
|
+
"@yuuvis/client-shell-core": "^3.0.1",
|
|
13
|
+
"@yuuvis/client-components": "^3.0.1",
|
|
14
14
|
"ng-dynamic-component": "^10.8.2",
|
|
15
15
|
"modern-normalize": "^3.0.1"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@angular/material": "^21.2.7",
|
|
19
19
|
"@ngrx/signals": "^21.1.0",
|
|
20
|
-
"@yuuvis/material": "3.0.
|
|
21
|
-
"@yuuvis/media-viewer": "^3.0.
|
|
20
|
+
"@yuuvis/material": "3.0.1",
|
|
21
|
+
"@yuuvis/media-viewer": "^3.0.1",
|
|
22
22
|
"angular-split": "^20.0.0",
|
|
23
23
|
"vis-network": "^10.0.2",
|
|
24
24
|
"tslib": "^2.3.0"
|