{"version":3,"file":"koobiq-components-sidepanel.mjs","sources":["../../../packages/components/sidepanel/sidepanel-config.ts","../../../packages/components/sidepanel/sidepanel-animations.ts","../../../packages/components/sidepanel/sidepanel-container.component.ts","../../../packages/components/sidepanel/sidepanel-container.component.html","../../../packages/components/sidepanel/sidepanel-ref.ts","../../../packages/components/sidepanel/sidepanel.service.ts","../../../packages/components/sidepanel/sidepanel-directives.ts","../../../packages/components/sidepanel/sidepanel.module.ts","../../../packages/components/sidepanel/koobiq-components-sidepanel.ts"],"sourcesContent":["import { InjectionToken, Injector } from '@angular/core';\n\n/** Injection token that can be used to access the data that was passed in to a sidepanel. */\nexport const KBQ_SIDEPANEL_DATA = new InjectionToken<any>('KbqSidepanelData');\n\nexport enum KbqSidepanelPosition {\n    Right = 'right',\n    Left = 'left',\n    Top = 'top',\n    Bottom = 'bottom'\n}\n\nexport enum KbqSidepanelSize {\n    Small = 'small',\n    Medium = 'medium',\n    Large = 'large'\n}\n\nexport class KbqSidepanelConfig<D = any> {\n    /** ID for the sidepanel. If omitted, a unique one will be generated. */\n    id?: string;\n\n    /** Whether the focus trap is active. */\n    trapFocus?: boolean;\n\n    /** capture focus on initialization. This option sets cdkTrapFocusAutoCapture. */\n    trapFocusAutoCapture?: boolean;\n\n    /** Data being injected into the child component. */\n    data?: D | null = null;\n\n    position?: KbqSidepanelPosition = KbqSidepanelPosition.Right;\n\n    size?: KbqSidepanelSize = KbqSidepanelSize.Medium;\n\n    /** Whether the sidepanel has a backdrop. */\n    hasBackdrop?: boolean = true;\n\n    backdropClass?: string;\n\n    /**\n     * When we open multiple sidepanels, backdrop appears only once, except cases then this flag is true.\n     * @deprecated used single shared backdrop instead.\n     */\n    requiredBackdrop?: boolean = false;\n\n    /** Whether the user can use escape or clicking outside to close the sidepanel. */\n    disableClose?: boolean = false;\n\n    /** Custom class for the overlay pane. */\n    overlayPanelClass?: string | string[] = '';\n\n    /**\n     * Injector used for the instantiation of the component to be attached.\n     * Allows to pass a custom injector to provide a dependency injection hierarchy for the sidepanel content.\n     */\n    injector?: Injector;\n}\n","import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\nimport { KbqAnimationCurves, KbqAnimationDurations } from '@koobiq/components/core';\nimport { KbqSidepanelPosition } from './sidepanel-config';\n\nexport enum KbqSidepanelAnimationState {\n    Void = 'void',\n    Visible = 'visible',\n    Hidden = 'hidden',\n    Lower = 'lower',\n    BottomPanel = 'bottom-panel',\n    BecomingNormal = 'becoming-normal'\n}\n\n// TODO Find a way to use dynamic keys and avoid error \"Expression form not supported.\"\nexport const kbqSidepanelTransformAnimation: Record<\n    KbqSidepanelPosition,\n    { in: string; out: string; lower: string; bottomPanel: string; becomingNormal: string }\n> = {\n    right: {\n        in: 'translateX(100%)',\n        out: 'translateX(0)',\n        lower: 'scale(0.95) translateX(calc(-1 * var(--kbq-sidepanel-size-panel-lower-offset)))',\n        bottomPanel: 'scale(0.9) translateX(calc(-2 * var(--kbq-sidepanel-size-panel-lower-offset)))',\n        becomingNormal: 'translateX(0) scale(1)'\n    },\n    left: {\n        in: 'translateX(-100%) scale(1)',\n        out: 'translateX(0%) scale(1)',\n        lower: 'scale(0.95) translateX(var(--kbq-sidepanel-size-panel-lower-offset))',\n        bottomPanel: 'scale(0.9) translateX(calc(2 * var(--kbq-sidepanel-size-panel-lower-offset)))',\n        becomingNormal: 'translateX(0%) scale(1)'\n    },\n    top: {\n        in: 'translateY(-100%)',\n        out: 'translateY(0%)',\n        lower: 'scale(0.95) translateY(var(--kbq-sidepanel-size-panel-lower-offset))',\n        bottomPanel: 'scale(0.9) translateY(calc(2 * var(--kbq-sidepanel-size-panel-lower-offset)))',\n        becomingNormal: 'translateY(0%) scale(1)'\n    },\n    bottom: {\n        in: 'translateY(100%)',\n        out: 'translateY(0%)',\n        lower: 'scale(0.95) translateY(calc(-1 * var(--kbq-sidepanel-size-panel-lower-offset)))',\n        bottomPanel: 'scale(0.9) translateY(calc(-2 * var(--kbq-sidepanel-size-panel-lower-offset)))',\n        becomingNormal: 'translateY(0%) scale(1)'\n    }\n};\n\nexport const kbqSidepanelAnimations: { readonly sidepanelState: AnimationTriggerMetadata } = {\n    sidepanelState: trigger('state', [\n        state(KbqSidepanelAnimationState.Void, style({ opacity: 0 })),\n        state(KbqSidepanelAnimationState.Hidden, style({ transform: '{{transformIn}}' }), {\n            params: { transformIn: kbqSidepanelTransformAnimation[KbqSidepanelPosition.Right].in }\n        }),\n        state(KbqSidepanelAnimationState.Visible, style({ transform: '{{transformOut}}', opacity: 1 }), {\n            params: { transformOut: kbqSidepanelTransformAnimation[KbqSidepanelPosition.Right].out }\n        }),\n        state(KbqSidepanelAnimationState.Lower, style({ transform: '{{lower}}', opacity: 1 }), {\n            params: { lower: kbqSidepanelTransformAnimation[KbqSidepanelPosition.Right].lower }\n        }),\n        state(KbqSidepanelAnimationState.BottomPanel, style({ transform: '{{bottomPanel}}', opacity: 0 }), {\n            params: { bottomPanel: kbqSidepanelTransformAnimation[KbqSidepanelPosition.Right].bottomPanel }\n        }),\n        state(KbqSidepanelAnimationState.BecomingNormal, style({ transform: '{{becomingNormal}}', opacity: 1 }), {\n            params: { becomingNormal: kbqSidepanelTransformAnimation[KbqSidepanelPosition.Right].becomingNormal }\n        }),\n        transition('* <=> *', animate(`${KbqAnimationDurations.Long} ${KbqAnimationCurves.EaseInOutQuad}`))\n    ])\n};\n","import { AnimationEvent } from '@angular/animations';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ComponentRef,\n    ElementRef,\n    EmbeddedViewRef,\n    EventEmitter,\n    Inject,\n    InjectionToken,\n    OnDestroy,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n    kbqSidepanelAnimations,\n    KbqSidepanelAnimationState,\n    kbqSidepanelTransformAnimation\n} from './sidepanel-animations';\nimport { KbqSidepanelConfig, KbqSidepanelPosition } from './sidepanel-config';\n\nexport const KBQ_SIDEPANEL_WITH_INDENT = new InjectionToken<boolean>('kbq-sidepanel-with-indent');\n\n/** @deprecated */\nexport const KBQ_SIDEPANEL_WITH_SHADOW = new InjectionToken<boolean>('kbq-sidepanel-with-shadow');\n\n@Component({\n    selector: 'kbq-sidepanel-container',\n    imports: [\n        CdkPortalOutlet,\n        CdkTrapFocus\n    ],\n    templateUrl: './sidepanel-container.component.html',\n    styleUrls: ['./sidepanel.scss', './sidepanel-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: [kbqSidepanelAnimations.sidepanelState],\n    host: {\n        class: 'kbq-sidepanel-container kbq-sidepanel-container_shadowed',\n        '[class]': 'size',\n        '[class.kbq-sidepanel_nested]': 'withIndent',\n        '[attr.id]': 'id',\n        '[attr.tabindex]': '-1',\n        '[@state]': `{\n            value: animationState,\n            params: animationTransform\n        }`,\n        '(@state.start)': 'onAnimation($event)',\n        '(@state.done)': 'onAnimation($event)'\n    }\n})\nexport class KbqSidepanelContainerComponent extends BasePortalOutlet implements OnDestroy {\n    /** ID for the container DOM element. */\n    id: string;\n\n    /** The portal outlet inside of this container into which the content will be loaded. */\n    @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet: CdkPortalOutlet;\n\n    /** The state of the sidepanel animations. */\n    animationState: KbqSidepanelAnimationState = KbqSidepanelAnimationState.Void;\n\n    /** @docs-private */\n    animationTransform: {\n        transformIn: string;\n        transformOut: string;\n        lower: string;\n        bottomPanel: string;\n        becomingNormal: string;\n    };\n\n    /** Emits whenever the state of the animation changes. */\n    animationStateChanged = new EventEmitter<AnimationEvent>();\n\n    /** @docs-private */\n    get size(): string {\n        return `kbq-sidepanel_${this.sidepanelConfig.size}`;\n    }\n\n    /** @docs-private */\n    get trapFocusAutoCapture(): boolean {\n        return this.sidepanelConfig.trapFocusAutoCapture ?? !!this.sidepanelConfig.hasBackdrop;\n    }\n\n    /** @docs-private */\n    get trapFocus(): boolean {\n        return this.sidepanelConfig.trapFocus ?? !!this.sidepanelConfig.hasBackdrop;\n    }\n\n    /** @docs-private */\n    protected readonly indentClickEmitter = new Subject<MouseEvent>();\n\n    /** Whether the component has been destroyed. */\n    private destroyed: boolean;\n\n    constructor(\n        private elementRef: ElementRef<HTMLElement>,\n        private changeDetectorRef: ChangeDetectorRef,\n        public sidepanelConfig: KbqSidepanelConfig,\n        @Inject(KBQ_SIDEPANEL_WITH_INDENT) public withIndent: boolean\n    ) {\n        super();\n    }\n\n    ngOnDestroy(): void {\n        this.destroyed = true;\n    }\n\n    /**\n     * Gets an observable that emits when the indent has been clicked.\n     *\n     * @docs-private\n     */\n    indentClick(): Observable<MouseEvent> {\n        return this.indentClickEmitter.asObservable();\n    }\n\n    /** Attach a component portal as content to this sidepanel container. */\n    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n        this.validatePortalAttached();\n        this.setAnimation();\n        this.setPanelClass();\n\n        return this.portalOutlet.attachComponentPortal(portal);\n    }\n\n    /** Attach a template portal as content to this sidepanel container. */\n    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n        this.validatePortalAttached();\n        this.setAnimation();\n        this.setPanelClass();\n\n        return this.portalOutlet.attachTemplatePortal(portal);\n    }\n\n    /** Begin animation of the sidepanel entrance into view. */\n    enter(): void {\n        if (this.destroyed) return;\n\n        this.animationState = KbqSidepanelAnimationState.Visible;\n        this.changeDetectorRef.detectChanges();\n    }\n\n    /** Begin animation of the sidepanel exiting from view. */\n    exit(): void {\n        if (this.destroyed) return;\n\n        this.setAnimationState(KbqSidepanelAnimationState.Hidden);\n    }\n\n    /** @docs-private */\n    onAnimation(event: AnimationEvent) {\n        this.animationStateChanged.emit(event);\n    }\n\n    /** @docs-private */\n    setAnimationState(state: KbqSidepanelAnimationState): void {\n        this.animationState = state;\n        this.changeDetectorRef.markForCheck();\n    }\n\n    private setAnimation() {\n        const position: KbqSidepanelPosition = this.sidepanelConfig.position!;\n\n        this.animationTransform = {\n            transformIn: kbqSidepanelTransformAnimation[position].in,\n            transformOut: kbqSidepanelTransformAnimation[position].out,\n            lower: kbqSidepanelTransformAnimation[position].lower,\n            bottomPanel: kbqSidepanelTransformAnimation[position].bottomPanel,\n            becomingNormal: kbqSidepanelTransformAnimation[position].becomingNormal\n        };\n    }\n\n    private setPanelClass() {\n        const element: HTMLElement = this.elementRef.nativeElement;\n        const position: KbqSidepanelPosition = this.sidepanelConfig.position!;\n\n        element.classList.add(`kbq-sidepanel-container_${position}`);\n    }\n\n    private validatePortalAttached() {\n        if (this.portalOutlet.hasAttached()) {\n            throw Error('Attempting to attach sidepanel content after content is already attached');\n        }\n    }\n}\n","<div class=\"kbq-sidepanel-wrapper\">\n    @if (withIndent) {\n        <div class=\"kbq-sidepanel-indent\" (click)=\"indentClickEmitter.next($event)\"></div>\n    }\n\n    <div class=\"kbq-sidepanel-content\" [cdkTrapFocus]=\"trapFocus\" [cdkTrapFocusAutoCapture]=\"trapFocusAutoCapture\">\n        <ng-template cdkPortalOutlet />\n    </div>\n</div>\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { signal } from '@angular/core';\nimport { ESCAPE } from '@koobiq/cdk/keycodes';\nimport { isHtmlElement } from '@koobiq/components/core';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { filter, take, tap } from 'rxjs/operators';\nimport { KbqSidepanelAnimationState } from './sidepanel-animations';\nimport { KbqSidepanelConfig } from './sidepanel-config';\nimport { KbqSidepanelContainerComponent } from './sidepanel-container.component';\n\n// Counter for unique sidepanel ids.\nlet uniqueId = 0;\n\nexport class KbqSidepanelRef<T = any, R = any> {\n    readonly id: string;\n\n    /**\n     * Vertical scroll overflow state of the sidepanel body.\n     * Updated on scroll and used for visual adjustments.\n     */\n    bodyOverflow = signal({ top: false, bottom: false });\n\n    /** Instance of the component making up the content of the sidepanel. */\n    instance: T;\n\n    /** Subject for notifying the user that the sidepanel has been closed and dismissed. */\n    private readonly afterClosed$ = new Subject<R | undefined>();\n\n    /** Subject for notifying the user that the sidepanel starting closing. */\n    private readonly beforeClosed$ = new Subject<void>();\n\n    /** Subject for notifying the user that the sidepanel has opened and appeared. */\n    private readonly afterOpened$ = new Subject<void>();\n\n    /** Result to be passed down to the `afterDismissed` stream. */\n    private result: R | undefined;\n\n    constructor(\n        public readonly containerInstance: KbqSidepanelContainerComponent,\n        public readonly overlayRef: OverlayRef,\n        public readonly config: KbqSidepanelConfig\n    ) {\n        this.id = this.config.id || `kbq-sidepanel-${uniqueId++}`;\n        this.containerInstance.id = this.id;\n        overlayRef.backdropElement?.classList?.add(config.backdropClass ?? 'kbq-overlay-dark-backdrop');\n\n        const slideBelowStart = containerInstance.animationStateChanged.pipe(\n            filter(\n                (event) =>\n                    event.phaseName === 'start' &&\n                    [KbqSidepanelAnimationState.Lower, KbqSidepanelAnimationState.BottomPanel].includes(\n                        event.toState as any\n                    )\n            )\n        );\n\n        // Act on close\n        const beforeClosed = containerInstance.animationStateChanged.pipe(\n            filter(({ phaseName, toState }) => phaseName === 'start' && toState === KbqSidepanelAnimationState.Hidden),\n            take(1),\n            tap(() => {\n                this.beforeClosed$.next();\n                this.beforeClosed$.complete();\n            })\n        );\n\n        // Emit when opening animation completes\n        containerInstance.animationStateChanged\n            .pipe(\n                filter((event) => event.phaseName === 'done' && event.toState === KbqSidepanelAnimationState.Visible),\n                take(1)\n            )\n            .subscribe(() => {\n                this.afterOpened$.next();\n                this.afterOpened$.complete();\n            });\n\n        containerInstance.animationStateChanged\n            .pipe(\n                filter(\n                    (event) =>\n                        event.phaseName === 'start' && event.toState === KbqSidepanelAnimationState.BecomingNormal\n                )\n            )\n            .subscribe(() => {\n                if (overlayRef.backdropElement?.style) {\n                    overlayRef.backdropElement.style.opacity = '1';\n                }\n            });\n\n        merge(slideBelowStart, beforeClosed).subscribe(() => {\n            if (overlayRef.backdropElement?.style) {\n                overlayRef.backdropElement.style.opacity = '0';\n            }\n        });\n\n        // Dispose overlay when closing animation is complete\n        containerInstance.animationStateChanged\n            .pipe(\n                filter((event) => event.phaseName === 'done' && event.toState === KbqSidepanelAnimationState.Hidden),\n                take(1)\n            )\n            .subscribe(() => {\n                overlayRef.dispose();\n                this.afterClosed$.next(this.result);\n                this.afterClosed$.complete();\n            });\n\n        merge(\n            overlayRef.backdropClick(),\n            overlayRef.keydownEvents().pipe(\n                // keyCode is deprecated, but IE11 and Edge don't support code property, which we need use instead\n                filter((event) => event.keyCode === ESCAPE)\n            ),\n            this.containerInstance.indentClick(),\n            overlayRef\n                .outsidePointerEvents()\n                .pipe(\n                    filter((event) => isHtmlElement(event.target) && !!event.target.closest('.kbq-sidepanel-container'))\n                )\n        ).subscribe(() => {\n            if (this.config.disableClose) return;\n\n            this.close();\n        });\n    }\n\n    close(result?: R): void {\n        if (!this.afterClosed$.closed) {\n            // Transition the backdrop in parallel to the sidepanel.\n            this.containerInstance.animationStateChanged\n                .pipe(\n                    filter((event) => event.phaseName === 'done'),\n                    take(1)\n                )\n                .subscribe(() => this.overlayRef.detachBackdrop());\n\n            this.result = result;\n            this.containerInstance.exit();\n        }\n    }\n\n    /** Gets an observable that is notified when the sidepanel is started closing. */\n    beforeClosed(): Observable<void> {\n        return this.beforeClosed$.asObservable();\n    }\n\n    /** Gets an observable that is notified when the sidepanel is finished closing. */\n    afterClosed(): Observable<R | undefined> {\n        return this.afterClosed$.asObservable();\n    }\n\n    /** Gets an observable that is notified when the sidepanel has opened and appeared. */\n    afterOpened(): Observable<void> {\n        return this.afterOpened$.asObservable();\n    }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, ComponentType, TemplatePortal } from '@angular/cdk/portal';\nimport {\n    ComponentRef,\n    Inject,\n    Injectable,\n    InjectionToken,\n    Injector,\n    OnDestroy,\n    Optional,\n    SkipSelf,\n    TemplateRef\n} from '@angular/core';\nimport { KbqSidepanelAnimationState } from './sidepanel-animations';\nimport { KBQ_SIDEPANEL_DATA, KbqSidepanelConfig } from './sidepanel-config';\nimport { KBQ_SIDEPANEL_WITH_INDENT, KbqSidepanelContainerComponent } from './sidepanel-container.component';\nimport { KbqSidepanelRef } from './sidepanel-ref';\n\n/** Injection token that can be used to specify default sidepanel options. */\nexport const KBQ_SIDEPANEL_DEFAULT_OPTIONS = new InjectionToken<KbqSidepanelConfig>('kbq-sidepanel-default-options');\n\n@Injectable()\nexport class KbqSidepanelService implements OnDestroy {\n    private openedSidepanelsAtThisLevel: KbqSidepanelRef[] = [];\n\n    /** Keeps track of the currently-open sidepanels. */\n    get openedSidepanels(): KbqSidepanelRef[] {\n        return this.parentSidepanelService\n            ? this.parentSidepanelService.openedSidepanels\n            : this.openedSidepanelsAtThisLevel;\n    }\n\n    constructor(\n        private overlay: Overlay,\n        private injector: Injector,\n        @Optional() @Inject(KBQ_SIDEPANEL_DEFAULT_OPTIONS) private defaultOptions: KbqSidepanelConfig,\n        @Optional() @SkipSelf() private parentSidepanelService: KbqSidepanelService\n    ) {}\n\n    ngOnDestroy() {\n        // Only close the sidepanels at this level on destroy\n        // since the parent service may still be active.\n        this.closeSidepanels(this.openedSidepanelsAtThisLevel);\n    }\n\n    open<T, D = any>(\n        componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n        config?: KbqSidepanelConfig<D>\n    ): KbqSidepanelRef<T> {\n        const fullConfig = {\n            ...(this.defaultOptions || new KbqSidepanelConfig()),\n            ...config\n        };\n\n        if (fullConfig.id && this.getSidepanelById(fullConfig.id)) {\n            throw Error(`Sidepanel with id \"${fullConfig.id}\" exists already. The sidepanel id must be unique.`);\n        }\n\n        const overlayRef = this.createOverlay(fullConfig);\n\n        overlayRef.hostElement.classList.add('kbq-sidepanel-overlay');\n        const container = this.attachContainer(overlayRef, fullConfig);\n        const ref = new KbqSidepanelRef(container, overlayRef, fullConfig);\n\n        if (componentOrTemplateRef instanceof TemplateRef) {\n            container.attachTemplatePortal(\n                new TemplatePortal<T>(\n                    componentOrTemplateRef,\n                    null!,\n                    {\n                        $implicit: fullConfig.data,\n                        sidepanelRef: ref\n                    } as any,\n                    this.createInjector(fullConfig, ref, container)\n                )\n            );\n        } else {\n            const portal = new ComponentPortal(\n                componentOrTemplateRef,\n                undefined,\n                this.createInjector(fullConfig, ref, container)\n            );\n            const contentRef = container.attachComponentPortal(portal);\n\n            ref.instance = contentRef.instance;\n        }\n\n        this.openedSidepanels.push(ref);\n        ref.beforeClosed().subscribe(() => this.updateAnimationState(ref));\n        ref.afterClosed().subscribe(() => this.removeOpenSidepanel(ref));\n\n        container.enter();\n\n        return ref;\n    }\n\n    /**\n     * Closes all of the currently-open sidepanels.\n     */\n    closeAll(): void {\n        this.closeSidepanels(this.openedSidepanels);\n    }\n\n    /**\n     * Finds an open sidepanel by its id.\n     * @param id ID to use when looking up the sidepanel.\n     */\n    getSidepanelById(id: string): KbqSidepanelRef | undefined {\n        return this.openedSidepanels.find((sidepanel) => sidepanel.id === id);\n    }\n\n    /**\n     * Attaches the sidepanel container component to the overlay.\n     */\n    private attachContainer(overlayRef: OverlayRef, config: KbqSidepanelConfig): KbqSidepanelContainerComponent {\n        const openedSidepanelsWithSamePosition = this.getOpenedSidepanelsWithSamePosition(config);\n\n        const lower = openedSidepanelsWithSamePosition[openedSidepanelsWithSamePosition.length - 1];\n        const bottom = openedSidepanelsWithSamePosition[openedSidepanelsWithSamePosition.length - 2];\n\n        lower?.containerInstance.setAnimationState(KbqSidepanelAnimationState.Lower);\n        bottom?.containerInstance.setAnimationState(KbqSidepanelAnimationState.BottomPanel);\n\n        const injector = Injector.create({\n            parent: this.injector,\n            providers: [\n                { provide: KbqSidepanelConfig, useValue: config },\n                { provide: KBQ_SIDEPANEL_WITH_INDENT, useValue: openedSidepanelsWithSamePosition.length >= 1 }\n            ]\n        });\n\n        const containerPortal = new ComponentPortal(KbqSidepanelContainerComponent, undefined, injector);\n        const containerRef: ComponentRef<KbqSidepanelContainerComponent> = overlayRef.attach(containerPortal);\n\n        return containerRef.instance;\n    }\n\n    /**\n     * Creates a custom injector to be used inside the sidepanel. This allows a component loaded inside\n     * of a sidepanel to close itself and, optionally, to return a value.\n     * @param config Config object that is used to construct the sidepanel.\n     * @param sidepanelRef Reference to the sidepanel.\n     * @param sidepanelContainer Sidepanel container element that wraps all of the contents.\n     * @returns The custom injector that can be used inside the sidepanel.\n     */\n    private createInjector<T>(\n        config: KbqSidepanelConfig,\n        sidepanelRef: KbqSidepanelRef<T>,\n        sidepanelContainer: KbqSidepanelContainerComponent\n    ): Injector {\n        // The KbqSidepanelContainerComponent is injected in the portal as the KbqSidepanelContainerComponent and\n        // the sidepanel's content are created out of the same ViewContainerRef and as such, are siblings for injector\n        // purposes. To allow the hierarchy that is expected, the KbqSidepanelContainerComponent is explicitly\n        // added to the injection tokens.\n\n        return Injector.create({\n            parent: config.injector ?? this.injector,\n            providers: [\n                { provide: KbqSidepanelContainerComponent, useValue: sidepanelContainer },\n                { provide: KBQ_SIDEPANEL_DATA, useValue: config.data },\n                { provide: KbqSidepanelRef, useValue: sidepanelRef }\n            ]\n        });\n    }\n\n    /**\n     * Creates a new overlay and places it in the correct location.\n     * @param config The user-specified sidepanel config.\n     */\n    private createOverlay(config: KbqSidepanelConfig): OverlayRef {\n        const overlayConfig = new OverlayConfig({\n            hasBackdrop: config.hasBackdrop,\n            backdropClass: '',\n            maxWidth: '100%',\n            panelClass: config.overlayPanelClass,\n            scrollStrategy: this.overlay.scrollStrategies.block(),\n            positionStrategy: this.overlay.position().global()\n        });\n\n        return this.overlay.create(overlayConfig);\n    }\n\n    private closeSidepanels(sidepanels: KbqSidepanelRef[]) {\n        const reversedOpenedSidepanels = [...sidepanels.reverse()];\n\n        reversedOpenedSidepanels.forEach((sidepanelRef: KbqSidepanelRef) => sidepanelRef.close());\n    }\n\n    private getOpenedSidepanelsWithSamePosition(config: KbqSidepanelConfig): KbqSidepanelRef[] {\n        return this.openedSidepanels.filter((sidepanelRef) => sidepanelRef.config.position === config.position);\n    }\n\n    private updateAnimationState(sidepanelRef: KbqSidepanelRef) {\n        const index = this.openedSidepanels.indexOf(sidepanelRef);\n\n        // only allow animations if ref is last element in sidepanels list\n        if (index === -1 || index !== this.openedSidepanels.length - 1) return;\n\n        const [lower, bottom] = this.getLowerSidepanelsWithSamePosition(index);\n\n        lower?.containerInstance.setAnimationState(KbqSidepanelAnimationState.BecomingNormal);\n        bottom?.containerInstance.setAnimationState(KbqSidepanelAnimationState.Lower);\n    }\n\n    /**\n     * Removes a sidepanel from the array of open sidepanels.\n     * @param sidepanelRef Sidepanel to be removed.\n     */\n    private removeOpenSidepanel(sidepanelRef: KbqSidepanelRef) {\n        const index = this.openedSidepanels.indexOf(sidepanelRef);\n\n        if (index > -1) {\n            const [lower] = this.getLowerSidepanelsWithSamePosition(index);\n\n            lower?.containerInstance.setAnimationState(KbqSidepanelAnimationState.Visible);\n\n            this.openedSidepanels.splice(index, 1);\n        }\n    }\n\n    private getLowerSidepanelsWithSamePosition(index: number): KbqSidepanelRef[] {\n        const openedSidepanelsWithSamePosition = this.getOpenedSidepanelsWithSamePosition(\n            this.openedSidepanels[index].config\n        );\n\n        return [\n            openedSidepanelsWithSamePosition[openedSidepanelsWithSamePosition.length - 2],\n            openedSidepanelsWithSamePosition[openedSidepanelsWithSamePosition.length - 3]\n        ];\n    }\n}\n","import {\n    booleanAttribute,\n    Component,\n    Directive,\n    ElementRef,\n    inject,\n    Input,\n    OnChanges,\n    OnInit,\n    Optional,\n    SimpleChanges\n} from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { isHtmlElement } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleDirective } from '@koobiq/components/title';\nimport { KbqSidepanelRef } from './sidepanel-ref';\nimport { KbqSidepanelService } from './sidepanel.service';\n\n/**\n * Button that will close the current sidepanel.\n */\n@Directive({\n    selector: 'button[kbq-sidepanel-close], button[kbqSidepanelClose]',\n    host: {\n        class: 'kbq-sidepanel-close',\n        '(click)': 'sidepanelRef.close(sidepanelResult)'\n    }\n})\nexport class KbqSidepanelClose implements OnInit, OnChanges {\n    @Input('kbq-sidepanel-close') sidepanelResult: any;\n\n    @Input() kbqSidepanelClose: any;\n\n    constructor(\n        @Optional() public sidepanelRef: KbqSidepanelRef,\n        private elementRef: ElementRef<HTMLElement>,\n        private sidepanelService: KbqSidepanelService\n    ) {}\n\n    ngOnInit() {\n        if (!this.sidepanelRef) {\n            // When this directive is included in a sidepanel via TemplateRef (rather than being\n            // in a Component), the SidepanelRef isn't available via injection because embedded\n            // views cannot be given a custom injector. Instead, we look up the SidepanelRef by\n            // ID.\n            // This must occur in `onInit`, as the ID binding for the sidepanel container won't\n            // be resolved at constructor time. We use setTimeout by same reason.\n            setTimeout(() => {\n                this.sidepanelRef = getClosestSidepanel(this.elementRef, this.sidepanelService.openedSidepanels)!;\n            });\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const proxiedChange = changes.kbqSidepanelClose || changes.sidepanelResult;\n\n        if (proxiedChange) {\n            this.sidepanelResult = proxiedChange.currentValue;\n        }\n    }\n}\n\n/**\n * Header of a sidepanel.\n */\n@Component({\n    selector: 'kbq-sidepanel-header',\n    imports: [\n        KbqButtonModule,\n        KbqSidepanelClose,\n        KbqIconModule,\n        KbqTitleDirective\n    ],\n    template: `\n        <div class=\"kbq-sidepanel-title\" kbq-title>\n            <ng-content />\n        </div>\n\n        @if (closeable) {\n            <button kbq-button kbq-sidepanel-close type=\"button\" [color]=\"'contrast'\" [kbqStyle]=\"'transparent'\">\n                <i kbq-icon=\"kbq-xmark_16\" [color]=\"'contrast'\"></i>\n            </button>\n        }\n    `,\n    host: {\n        class: 'kbq-sidepanel-header',\n        '[class.kbq-sidepanel-header_truncate-text]': 'truncateText',\n        '[class.kbq-sidepanel-header_bottom-overflown]': 'sidepanelRef.bodyOverflow().top'\n    }\n})\nexport class KbqSidepanelHeader {\n    /** Add button for close sidepanel. Default false */\n    @Input({ transform: booleanAttribute }) closeable: boolean = false;\n\n    /** Enables text truncation. Default true */\n    @Input({ transform: booleanAttribute }) truncateText: boolean = true;\n\n    /** @docs-private */\n    protected sidepanelRef = inject(KbqSidepanelRef);\n}\n\n/**\n * Scrollable content container of a sidepanel.\n */\n@Directive({\n    selector: 'kbq-sidepanel-body, [kbq-sidepanel-body], kbqSidepanelBody',\n    host: {\n        class: 'kbq-sidepanel-body kbq-scrollbar',\n        '(scroll)': 'checkOverflow()'\n    }\n})\nexport class KbqSidepanelBody {\n    private readonly sidepanelRef = inject(KbqSidepanelRef);\n    private readonly elementRef = inject<ElementRef>(ElementRef);\n\n    /** @docs-private */\n    protected checkOverflow() {\n        const nativeElement = this.elementRef.nativeElement;\n\n        if (!isHtmlElement(nativeElement)) return;\n\n        const { scrollTop, offsetHeight, scrollHeight } = nativeElement;\n\n        this.sidepanelRef.bodyOverflow.set({\n            top: scrollTop > 0,\n            bottom: scrollTop + offsetHeight < scrollHeight\n        });\n    }\n}\n\n/**\n * Footer of a sidepanel.\n */\n@Directive({\n    selector: 'kbq-sidepanel-footer, [kbq-sidepanel-footer], kbqSidepanelFooter',\n    host: {\n        class: 'kbq-sidepanel-footer',\n        '[class.kbq-sidepanel-footer_top-overflown]': 'sidepanelRef.bodyOverflow().bottom'\n    }\n})\nexport class KbqSidepanelFooter {\n    /** @docs-private */\n    protected sidepanelRef = inject(KbqSidepanelRef);\n}\n\n/**\n * Actions block of a sidepanel footer.\n */\n@Directive({\n    selector: 'kbq-sidepanel-actions, [kbq-sidepanel-actions], kbqSidepanelActions',\n    host: {\n        class: 'kbq-sidepanel-actions'\n    }\n})\nexport class KbqSidepanelActions {}\n\n/**\n * Finds the closest KbqSidepanelRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a sidepanel.\n * @param openSidepanels References to the currently-open sidepanels.\n */\nfunction getClosestSidepanel(element: ElementRef<HTMLElement>, openSidepanels: KbqSidepanelRef[]) {\n    let parent: HTMLElement | null = element.nativeElement.parentElement;\n\n    while (parent && !parent.classList.contains('kbq-sidepanel-container')) {\n        parent = parent.parentElement;\n    }\n\n    return parent ? openSidepanels.find((sidepanel) => sidepanel.id === parent!.id) : null;\n}\n","import { A11yModule, ConfigurableFocusTrapFactory, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { NgModule } from '@angular/core';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqSidepanelContainerComponent } from './sidepanel-container.component';\nimport {\n    KbqSidepanelActions,\n    KbqSidepanelBody,\n    KbqSidepanelClose,\n    KbqSidepanelFooter,\n    KbqSidepanelHeader\n} from './sidepanel-directives';\nimport { KbqSidepanelService } from './sidepanel.service';\n\n@NgModule({\n    imports: [\n        OverlayModule,\n        PortalModule,\n        KbqButtonModule,\n        KbqIconModule,\n        KbqTitleModule,\n        A11yModule,\n        KbqSidepanelContainerComponent,\n        KbqSidepanelClose,\n        KbqSidepanelHeader,\n        KbqSidepanelBody,\n        KbqSidepanelFooter,\n        KbqSidepanelActions\n    ],\n    exports: [\n        KbqSidepanelContainerComponent,\n        KbqSidepanelClose,\n        KbqSidepanelHeader,\n        KbqSidepanelBody,\n        KbqSidepanelFooter,\n        KbqSidepanelActions\n    ],\n    providers: [\n        KbqSidepanelService,\n        { provide: FocusTrapFactory, useClass: ConfigurableFocusTrapFactory }\n    ]\n})\nexport class KbqSidepanelModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.KbqSidepanelRef","i2.KbqSidepanelService"],"mappings":"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"}