{"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  EventService,\n  ObjectConfigAction,\n  ObjectConfigRecord,\n  ObjectConfigService,\n  ResolvedObjectConfigItem,\n  SearchQuery,\n  SearchResultItem,\n  TranslatePipe,\n  YuvEvent,\n  YuvEventType\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 { TileBadgesComponent } from '@yuuvis/client-framework/badges';\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    TileBadgesComponent,\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  #eventService = inject(EventService);\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   * When omitted, the inner `QueryListComponent` falls back to `(query as SearchQuery).size`\n   * if set, otherwise to `SearchService.DEFAULT_QUERY_SIZE` — keeping the paginator and\n   * the server in sync without requiring the consumer to set this input explicitly.\n   */\n  pageSize = input<number | undefined>(undefined);\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.#busyEmitEffect);\n    effect(this.#preselectEffect);\n    effect(this.#closeMenuEffect);\n    effect(this.#outsideClickCloseEffect);\n\n    // Auto-remove drop-in tiles whose backing DmsObject was just deleted upstream.\n    // Without this, the framework reconstructs drop-ins in onQueryResult by slicing\n    // the leading dropInSize() items from the `items` signal, so a deleted tile\n    // would survive every subsequent refresh as a stale leader. Listening here\n    // keeps the behavior transparent to consumers — any caller that deletes via\n    // DmsService gets correct rendering with no additional wiring.\n    this.#eventService\n      .on<YuvEventType.DMS_OBJECT_DELETED, { id?: string }>(YuvEventType.DMS_OBJECT_DELETED)\n      .pipe(takeUntilDestroyed())\n      .subscribe((evt: YuvEvent<{ id?: string }>) => {\n        const id = evt.data?.id;\n        if (id) this.removeDropItems([id]);\n      });\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  badgeIdsFor(item: TileData): string[] | undefined {\n    return item.badges?.map((badge) => badge.id);\n  }\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   * Surgically removes tiles matching the given IDs from the rendered list.\n   *\n   * Use this when an upstream deletion (e.g. `DmsService.deleteDmsObject`) removes\n   * an object that is currently rendered. Without this call, drop-in tiles would\n   * remain visible after `refresh()` because `onQueryResult` reconstructs them by\n   * slicing the leading `dropInSize()` items from the `items` signal — the deleted\n   * tile would survive as a stale leader.\n   *\n   * The method is also invoked automatically by an internal `DMS_OBJECT_DELETED`\n   * subscription, so consumers that delete via `DmsService` get correct behavior\n   * without any extra wiring. Calling it directly is only needed for deletions\n   * that do not flow through the standard event service.\n   *\n   * Internally:\n   * 1. Locates positions of matching tiles in the `items` signal.\n   * 2. Removes them from `items` (the parent-visible view model).\n   * 3. Filters `_selection` to drop indices on removed tiles, then shifts the\n   *    remaining indices back by the count of removed positions that preceded\n   *    each surviving entry so selection stays attached to the same logical items.\n   * 4. Clears `_lastSelection` if it pointed to a removed tile, else shifts it.\n   * 5. Delegates to `QueryListComponent.removeDropItems` to filter the inner\n   *    drop-in set so `resultItems` recomputes with the correct leading slice.\n   *\n   * @param ids Object IDs to remove.\n   */\n  removeDropItems(ids: string[]): void {\n    if (ids.length === 0) return;\n    const removeSet = new Set<string>(ids);\n    const currentItems = this.items();\n    const removedPositions: number[] = [];\n    currentItems.forEach((item, idx) => {\n      if (removeSet.has(item.id)) removedPositions.push(idx);\n    });\n    if (removedPositions.length === 0) return;\n\n    const removedSet = new Set<number>(removedPositions);\n    this.items.set(currentItems.filter((_, idx) => !removedSet.has(idx)));\n\n    if (this._selection.length > 0) {\n      this._selection = this._selection\n        .filter((idx) => !removedSet.has(idx))\n        .map((idx) => idx - removedPositions.filter((r) => r < idx).length);\n    }\n    if (this._lastSelection !== undefined) {\n      if (removedSet.has(this._lastSelection)) {\n        this._lastSelection = this._selection.length ? this._selection[this._selection.length - 1] : undefined;\n      } else {\n        this._lastSelection -= removedPositions.filter((r) => r < this._lastSelection!).length;\n      }\n    }\n    const selectedTiles = this._selectionToTileData(this._selection);\n    this.selection.set(selectedTiles.map((tile) => tile.id));\n    this.selectedTile.set(selectedTiles);\n\n    this.list().removeDropItems(ids);\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((update) => update.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  /** Bridges the inner query-list busy signal to the `busy` output. */\n  readonly #busyEmitEffect = (): void => {\n    this.busy.emit(this.#busy());\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  readonly #outsideClickCloseEffect = (onCleanup: EffectCleanupRegisterFn): void => {\n    if (!this.menuComponent()) return;\n\n    const handler = (event: Event): void => {\n      const openTriggers = this.menuTriggers().filter((trigger) => trigger.menuOpen);\n      if (openTriggers.length === 0) return;\n      const target = event.target as Element | null;\n      if (!target) return;\n      if (target.closest('.mat-mdc-menu-panel')) return;\n      if (target.closest('[aria-expanded=\"true\"][aria-haspopup=\"menu\"]')) return;\n      openTriggers.forEach((trigger) => trigger.closeMenu());\n    };\n    document.addEventListener('click', handler, true);\n    onCleanup(() => document.removeEventListener('click', handler, true));\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>\n        <yuv-tile-badges [dmsObject]=\"item.dmsObject\" [badgeIds]=\"badgeIdsFor(item)\" [bucket]=\"bucket()\" />\n      </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 { TranslatePipe, VirtualObjectType } from '@yuuvis/client-core';\nimport { Action, ActionsService } from '@yuuvis/client-framework/actions';\n\n@Component({\n  selector: 'yuv-tile-action-select',\n  imports: [NgClass, MatIconModule, TranslatePipe],\n  templateUrl: './action-select.component.html',\n  styleUrl: './action-select.component.scss'\n})\nexport class ActionSelectComponent {\n  readonly #actionService = inject(ActionsService);\n\n  objectType = input.required<VirtualObjectType>();\n  selectedActionIds = input<string[]>([]);\n  actionSelect = output<Action>();\n\n  actions: Signal<Action[]> = computed<Action[]>(() => {\n    const oType = this.objectType();\n    return oType.objectType ? this.#actionService.getActionsForType(oType.objectType) : [];\n  });\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  } @empty {\n    <span class=\"empty\">{{ 'yuv.action.empty.selection' | translate }}</span>\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","import { ChangeDetectionStrategy, 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 { Badge, BadgeChipComponent, BadgeRegistryService } from '@yuuvis/client-framework/badges';\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, BadgeChipComponent],\n  templateUrl: './tile-config-tile.component.html',\n  styleUrls: ['./tile-config-tile.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TileConfigTileComponent {\n  readonly #actionService = inject(ActionsService);\n  readonly #elRef = inject(ElementRef);\n  readonly #system = inject(SystemService);\n  readonly #badges = inject(BadgeRegistryService);\n\n  disableIconSlot = input<boolean>(false);\n  disableBadgesSlot = input<boolean>(false);\n  bucket = input<string | undefined>();\n\n  objectConfig = input.required<ObjectConfig>();\n  _objectConfig = computed<ObjectConfig>(() => {\n    const objectConfig = this.objectConfig();\n    [objectConfig.title, objectConfig.description, objectConfig.meta, objectConfig.aside].forEach(\n      (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\n    return objectConfig;\n  });\n\n  badges = computed<Badge[]>(() => {\n    const configBadges = this.objectConfig().badges;\n    if (!configBadges?.length) return [];\n    const bucket = this.bucket();\n    return configBadges\n      .map((entry) => this.#badges.get(entry.id, bucket))\n      .filter((badge): badge is Badge => badge !== undefined)\n      .sort((first, second) => (first.priority ?? 0) - (second.priority ?? 0));\n  });\n\n  actions = computed<Action[]>(() => {\n    const actionsList: Action[] = [];\n    const ocActions = this.objectConfig();\n    if (ocActions.actions?.length) {\n      ocActions.actions.forEach((action: ObjectConfigAction) => {\n        const actionById: Action | undefined = this.#actionService.getActionById(action.id);\n        if (actionById) actionsList.push(actionById);\n      });\n    }\n    return actionsList;\n  });\n\n  slotSelect = output<string>();\n\n  selectSlot(slot: string): void {\n    if (this.disableIconSlot() && slot === 'icon') return;\n    this.slotSelect.emit(slot);\n\n    // set active state\n    (this.#elRef.nativeElement as HTMLElement)\n      .querySelectorAll('[data-slot]')\n      .forEach((element) =>\n        element.getAttribute('data-slot') === slot\n          ? element.classList.add('active')\n          : element.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\" />\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\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    @for (badge of badges(); track badge.id) {\n      <yuv-badge-chip [badge]=\"badge\" />\n    }\n  </div>\n}\n","import { ChangeDetectionStrategy, 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 { TranslateService } from '@ngx-translate/core';\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 { Badge, BadgeSelectComponent } from '@yuuvis/client-framework/badges';\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    BadgeSelectComponent,\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  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TileConfigComponent {\n  #objectConfigService = inject(ObjectConfigService);\n  #system = inject(SystemService);\n  #translate = inject(TranslateService);\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 configTypes = this.configTypes() || [];\n    const configFlavors: VirtualObjectType[] = [];\n    // TODO: enable when flavors are supported in tile config\n    // const cf = this.configFlavors() || [];\n    return [\n      ...configTypes.map((types) => ({ id: types.id, icon: types.icon, data: types })),\n      ...configFlavors.map((flavors) => ({ id: flavors.id, icon: flavors.icon, flavor: true, data: flavors }))\n    ];\n  });\n  #typesEffeconfigTypes = effect(() => {\n    const types = this.types();\n    if (types.length && !this.selectedType) {\n      this.typeSelected(types[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    value: string\n  ): ObjectConfigIcon | ObjectConfigProperty | ObjectConfigAction | ObjectConfigBadge | undefined {\n    return this.objectConfig ? (this.objectConfig as any)[value] : undefined;\n  }\n\n  getConfigProperty(value: string): ObjectConfigProperty | undefined {\n    return this.getConfigValue(value) as ObjectConfigProperty;\n  }\n\n  getSelectedActions(): string[] {\n    return this.objectConfig?.actions ? this.objectConfig.actions.map((action) => action.id) : [];\n  }\n\n  getSelectedBadges(): string[] {\n    return this.objectConfig?.badges ? this.objectConfig.badges.map((badge) => badge.id) : [];\n  }\n\n  slotSelect(item: string): void {\n    this.selectedSlot = item;\n  }\n\n  typeSelected(innerType: InnerType): void {\n    const types = this.types().find((type) => type.id === innerType.id);\n    if (!types) return;\n    if (types.flavor) this.#selectFlavor(types.data as ObjectFlavor);\n    else this.#selectType(types.data as VirtualObjectType);\n  }\n\n  iconSelected(icon: string | null): void {\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>): void {\n    if (!this.selectedType) return;\n    const property: any = {};\n    property[tileSlot] = field\n      ? {\n          label: field.label,\n          propertyName: field.id\n        }\n      : null;\n\n    this.objectConfig = structuredClone({\n      ...this.objectConfig,\n      ...property\n    });\n    this.changes[this.selectedType.id] = this.objectConfig;\n  }\n\n  actionSelected(action: Action): void {\n    if (!this.selectedType) return;\n    if (this.objectConfig) {\n      const actions = this.objectConfig?.actions ? [...this.objectConfig.actions] : [];\n      const idx = actions.findIndex((actions) => actions.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  badgeSelected(badge: Badge): void {\n    if (!this.selectedType) return;\n    if (this.objectConfig) {\n      const badges = this.objectConfig.badges ? [...this.objectConfig.badges] : [];\n      const idx = badges.findIndex((existing) => existing.id === badge.id);\n      if (idx !== -1) badges.splice(idx, 1);\n      else badges.push({ id: badge.id });\n      this.objectConfig = { ...this.objectConfig, badges };\n      this.changes[this.selectedType.id] = { ...this.objectConfig };\n    }\n  }\n\n  saveConfig(): void {\n    if (Object.keys(this.changes).length) {\n      this.#objectConfigService.saveObjectConfigs(this.changes, this.bucket()).subscribe((_) => this.save.emit());\n    }\n  }\n\n  resetConfig(): void {\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(): void {\n    this.changes = {};\n    this.canceled.emit();\n  }\n\n  getTypeLabel(typeId: string): string {\n    return !this.#translate.instant(typeId).includes('!missing key')\n      ? this.#translate.instant(typeId)\n      : this.#system.getLocalizedResource(typeId);\n  }\n\n  #selectFlavor(flavor: ObjectFlavor): void {\n    const type: GenericObjectType | undefined = this.#system.getObjectType(flavor.sot);\n    if (type)\n      this.#selectType({\n        id: flavor.id,\n        objectType: flavor.objectTypeID,\n        sots: [flavor.sot]\n      });\n  }\n\n  #selectType(type: VirtualObjectType): void {\n    this.selectedType = type;\n\n    const alreadyChanged = this.changes[type.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(type, this.bucket() || '')) };\n\n    if (!this.objectConfig) {\n      this.objectConfig = {\n        ...this.#emptyObjectConfig,\n        objectTypeId: type.id\n      };\n    }\n  }\n\n  #deepEqual(valueA: unknown, valueB: unknown): boolean {\n    if (valueA === valueB) return true;\n    if (typeof valueA !== 'object' || typeof valueB !== 'object' || valueA === null || valueB === null) return false;\n\n    const keysA = Object.keys(valueA as object);\n    const keysB = Object.keys(valueB 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((valueA as any)[key], (valueB as any)[key])) return false;\n    }\n    return true;\n  }\n}\n","<yuv-dialog [headertitle]=\"'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\">{{ getTypeLabel(t.id) }}</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            [objectConfig]=\"objectConfig!\"\n            [bucket]=\"bucket()\"\n            (slotSelect)=\"slotSelect($event)\"\n          />\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)\" />\n          } @else if (selectedSlot === 'badges') {\n            <h3>{{ 'yuv.tile-config.slot.badges.headline' | translate }}</h3>\n            <yuv-tile-badge-select\n              [selectedBadgeIds]=\"getSelectedBadges()\"\n              [bucket]=\"bucket()\"\n              (badgeSelect)=\"badgeSelected($event)\"\n            />\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            />\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            />\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()\">\n      {{ 'yuv.tile-config.button.save' | translate }}\n    </button>\n  </footer>\n</yuv-dialog>\n","import { ChangeDetectionStrategy, 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  styleUrls: ['./tile-config-trigger.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\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(): void {\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(): void {\n    if (this.#dialogRef) this.#dialogRef.close();\n  }\n\n  onObjectConfigCancel(): void {\n    if (this.#dialogRef) this.#dialogRef.close();\n  }\n}\n","<button\n  ymt-icon-button\n  [icon-button-size]=\"small() ? 'small' : 'medium'\"\n  class=\"settings icon\"\n  (click)=\"openTileConfigOverlay()\"\n  [matTooltip]=\"'yuv.tile-config.trigger.tooltip' | translate\"\n>\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  />\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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"}