{"version":3,"file":"koobiq-components-notification-center.mjs","sources":["../../../packages/components/notification-center/notification-center-animations.ts","../../../packages/components/notification-center/notification-center.service.ts","../../../packages/components/notification-center/notification-item.ts","../../../packages/components/notification-center/notification-item.html","../../../packages/components/notification-center/notification-center.ts","../../../packages/components/notification-center/notification-center.html","../../../packages/components/notification-center/notification-center.module.ts","../../../packages/components/notification-center/koobiq-components-notification-center.ts"],"sourcesContent":["import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\nimport { KbqAnimationDurations } from '@koobiq/components/core';\n\n/** @docs-private */\nexport const KbqNotificationCenterAnimations: {\n    readonly state: AnimationTriggerMetadata;\n} = {\n    /** Animation that transitions a tooltip in and out. */\n    state: trigger('state', [\n        state(\n            'initial',\n            style({\n                opacity: 0,\n                transform: 'scale(1, 0.8)'\n            })\n        ),\n        transition(\n            '* => visible',\n            animate(\n                '120ms cubic-bezier(0, 0, 0.2, 1)',\n                style({\n                    opacity: 1,\n                    transform: 'scale(1, 1)'\n                })\n            )\n        ),\n        transition('* => hidden', animate(`${KbqAnimationDurations.Rapid} linear`, style({ opacity: 0 })))\n    ])\n};\n","import { EventEmitter, inject, Injectable, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter, DateFormatter } from '@koobiq/components/core';\nimport { KbqToastData, KbqToastService, KbqToastStyle } from '@koobiq/components/toast';\nimport { BehaviorSubject, combineLatestWith, merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport interface KbqNotificationItem extends Omit<KbqToastData, 'closeButton'> {\n    id?: string;\n\n    /** Numeric id of the shown toast, set by `push()` and consumed by `hideToast()`. */\n    toastId?: number;\n\n    title?: string | TemplateRef<unknown>;\n    style?: string | KbqToastStyle;\n\n    icon?: boolean | TemplateRef<unknown>;\n    iconClass?: string;\n    caption?: string | TemplateRef<unknown>;\n\n    content?: string | TemplateRef<unknown>;\n    actions?: TemplateRef<unknown>;\n\n    date: string;\n    read?: boolean;\n}\n\nexport const maxUnreadItemsLength = 99;\n\ntype KbqNotificationsGroup = { title: string; items: KbqNotificationItem[] };\n\ntype KbqNotificationsGroups = Record<string, KbqNotificationsGroup>;\n\n/** Payload emitted by `KbqNotificationCenterService.onDelete`. */\nexport type KbqNotificationDeleteEvent = {\n    /** What was removed: a single item, a whole date group, or all notifications. */\n    type: 'item' | 'group' | 'all';\n    /** The notification items that were removed. */\n    items: KbqNotificationItem[];\n};\n\n@Injectable({ providedIn: 'root' })\nexport class KbqNotificationCenterService {\n    /** @docs-private */\n    private readonly adapter = inject(DateAdapter);\n    /** @docs-private */\n    private readonly formatter = inject(DateFormatter);\n    /** @docs-private */\n    private readonly toastService = inject(KbqToastService);\n\n    /** @docs-private */\n    readonly silentMode = new BehaviorSubject(false);\n    /** @docs-private */\n    readonly loadingMode = new BehaviorSubject(false);\n    /** @docs-private */\n    readonly errorMode = new BehaviorSubject(false);\n    /**\n     * Whether the bottom \"load more\" spinner is shown while the next page is being loaded.\n     * Note: this is the infinite-scroll indicator and is distinct from `loadingMode`,\n     * which renders the full-screen loader instead of the list.\n     */\n    readonly loadingMore = new BehaviorSubject(false);\n    /**\n     * Whether the bottom \"load more\" error row (with a retry button) is shown.\n     * Distinct from `errorMode`, which replaces the whole list with the full-screen error state.\n     */\n    readonly loadMoreErrorMode = new BehaviorSubject(false);\n    /**\n     * Whether there are more notifications to load. While `true`, scrolling to the bottom\n     * emits `onNextPage`; set it to `false` to stop further infinite-scroll requests.\n     */\n    readonly hasMore = new BehaviorSubject(true);\n    /** @docs-private */\n    readonly onRead = new BehaviorSubject<KbqNotificationItem | null>(null);\n\n    /** Triggers an event when the user presses the reload button. */\n    readonly onReload = new EventEmitter<void>();\n\n    /** Triggers an event when the list is scrolled to the bottom and the next page should be loaded. */\n    readonly onNextPage = new EventEmitter<void>();\n\n    /** Triggers an event when an item, a group, or all notifications are removed. */\n    readonly onDelete = new EventEmitter<KbqNotificationDeleteEvent>();\n\n    private originalItems = new BehaviorSubject([] as KbqNotificationItem[]);\n\n    /**\n     * Grouped notifications, always ordered from newest to oldest: day groups are sorted by date\n     * descending, and notifications within each day are sorted by date descending.\n     * @docs-private\n     */\n    readonly groupedItems = this.originalItems.pipe(\n        map((items) => {\n            const result: KbqNotificationsGroups = {};\n\n            items.forEach((item) => this.makeGroup(item, result));\n\n            const groups = Object.values(result);\n\n            // Newest notifications first within each day.\n            groups.forEach((group) => group.items.sort(this.compareByDateDesc));\n\n            // Newest day first.\n            return groups.sort((a, b) => this.compareByDateDesc(a.items[0], b.items[0]));\n        })\n    );\n\n    /** Emits an event whenever the changes. */\n    readonly changes = merge(\n        this.silentMode,\n        this.loadingMode,\n        this.errorMode,\n        this.loadingMore,\n        this.loadMoreErrorMode,\n        this.hasMore,\n        this.originalItems,\n        this.onRead\n    );\n\n    /** Notification items */\n    get items() {\n        return this.originalItems.value;\n    }\n\n    set items(values: KbqNotificationItem[]) {\n        this.originalItems.next(this.setReadState(this.setIds(values)));\n    }\n\n    /** Number of unread notifications */\n    get unreadItemsCounter(): Observable<string> {\n        return this.originalItems.pipe(map((items) => items.filter((item) => item.read === false).length)).pipe(\n            combineLatestWith(this.onRead),\n            map(([value]) => {\n                if (value < maxUnreadItemsLength) {\n                    return value ? value.toString() : '';\n                } else {\n                    return `${maxUnreadItemsLength}+`;\n                }\n            })\n        );\n    }\n\n    /** true if there are no notifications. */\n    get isEmpty() {\n        return this.originalItems.value.length === 0;\n    }\n\n    constructor() {\n        this.toastService?.read.pipe(takeUntilDestroyed()).subscribe((toastData) => {\n            const item = this.items.find((item) => item.id === toastData?.id);\n\n            if (item && !item.read) {\n                item.read = true;\n\n                this.onRead.next(toastData as KbqNotificationItem);\n            }\n        });\n    }\n\n    /** Set silent mode */\n    setSilentMode(value: boolean) {\n        this.silentMode.next(value);\n    }\n\n    /** Set loading mode */\n    setLoadingMode(value: boolean) {\n        this.loadingMode.next(value);\n    }\n\n    /** Set error mode */\n    setErrorMode(value: boolean) {\n        this.errorMode.next(value);\n    }\n\n    /** Set the bottom \"load more\" spinner visibility. */\n    setLoadingMore(value: boolean) {\n        this.loadingMore.next(value);\n    }\n\n    /** Set the bottom \"load more\" error state visibility. */\n    setLoadMoreErrorMode(value: boolean) {\n        this.loadMoreErrorMode.next(value);\n    }\n\n    /** Set whether there are more notifications to load via infinite scroll. */\n    setHasMore(value: boolean) {\n        this.hasMore.next(value);\n    }\n\n    /** Push new notification item in center */\n    push(item: KbqNotificationItem) {\n        this.setReadState(this.setIds([item]));\n\n        if (!this.silentMode.value) {\n            item.toastId = this.toastService.show(item).id;\n        }\n\n        return this.originalItems.next([...this.originalItems.value, item]);\n    }\n\n    /** Hides the toast that corresponds to the given notification item. */\n    hideToast(item: KbqNotificationItem): void {\n        if (item.toastId === undefined) {\n            return;\n        }\n\n        this.toastService.hide(item.toastId);\n        item.toastId = undefined;\n    }\n\n    /** Remove notification item */\n    remove(removedItem: KbqNotificationItem) {\n        this.hideToast(removedItem);\n\n        this.originalItems.next(this.originalItems.value.filter((item) => removedItem !== item));\n\n        this.onDelete.emit({ type: 'item', items: [removedItem] });\n    }\n\n    /** Remove group of notification items */\n    removeGroup(group: KbqNotificationsGroup) {\n        group.items.forEach((item) => this.hideToast(item));\n\n        this.originalItems.next(this.originalItems.value.filter((item) => !group.items.includes(item)));\n\n        this.onDelete.emit({ type: 'group', items: [...group.items] });\n    }\n\n    /** Remove all notification items */\n    removeAll() {\n        const items = this.originalItems.value;\n\n        items.forEach((item) => this.hideToast(item));\n\n        this.originalItems.next([]);\n\n        this.onDelete.emit({ type: 'all', items });\n    }\n\n    private makeGroup = (item: KbqNotificationItem, groups: KbqNotificationsGroups) => {\n        const parsedDate = this.adapter.parse(item.date, '');\n        const groupId = this.adapter.format(parsedDate, 'yyyyMMdd');\n        const groupTitle = this.formatter.absoluteLongDate(parsedDate);\n\n        if (groups[groupId]) {\n            groups[groupId].items.push(item);\n        } else {\n            groups[groupId] = {\n                title: groupTitle,\n                items: [item]\n            };\n        }\n    };\n\n    /** Compares two notifications by date so the newest comes first. */\n    private compareByDateDesc = (a: KbqNotificationItem, b: KbqNotificationItem): number => {\n        const parsedA = this.adapter.parse(a.date, '');\n        const parsedB = this.adapter.parse(b.date, '');\n\n        if (!parsedA || !parsedB) {\n            return 0;\n        }\n\n        return this.adapter.compareDateTime(parsedB, parsedA);\n    };\n\n    private setIds(items: KbqNotificationItem[]) {\n        items.forEach((item) => (item.id = item.id ?? new Date().getTime().toString()));\n\n        return items;\n    }\n\n    private setReadState(items: KbqNotificationItem[]) {\n        items.forEach((item) => (item.read = item.read ?? false));\n\n        return items;\n    }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { DateAdapter, KbqReadStateDirective, PopUpPlacements, ThemePalette } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { filter } from 'rxjs/operators';\nimport { KbqNotificationCenterComponent } from './notification-center';\nimport { KbqNotificationCenterService, KbqNotificationItem } from './notification-center.service';\n\nlet id = 0;\n\n/** @docs-private */\n@Component({\n    selector: 'kbq-notification-item',\n    imports: [\n        NgTemplateOutlet,\n        KbqIconModule,\n        NgClass,\n        KbqTitleModule,\n        KbqButtonModule,\n        KbqTooltipTrigger\n    ],\n    templateUrl: './notification-item.html',\n    styleUrls: ['./notification-item.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'kbq-notification-item',\n        '[class]': 'style',\n        'data-testid': 'kbq-notification-item'\n    },\n    hostDirectives: [KbqReadStateDirective]\n})\nexport class KbqNotificationItemComponent {\n    private readonly adapter = inject(DateAdapter);\n    protected readonly service = inject(KbqNotificationCenterService);\n    protected readonly readStateDirective = inject<KbqReadStateDirective>(KbqReadStateDirective, { host: true });\n    protected readonly center = inject(KbqNotificationCenterComponent, { host: true });\n\n    protected popUpPlacements = PopUpPlacements;\n\n    themePalette = ThemePalette;\n    id = id++;\n\n    time: string;\n\n    $implicit;\n\n    get style() {\n        return {\n            [`kbq-notification-item_${this.data.style}`]: !!this.data.style\n        };\n    }\n\n    @Input()\n    get data(): KbqNotificationItem {\n        return this._data;\n    }\n\n    set data(value: KbqNotificationItem) {\n        this._data = value;\n\n        this.time = this.adapter.format(this.adapter.parse(value.date, ''), 'HH:mm');\n    }\n\n    private _data: KbqNotificationItem;\n\n    constructor() {\n        this.$implicit = this;\n\n        this.readStateDirective.read\n            .pipe(\n                filter((value: boolean) => value),\n                takeUntilDestroyed()\n            )\n            .subscribe(() => {\n                if (this.data.read) {\n                    return;\n                }\n\n                this.data.read = true;\n\n                this.service.onRead.next(this.data);\n            });\n    }\n\n    isTemplateRef(value): boolean {\n        return value instanceof TemplateRef;\n    }\n}\n","@if (data.icon) {\n    <div class=\"kbq-notification-item__icon-container layout-row layout-align-start-start\">\n        @if (data.icon === true) {\n            @switch (data.style) {\n                @case ('contrast') {\n                    <i\n                        kbq-icon=\"kbq-circle-info_16\"\n                        class=\"kbq-notification-item__icon\"\n                        [color]=\"$any(data.style)\"\n                        [ngClass]=\"data.iconClass\"\n                    ></i>\n                }\n                @case ('success') {\n                    <i\n                        kbq-icon=\"kbq-circle-check_16\"\n                        class=\"kbq-notification-item__icon\"\n                        [color]=\"$any(data.style)\"\n                        [ngClass]=\"data.iconClass\"\n                    ></i>\n                }\n                @case ('warning') {\n                    <i\n                        kbq-icon=\"kbq-triangle-exclamation_16\"\n                        class=\"kbq-notification-item__icon\"\n                        [color]=\"$any(data.style)\"\n                        [ngClass]=\"data.iconClass\"\n                    ></i>\n                }\n                @case ('error') {\n                    <i\n                        kbq-icon=\"kbq-triangle-exclamation_16\"\n                        class=\"kbq-notification-item__icon\"\n                        [color]=\"$any(data.style)\"\n                        [ngClass]=\"data.iconClass\"\n                    ></i>\n                }\n            }\n        } @else if (isTemplateRef(data.icon)) {\n            <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n        }\n    </div>\n}\n\n<div class=\"kbq-notification-item__container\">\n    @if (data.title) {\n        <div\n            kbq-title\n            class=\"kbq-notification-item__title\"\n            [class.kbq-notification-item__title_with-content]=\"data.caption || data.content\"\n        >\n            @if (isTemplateRef(data.title)) {\n                <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n            }\n            @if (!isTemplateRef(data.title)) {\n                <p>{{ data.title }}</p>\n            }\n\n            <div class=\"kbq-notification-item-time\" [class.kbq-notification-item-time_read]=\"data.read\">\n                <div class=\"kbq-notification-item-time__value\">{{ time }}</div>\n                <i class=\"kbq-notification-item-time__state\" kbq-icon=\"kbq-circle-xs_16\" [color]=\"'theme'\"></i>\n            </div>\n        </div>\n    }\n\n    @if (data.caption) {\n        <div\n            kbq-title\n            [class.kbq-notification-item__text]=\"data.title\"\n            [class.kbq-notification-item__title]=\"!data.title\"\n        >\n            @if (isTemplateRef(data.caption)) {\n                <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n            }\n            @if (!isTemplateRef(data.caption)) {\n                {{ data.caption }}\n            }\n        </div>\n    }\n\n    @if (data.content) {\n        <div class=\"kbq-notification-item__content\">\n            @if (isTemplateRef(data.content)) {\n                <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n            }\n            @if (!isTemplateRef(data.content)) {\n                {{ data.content }}\n            }\n        </div>\n    }\n\n    @if (data.actions) {\n        <div class=\"kbq-notification-item__actions\">\n            @if (isTemplateRef(data.actions)) {\n                <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n            }\n            @if (!isTemplateRef(data.actions)) {\n                {{ data.actions }}\n            }\n        </div>\n    }\n</div>\n\n<button\n    kbq-button\n    class=\"kbq-notification-item__remove-button\"\n    data-testid=\"kbq-notification-item-remove-button\"\n    [kbqStyle]=\"'transparent'\"\n    [color]=\"'contrast'\"\n    [kbqTooltipArrow]=\"false\"\n    [kbqTooltip]=\"center.localeData.remove\"\n    [kbqPlacement]=\"popUpPlacements.Right\"\n    (click)=\"service.remove(data)\"\n>\n    <i kbq-icon=\"kbq-trash_16\"></i>\n</button>\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayConfig, ScrollStrategy } from '@angular/cdk/overlay';\nimport { AsyncPipe } from '@angular/common';\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    Directive,\n    EventEmitter,\n    InjectionToken,\n    Input,\n    Output,\n    TemplateRef,\n    Type,\n    ViewChild,\n    ViewEncapsulation,\n    booleanAttribute,\n    inject,\n    numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KbqButton, KbqButtonModule } from '@koobiq/components/button';\nimport {\n    DateAdapter,\n    KBQ_LOCALE_SERVICE,\n    KbqPopUp,\n    KbqPopUpPlacementValues,\n    KbqPopUpSizeValues,\n    KbqPopUpTrigger,\n    KbqStickToWindowPlacementValues,\n    POSITION_TO_CSS_MAP,\n    PopUpPlacements,\n    PopUpSizes,\n    PopUpTriggers,\n    applyPopupMargins,\n    ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqDropdownModule } from '@koobiq/components/dropdown';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLoaderOverlayModule } from '@koobiq/components/loader-overlay';\nimport { KbqProgressSpinnerModule } from '@koobiq/components/progress-spinner';\nimport { KbqScrollbar, KbqScrollbarModule } from '@koobiq/components/scrollbar';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { Subject, Subscription, merge } from 'rxjs';\nimport { auditTime, distinctUntilChanged, filter, map, pairwise } from 'rxjs/operators';\nimport { KbqNotificationCenterAnimations } from './notification-center-animations';\nimport { KbqNotificationCenterService } from './notification-center.service';\nimport { KbqNotificationItemComponent } from './notification-item';\n\nconst defaultOffsetX = 8;\n\n/** Rate-limit window (ms) for the scroll-to-bottom check that drives infinite scroll. */\nconst SCROLLED_TO_BOTTOM_AUDIT_TIME = 100;\n\n/**default configuration of notification-center */\nexport const KBQ_NOTIFICATION_CENTER_DEFAULT_CONFIGURATION = ruRULocaleData.notificationCenter;\n\n/** Injection Token for providing configuration of notification-center */\nexport const KBQ_NOTIFICATION_CENTER_CONFIGURATION = new InjectionToken('KbqNotificationCenterConfiguration');\n\n/** @docs-private */\nexport const KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n    'kbq-notification-center-scroll-strategy'\n);\n\n/** @docs-private */\nexport function kbqNotificationCenterScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n    return () => overlay.scrollStrategies.reposition({ scrollThrottle: 20 });\n}\n\n/** @docs-private */\nexport const KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n    provide: KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY,\n    deps: [Overlay],\n    useFactory: kbqNotificationCenterScrollStrategyFactory\n};\n\n/** @docs-private */\n@Component({\n    selector: 'kbq-notification-center',\n    imports: [\n        KbqIconModule,\n        KbqBadgeModule,\n        KbqScrollbarModule,\n        KbqButtonModule,\n        KbqDividerModule,\n        KbqDropdownModule,\n        KbqToolTipModule,\n        AsyncPipe,\n        KbqNotificationItemComponent,\n        KbqLoaderOverlayModule,\n        KbqProgressSpinnerModule\n    ],\n    templateUrl: './notification-center.html',\n    styleUrls: ['./notification-center.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false,\n    host: {\n        class: 'kbq-notification-center',\n        '[class.kbq-notification-center_popover]': 'popoverMode',\n        '(keydown.escape)': 'escapeHandler()'\n    },\n    animations: [KbqNotificationCenterAnimations.state]\n})\nexport class KbqNotificationCenterComponent extends KbqPopUp implements AfterViewInit {\n    /** @docs-private */\n    protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n    /** @docs-private */\n    protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n    /** @docs-private */\n    protected readonly dateAdapter = inject(DateAdapter);\n    /** @docs-private */\n    protected readonly service = inject(KbqNotificationCenterService);\n\n    @ViewChild(KbqScrollbar) private scrollContainer: KbqScrollbar;\n\n    readonly externalConfiguration = inject(KBQ_NOTIFICATION_CENTER_CONFIGURATION, { optional: true });\n\n    configuration;\n\n    /** @docs-private */\n    protected popoverMode: boolean;\n\n    /** @docs-private */\n    protected isTopOverflow: boolean = false;\n    /** @docs-private */\n    protected isBottomOverflow: boolean = false;\n\n    /** Distance in pixels from the bottom of the list at which the next page is requested.\n     * @docs-private */\n    protected scrolledToBottomOffset: number = 0;\n\n    /** Emits on every scroll of the list container; drives the scroll-to-bottom check. */\n    private readonly scroll$ = new Subject<void>();\n\n    /** localized data\n     * @docs-private */\n    get localeData() {\n        return this.configuration;\n    }\n\n    /** @docs-private */\n    prefix = 'kbq-notification-center';\n    /** @docs-private */\n    trigger: KbqNotificationCenterTrigger;\n    /** @docs-private */\n    isTrapFocus: boolean = false;\n\n    @ViewChild('notificationSwitcher') switcher: KbqButton;\n\n    get popoverHeight(): string {\n        return this._popoverHeight;\n    }\n\n    set popoverHeight(value: string) {\n        this._popoverHeight = value;\n\n        this.elementRef.nativeElement.style.height = value;\n    }\n\n    private _popoverHeight: string;\n\n    constructor() {\n        super();\n\n        this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n        if (!this.localeService) {\n            this.initDefaultParams();\n        }\n    }\n\n    ngAfterViewInit() {\n        this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((state) => {\n            if (this.offset !== null && state) {\n                applyPopupMargins(\n                    this.renderer,\n                    this.elementRef.nativeElement,\n                    this.prefix,\n                    `${this.offset!.toString()}px`\n                );\n            }\n\n            this.setStickPosition();\n        });\n\n        this.service.changes\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.changeDetectorRef.markForCheck());\n\n        this.switcher.focus();\n\n        setTimeout(this.checkOverflow);\n\n        this.subscribeToScrolledToBottom();\n    }\n\n    /** Handles the list container scroll: updates overflow shadows and feeds the scroll-to-bottom check.\n     * @docs-private */\n    protected onContainerScroll(): void {\n        this.checkOverflow();\n        this.scroll$.next();\n    }\n\n    /** Retries loading the next page from the bottom error row.\n     * @docs-private */\n    protected retryLoadMore(): void {\n        // The retry button is about to unmount; keep keyboard focus inside the panel instead of\n        // letting it fall back to <body>.\n        this.focusScrollContainer();\n\n        // Clear the bottom error state here so the spinner and the error row can never be shown at\n        // the same time, regardless of what the consumer's `onNextPage` handler does.\n        this.service.setLoadMoreErrorMode(false);\n\n        this.service.onNextPage.emit();\n    }\n\n    /**\n     * Requests the next page (via `service.onNextPage`) once the list is scrolled to within\n     * `scrolledToBottomOffset` pixels of the bottom. Two triggers feed it: the user scrolling, and a\n     * page finishing loading. The latter keeps paging when a freshly loaded page is too short to\n     * overflow the viewport — otherwise no further scroll event would fire and pagination would\n     * stall. Suppressed while a load is in flight, errored, or when there is nothing more to load.\n     */\n    private subscribeToScrolledToBottom(): void {\n        const scrolledToBottom$ = this.scroll$.pipe(\n            auditTime(SCROLLED_TO_BOTTOM_AUDIT_TIME),\n            map(() => this.isScrolledToBottom()),\n            distinctUntilChanged(),\n            filter(Boolean)\n        );\n\n        // Re-measure once a load completes (and the appended items have rendered): if the list still\n        // sits at the bottom, continue paging instead of waiting for a scroll event that never comes.\n        const loadCompleted$ = this.service.loadingMore.pipe(\n            distinctUntilChanged(),\n            pairwise(),\n            filter(([wasLoading, isLoading]) => wasLoading && !isLoading),\n            auditTime(SCROLLED_TO_BOTTOM_AUDIT_TIME),\n            filter(() => this.isScrolledToBottom())\n        );\n\n        merge(scrolledToBottom$, loadCompleted$)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.requestNextPage());\n    }\n\n    /** Whether the list is scrolled to within `scrolledToBottomOffset` pixels of the bottom. */\n    private isScrolledToBottom(): boolean {\n        const { scrollTop, clientHeight, scrollHeight } = this.scrollContainer.contentElement.nativeElement;\n\n        return scrollHeight - scrollTop - clientHeight <= this.scrolledToBottomOffset;\n    }\n\n    /** Emits `onNextPage` unless a load is already in flight, errored, or there is nothing more to load. */\n    private requestNextPage(): void {\n        if (this.service.hasMore.value && !this.service.loadingMore.value && !this.service.loadMoreErrorMode.value) {\n            this.service.onNextPage.emit();\n        }\n    }\n\n    private focusScrollContainer(): void {\n        const element = this.scrollContainer.contentElement.nativeElement;\n\n        // tabindex -1 keeps the container out of the Tab order while allowing programmatic focus.\n        element.setAttribute('tabindex', '-1');\n        element.focus({ preventScroll: true });\n    }\n\n    /** @docs-private */\n    updateClassMap(placement: string, customClass: string, size: KbqPopUpSizeValues) {\n        super.updateClassMap(placement, customClass, { [`${this.prefix}_${size}`]: !!size });\n    }\n\n    /** @docs-private */\n    updateTrapFocus(isTrapFocus: boolean): void {\n        this.isTrapFocus = isTrapFocus;\n    }\n\n    /** @docs-private */\n    escapeHandler() {\n        this.hide(0);\n    }\n\n    protected checkOverflow = () => {\n        const nativeElement = this.scrollContainer.contentElement.nativeElement;\n\n        const { scrollTop, offsetHeight, scrollHeight } = nativeElement;\n\n        this.isTopOverflow = scrollTop > 0;\n\n        this.isBottomOverflow = scrollTop + offsetHeight < scrollHeight;\n\n        this.changeDetectorRef.markForCheck();\n    };\n\n    private updateLocaleParams = () => {\n        this.configuration = this.externalConfiguration || this.localeService?.getParams('notificationCenter');\n\n        this.changeDetectorRef.markForCheck();\n    };\n\n    private initDefaultParams() {\n        this.configuration = KBQ_NOTIFICATION_CENTER_DEFAULT_CONFIGURATION;\n    }\n}\n\n@Directive({\n    selector: '[kbqNotificationCenterTrigger]',\n    exportAs: 'kbqNotificationCenterTrigger',\n    host: {\n        '[class.kbq-notification-center_open]': 'isOpen',\n        '[class.kbq-active]': 'hasClickTrigger && isOpen'\n    }\n})\nexport class KbqNotificationCenterTrigger\n    extends KbqPopUpTrigger<KbqNotificationCenterComponent>\n    implements AfterContentInit\n{\n    /** @docs-private */\n    protected scrollStrategy: () => ScrollStrategy = inject(KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY);\n    /** @docs-private */\n    protected readonly service = inject(KbqNotificationCenterService);\n\n    // not used\n    /** @docs-private */\n    arrow: boolean = false;\n    /** @docs-private */\n    customClass: string;\n    /** @docs-private */\n    private hasBackdrop: boolean = false;\n    /** @docs-private */\n    private size: KbqPopUpSizeValues = PopUpSizes.Medium;\n    /** @docs-private */\n    content: string | TemplateRef<any>;\n    /** @docs-private */\n    header: string | TemplateRef<any>;\n    /** @docs-private */\n    footer: string | TemplateRef<any>;\n\n    /** Number of unread notifications */\n    get unreadItemsCounter() {\n        return this.service.unreadItemsCounter;\n    }\n\n    /** Placement of popUp */\n    @Input('kbqNotificationCenterPlacement') placement: KbqPopUpPlacementValues = PopUpPlacements.Right;\n\n    /** Class that will be used in the background */\n    @Input() backdropClass: string = 'cdk-overlay-transparent-backdrop';\n\n    /** Class that will be used in the panel */\n    @Input('kbqNotificationCenterPanelClass') panelClass: string;\n\n    /** Offset of popUp */\n    @Input({ transform: numberAttribute }) offset: number | null = defaultOffsetX;\n\n    /** Distance in pixels from the bottom of the list at which the next page is requested via `onNextPage`. */\n    @Input({ transform: numberAttribute }) scrolledToBottomOffset: number = 0;\n\n    /** Use popover or not */\n    @Input({ transform: booleanAttribute })\n    get popoverMode(): boolean {\n        return this._popoverMode;\n    }\n\n    set popoverMode(value: boolean) {\n        this._popoverMode = value;\n\n        this.placement = PopUpPlacements.Bottom;\n        this.updatePlacementPriority(['bottomCenter', 'bottomLeft', 'bottomRight']);\n    }\n\n    private _popoverMode: boolean = false;\n\n    /** Set height of popover. Default is calc(100vh - 48px). 48px - height of navbar */\n    @Input()\n    get popoverHeight(): string {\n        return this._popoverHeight;\n    }\n\n    set popoverHeight(value: string) {\n        this._popoverHeight = value;\n\n        if (this.instance?.popoverHeight) {\n            this.instance.popoverHeight = value;\n        }\n    }\n\n    private _popoverHeight: string;\n\n    /** Whether the trigger is disabled. */\n    @Input({ transform: booleanAttribute })\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value) {\n        this._disabled = coerceBooleanProperty(value);\n\n        if (this._disabled) {\n            this.hide();\n        }\n    }\n\n    /**\n     * Additionally positions the element relative to the window side (Top, Right, Bottom and Left).\n     * If container is specified, the positioning will be relative to it.\n     * */\n    @Input() stickToWindow: KbqStickToWindowPlacementValues;\n\n    /** Container for additional positioning, used with stickToWindow */\n    @Input() container: HTMLElement;\n\n    /** @docs-private */\n    get hasClickTrigger(): boolean {\n        return this.trigger.includes(PopUpTriggers.Click);\n    }\n\n    /** Emits a change event whenever the placement state changes. */\n    @Output('kbqPlacementChange') readonly placementChange = new EventEmitter();\n\n    /** Emits a change event whenever the visible state changes. */\n    @Output('kbqVisibleChange') readonly visibleChange = new EventEmitter<boolean>();\n\n    /** @docs-private */\n    trigger: string = `${PopUpTriggers.Click}, ${PopUpTriggers.Keydown}`;\n\n    /** @docs-private */\n    protected originSelector = '.kbq-notification-center';\n\n    /** @docs-private */\n    protected get overlayConfig(): OverlayConfig {\n        const defaultPanelClass = 'kbq-notification-center__panel';\n\n        return {\n            panelClass: this.panelClass ? [defaultPanelClass, this.panelClass] : defaultPanelClass,\n            hasBackdrop: this.hasBackdrop,\n            backdropClass: this.backdropClass\n        };\n    }\n\n    /** @docs-private */\n    protected preventClosingByInnerScrollSubscription: Subscription;\n\n    constructor() {\n        super();\n\n        this.updatePlacementPriority(['right', 'rightBottom', 'rightTop']);\n    }\n\n    ngAfterContentInit(): void {\n        this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible: boolean) => {\n            if (visible) {\n                // eslint-disable-next-line rxjs/no-nested-subscribe\n                this.preventClosingByInnerScrollSubscription = this.closingActions().subscribe((event) => {\n                    if (event && event['scrollDispatcher']) {\n                        this.instance.setStickPosition();\n\n                        event['kbqPopoverPreventHide'] = true;\n                        event['type'] = 'click';\n                    }\n                });\n            } else {\n                this.preventClosingByInnerScrollSubscription?.unsubscribe();\n                this.focus();\n            }\n        });\n    }\n\n    /** @docs-private */\n    updateData() {\n        if (!this.instance) return;\n\n        this.instance.header = this.header;\n        this.instance.content = this.content;\n        this.instance.arrow = this.arrow;\n        this.instance.offset = this.offset;\n        this.instance.footer = this.footer;\n        this.instance.popoverMode = this.popoverMode;\n        this.instance.popoverHeight = this.popoverHeight;\n        this.instance.scrolledToBottomOffset = this.scrolledToBottomOffset;\n\n        this.instance.updateTrapFocus(this.trigger !== PopUpTriggers.Focus);\n\n        if (this.isOpen) {\n            this.updatePosition(true);\n        }\n    }\n\n    /** Updates the current position.\n     *\n     * @docs-private */\n    updatePosition(reapplyPosition: boolean = false) {\n        this.overlayRef = this.createOverlay();\n\n        const position = (this.overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy)\n            .withPositions(this.getAdjustedPositions())\n            .withPush(true);\n\n        if (reapplyPosition) {\n            setTimeout(() => position.reapplyLastPosition());\n        }\n    }\n\n    /** @docs-private */\n    getOverlayHandleComponentType(): Type<KbqNotificationCenterComponent> {\n        return KbqNotificationCenterComponent;\n    }\n\n    /** @docs-private */\n    updateClassMap(newPlacement: string = this.placement) {\n        if (!this.instance) return;\n\n        this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], this.customClass, this.size);\n        this.instance.markForCheck();\n    }\n\n    /** @docs-private */\n    closingActions() {\n        return merge(\n            this.overlayRef!.outsidePointerEvents(),\n            this.overlayRef!.backdropClick(),\n            this.scrollDispatcher.scrolled()\n        );\n    }\n}\n","<div class=\"kbq-notification-center-header\">\n    <div class=\"kbq-notification-center-title\">\n        <div class=\"kbq-notification-center-title__text\">{{ localeData.notifications }}</div>\n        <button\n            #notificationSwitcher\n            #dropdownTrigger=\"kbqDropdownTrigger\"\n            kbq-button\n            class=\"kbq-notification-center-title__button\"\n            data-testid=\"kbq-notification-center-silent-mode-toggle\"\n            [kbqDropdownTriggerFor]=\"notificationSwitcherDropdown\"\n            [kbqTooltip]=\"service.silentMode.value ? localeData.doNotDisturb : localeData.showPopUpNotifications\"\n            [kbqTooltipArrow]=\"false\"\n            [kbqPlacement]=\"'right'\"\n            [kbqTooltipOffset]=\"4\"\n            [kbqTooltipDisabled]=\"dropdownTrigger.opened\"\n            [kbqStyle]=\"'transparent'\"\n            [color]=\"'contrast'\"\n        >\n            <i kbq-icon=\"{{ service.silentMode.value ? 'kbq-bell-slash_16' : 'kbq-bell_16' }}\"></i>\n        </button>\n    </div>\n    <div class=\"kbq-notification-center-toolbar\">\n        @if (!service.isEmpty) {\n            <button\n                kbq-button\n                class=\"kbq-notification-center-toolbar__button\"\n                data-testid=\"kbq-notification-center-remove-all-button\"\n                [kbqStyle]=\"'transparent'\"\n                [color]=\"'contrast'\"\n                (click)=\"service.removeAll()\"\n            >\n                <i kbq-icon=\"kbq-trash_16\"></i>\n            </button>\n\n            <kbq-divider [vertical]=\"true\" />\n        }\n\n        <button\n            kbq-button\n            class=\"kbq-notification-center-toolbar__button\"\n            data-testid=\"kbq-notification-center-close-button\"\n            [kbqStyle]=\"'transparent'\"\n            [color]=\"'contrast'\"\n            (click)=\"hide(0)\"\n        >\n            <i kbq-icon=\"kbq-xmark_16\"></i>\n        </button>\n    </div>\n</div>\n\n<div\n    kbq-scrollbar\n    class=\"kbq-notification-center-container\"\n    data-testid=\"kbq-notification-center-container\"\n    [class.kbq-notification-center_bottom-overflow]=\"isBottomOverflow\"\n    (onScroll)=\"onContainerScroll()\"\n>\n    @if (!service.errorMode.value) {\n        @if (!service.loadingMode.value) {\n            @for (group of service.groupedItems | async; track group) {\n                <div\n                    class=\"kbq-notification-center-sub-header\"\n                    data-testid=\"kbq-notification-center-group\"\n                    [class.kbq-notification-center_top-overflow]=\"isTopOverflow\"\n                >\n                    <div class=\"kbq-notification-center-sub-header__date\">{{ group.title }}</div>\n\n                    <button\n                        kbq-button\n                        class=\"kbq-notification-center-sub-header__button\"\n                        data-testid=\"kbq-notification-center-remove-group-button\"\n                        [kbqStyle]=\"'transparent'\"\n                        [color]=\"'contrast'\"\n                        [kbqTooltip]=\"localeData.remove\"\n                        [kbqPlacement]=\"'right'\"\n                        [kbqTooltipArrow]=\"false\"\n                        (click)=\"service.removeGroup(group)\"\n                    >\n                        <i kbq-icon=\"kbq-trash_16\"></i>\n                    </button>\n                </div>\n\n                @for (item of group.items; track item) {\n                    <kbq-notification-item [data]=\"item\" />\n                }\n            } @empty {\n                @if (!service.loadingMore.value) {\n                    <div class=\"kbq-notification-center-empty-container\" data-testid=\"kbq-notification-center-empty\">\n                        <i kbq-icon-item=\"kbq-bell_16\" [big]=\"true\" [color]=\"'contrast-fade'\"></i>\n                        {{ localeData.noNotifications }}\n                    </div>\n                }\n            }\n\n            @if (service.loadingMore.value) {\n                <div\n                    class=\"kbq-notification-center-load-more\"\n                    data-testid=\"kbq-notification-center-load-more\"\n                    role=\"status\"\n                    [attr.aria-label]=\"localeData.loadingMore\"\n                >\n                    <kbq-progress-spinner [mode]=\"'indeterminate'\" [size]=\"'compact'\" />\n                </div>\n            }\n\n            @if (service.loadMoreErrorMode.value) {\n                <div\n                    class=\"kbq-notification-center-load-more-error\"\n                    data-testid=\"kbq-notification-center-load-more-error\"\n                    role=\"alert\"\n                >\n                    {{ localeData.failedToLoadNotifications }}\n                    <button\n                        kbq-button\n                        data-testid=\"kbq-notification-center-load-more-retry-button\"\n                        [kbqStyle]=\"'transparent'\"\n                        [color]=\"'theme'\"\n                        (click)=\"retryLoadMore()\"\n                    >\n                        {{ localeData.repeat }}\n                    </button>\n                </div>\n            }\n        } @else {\n            <kbq-loader-overlay data-testid=\"kbq-notification-center-loader\" [transparent]=\"true\" />\n        }\n    } @else {\n        <div class=\"kbq-notification-center-error-container\" data-testid=\"kbq-notification-center-error\">\n            <i kbq-icon-item=\"kbq-bell_16\" [big]=\"true\" [color]=\"'error'\" [fade]=\"true\"></i>\n            {{ localeData.failedToLoadNotifications }}\n            <button\n                kbq-button\n                data-testid=\"kbq-notification-center-reload-button\"\n                [kbqStyle]=\"'transparent'\"\n                [color]=\"'theme'\"\n                (click)=\"service.onReload.emit()\"\n            >\n                {{ localeData.repeat }}\n            </button>\n        </div>\n    }\n</div>\n\n<kbq-dropdown #notificationSwitcherDropdown=\"kbqDropdown\">\n    <button\n        kbq-dropdown-item\n        data-testid=\"kbq-notification-center-show-notifications-button\"\n        (click)=\"service.setSilentMode(false)\"\n    >\n        <i kbq-icon=\"{{ !service.silentMode.value ? 'kbq-circle-xs_16' : '' }}\" [style.min-width.px]=\"16\"></i>\n        {{ localeData.showPopUpNotifications }}\n    </button>\n    <button\n        kbq-dropdown-item\n        data-testid=\"kbq-notification-center-do-not-disturb-button\"\n        (click)=\"service.setSilentMode(true)\"\n    >\n        <i kbq-icon=\"{{ service.silentMode.value ? 'kbq-circle-xs_16' : '' }}\" [style.min-width.px]=\"16\"></i>\n        {{ localeData.doNotDisturb }}\n    </button>\n</kbq-dropdown>\n","import { ConfigurableFocusTrapFactory, FOCUS_TRAP_INERT_STRATEGY, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { DateAdapter, DateFormatter, EmptyFocusTrapStrategy } from '@koobiq/components/core';\nimport {\n    KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n    KbqNotificationCenterComponent,\n    KbqNotificationCenterTrigger\n} from './notification-center';\nimport { KbqNotificationCenterService } from './notification-center.service';\n\n@NgModule({\n    imports: [\n        KbqNotificationCenterComponent,\n        KbqNotificationCenterTrigger\n    ],\n    exports: [\n        KbqNotificationCenterComponent,\n        KbqNotificationCenterTrigger\n    ],\n    providers: [\n        KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n        { provide: FocusTrapFactory, useClass: ConfigurableFocusTrapFactory },\n        { provide: FOCUS_TRAP_INERT_STRATEGY, useClass: EmptyFocusTrapStrategy },\n        { provide: KbqNotificationCenterService, deps: [DateAdapter, DateFormatter] }\n    ]\n})\nexport class KbqNotificationCenterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}