{"version":3,"file":"yuuvis-client-framework-badges.mjs","sources":["../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-chip/badge-chip.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-chip/badge-chip.component.html","../../../../../libs/yuuvis/client-framework/badges/src/lib/default-badges/lock.badge.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/default-badges/retention.badge.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/utils/badge.utils.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/services/badge.service.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-select/badge-select.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/badge-select/badge-select.component.html","../../../../../libs/yuuvis/client-framework/badges/src/lib/tile-badges/tile-badges.component.ts","../../../../../libs/yuuvis/client-framework/badges/src/lib/tile-badges/tile-badges.component.html","../../../../../libs/yuuvis/client-framework/badges/src/yuuvis-client-framework-badges.ts"],"sourcesContent":["import { Component, computed, inject, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { Badge } from '../models';\n@Component({\n  selector: 'yuv-badge-chip',\n  imports: [MatIconModule, MatTooltipModule, YmtBadge, TranslatePipe],\n  templateUrl: './badge-chip.component.html',\n  styleUrls: ['./badge-chip.component.scss']\n})\nexport class BadgeChipComponent {\n  readonly #translate = inject(TranslateService);\n\n  badge = input.required<Badge>();\n  showLabel = input<boolean>(false);\n\n  readonly tooltip = computed<string>(() => {\n    const current = this.badge();\n    return this.#translate.instant(current.descriptionKey ?? current.labelKey);\n  });\n}\n","@let b = badge();\n\n<ymt-badge [severity]=\"b.severity ?? 'neutral'\" [matTooltip]=\"tooltip()\" class=\"badge-chip\">\n  @if (b.svgIcon) {\n    <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n  } @else {\n    <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n  }\n  @if (showLabel()) {\n    <span>{{ b.labelKey | translate }}</span>\n  }\n</ymt-badge>\n","import { _ as marker } from '@ngx-translate/core';\nimport { Badge } from '../models';\n\n/**\n * Badge shown when an object is locked by another user.\n */\nexport const LOCK_BADGE: Badge = {\n  id: 'yuv.badge.lock',\n  labelKey: marker('yuv.badge.lock.label'),\n  descriptionKey: marker('yuv.badge.lock.description'),\n  icon: 'lock',\n  severity: 'danger',\n  priority: 10,\n  /**\n   * Applies if a lock tag exists and the current user is not the lock owner.\n   */\n  applies: (_dmsObject, ctx) => !!ctx.lockState?.locked && !ctx.lockState.lockedByCurrentUser\n};\n\n/**\n * Badge shown when an object is locked by the current user.\n */\nexport const LOCK_SELF_BADGE: Badge = {\n  id: 'yuv.badge.lock.self',\n  labelKey: marker('yuv.badge.lock.self.label'),\n  descriptionKey: marker('yuv.badge.lock.self.description'),\n  icon: 'lock_person',\n  severity: 'success',\n  priority: 10,\n  variantOf: 'yuv.badge.lock',\n  /**\n   * Applies if a lock tag exists and the current user is the lock owner.\n   */\n  applies: (_dmsObject, ctx) => !!ctx.lockState?.locked && ctx.lockState.lockedByCurrentUser\n};\n","import { _ as marker } from '@ngx-translate/core';\nimport { BaseObjectTypeField, RetentionField, SystemSOT } from '@yuuvis/client-core';\nimport { Badge } from '../models/badge.models';\n\n/**\n * Badge definition for DMS objects that are subject to a destruction retention policy.\n *\n * This badge is displayed when a DMS object has the `DESTRUCTION_RETENTION` secondary object type\n * assigned and an active or ongoing retention period. It helps users identify objects that are\n * legally or organizationally protected from deletion during their retention period.\n *\n * **Applies when:**\n * - The object includes the `SystemSOT.DESTRUCTION_RETENTION` secondary object type.\n * - A retention start date (`RetentionField.RETENTION_START`) is present.\n * - The retention period has started (start date is in the past), or an end date is set and\n *   still lies in the future.\n *\n * @remarks\n * - `severity` is set to `'danger'` to visually emphasize the retention constraint.\n * - `priority` is `20`, which controls the display order relative to other badges.\n */ export const RETENTION_BADGE: Badge = {\n  id: 'yuv.badge.retention',\n  labelKey: marker('yuv.badge.retention.label'),\n  descriptionKey: marker('yuv.badge.retention.description'),\n  icon: 'gavel',\n  severity: 'danger',\n  priority: 20,\n  applies: (dmsObject) => {\n    const sots = dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[] | undefined;\n    if (!sots?.includes(SystemSOT.DESTRUCTION_RETENTION)) return false;\n    const startRetention = dmsObject.data[RetentionField.RETENTION_START] as string | undefined;\n    if (!startRetention) return false;\n    const now = new Date();\n    const start = new Date(startRetention);\n    const endRetention = dmsObject.data[RetentionField.RETENTION_END] as string | undefined;\n    const end = endRetention ? new Date(endRetention) : null;\n    return start < now || (end !== null && end > now);\n  }\n};\n","import { BaseObjectTypeField, DmsObject } from '@yuuvis/client-core';\nimport { BadgeRule } from '../models/badge.models';\n\n/**\n * Evaluates a single badge rule against a given DMS object.\n *\n * Supported operations:\n * - `isSet`: returns `true` when the field value is not `undefined`, `null`, or an empty string.\n * - `equals`: returns `true` when the field value strictly equals `rule.value`.\n * - `tagPresent`: returns `true` when the configured tags field contains a tag whose first element equals `rule.value`.\n *\n * @param rule Badge rule definition to evaluate.\n * @param dmsObject Source object containing field data.\n * @returns `true` if the rule matches; otherwise `false`.\n */\nexport function evaluateRule(rule: BadgeRule, dmsObject: DmsObject): boolean {\n  switch (rule.op) {\n    case 'isSet': {\n      const value = dmsObject.data[rule.field];\n      return value !== undefined && value !== null && value !== '';\n    }\n    case 'equals': {\n      return dmsObject.data[rule.field] === rule.value;\n    }\n    case 'tagPresent': {\n      const tagsField = rule.field || BaseObjectTypeField.TAGS;\n      const tags = dmsObject.data[tagsField] as unknown[][] | undefined;\n      return !!tags?.some((tag) => Array.isArray(tag) && tag[0] === rule.value);\n    }\n    default:\n      return false;\n  }\n}\n","import { Injectable, Signal, computed, inject, signal } from '@angular/core';\nimport { DmsObject, ObjectLockingService, YUV_USER } from '@yuuvis/client-core';\nimport { LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE } from '../default-badges';\nimport { Badge, BadgeContext } from '../models/badge.models';\nimport { evaluateRule } from '../utils';\n\ninterface StoredBadges {\n  main: Badge[];\n  buckets: Map<string, Badge[]>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BadgeRegistryService {\n  readonly #store = signal<StoredBadges>({ main: [], buckets: new Map() });\n  readonly #currentUser = inject(YUV_USER, { optional: true }) ?? undefined;\n  readonly #objectLocking = inject(ObjectLockingService);\n\n  /**\n   * Registers one or multiple badges in the registry.\n   *\n   * If a badge with the same id already exists in the same scope, it is replaced.\n   * Otherwise, the badge is added to the scope.\n   *\n   * @param badges An array of badges to register.\n   * @param bucket Optional bucket id (typically an APP_ID). If omitted, badges are\n   *               registered globally and visible to every consumer. If provided,\n   *               badges are scoped to that bucket and only visible when consumers\n   *               query with the matching bucket.\n   *\n   * @see {@link Badge}\n   */\n  registerBadges(badges: Badge[], bucket?: string): void {\n    this.#store.update((current) => {\n      const next: StoredBadges = { main: current.main, buckets: new Map(current.buckets) };\n      if (bucket === undefined) {\n        next.main = this.#mergeInto(current.main, badges);\n      } else {\n        const existing = current.buckets.get(bucket) ?? [];\n        next.buckets.set(bucket, this.#mergeInto(existing, badges));\n      }\n      return next;\n    });\n  }\n\n  /**\n   * Registers the default badges into the registry.\n   *\n   * Initializes three built-in badge types:\n   * - LOCK_BADGE: Indicates objects locked by other users\n   * - LOCK_SELF_BADGE: Indicates objects locked by the current user\n   * - RETENTION_BADGE: Indicates objects under retention hold\n   *\n   * @param bucket Optional bucket id. If omitted, defaults are registered globally.\n   *\n   * @see {@link Badge}\n   */\n  registerDefaultBadges(bucket?: string): void {\n    this.registerBadges([LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE], bucket);\n  }\n\n  /**\n   * Unregisters one or multiple badges from the registry by id.\n   *\n   * Operates only on the specified scope: omitting `bucket` removes from the global\n   * scope only, providing `bucket` removes from that bucket only.\n   *\n   * @param id A single badge id or an array of badge ids to remove.\n   * @param bucket Optional bucket id.\n   */\n  unregister(id: string | string[], bucket?: string): void {\n    const ids = Array.isArray(id) ? id : [id];\n    this.#store.update((current) => {\n      const next: StoredBadges = { main: current.main, buckets: new Map(current.buckets) };\n      if (bucket === undefined) {\n        next.main = current.main.filter((badge) => !ids.includes(badge.id));\n      } else {\n        const existing = current.buckets.get(bucket);\n        if (existing) {\n          next.buckets.set(\n            bucket,\n            existing.filter((badge) => !ids.includes(badge.id))\n          );\n        }\n      }\n      return next;\n    });\n  }\n\n  /**\n   * Returns a registered badge by id.\n   *\n   * Looks first in the given bucket (if any), then in the global scope.\n   *\n   * @param id The badge id.\n   * @param bucket Optional bucket id.\n   * @returns The matching badge, or undefined if no badge is registered with that id.\n   */\n  get(id: string, bucket?: string): Badge | undefined {\n    const { main, buckets } = this.#store();\n    if (bucket !== undefined) {\n      const local = buckets.get(bucket)?.find((badge) => badge.id === id);\n      if (local) return local;\n    }\n    return main.find((badge) => badge.id === id);\n  }\n\n  /**\n   * Returns all registered badges across the global scope and every bucket.\n   *\n   * Bucket entries override globals with the same id; remaining duplicates between\n   * buckets keep the first occurrence. Useful for tests and debug inspection.\n   */\n  all(): Badge[] {\n    const { main, buckets } = this.#store();\n    const byId = new Map<string, Badge>();\n    for (const badge of main) byId.set(badge.id, badge);\n    for (const list of buckets.values()) {\n      for (const badge of list) byId.set(badge.id, badge);\n    }\n    return Array.from(byId.values());\n  }\n\n  /**\n   * Returns a reactive list of badges visible in the given scope.\n   *\n   * The returned signal recomputes whenever the registry changes. The list contains\n   * the global badges merged with the named bucket's badges (bucket entries override\n   * globals with the same id), sorted by ascending priority. At equal priority,\n   * globals come first, then bucket-local badges.\n   *\n   * @param bucket Optional bucket id.\n   */\n  getBadgesForBucket(bucket?: string): Signal<Badge[]> {\n    return computed(() => this.#visibleScope(bucket).sort(this.#byPriority));\n  }\n\n  /**\n   * Resolves all active badges for a given object in the given scope.\n   *\n   * The visible scope is `main ∪ bucket`. Variants only resolve when their parent id\n   * is present in the visible scope. If `idFilter` is provided, only badges whose id\n   * (or whose variant's parent id) is in the filter are considered. The resulting\n   * list is sorted by ascending priority.\n   *\n   * @param dmsObject The object to evaluate badges against.\n   * @param options Optional bucket and id filter.\n   */\n  getActiveBadges(dmsObject: DmsObject, options?: { bucket?: string; idFilter?: string[] }): Badge[] {\n    const visible = this.#visibleScope(options?.bucket);\n    const idFilter = options?.idFilter;\n    const filtered = visible.filter((badge) => {\n      if (badge.variantOf !== undefined) {\n        const parentVisible = visible.some((parent) => parent.id === badge.variantOf);\n        if (!parentVisible) return false;\n        return idFilter ? idFilter.includes(badge.variantOf) : true;\n      }\n      return idFilter ? idFilter.includes(badge.id) : true;\n    });\n    return filtered.filter((badge) => this.#isActive(badge, dmsObject)).sort(this.#byPriority);\n  }\n\n  /**\n   * Returns globals merged with the named bucket. Bucket entries with the same id\n   * override globals (the bucket entry replaces the global entry in place, preserving\n   * the global's position). At equal priority, globals appear first.\n   */\n  #visibleScope(bucket?: string): Badge[] {\n    const { main, buckets } = this.#store();\n    if (bucket === undefined) return [...main];\n    const local = buckets.get(bucket);\n    if (!local || local.length === 0) return [...main];\n    const localById = new Map(local.map((badge) => [badge.id, badge]));\n    const merged: Badge[] = main.map((global) => localById.get(global.id) ?? global);\n    const additions = local.filter((badge) => !main.some((global) => global.id === badge.id));\n    return [...merged, ...additions];\n  }\n\n  readonly #byPriority = (first: Badge, second: Badge): number => (first.priority ?? 0) - (second.priority ?? 0);\n\n  /**\n   * Merges incoming badges into an existing list, replacing entries with the same id\n   * in place and appending new ones at the end.\n   */\n  #mergeInto(existing: Badge[], incoming: Badge[]): Badge[] {\n    const next = [...existing];\n    for (const badge of incoming) {\n      const idx = next.findIndex((current) => current.id === badge.id);\n      if (idx === -1) next.push(badge);\n      else next[idx] = badge;\n    }\n    return next;\n  }\n\n  /**\n   * Evaluates whether a badge applies to the given object.\n   *\n   * A custom {@link Badge.applies} function has precedence over rule evaluation.\n   * If neither applies nor rule is provided, the badge is considered inactive.\n   */\n  #isActive(badge: Badge, dmsObject: DmsObject): boolean {\n    const ctx: BadgeContext = {\n      currentUser: this.#currentUser,\n      lockState: this.#objectLocking.getLockState(dmsObject)\n    };\n    if (badge.applies) return !!badge.applies(dmsObject, ctx);\n    if (badge.rule) return evaluateRule(badge.rule, dmsObject);\n    return false;\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, Signal, computed, inject, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { Badge } from '../models';\nimport { BadgeRegistryService } from '../services/badge.service';\n\n@Component({\n  selector: 'yuv-tile-badge-select',\n  imports: [NgClass, MatIconModule, TranslateModule],\n  templateUrl: './badge-select.component.html',\n  styleUrls: ['./badge-select.component.scss']\n})\nexport class BadgeSelectComponent {\n  readonly #registry = inject(BadgeRegistryService);\n\n  selectedBadgeIds = input<string[]>([]);\n  bucket = input<string | undefined>();\n  badgeSelect = output<Badge>();\n\n  readonly badges: Signal<Badge[]> = computed<Badge[]>(() =>\n    this.#registry\n      .getBadgesForBucket(this.bucket())()\n      .filter((badge) => badge.variantOf === undefined)\n  );\n}\n","<div class=\"badges\">\n  @for (b of badges(); track b.id) {\n    <button type=\"button\" [ngClass]=\"{ selected: selectedBadgeIds().includes(b.id) }\" (click)=\"badgeSelect.emit(b)\">\n      @if (b.svgIcon) {\n        <mat-icon [svgIcon]=\"b.icon\" inert=\"true\" />\n      } @else {\n        <mat-icon inert=\"true\">{{ b.icon }}</mat-icon>\n      }\n      <span>{{ b.labelKey | translate }}</span>\n    </button>\n  } @empty {\n    <span class=\"empty\">\n      {{ 'yuv.badge.empty.selection' | translate }}\n    </span>\n  }\n</div>\n","import { Component, computed, inject, input } from '@angular/core';\nimport { DmsObject } from '@yuuvis/client-core';\nimport { BadgeChipComponent } from '../badge-chip/badge-chip.component';\nimport { Badge } from '../models/badge.models';\nimport { BadgeRegistryService } from '../services/badge.service';\n\n@Component({\n  selector: 'yuv-tile-badges',\n  imports: [BadgeChipComponent],\n  templateUrl: './tile-badges.component.html',\n  styleUrls: ['./tile-badges.component.scss']\n})\nexport class TileBadgesComponent {\n  readonly #registry = inject(BadgeRegistryService);\n\n  dmsObject = input.required<DmsObject>();\n  badgeIds = input<string[] | undefined>();\n  bucket = input<string | undefined>();\n\n  readonly activeBadges = computed<Badge[]>(() =>\n    this.#registry.getActiveBadges(this.dmsObject(), {\n      bucket: this.bucket(),\n      idFilter: this.badgeIds()\n    })\n  );\n}\n","@for (b of activeBadges(); track $index) {\n  <yuv-badge-chip [badge]=\"b\" />\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["marker","i2"],"mappings":"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"}