{"version":3,"file":"fundamental-ngx-core-token.mjs","sources":["../../../../libs/core/token/token-input.directive.ts","../../../../libs/core/token/token.component.ts","../../../../libs/core/token/token.component.html","../../../../libs/core/token/tokenizer.component.ts","../../../../libs/core/token/tokenizer.component.html","../../../../libs/core/token/token.module.ts","../../../../libs/core/token/fundamental-ngx-core-token.ts"],"sourcesContent":["import { Directive, ElementRef, Input, OnChanges, OnInit, inject } from '@angular/core';\nimport { CssClassBuilder, applyCssClass } from '@fundamental-ngx/cdk/utils';\n\n@Directive({\n    selector: '[fdTokenizerInput], [fd-tokenizer-input]',\n    standalone: true\n})\nexport class TokenizerInputDirective implements OnInit, OnChanges, CssClassBuilder {\n    /** user's custom classes */\n    @Input()\n    class: string;\n\n    /** @hidden */\n    readonly elementRef = inject(ElementRef);\n\n    /** @hidden\n     * CssClassBuilder interface implementation\n     * function must return single string\n     * function is responsible for order which css classes are applied\n     */\n    @applyCssClass\n    buildComponentCssClass(): string[] {\n        return ['fd-tokenizer__input', this.class];\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this.buildComponentCssClass();\n    }\n\n    /** @hidden */\n    ngOnChanges(): void {\n        this.buildComponentCssClass();\n    }\n}\n","import { ENTER, SPACE } from '@angular/cdk/keycodes';\n\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    DestroyRef,\n    ElementRef,\n    TemplateRef,\n    ViewContainerRef,\n    ViewEncapsulation,\n    booleanAttribute,\n    inject,\n    input,\n    model,\n    output,\n    signal,\n    viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HasElementRef, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { fromEvent } from 'rxjs';\n\n/**\n * A token is used to represent contextualizing information.\n * They can be useful to show applied filters, selected values for form fields or object metadata.\n */\n@Component({\n    selector: 'fd-token',\n    templateUrl: './token.component.html',\n    styleUrl: './token.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [contentDensityObserverProviders()],\n    host: {\n        '[style.max-width.%]': '100'\n    },\n    imports: [FdTranslatePipe]\n})\nexport class TokenComponent implements AfterViewInit, HasElementRef {\n    /** @hidden */\n    readonly tokenWrapperElement = viewChild<ElementRef>('tokenWrapperElement');\n\n    /** @hidden */\n    readonly _content = viewChild<TemplateRef<unknown>>('content');\n\n    /** @hidden */\n    readonly _viewContainer = viewChild('viewContainer', { read: ViewContainerRef });\n\n    /** Emitted when the *x* icon is clicked. Specifically, any pseudo-element. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onCloseClick = output<MouseEvent | undefined>();\n\n    /** Emitted when token should be removed */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onRemove = output<void>();\n\n    /** Emitted when a token is clicked. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onTokenClick = output<MouseEvent>();\n\n    /** Emitted when a there's a keydown registered on the token. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    readonly onTokenKeydown = output<KeyboardEvent>();\n\n    /** Emitted when token element received or lost focus. */\n    readonly elementFocused = output<boolean>();\n\n    /** Whether the token is disabled. */\n    readonly disabled = input(false, { transform: booleanAttribute });\n\n    /** Whether the token is selected. Supports two-way binding via [(selected)]. */\n    readonly selected = model(false);\n\n    /** Whether the token is read-only. */\n    readonly readOnly = input(false);\n\n    /** @hidden Internal signal for total count (set by tokenizer) */\n    readonly _totalCount = signal<number | undefined>(undefined);\n\n    /** @hidden Internal signal for item position (set by tokenizer) */\n    readonly _itemPosition = signal<number | undefined>(undefined);\n\n    /** @hidden */\n    readonly elementRef = inject(ElementRef);\n\n    /** @hidden */\n    readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        const viewContainer = this._viewContainer();\n        const content = this._content();\n        if (viewContainer && content) {\n            viewContainer.createEmbeddedView(content);\n        }\n\n        const tokenWrapper = this.tokenWrapperElement();\n        if (tokenWrapper) {\n            fromEvent(tokenWrapper.nativeElement, 'focus')\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe(() => {\n                    this.elementFocused.emit(true);\n                });\n\n            fromEvent(tokenWrapper.nativeElement, 'blur')\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe(() => {\n                    this.elementFocused.emit(false);\n                });\n        }\n    }\n\n    /** @hidden */\n    closeClickHandler(event?: MouseEvent): void {\n        if (event) {\n            event.stopPropagation();\n            if (!this.disabled()) {\n                this.onCloseClick.emit(event);\n            }\n        }\n    }\n\n    /** @hidden */\n    tokenClickHandler(event: MouseEvent): void {\n        this.onTokenClick.emit(event);\n    }\n\n    /** @hidden */\n    tokenKeydownHandler(event: KeyboardEvent): void {\n        this.onTokenKeydown.emit(event);\n        if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n            this.onTokenClick.emit(event as unknown as MouseEvent);\n        }\n    }\n\n    /** @hidden */\n    _setTotalCount(count: number, itemPosition: number): void {\n        this._totalCount.set(count);\n        this._itemPosition.set(itemPosition);\n    }\n}\n","<span\n    #tokenWrapperElement\n    class=\"fd-token\"\n    role=\"option\"\n    tabindex=\"0\"\n    [attr.aria-roledescription]=\"('coreToken.ariaRoleDescription' | fdTranslate)()\"\n    (click)=\"tokenClickHandler($event)\"\n    (keydown)=\"tokenKeydownHandler($event)\"\n    [attr.aria-setsize]=\"_totalCount()\"\n    [attr.aria-posinset]=\"_itemPosition()\"\n    [class.fd-token__disabled]=\"disabled()\"\n    [class.fd-token--selected]=\"selected()\"\n    [class.fd-token--readonly]=\"readOnly()\"\n    [attr.aria-selected]=\"selected()\"\n>\n    <span class=\"fd-token__text no-text-select\">\n        <ng-container #viewContainer></ng-container>\n    </span>\n    @if (!readOnly()) {\n        <span\n            (click)=\"closeClickHandler($event)\"\n            role=\"button\"\n            [attr.aria-label]=\"('coreToken.deleteButtonLabel' | fdTranslate)()\"\n            class=\"fd-token__close\"\n        ></span>\n    }\n</span>\n<ng-template #content>\n    <ng-content></ng-content>\n</ng-template>\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { A, BACKSPACE, DELETE, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    DOCUMENT,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    OutputRefSubscription,\n    QueryList,\n    Renderer2,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef,\n    ViewEncapsulation,\n    forwardRef,\n    inject\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n    CssClassBuilder,\n    KeyUtil,\n    Nullable,\n    RtlService,\n    applyCssClass,\n    resizeObservable\n} from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconFont } from '@fundamental-ngx/core/icon';\nimport { InputGroupAddOnDirective } from '@fundamental-ngx/core/input-group';\nimport { ListComponent, ListItemComponent } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FD_LANGUAGE_SIGNAL, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { BehaviorSubject, Subscription, fromEvent, merge, startWith } from 'rxjs';\nimport { debounceTime, filter, map } from 'rxjs/operators';\nimport { TokenComponent } from './token.component';\n\n@Component({\n    selector: 'fd-tokenizer',\n    templateUrl: './tokenizer.component.html',\n    styleUrl: './tokenizer.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [contentDensityObserverProviders()],\n    imports: [\n        NgTemplateOutlet,\n        InputGroupAddOnDirective,\n        ButtonComponent,\n        PopoverComponent,\n        PopoverControlComponent,\n        PopoverBodyComponent,\n        ListComponent,\n        ListItemComponent,\n        FdTranslatePipe\n    ]\n})\nexport class TokenizerComponent implements AfterViewInit, OnDestroy, CssClassBuilder, OnInit, OnChanges {\n    /** user's custom classes */\n    @Input()\n    class: string;\n\n    /** Disables possibility to remove tokens by keyboard */\n    @Input()\n    disableKeyboardDeletion = false;\n\n    /** @hidden */\n    @ContentChildren(forwardRef(() => TokenComponent))\n    tokenList: QueryList<TokenComponent>;\n\n    /** @hidden */\n    @ContentChild(forwardRef(() => FormControlComponent), { read: ElementRef })\n    input: ElementRef<HTMLInputElement>;\n\n    /** @hidden */\n    @ViewChild('tokenizerInner')\n    tokenizerInnerEl: ElementRef<HTMLDivElement>;\n\n    /** @hidden */\n    @ViewChild('moreElementSpan')\n    moreElement: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('inputGroupAddOn') set content(content: ElementRef<HTMLElement>) {\n        this.inputGroupAddonEl = content;\n    }\n\n    /** @hidden */\n    @ViewChildren('viewContainer', { read: ViewContainerRef })\n    readonly _viewContainer: QueryList<ViewContainerRef>;\n\n    /** @hidden */\n    get _hiddenTokens(): TokenComponent[] {\n        return this.tokenList.filter((token) => token.elementRef.nativeElement.style.display === 'none');\n    }\n\n    /** Whether to use cozy visuals but compact collapsing behavior. */\n    @Input()\n    compactCollapse = false;\n\n    /** Whether tokenizer should have fake focus indicator, when input is focused inside*/\n    @Input()\n    tokenizerFocusable = true;\n\n    /** The value for the tokenizer input */\n    @Input()\n    inputValue: string;\n\n    /** Icon of the button on the right of the input field. */\n    @Input()\n    glyph: string;\n\n    /** Glyph font family */\n    @Input()\n    glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n    /** Word to use for when there are extra tokens. */\n    @Input()\n    moreTerm = 'more';\n\n    /** @hidden */\n    @Input()\n    open: boolean;\n\n    /** @Hidden */\n    @Input()\n    showOverflowPopover = true;\n\n    /** Event emitted when the search term changes. Use *$event* to access the new term. */\n    @Output()\n    readonly moreClickedEvent: EventEmitter<any> = new EventEmitter<any>();\n\n    /** @hidden */\n    inputGroupAddonEl: ElementRef;\n\n    /** @hidden */\n    previousElementWidth: number;\n\n    /** @hidden */\n    moreTokensLeft: Array<TokenComponent> = [];\n\n    /** @hidden */\n    moreTokensRight: Array<TokenComponent> = [];\n\n    /** @hidden */\n    previousTokenCount: number;\n\n    /** @hidden */\n    tokenListChangesSubscription: Subscription;\n\n    /** @hidden */\n    tokenListClickSubscriptions: OutputRefSubscription[] = [];\n\n    /** @hidden */\n    hiddenCozyTokenCount = 0;\n\n    /** @hidden Used to add focus to tokenizer element */\n    _tokenizerHasFocus = false;\n\n    /** @hidden */\n    _showMoreElement = false;\n\n    /** @hidden */\n    _tokensContainerWidth = 'auto';\n\n    /** @hidden */\n    private _tokenOutputSubscriptions: OutputRefSubscription[] = [];\n\n    /** @hidden */\n    private _translationResolver = new TranslationResolver();\n\n    /** @hidden\n     * Variable which will keep the index of the first token pressed in the tokenizer\n     */\n    private _firstElementInSelection: number | null = null;\n\n    /** @hidden\n     * Variable which will keep the index of the last token pressed in the tokenizer\n     */\n    private _lastElementInSelection: number | null = null;\n\n    /** @hidden\n     * Flag which will say if the last keyboard and click operation they used was using control\n     */\n    private _ctrlPrevious: boolean;\n\n    /** @hidden\n     * Flag which will say if they held shift and clicked highlighting elements before or\n     */\n    private _directionShiftIsRight: boolean | null = null;\n\n    /** An RxJS Subject that will kill the data stream upon destruction (for unsubscribing)  */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    private readonly _eventListeners: (() => void)[] = [];\n\n    /** @hidden */\n    private _forceAllTokensToDisplay = false;\n\n    /** @hidden */\n    private _tokenElementFocused = new BehaviorSubject(false);\n\n    /** @hidden */\n    private _inputElementFocused = false;\n\n    /** @hidden */\n    private _tokenElementFocusedSub: Nullable<Subscription>;\n\n    /** @hidden */\n    private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n    /** @hidden */\n    constructor(\n        readonly _contentDensityObserver: ContentDensityObserver,\n        public readonly elementRef: ElementRef,\n        private _cdRef: ChangeDetectorRef,\n        private _renderer: Renderer2,\n        @Inject(DOCUMENT) private readonly _document: Document,\n        private readonly _liveAnnouncer: LiveAnnouncer\n    ) {\n        this._eventListeners.push(\n            this._renderer.listen('window', 'click', (e: Event) => {\n                if (this.elementRef.nativeElement.contains(e.target) === false) {\n                    this.tokenList.forEach((token) => {\n                        token.selected.set(false);\n                    });\n                }\n            })\n        );\n    }\n\n    /** @hidden\n     * CssClassBuilder interface implementation\n     * function must return single string\n     * function is responsible for order which css classes are applied\n     */\n    @applyCssClass\n    buildComponentCssClass(): string[] {\n        return [this.class];\n    }\n\n    /** @hidden */\n    @HostListener('keydown', ['$event'])\n    keyDown(keyboardEvent: KeyboardEvent): void {\n        if (\n            KeyUtil.isKeyCode(keyboardEvent, [DELETE, BACKSPACE]) &&\n            (!this._isInputFocused() || this._tokensSelected()) &&\n            !this.disableKeyboardDeletion\n        ) {\n            const selectedElements = this._getActiveTokens();\n            const focusedTokenIndex = this._getFocusedTokenIndex();\n            selectedElements.forEach((element) => element.onCloseClick.emit(undefined));\n            if (selectedElements.length > 0) {\n                if (KeyUtil.isKeyCode(keyboardEvent, DELETE)) {\n                    this._focusInput();\n                } else {\n                    this.focusTokenElement(focusedTokenIndex - 1);\n                }\n            }\n        }\n\n        if (\n            KeyUtil.isKeyCode(keyboardEvent, BACKSPACE) &&\n            this._isInputFocused() &&\n            !this._getInputValue() &&\n            !this.disableKeyboardDeletion\n        ) {\n            this.focusTokenElement(this.tokenList.length - 1);\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        if (this.input?.nativeElement) {\n            this._setupInputKeydownEvent();\n            this._setupInputFocusEvent();\n        }\n\n        // watch for changes to the tokenList and attempt to expand/collapse tokens as needed\n        this.tokenList.changes.pipe(startWith(null)).subscribe(() => {\n            this.tokenListChangesSubscription?.unsubscribe();\n            this.tokenListChangesSubscription = new Subscription();\n            this._unsubscribeTokenOutputs();\n            this._resetTokens();\n            this.tokenList.forEach((token) => {\n                this._tokenOutputSubscriptions.push(\n                    token.onCloseClick.subscribe(() => {\n                        this._resetTokens();\n                    })\n                );\n                this._tokenOutputSubscriptions.push(\n                    token.elementFocused.subscribe((isFocused) => {\n                        this._tokenElementFocused.next(isFocused);\n                    })\n                );\n            });\n        });\n\n        if (!this._contentDensityObserver.isCompact && !this.compactCollapse) {\n            this._handleCozyTokenCount();\n        }\n        this._listenElementEvents();\n        this.previousElementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n        this._listenOnResize();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this.tokenListChangesSubscription?.unsubscribe();\n        this._tokenElementFocusedSub?.unsubscribe();\n        this._eventListeners.forEach((e) => e());\n        this._unsubscribeClicks();\n        this._unsubscribeTokenOutputs();\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this.buildComponentCssClass();\n    }\n\n    /** @hidden */\n    ngOnChanges(): void {\n        this.buildComponentCssClass();\n    }\n\n    /** @hidden */\n    handleTokenClickSubscriptions(): void {\n        this._unsubscribeClicks();\n        this.tokenList.forEach((token, index) => {\n            if (token.tokenWrapperElement()) {\n                token.tokenWrapperElement()!.nativeElement.tabIndex = -1;\n            }\n            this.tokenListClickSubscriptions.push(\n                token.onTokenClick.subscribe((event) => {\n                    event.stopPropagation();\n                    this.focusTokenElement(index);\n                    if (this._isControlKey(event)) {\n                        this._ctrlSelected(token, index);\n                    } else if (!event.shiftKey || this._ctrlPrevious) {\n                        this._basicSelected(token, index);\n                    } else if (event.shiftKey) {\n                        this.resetFirstAndLastElement();\n                        this._shiftSelected(index);\n                    }\n                })\n            );\n            this.tokenListClickSubscriptions.push(\n                token.onTokenKeydown.subscribe((event) => {\n                    this.handleKeyDown(event, index);\n                })\n            );\n        });\n    }\n\n    /** @hidden */\n    focusTokenElement(newIndex: number): HTMLElement | undefined {\n        let elementToFocus: HTMLElement | undefined;\n        const tokenListArray: TokenComponent[] = this.tokenList.toArray();\n        if (tokenListArray[newIndex]) {\n            elementToFocus = tokenListArray[newIndex].tokenWrapperElement()!.nativeElement;\n            // element needs tabindex in order to be focused\n            elementToFocus!.focus();\n        }\n\n        return elementToFocus;\n    }\n\n    /** @hidden */\n    onResize(): void {\n        if (this.elementRef) {\n            const elementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n            this._resetTokens();\n            this.previousElementWidth = elementWidth;\n            if (!this._contentDensityObserver.isCompact && !this.compactCollapse) {\n                this._handleCozyTokenCount();\n            }\n        }\n    }\n\n    /** @hidden */\n    handleKeyDown(event: KeyboardEvent, fromIndex: number): void {\n        let newIndex: number | undefined;\n        const rtl = this._rtlService?.rtl() ?? false;\n        if (KeyUtil.isKeyCode(event, SPACE) && !this._isInputFocused()) {\n            const token = this.tokenList.find((_, index) => index === fromIndex);\n            this.tokenList.forEach((shadowedToken) => {\n                if (shadowedToken !== token) {\n                    shadowedToken.selected.set(false);\n                }\n            });\n            token && token.selected.set(!token.selected());\n            event.preventDefault();\n        } else if (KeyUtil.isKeyCode(event, ENTER)) {\n            this._focusInput();\n        } else if (this._goBackRequested(event, rtl)) {\n            event.preventDefault();\n            this._handleArrowLeft(fromIndex);\n            newIndex = fromIndex - 1;\n        } else if (this._goForwardRequested(event, rtl)) {\n            event.preventDefault();\n            this._handleArrowRight(fromIndex);\n            newIndex = fromIndex + 1;\n        } else if (KeyUtil.isKeyCode(event, A) && !this._getInputValue() && this._isControlKey(event)) {\n            event.preventDefault();\n            this.tokenList.forEach((token) => token.selected.set(true));\n        }\n        if (newIndex === this.tokenList.length && this._goForwardRequested(event, rtl)) {\n            this._focusInput();\n        } else if (newIndex! > this.tokenList.length - this.moreTokensRight.length && this._isInputFocused()) {\n            this.focusTokenElement(newIndex! - this.moreTokensRight.length);\n        } else if (newIndex || newIndex === 0) {\n            this.focusTokenElement(newIndex);\n        }\n    }\n\n    /** @hidden */\n    getCombinedTokenWidth(): number {\n        let totalTokenWidth = this._getTokensAreaWidthWithoutTokens();\n        // get the width of each token\n        this.tokenList.forEach((token) => {\n            totalTokenWidth = totalTokenWidth + token.elementRef.nativeElement.getBoundingClientRect().width;\n        });\n\n        return totalTokenWidth;\n    }\n\n    /** @hidden */\n    moreClicked(): void {\n        this.moreClickedEvent.emit();\n    }\n\n    /** Removes all selected tokens */\n    removeSelectedTokens(): void {\n        const selectedElements = this._getActiveTokens();\n        selectedElements.forEach((element) => element.onRemove.emit());\n    }\n\n    /** @hidden */\n    _showAllTokens(): void {\n        this._forceAllTokensToDisplay = true;\n        this._inputElementFocused = true;\n        this.tokenList.forEach((token) => {\n            this._makeElementVisible(token.elementRef);\n            token._viewContainer()!.createEmbeddedView(token._content()!);\n        });\n        this._tokensContainerWidth = 'auto';\n        this._showMoreElement = false;\n        this._cdRef.detectChanges();\n        this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n    }\n\n    /** @hidden */\n    _hideTokens(): void {\n        setTimeout(() => {\n            this._inputElementFocused = false;\n            const tokenFocused = this._getFocusedTokenIndex() > -1;\n\n            if (tokenFocused) {\n                this._waitForFocusToDisappear();\n                return;\n            }\n            this._forceAllTokensToDisplay = false;\n            this._resetTokens();\n            this._cdRef.detectChanges();\n            this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n        });\n    }\n\n    /**\n     * @hidden\n     * Check whether user intends to go back to the previous token\n     **/\n    private _goBackRequested($event: KeyboardEvent, rtl: boolean): boolean {\n        const backKeys = rtl ? [RIGHT_ARROW] : [LEFT_ARROW];\n        return KeyUtil.isKeyCode($event, backKeys);\n    }\n\n    /**\n     * @hidden\n     * Check whether user intends to go forward to the next token\n     **/\n    private _goForwardRequested($event: KeyboardEvent, rtl: boolean): boolean {\n        const forwardKeys = rtl ? [LEFT_ARROW] : [RIGHT_ARROW];\n        return KeyUtil.isKeyCode($event, forwardKeys);\n    }\n\n    /** @hidden */\n    private _getTokensAreaWidthWithoutTokens(): number {\n        let totalTokenWidth = 0;\n        // add input width\n        if (this.input?.nativeElement) {\n            totalTokenWidth = totalTokenWidth + this.input.nativeElement.getBoundingClientRect().width;\n        }\n        // add the width of the \"____ more\" element\n        if (this.moreTokensLeft.length > 0 && this.moreElement && this.moreElement.nativeElement) {\n            totalTokenWidth = totalTokenWidth + this.moreElement.nativeElement.getBoundingClientRect().width;\n        }\n        // add the input group addon\n        if (this.inputGroupAddonEl && this.inputGroupAddonEl.nativeElement) {\n            totalTokenWidth = totalTokenWidth + this.inputGroupAddonEl.nativeElement.getBoundingClientRect().width;\n        }\n\n        return totalTokenWidth;\n    }\n\n    /** @hidden */\n    private _handleArrowLeft(fromIndex: number): void {\n        // if the leftmost visible token is selected, and there are moreTokensLeft, need to display a moreTokenLeft\n        if (fromIndex === this.moreTokensLeft.length) {\n            const poppedToken = this.moreTokensLeft.pop();\n            if (poppedToken) {\n                this._makeElementVisible(poppedToken.elementRef);\n            }\n            // and then hide any tokens from the right that no longer fit\n            this._collapseTokens('right');\n\n            this._cdRef.detectChanges();\n        }\n    }\n\n    /** @hidden */\n    private _waitForFocusToDisappear(): void {\n        this._tokenElementFocusedSub?.unsubscribe();\n        // 5 ms delay for other token to receive focus, check if _showAllTokens was called again\n        this._tokenElementFocusedSub = this._tokenElementFocused\n            .pipe(\n                debounceTime(5),\n                filter((isFocused) => isFocused && !this._inputElementFocused)\n            )\n            .subscribe(() => {\n                this._hideTokens();\n            });\n    }\n\n    /** @hidden */\n    private _handleArrowRight(fromIndex: number): void {\n        if (fromIndex === this.tokenList.length - this.moreTokensRight.length - 1 && this.moreTokensRight.length) {\n            const poppedToken = this.moreTokensRight.pop();\n            if (poppedToken) {\n                this._makeElementVisible(poppedToken.elementRef);\n            }\n            // and then hide any tokens from the left that no longer fit\n            this._collapseTokens('left');\n\n            this._cdRef.detectChanges();\n        }\n    }\n\n    /** @hidden */\n    private _collapseTokens(side?: string): void {\n        if (this._forceAllTokensToDisplay) {\n            return;\n        }\n        if (!this._contentDensityObserver.isCompact && !this.compactCollapse) {\n            this._getHiddenCozyTokenCount();\n            return;\n        }\n        this._cdRef.detectChanges();\n        this._viewContainer.forEach((viewContainer) => viewContainer.clear());\n\n        const availableWidth = this._getTokensAreaWidthWithoutTokens();\n\n        if (this.tokenList.length === 1) {\n            const tokenWidth = this.tokenList.get(0)?.elementRef.nativeElement.getBoundingClientRect().width;\n            this._tokensContainerWidth = availableWidth < tokenWidth ? `calc(100% - ${availableWidth}px)` : 'auto';\n            return;\n        } else {\n            this._tokensContainerWidth = 'auto';\n        }\n\n        this._checkMoreElementVisibility();\n\n        this.tokenList.forEach((token) => token._viewContainer()!.createEmbeddedView(token._content()!));\n\n        let elementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n        let combinedTokenWidth = this.getCombinedTokenWidth(); // the combined width of all tokens, the \"____ more\" text, and the input\n        let i = 0;\n        /*\n         When resizing, we want to collapse the tokens on the left first. However, when the user is navigating through\n         a group of overflowing tokens using the arrow left key, we may need to hide tokens on the right. So if this\n         function has been called with the param 'right' it will collapse tokens from the right side of the list rather\n         than the (default) left side.\n         */\n        if (side === 'right') {\n            i = this.tokenList.length - 1;\n        }\n        while (combinedTokenWidth > elementWidth && (side === 'right' ? i >= 0 : i < this.tokenList.length)) {\n            // loop through the tokens and hide them until the combinedTokenWidth fits in the elementWidth\n            const token = this.tokenList.get(i);\n            const moreTokens = side === 'right' ? this.moreTokensRight : this.moreTokensLeft;\n\n            if (token) {\n                if (moreTokens.indexOf(token) === -1) {\n                    moreTokens.push(token);\n                }\n                token.elementRef.nativeElement.style.display = 'none';\n            }\n            // get the new elementWidth and combinedTokenWidth as these will have changed after setting a token display to 'none'\n            elementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n            this._checkMoreElementVisibility();\n            combinedTokenWidth = this.getCombinedTokenWidth();\n            side === 'right' ? i-- : i++;\n        }\n\n        this._cdRef.detectChanges();\n        if (this.showOverflowPopover) {\n            this._hiddenTokens.forEach((hiddenToken, index) => {\n                hiddenToken._viewContainer()?.clear();\n                this._viewContainer.get(index)?.createEmbeddedView(hiddenToken._content()!);\n            });\n        }\n    }\n\n    /** @hidden */\n    private _resetTokens(): void {\n        this.moreTokensLeft = [];\n        this.moreTokensRight = [];\n        if (this._contentDensityObserver.isCompact || this.compactCollapse || this._forceAllTokensToDisplay) {\n            this.tokenList.forEach((token) => {\n                this._makeElementVisible(token.elementRef);\n            });\n            this._cdRef.markForCheck();\n            this._collapseTokens();\n        } else {\n            this._getHiddenCozyTokenCount();\n        }\n        this.handleTokenClickSubscriptions();\n        this.previousTokenCount = this.tokenList.length;\n        this.tokenList.forEach((token, index) => token._setTotalCount(this.tokenList.length, index + 1));\n        this._cdRef.markForCheck();\n    }\n\n    /** @hidden */\n    private _getHiddenCozyTokenCount(): void {\n        const elementLeft = this.elementRef.nativeElement.getBoundingClientRect().left;\n        this.hiddenCozyTokenCount = 0;\n        this.tokenList.forEach((token) => {\n            if (\n                token.tokenWrapperElement() &&\n                token.tokenWrapperElement()!.nativeElement.getBoundingClientRect().right < elementLeft\n            ) {\n                this.hiddenCozyTokenCount += 1;\n            }\n        });\n\n        this._checkMoreElementVisibility();\n    }\n\n    /** @hidden */\n    private _handleCozyTokenCount(): void {\n        // because justify-content breaks scrollbar, it cannot be used on cozy screens, so use JS to scroll to the end\n        this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n        this._getHiddenCozyTokenCount();\n        if (this.hiddenCozyTokenCount > 0) {\n            // need to do this again in case \"____ more\" text was added\n            this.tokenizerInnerEl.nativeElement.scrollLeft = this.tokenizerInnerEl.nativeElement.scrollWidth;\n            this._getHiddenCozyTokenCount();\n        }\n    }\n\n    /** @hidden */\n    private _makeElementVisible(elementRef: ElementRef): void {\n        elementRef.nativeElement.style.display = 'inline-block';\n        elementRef.nativeElement.style.visibility = 'visible';\n    }\n\n    /** @hidden */\n    private _unsubscribeClicks(): void {\n        if (this.tokenListClickSubscriptions && this.tokenListClickSubscriptions.length) {\n            this.tokenListClickSubscriptions.forEach((subscription) => {\n                subscription.unsubscribe();\n            });\n            this.tokenListClickSubscriptions = [];\n        }\n    }\n\n    /** @hidden */\n    private _unsubscribeTokenOutputs(): void {\n        this._tokenOutputSubscriptions.forEach((subscription) => {\n            subscription.unsubscribe();\n        });\n        this._tokenOutputSubscriptions = [];\n    }\n\n    /** @hidden */\n    private _setupInputKeydownEvent(): void {\n        this._eventListeners.push(\n            this._renderer.listen(this.input.nativeElement, 'keydown', (event: KeyboardEvent) => {\n                this.handleKeyDown(event, this.tokenList.length);\n            })\n        );\n    }\n\n    /** @hidden */\n    private _setupInputFocusEvent(): void {\n        this._eventListeners.push(\n            this._renderer.listen(this.input.nativeElement, 'focus', () => {\n                this._makeTokenizerFocusCountAnnouncement();\n            })\n        );\n    }\n\n    /** @hidden */\n    private async _makeTokenizerFocusCountAnnouncement(): Promise<void> {\n        const lang = this._langSignal();\n        const message = this._translationResolver.resolve(lang, 'coreMultiInput.tokensCountText', {\n            length: this.tokenList.length ? this.tokenList.length : 0\n        });\n        this._liveAnnouncer.announce(message);\n    }\n\n    /** @hidden Method which handles what happens to token when it is clicked and no key is being held down.*/\n    private _basicSelected(token: TokenComponent, index: number): void {\n        this.tokenList.forEach((shadowedToken) => {\n            if (shadowedToken !== token) {\n                shadowedToken.selected.set(false);\n            }\n        });\n        this._firstElementInSelection = index;\n        this._lastElementInSelection = index;\n        token.selected.set(true);\n        this._ctrlPrevious = false;\n    }\n\n    /** @hidden Restart first and last elements for shift selection.*/\n    private resetFirstAndLastElement(): void {\n        const reset = !this.tokenList.some((token) => token.selected());\n        if (reset) {\n            this._firstElementInSelection = null;\n            this._lastElementInSelection = null;\n        }\n    }\n\n    /** @hidden Method which handles what happens to token when it is clicked and the shift key is being held down.*/\n    private _shiftSelected(index: number): void {\n        if (!this._firstElementInSelection && !this._lastElementInSelection) {\n            this._firstElementInSelection = index;\n            this._lastElementInSelection = index;\n            this._directionShiftIsRight = null;\n        } else {\n            if (this._firstElementInSelection && index < this._firstElementInSelection) {\n                if (this._directionShiftIsRight) {\n                    this._lastElementInSelection = this._firstElementInSelection;\n                }\n                this._directionShiftIsRight = false;\n                this._firstElementInSelection = index;\n            } else if (this._lastElementInSelection && index > this._lastElementInSelection) {\n                if (!this._directionShiftIsRight) {\n                    this._firstElementInSelection = this._lastElementInSelection;\n                }\n                this._directionShiftIsRight = true;\n                this._lastElementInSelection = index;\n            }\n            if (!this._directionShiftIsRight) {\n                this._firstElementInSelection = index;\n            } else if (this._directionShiftIsRight) {\n                this._lastElementInSelection = index;\n            }\n        }\n\n        this.tokenList.forEach((token, indexOfToken) => {\n            token.selected.set(\n                this._firstElementInSelection != null &&\n                    this._lastElementInSelection != null &&\n                    indexOfToken >= this._firstElementInSelection &&\n                    indexOfToken <= this._lastElementInSelection\n            );\n        });\n        this._ctrlPrevious = false;\n    }\n\n    /** @hidden Method which handles what happens to token when it is clicked and the control or meta key is being held down.*/\n    private _ctrlSelected(token: TokenComponent, index: number): void {\n        this._firstElementInSelection = null;\n        this._lastElementInSelection = null;\n        const selected = token.selected();\n        token.selected.set(true);\n        if (selected) {\n            token.selected.set(false);\n            this.tokenList.forEach((element, indexOfToken) => {\n                if (!this._firstElementInSelection) {\n                    if (element.selected()) {\n                        this._firstElementInSelection = indexOfToken;\n                    }\n                } else {\n                    this._lastElementInSelection = indexOfToken;\n                }\n            });\n            if (index === this._lastElementInSelection) {\n                this._lastElementInSelection = this._lastElementInSelection! - 1;\n            }\n            if (index === this._firstElementInSelection) {\n                this._firstElementInSelection = this._firstElementInSelection! - 1;\n            }\n        }\n        this._ctrlPrevious = true;\n    }\n\n    /** Get selected and focused tokens */\n    private _getActiveTokens(): TokenComponent[] {\n        return this.tokenList.filter((item) => item.selected() || this._isTokenFocused(item));\n    }\n\n    /** @hidden */\n    private _getFocusedTokenIndex(): number {\n        return this.tokenList.toArray().findIndex((token) => this._isTokenFocused(token));\n    }\n\n    /** @hidden */\n    private _isTokenFocused(token: TokenComponent): boolean {\n        return token.tokenWrapperElement()?.nativeElement === this._document.activeElement;\n    }\n\n    /** @hidden */\n    private _isInputFocused(): boolean {\n        return this._document.activeElement === this.input.nativeElement;\n    }\n\n    /** @hidden */\n    private _tokensSelected(): boolean {\n        return this.tokenList.some((t) => t.selected());\n    }\n\n    /** @hidden */\n    private _getInputValue(): string {\n        return this.input.nativeElement.value;\n    }\n\n    /** @hidden */\n    private _focusInput(): void {\n        this.input.nativeElement.focus();\n    }\n\n    /** @hidden */\n    private _isControlKey(keyboardEvent: KeyboardEvent | MouseEvent): boolean {\n        return keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n    }\n\n    /** @hidden */\n    private _listenElementEvents(): void {\n        merge(\n            fromEvent<Event>(this.elementRef.nativeElement, 'focus', { capture: true }).pipe(\n                filter((event) => (event['target'] as any)?.tagName === 'INPUT' && this.tokenizerFocusable),\n                map(() => true)\n            ),\n            fromEvent<Event>(this.elementRef.nativeElement, 'blur', { capture: true }).pipe(map(() => false))\n        )\n            .pipe(\n                // debounceTime is needed in order to filter subsequent focus-blur events, that happen simultaneously\n                debounceTime(10),\n                takeUntilDestroyed(this._destroyRef)\n            )\n            .subscribe((focused) => {\n                this._tokenizerHasFocus = focused;\n                this._cdRef.markForCheck();\n            });\n    }\n\n    /** @hidden Listen window resize and distribute cards on column change */\n    private _listenOnResize(): void {\n        this.onResize();\n        resizeObservable(this.elementRef.nativeElement)\n            .pipe(debounceTime(30), takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => this.onResize());\n    }\n\n    /** @hidden */\n    private _checkMoreElementVisibility(): void {\n        const showMoreElement =\n            (this.moreTokensLeft.length > 0 || this.moreTokensRight.length > 0 || this.hiddenCozyTokenCount > 0) &&\n            !this.open &&\n            !this._tokenizerHasFocus;\n\n        if (showMoreElement === this._showMoreElement) {\n            return;\n        }\n\n        this._showMoreElement = showMoreElement;\n\n        this._cdRef.detectChanges();\n    }\n}\n","<div class=\"fd-tokenizer fd-tokenizer--scrollable\" [class.is-focus]=\"_tokenizerHasFocus\">\n    <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n        <div\n            [attr.aria-hidden]=\"tokenList.length === 0\"\n            role=\"listbox\"\n            [attr.aria-label]=\"('coreTokenizer.tokenizerLabel' | fdTranslate)()\"\n            [style.width]=\"_tokensContainerWidth\"\n        >\n            <ng-content select=\"fd-token\"></ng-content>\n        </div>\n        @if (showOverflowPopover && (_contentDensityObserver.isCompactSignal() || compactCollapse)) {\n            <ng-template [ngTemplateOutlet]=\"tokensOverflow\"></ng-template>\n        } @else {\n            @if (_showMoreElement && _hiddenTokens.length > 0) {\n                <span (click)=\"moreClicked()\" #moreElementSpan class=\"fd-tokenizer-more\" role=\"button\" tabindex=\"-1\">\n                    @if (_contentDensityObserver.isCompactSignal() || compactCollapse) {\n                        {{\n                            (\n                                'coreTokenizer.moreLabel'\n                                | fdTranslate: { count: moreTokensLeft.length + moreTokensRight.length }\n                            )()\n                        }}\n                    }\n                    @if (!_contentDensityObserver.isCompactSignal() && !compactCollapse) {\n                        {{ ('coreTokenizer.moreLabel' | fdTranslate: { count: hiddenCozyTokenCount })() }}\n                    }\n                </span>\n            }\n        }\n        <ng-content select=\"[fd-form-control]\"></ng-content>\n    </div>\n    @if (glyph) {\n        <span fd-input-group-addon #inputGroupAddOn [button]=\"true\" placement=\"after\">\n            <button\n                fd-button\n                class=\"fd-tokenizer-addon\"\n                fdType=\"transparent\"\n                [glyph]=\"glyph\"\n                [glyphFont]=\"glyphFont\"\n                type=\"button\"\n            ></button>\n        </span>\n    }\n</div>\n<ng-template #tokensOverflow>\n    <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n        <fd-popover-control>\n            <ng-template [ngTemplateOutlet]=\"moreElement\"></ng-template>\n        </fd-popover-control>\n        <fd-popover-body>\n            <ul fd-list class=\"fd-tokenizer__overflow-list\">\n                @for (token of _hiddenTokens; track token) {\n                    <li fd-list-item class=\"fd-tokenizer__overflow-list-item\">\n                        <ng-container #viewContainer></ng-container>\n                        @if (!token.readOnly) {\n                            <span\n                                class=\"fd-token__close\"\n                                role=\"button\"\n                                [attr.aria-label]=\"('coreToken.deleteButtonLabel' | fdTranslate)()\"\n                                (click)=\"token.closeClickHandler($event)\"\n                            ></span>\n                        }\n                    </li>\n                }\n            </ul>\n        </fd-popover-body>\n    </fd-popover>\n</ng-template>\n<ng-template #moreElement>\n    @if (_showMoreElement && _hiddenTokens.length > 0) {\n        <span (click)=\"moreClicked()\" #moreElementSpan class=\"fd-tokenizer-more\" role=\"button\" tabindex=\"-1\">\n            @if (_contentDensityObserver.isCompactSignal() || compactCollapse) {\n                {{\n                    (\n                        'coreTokenizer.moreLabel'\n                        | fdTranslate: { count: moreTokensLeft.length + moreTokensRight.length }\n                    )()\n                }}\n            }\n            @if (!_contentDensityObserver.isCompactSignal() && !compactCollapse) {\n                {{ ('coreTokenizer.moreLabel' | fdTranslate: { count: hiddenCozyTokenCount })() }}\n            }\n        </span>\n    }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { TokenizerInputDirective } from './token-input.directive';\nimport { TokenComponent } from './token.component';\nimport { TokenizerComponent } from './tokenizer.component';\n\n/**\n * @deprecated\n * Use direct imports of `TokenComponent`, `TokenizerComponent`, `TokenizerInputDirective` instead\n */\n@NgModule({\n    imports: [TokenComponent, TokenizerComponent, TokenizerInputDirective],\n    exports: [TokenComponent, TokenizerComponent, TokenizerInputDirective]\n})\nexport class TokenModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}