@fundamental-ngx/core 0.63.0-rc.29 → 0.63.0-rc.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -279,7 +279,7 @@ class TokenizerComponent {
|
|
|
279
279
|
this._setupInputFocusEvent();
|
|
280
280
|
}
|
|
281
281
|
// watch for changes to the tokenList and attempt to expand/collapse tokens as needed
|
|
282
|
-
this.tokenList.changes.pipe(startWith(null)).subscribe(() => {
|
|
282
|
+
this.tokenList.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {
|
|
283
283
|
this.tokenListChangesSubscription?.unsubscribe();
|
|
284
284
|
this.tokenListChangesSubscription = new Subscription();
|
|
285
285
|
this._unsubscribeTokenOutputs();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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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"}
|
|
1
|
+
{"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), takeUntilDestroyed(this._destroyRef)).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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundamental-ngx/core",
|
|
3
|
-
"version": "0.63.0-rc.
|
|
3
|
+
"version": "0.63.0-rc.30",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"migrations": "./schematics/migrations.json"
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"@angular/forms": "^21.0.0",
|
|
23
23
|
"@angular/platform-browser": "^21.0.0",
|
|
24
24
|
"@angular/router": "^21.0.0",
|
|
25
|
-
"@fundamental-ngx/cdk": "0.63.0-rc.
|
|
26
|
-
"@fundamental-ngx/i18n": "0.63.0-rc.
|
|
25
|
+
"@fundamental-ngx/cdk": "0.63.0-rc.30",
|
|
26
|
+
"@fundamental-ngx/i18n": "0.63.0-rc.30",
|
|
27
27
|
"@sap-theming/theming-base-content": "^11.36.0",
|
|
28
28
|
"fundamental-styles": "0.41.7",
|
|
29
29
|
"rxjs": "^7.8.0"
|