@fundamental-ngx/core 0.35.0-rc.21 → 0.35.0-rc.24
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.
- package/action-bar/package.json +1 -1
- package/action-sheet/package.json +1 -1
- package/alert/package.json +1 -1
- package/avatar/package.json +1 -1
- package/avatar-group/package.json +1 -1
- package/bar/package.json +1 -1
- package/breadcrumb/package.json +1 -1
- package/busy-indicator/package.json +1 -1
- package/button/package.json +1 -1
- package/calendar/package.json +1 -1
- package/card/package.json +1 -1
- package/carousel/package.json +1 -1
- package/checkbox/package.json +1 -1
- package/combobox/package.json +1 -1
- package/date-picker/package.json +1 -1
- package/datetime/package.json +1 -1
- package/datetime-picker/package.json +1 -1
- package/dialog/package.json +1 -1
- package/dynamic-page/package.json +1 -1
- package/dynamic-side-content/package.json +1 -1
- package/esm2020/token/tokenizer.component.mjs +18 -52
- package/facets/package.json +1 -1
- package/feed-input/package.json +1 -1
- package/feed-list-item/package.json +1 -1
- package/fesm2015/fundamental-ngx-core-token.mjs +17 -51
- package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-token.mjs +17 -51
- package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
- package/file-uploader/package.json +1 -1
- package/fixed-card-layout/package.json +1 -1
- package/flexible-column-layout/package.json +1 -1
- package/form/package.json +1 -1
- package/formatted-text/package.json +1 -1
- package/grid-list/package.json +1 -1
- package/icon/package.json +1 -1
- package/illustrated-message/package.json +1 -1
- package/infinite-scroll/package.json +1 -1
- package/info-label/package.json +1 -1
- package/inline-help/package.json +1 -1
- package/input-group/package.json +1 -1
- package/layout-grid/package.json +1 -1
- package/layout-panel/package.json +1 -1
- package/link/package.json +1 -1
- package/list/package.json +1 -1
- package/menu/package.json +1 -1
- package/message-box/package.json +1 -1
- package/message-strip/package.json +1 -1
- package/message-toast/package.json +1 -1
- package/micro-process-flow/package.json +1 -1
- package/mobile-mode/package.json +1 -1
- package/multi-input/package.json +1 -1
- package/nested-list/package.json +1 -1
- package/notification/package.json +1 -1
- package/object-identifier/package.json +1 -1
- package/object-marker/package.json +1 -1
- package/object-number/package.json +1 -1
- package/object-status/package.json +1 -1
- package/package.json +2 -2
- package/pagination/package.json +1 -1
- package/panel/package.json +1 -1
- package/popover/package.json +1 -1
- package/product-switch/package.json +1 -1
- package/progress-indicator/package.json +1 -1
- package/quick-view/package.json +1 -1
- package/radio/package.json +1 -1
- package/rating-indicator/package.json +1 -1
- package/resizable-card-layout/package.json +1 -1
- package/schematics/ng-add/index.js +2 -2
- package/scroll-spy/package.json +1 -1
- package/scrollbar/package.json +1 -1
- package/segmented-button/package.json +1 -1
- package/select/package.json +1 -1
- package/shared/package.json +1 -1
- package/shellbar/package.json +1 -1
- package/side-navigation/package.json +1 -1
- package/slider/package.json +1 -1
- package/split-button/package.json +1 -1
- package/splitter/package.json +1 -1
- package/status-indicator/package.json +1 -1
- package/step-input/package.json +1 -1
- package/switch/package.json +1 -1
- package/table/package.json +1 -1
- package/tabs/package.json +1 -1
- package/text/package.json +1 -1
- package/theming/package.json +1 -1
- package/tile/package.json +1 -1
- package/time/package.json +1 -1
- package/time-picker/package.json +1 -1
- package/timeline/package.json +1 -1
- package/title/package.json +1 -1
- package/token/esm2020/tokenizer.component.mjs +18 -52
- package/token/fesm2015/fundamental-ngx-core-token.mjs +17 -51
- package/token/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
- package/token/fesm2020/fundamental-ngx-core-token.mjs +17 -51
- package/token/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
- package/token/package.json +1 -1
- package/token/tokenizer.component.d.ts +1 -1
- package/toolbar/package.json +1 -1
- package/tree/package.json +1 -1
- package/upload-collection/package.json +1 -1
- package/utils/package.json +1 -1
- package/vertical-navigation/package.json +1 -1
- package/wizard/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-token.mjs","sources":["../../../../../libs/core/src/lib/token/token.component.ts","../../../../../libs/core/src/lib/token/token.component.html","../../../../../libs/core/src/lib/token/tokenizer.component.ts","../../../../../libs/core/src/lib/token/tokenizer.component.html","../../../../../libs/core/src/lib/token/token-input.directive.ts","../../../../../libs/core/src/lib/token/token.module.ts","../../../../../libs/core/src/lib/token/fundamental-ngx-core-token.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\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 styleUrls: ['./token.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TokenComponent implements OnInit, AfterViewInit, OnDestroy {\n /** Whether the token is disabled. */\n @Input()\n disabled = false;\n\n /** Whether the token is compact. */\n @Input()\n compact?: boolean;\n\n /** @hidden */\n @ViewChild('tokenWrapperElement')\n tokenWrapperElement: ElementRef;\n\n /** @hidden */\n @ViewChild('content')\n readonly _content: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('viewContainer', { read: ViewContainerRef })\n readonly _viewContainer: ViewContainerRef;\n\n private _selected = false;\n\n private _subscriptions = new Subscription();\n\n /** Whether the token is selected. */\n @Input()\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(val: boolean) {\n if (this._selected !== val) {\n this._cdRef.markForCheck();\n }\n this._selected = val;\n }\n\n /** Whether the token is read-only. */\n @Input()\n readOnly = false;\n\n /** label for close icon */\n @Input()\n deleteButtonLabel = 'Deletable';\n\n /** role description for token */\n @Input()\n ariaRoleDescription = 'token';\n\n /** Emitted when the *x* icon is clicked. Specifically, any pseudo-element. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onCloseClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n /** Emitted when token should be removed */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onRemove: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emitted when a token is clicked. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTokenClick: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n\n constructor(\n public elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n @Optional() private _contentDensityService: ContentDensityService\n ) {}\n\n /** @hidden */\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this._cdRef.markForCheck();\n })\n );\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._viewContainer.createEmbeddedView(this._content);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n closeClickHandler(event?): 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): void {\n this.onTokenClick.emit(event);\n }\n}\n","<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"compact\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n tabindex=\"-1\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { A, BACKSPACE, DELETE, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport {\n ContentDensityService,\n CssClassBuilder,\n applyCssClass,\n RtlService,\n KeyUtil\n} from '@fundamental-ngx/core/utils';\nimport { TokenComponent } from './token.component';\n\n@Component({\n selector: 'fd-tokenizer',\n templateUrl: './tokenizer.component.html',\n styleUrls: ['./tokenizer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TokenizerComponent\n implements AfterViewChecked, AfterViewInit, AfterContentInit, OnDestroy, CssClassBuilder, OnInit, OnChanges\n{\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 /** role description for tokenizer component */\n @Input()\n ariaRoleDescription = 'tokenizer';\n\n /** @hidden */\n @ContentChildren(forwardRef(() => TokenComponent))\n tokenList: QueryList<TokenComponent>;\n\n /** @hidden */\n @ContentChild(forwardRef(() => FormControlComponent))\n input: FormControlComponent;\n\n /** @hidden */\n @ViewChild('tokenizerInner')\n tokenizerInnerEl: ElementRef;\n\n /** @hidden */\n @ViewChild('moreElement')\n moreElement: ElementRef;\n\n /** @hidden */\n @ViewChild('inputGroupAddOn') set content(content: ElementRef) {\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 /** @hidden */\n inputGroupAddonEl: ElementRef;\n\n /** Whether the tokenizer is compact */\n @Input()\n compact?: boolean;\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 /** Word to use for when there are extra tokens. */\n @Input()\n moreTerm = 'more';\n\n /** @hidden */\n @Input()\n open: boolean;\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 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: Subscription[] = [];\n\n /** @hidden */\n hiddenCozyTokenCount = 0;\n\n /** @hidden Used to add focus to tokenizer element */\n _tokenizerHasFocus = false;\n\n /** @hidden */\n _showOverflowPopover = true;\n\n /** @hidden */\n private _contentDensitySubscription = new Subscription();\n\n /** @hidden */\n /* Variable which will keep the index of the first token pressed in the tokenizer*/\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 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 private _ctrlPrevious: boolean;\n\n /** @hidden */\n /* Flag which will say if they held shift and clicked highlighting elements before or*/\n private _directionShiftIsRight: boolean | null = null;\n\n /** An RxJS Subject that will kill the data stream upon destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.input && this.input.elementRef()) {\n this._inputKeydownEvent();\n }\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n if (this.tokenList) {\n this.previousTokenCount = this.tokenList.length;\n }\n this.handleTokenClickSubscriptions();\n // watch for changes to the tokenList and attempt to expand/collapse tokens as needed\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this.tokenListChangesSubscription = this.tokenList.changes.subscribe(() => {\n this._cdRef.detectChanges();\n this.moreTokensLeft = [];\n this.moreTokensRight = [];\n this.previousTokenCount > this.tokenList.length ? this._expandTokens() : this._collapseTokens();\n this.previousTokenCount = this.tokenList.length;\n this.handleTokenClickSubscriptions();\n });\n if (!this.compact && !this.compactCollapse) {\n this._handleInitCozyTokenCount();\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listenElementEvents();\n this.previousElementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n this.onResize();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this._onDestroy$.next();\n this._onDestroy$.complete();\n this._unsubscribeClicks();\n this._contentDensitySubscription.unsubscribe();\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._contentDensitySubscription.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this._cdRef.markForCheck();\n this.buildComponentCssClass();\n })\n );\n }\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n constructor(\n private _elementRef: ElementRef,\n @Optional() private _contentDensityService: ContentDensityService,\n private _cdRef: ChangeDetectorRef,\n @Optional() private _rtlService: RtlService,\n private _renderer: Renderer2\n ) {\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 = false;\n });\n }\n });\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [this.class];\n }\n\n elementRef(): ElementRef {\n return this._elementRef;\n }\n\n /** @hidden */\n handleTokenClickSubscriptions(): void {\n this._unsubscribeClicks();\n this.tokenList.forEach((token, index) => {\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 });\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!.setAttribute('tabindex', '0');\n elementToFocus!.focus();\n this.addKeyboardListener(elementToFocus!, newIndex);\n }\n\n return elementToFocus;\n }\n\n /** @hidden */\n addKeyboardListener(element: HTMLElement, newIndex: number): void {\n // function needs to be defined in order to be referenced later by addEventListener/removeEventListener\n const handleFunctionReference = (e): void => {\n if (newIndex || newIndex === 0) {\n this.handleKeyDown(e, newIndex);\n }\n };\n element.addEventListener('keydown', handleFunctionReference);\n element.addEventListener('blur', () => {\n element.setAttribute('tabindex', '-1');\n element.removeEventListener('keydown', handleFunctionReference);\n });\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());\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 @HostListener('window:resize', [])\n onResize(): void {\n if (this._elementRef) {\n const elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n // if the element is geting smaller, try collapsing tokens\n if (elementWidth <= this.previousElementWidth) {\n this._collapseTokens();\n } else {\n this._expandTokens(); // if it's getting bigger, try expanding\n }\n this.previousElementWidth = elementWidth;\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent, fromIndex: number): void {\n let newIndex: number | undefined;\n const rtl = this._rtlService && this._rtlService.rtl ? this._rtlService.rtl.getValue() : 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 = false;\n }\n });\n token && (token.selected = !token.selected);\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n this._focusInput();\n } else if ((KeyUtil.isKeyCode(event, LEFT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, RIGHT_ARROW) && rtl)) {\n this._handleArrowLeft(fromIndex);\n newIndex = fromIndex - 1;\n } else if ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl)) {\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 = true));\n }\n if (\n newIndex === this.tokenList.length &&\n ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl))\n ) {\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 = 0;\n // get the width of each token\n this.tokenList.forEach((token) => {\n totalTokenWidth = totalTokenWidth + token.elementRef.nativeElement.getBoundingClientRect().width;\n });\n // add input width\n if (this.input && this.input.elementRef()) {\n totalTokenWidth = totalTokenWidth + this.input.elementRef().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 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 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 _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.compact || this.compactCollapse) {\n this._cdRef.detectChanges();\n this._viewContainer.forEach((viewContainer) => viewContainer.clear());\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.find((item, index) => index === 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 combinedTokenWidth = this.getCombinedTokenWidth();\n side === 'right' ? i-- : i++;\n }\n\n this._cdRef.detectChanges();\n this._hiddenTokens.forEach((hiddenToken, index) => {\n hiddenToken._viewContainer.clear();\n this._viewContainer.get(index)?.createEmbeddedView(hiddenToken._content);\n });\n } else {\n this._getHiddenCozyTokenCount();\n }\n }\n\n /** @hidden */\n private _expandTokens(): void {\n if (this.compact || this.compactCollapse) {\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\n let breakLoop = false;\n let i = this.moreTokensLeft.length - 1 + this.moreTokensRight.length;\n while (combinedTokenWidth < elementWidth && i >= 0 && !breakLoop) {\n // we want to get the first hidden token and check to see if it can fit in the whole tokenizer\n const tokenToCheck = this.tokenList.filter(\n (token) => token.elementRef.nativeElement.style.display === 'none'\n )[i];\n /*\n set display: 'inline-block' and visibility: 'hidden' - this way, the tokenizer width will\n contain the width of the token we might display, without actually making the token visible to the user.\n */\n tokenToCheck.elementRef.nativeElement.style.display = 'inline-block';\n tokenToCheck.elementRef.nativeElement.style.visibility = 'hidden';\n elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n combinedTokenWidth = this.getCombinedTokenWidth();\n /*\n if the width of the inner tokenizer component is still smaller than the whole tokenizer component, we'll\n make the token visible and reduce the hidden count\n */\n if (combinedTokenWidth < elementWidth) {\n tokenToCheck.elementRef.nativeElement.style.visibility = 'visible';\n tokenToCheck._viewContainer.createEmbeddedView(tokenToCheck._content);\n if (this.moreTokensLeft.length) {\n this.moreTokensLeft.pop();\n } else if (this.moreTokensRight.length) {\n this.moreTokensRight.pop();\n }\n } else {\n // otherwise, stop looping and set the token's display back to 'none'\n tokenToCheck.elementRef.nativeElement.style.display = 'none';\n breakLoop = true;\n }\n i--;\n this._cdRef.markForCheck();\n }\n } else {\n this._getHiddenCozyTokenCount();\n }\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._cdRef.detectChanges();\n }\n\n /** @hidden */\n private _handleInitCozyTokenCount(): 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 private _unsubscribeClicks(): void {\n if (this.tokenListClickSubscriptions && this.tokenListClickSubscriptions.length) {\n this.tokenListClickSubscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n }\n }\n\n private _inputKeydownEvent(): void {\n this.input.elementRef().nativeElement.addEventListener('keydown', (event) => {\n this.handleKeyDown(event, this.tokenList.length);\n });\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, index): void {\n this.tokenList.forEach((shadowedToken) => {\n if (shadowedToken !== token) {\n shadowedToken.selected = false;\n }\n });\n this._firstElementInSelection = index;\n this._lastElementInSelection = index;\n token.selected = 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 /** @hidden Method which handles what happens to token when it is clicked and the shift key is being held down.*/\n private _shiftSelected(index): 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 =\n this._firstElementInSelection != null &&\n this._lastElementInSelection != null &&\n indexOfToken >= this._firstElementInSelection &&\n indexOfToken <= this._lastElementInSelection;\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, index): void {\n this._firstElementInSelection = null;\n this._lastElementInSelection = null;\n const selected = token.selected;\n token.selected = true;\n if (selected) {\n token.selected = 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 === document.activeElement;\n }\n\n /** @hidden */\n private _isInputFocused(): boolean {\n return document.activeElement === this.input.elementRef().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.elementRef().nativeElement.value;\n }\n\n /** @hidden */\n private _focusInput(): void {\n this.input.elementRef().nativeElement.focus();\n }\n\n /** @hidden */\n private _isControlKey(keyboardEvent: KeyboardEvent): boolean {\n return keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n }\n\n /** @hidden */\n private _listenElementEvents(): void {\n fromEvent<Event>(this.elementRef().nativeElement, 'focus', { capture: true })\n .pipe(\n filter((event) => (event['target'] as any)?.tagName === 'INPUT' && this.tokenizerFocusable),\n tap(() => {\n this._tokenizerHasFocus = true;\n this._cdRef.markForCheck();\n }),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n fromEvent(this.elementRef().nativeElement, 'blur', { capture: true })\n .pipe(\n tap(() => {\n this._tokenizerHasFocus = false;\n this._cdRef.markForCheck();\n }),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n }\n}\n","<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <ng-content select=\"fd-token\"></ng-content>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [compact]=\"compact\" [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [compact]=\"compact\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"token.deleteButtonLabel\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n #moreElement\n >\n <ng-container *ngIf=\"compact || compactCollapse\"\n >{{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}</ng-container\n >\n <ng-container *ngIf=\"!compact && !compactCollapse\">{{ hiddenCozyTokenCount }} {{ moreTerm }}</ng-container>\n </span>\n</ng-template>\n","import { Directive, ElementRef, Input, OnChanges, OnInit } from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tokenizer-input]'\n})\nexport class TokenizerInputDirective implements OnInit, OnChanges, CssClassBuilder {\n /** user's custom classes */\n @Input()\n class: string;\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return ['fd-tokenizer__input', this.class];\n }\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TokenComponent } from './token.component';\nimport { TokenizerComponent } from './tokenizer.component';\nimport { TokenizerInputDirective } from './token-input.directive';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ListModule } from '@fundamental-ngx/core/list';\n\n@NgModule({\n declarations: [TokenComponent, TokenizerComponent, TokenizerInputDirective],\n imports: [CommonModule, InputGroupModule, ButtonModule, PopoverModule, ListModule],\n exports: [TokenComponent, TokenizerComponent, TokenizerInputDirective]\n})\nexport class TokenModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-token.mjs","sources":["../../../../../libs/core/src/lib/token/token.component.ts","../../../../../libs/core/src/lib/token/token.component.html","../../../../../libs/core/src/lib/token/tokenizer.component.ts","../../../../../libs/core/src/lib/token/tokenizer.component.html","../../../../../libs/core/src/lib/token/token-input.directive.ts","../../../../../libs/core/src/lib/token/token.module.ts","../../../../../libs/core/src/lib/token/fundamental-ngx-core-token.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ContentDensityService } from '@fundamental-ngx/core/utils';\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 styleUrls: ['./token.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TokenComponent implements OnInit, AfterViewInit, OnDestroy {\n /** Whether the token is disabled. */\n @Input()\n disabled = false;\n\n /** Whether the token is compact. */\n @Input()\n compact?: boolean;\n\n /** @hidden */\n @ViewChild('tokenWrapperElement')\n tokenWrapperElement: ElementRef;\n\n /** @hidden */\n @ViewChild('content')\n readonly _content: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('viewContainer', { read: ViewContainerRef })\n readonly _viewContainer: ViewContainerRef;\n\n private _selected = false;\n\n private _subscriptions = new Subscription();\n\n /** Whether the token is selected. */\n @Input()\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(val: boolean) {\n if (this._selected !== val) {\n this._cdRef.markForCheck();\n }\n this._selected = val;\n }\n\n /** Whether the token is read-only. */\n @Input()\n readOnly = false;\n\n /** label for close icon */\n @Input()\n deleteButtonLabel = 'Deletable';\n\n /** role description for token */\n @Input()\n ariaRoleDescription = 'token';\n\n /** Emitted when the *x* icon is clicked. Specifically, any pseudo-element. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onCloseClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n /** Emitted when token should be removed */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onRemove: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emitted when a token is clicked. */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTokenClick: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n\n constructor(\n public elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n @Optional() private _contentDensityService: ContentDensityService\n ) {}\n\n /** @hidden */\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._subscriptions.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this._cdRef.markForCheck();\n })\n );\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._viewContainer.createEmbeddedView(this._content);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n closeClickHandler(event?): 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): void {\n this.onTokenClick.emit(event);\n }\n}\n","<span\n #tokenWrapperElement\n class=\"fd-token\"\n role=\"option\"\n [attr.aria-roledescription]=\"ariaRoleDescription\"\n (click)=\"tokenClickHandler($event)\"\n [class.fd-token__disabled]=\"disabled\"\n [class.fd-token--compact]=\"compact\"\n [class.fd-token--selected]=\"selected\"\n [class.fd-token--readonly]=\"readOnly\"\n [attr.aria-selected]=\"selected\"\n [attr.aria-readonly]=\"readOnly\"\n>\n <span class=\"fd-token__text no-text-select\">\n <ng-container #viewContainer></ng-container>\n </span>\n <span\n (click)=\"closeClickHandler($event)\"\n role=\"button\"\n [attr.aria-label]=\"deleteButtonLabel\"\n *ngIf=\"!readOnly\"\n class=\"fd-token__close\"\n tabindex=\"-1\"\n ></span>\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { A, BACKSPACE, DELETE, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport {\n ContentDensityService,\n CssClassBuilder,\n applyCssClass,\n RtlService,\n KeyUtil\n} from '@fundamental-ngx/core/utils';\nimport { TokenComponent } from './token.component';\n\n@Component({\n selector: 'fd-tokenizer',\n templateUrl: './tokenizer.component.html',\n styleUrls: ['./tokenizer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TokenizerComponent\n implements AfterViewChecked, AfterViewInit, AfterContentInit, OnDestroy, CssClassBuilder, OnInit, OnChanges\n{\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 /** role description for tokenizer component */\n @Input()\n ariaRoleDescription = 'tokenizer';\n\n /** @hidden */\n @ContentChildren(forwardRef(() => TokenComponent))\n tokenList: QueryList<TokenComponent>;\n\n /** @hidden */\n @ContentChild(forwardRef(() => FormControlComponent))\n input: FormControlComponent;\n\n /** @hidden */\n @ViewChild('tokenizerInner')\n tokenizerInnerEl: ElementRef;\n\n /** @hidden */\n @ViewChild('moreElement')\n moreElement: ElementRef;\n\n /** @hidden */\n @ViewChild('inputGroupAddOn') set content(content: ElementRef) {\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 /** @hidden */\n inputGroupAddonEl: ElementRef;\n\n /** Whether the tokenizer is compact */\n @Input()\n compact?: boolean;\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 /** Word to use for when there are extra tokens. */\n @Input()\n moreTerm = 'more';\n\n /** @hidden */\n @Input()\n open: boolean;\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 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: Subscription[] = [];\n\n /** @hidden */\n hiddenCozyTokenCount = 0;\n\n /** @hidden Used to add focus to tokenizer element */\n _tokenizerHasFocus = false;\n\n /** @hidden */\n _showOverflowPopover = true;\n\n /** @hidden */\n private _contentDensitySubscription = new Subscription();\n\n /** @hidden */\n /* Variable which will keep the index of the first token pressed in the tokenizer*/\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 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 private _ctrlPrevious: boolean;\n\n /** @hidden */\n /* Flag which will say if they held shift and clicked highlighting elements before or*/\n private _directionShiftIsRight: boolean | null = null;\n\n /** An RxJS Subject that will kill the data stream upon destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.input && this.input.elementRef()) {\n this._inputKeydownEvent();\n }\n }\n\n /** @hidden */\n ngAfterViewChecked(): void {\n if (this.tokenList) {\n this.previousTokenCount = this.tokenList.length;\n }\n this.handleTokenClickSubscriptions();\n // watch for changes to the tokenList and attempt to expand/collapse tokens as needed\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this.tokenListChangesSubscription = this.tokenList.changes.subscribe(() => {\n this._resetTokens();\n });\n this.tokenList.forEach((token) => {\n this.tokenListChangesSubscription.add(\n token.onCloseClick.subscribe(() => {\n this._resetTokens();\n })\n );\n });\n if (!this.compact && !this.compactCollapse) {\n this._handleInitCozyTokenCount();\n }\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listenElementEvents();\n this.previousElementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n this.onResize();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n if (this.tokenListChangesSubscription) {\n this.tokenListChangesSubscription.unsubscribe();\n }\n this._onDestroy$.next();\n this._onDestroy$.complete();\n this._unsubscribeClicks();\n this._contentDensitySubscription.unsubscribe();\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (this.compact === undefined && this._contentDensityService) {\n this._contentDensitySubscription.add(\n this._contentDensityService._isCompactDensity.subscribe((isCompact) => {\n this.compact = isCompact;\n this._cdRef.markForCheck();\n this.buildComponentCssClass();\n })\n );\n }\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n constructor(\n private _elementRef: ElementRef,\n @Optional() private _contentDensityService: ContentDensityService,\n private _cdRef: ChangeDetectorRef,\n @Optional() private _rtlService: RtlService,\n private _renderer: Renderer2\n ) {\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 = false;\n });\n }\n });\n }\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return [this.class];\n }\n\n elementRef(): ElementRef {\n return this._elementRef;\n }\n\n /** @hidden */\n handleTokenClickSubscriptions(): void {\n this._unsubscribeClicks();\n this.tokenList.forEach((token, index) => {\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 });\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!.setAttribute('tabindex', '0');\n elementToFocus!.focus();\n this.addKeyboardListener(elementToFocus!, newIndex);\n }\n\n return elementToFocus;\n }\n\n /** @hidden */\n addKeyboardListener(element: HTMLElement, newIndex: number): void {\n // function needs to be defined in order to be referenced later by addEventListener/removeEventListener\n const handleFunctionReference = (e): void => {\n if (newIndex || newIndex === 0) {\n this.handleKeyDown(e, newIndex);\n }\n };\n element.addEventListener('keydown', handleFunctionReference);\n element.addEventListener('blur', () => {\n element.setAttribute('tabindex', '-1');\n element.removeEventListener('keydown', handleFunctionReference);\n });\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());\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 @HostListener('window:resize', [])\n onResize(): void {\n if (this._elementRef) {\n const elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;\n this._resetTokens();\n this.previousElementWidth = elementWidth;\n }\n }\n\n /** @hidden */\n handleKeyDown(event: KeyboardEvent, fromIndex: number): void {\n let newIndex: number | undefined;\n const rtl = this._rtlService && this._rtlService.rtl ? this._rtlService.rtl.getValue() : 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 = false;\n }\n });\n token && (token.selected = !token.selected);\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, ENTER)) {\n this._focusInput();\n } else if ((KeyUtil.isKeyCode(event, LEFT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, RIGHT_ARROW) && rtl)) {\n this._handleArrowLeft(fromIndex);\n newIndex = fromIndex - 1;\n } else if ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl)) {\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 = true));\n }\n if (\n newIndex === this.tokenList.length &&\n ((KeyUtil.isKeyCode(event, RIGHT_ARROW) && !rtl) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && rtl))\n ) {\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 = 0;\n // get the width of each token\n this.tokenList.forEach((token) => {\n totalTokenWidth = totalTokenWidth + token.elementRef.nativeElement.getBoundingClientRect().width;\n });\n // add input width\n if (this.input && this.input.elementRef()) {\n totalTokenWidth = totalTokenWidth + this.input.elementRef().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 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 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 _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.compact || this.compactCollapse) {\n this._cdRef.detectChanges();\n this._viewContainer.forEach((viewContainer) => viewContainer.clear());\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.find((item, index) => index === 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 combinedTokenWidth = this.getCombinedTokenWidth();\n side === 'right' ? i-- : i++;\n }\n\n this._cdRef.detectChanges();\n this._hiddenTokens.forEach((hiddenToken, index) => {\n hiddenToken._viewContainer.clear();\n this._viewContainer.get(index)?.createEmbeddedView(hiddenToken._content);\n });\n } else {\n this._getHiddenCozyTokenCount();\n }\n }\n\n /** @hidden */\n private _resetTokens(): void {\n this.moreTokensLeft = [];\n this.moreTokensRight = [];\n if (this.compact || this.compactCollapse) {\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 }\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._cdRef.detectChanges();\n }\n\n /** @hidden */\n private _handleInitCozyTokenCount(): 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 private _unsubscribeClicks(): void {\n if (this.tokenListClickSubscriptions && this.tokenListClickSubscriptions.length) {\n this.tokenListClickSubscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n }\n }\n\n private _inputKeydownEvent(): void {\n this.input.elementRef().nativeElement.addEventListener('keydown', (event) => {\n this.handleKeyDown(event, this.tokenList.length);\n });\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, index): void {\n this.tokenList.forEach((shadowedToken) => {\n if (shadowedToken !== token) {\n shadowedToken.selected = false;\n }\n });\n this._firstElementInSelection = index;\n this._lastElementInSelection = index;\n token.selected = 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 /** @hidden Method which handles what happens to token when it is clicked and the shift key is being held down.*/\n private _shiftSelected(index): 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 =\n this._firstElementInSelection != null &&\n this._lastElementInSelection != null &&\n indexOfToken >= this._firstElementInSelection &&\n indexOfToken <= this._lastElementInSelection;\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, index): void {\n this._firstElementInSelection = null;\n this._lastElementInSelection = null;\n const selected = token.selected;\n token.selected = true;\n if (selected) {\n token.selected = 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 === document.activeElement;\n }\n\n /** @hidden */\n private _isInputFocused(): boolean {\n return document.activeElement === this.input.elementRef().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.elementRef().nativeElement.value;\n }\n\n /** @hidden */\n private _focusInput(): void {\n this.input.elementRef().nativeElement.focus();\n }\n\n /** @hidden */\n private _isControlKey(keyboardEvent: KeyboardEvent): boolean {\n return keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n }\n\n /** @hidden */\n private _listenElementEvents(): void {\n fromEvent<Event>(this.elementRef().nativeElement, 'focus', { capture: true })\n .pipe(\n filter((event) => (event['target'] as any)?.tagName === 'INPUT' && this.tokenizerFocusable),\n tap(() => {\n this._tokenizerHasFocus = true;\n this._cdRef.markForCheck();\n }),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n fromEvent(this.elementRef().nativeElement, 'blur', { capture: true })\n .pipe(\n tap(() => {\n this._tokenizerHasFocus = false;\n this._cdRef.markForCheck();\n }),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n }\n}\n","<div\n class=\"fd-tokenizer fd-tokenizer--scrollable\"\n [class.is-focus]=\"_tokenizerHasFocus\"\n [class.fd-tokenizer--compact]=\"compact\"\n>\n <div class=\"fd-tokenizer__inner\" #tokenizerInner>\n <ng-content select=\"fd-token\"></ng-content>\n\n <ng-container *ngIf=\"_showOverflowPopover && (compact || compactCollapse); else moreElement\">\n <ng-container *ngTemplateOutlet=\"tokensOverflow\"></ng-container>\n </ng-container>\n\n <ng-content select=\"[fd-form-control]\"></ng-content>\n </div>\n <span fd-input-group-addon *ngIf=\"glyph\" #inputGroupAddOn [compact]=\"compact\" [button]=\"true\" placement=\"after\">\n <button\n fd-button\n [class]=\"compact ? 'fd-tokenizer-addon--compact' : 'fd-tokenizer-addon'\"\n fdType=\"transparent\"\n [compact]=\"compact\"\n [glyph]=\"glyph\"\n type=\"button\"\n ></button>\n </span>\n</div>\n\n<ng-template #tokensOverflow>\n <fd-popover placement=\"bottom-start\" title=\"\" [noArrow]=\"false\" [focusTrapped]=\"true\" [focusAutoCapture]=\"true\">\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"moreElement\"></ng-container>\n </fd-popover-control>\n\n <fd-popover-body>\n <ul fd-list class=\"fd-tokenizer__overflow-list\">\n <li fd-list-item class=\"fd-tokenizer__overflow-list-item\" *ngFor=\"let token of _hiddenTokens\">\n <ng-container #viewContainer></ng-container>\n\n <span\n *ngIf=\"!token.readOnly\"\n class=\"fd-token__close\"\n role=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"token.deleteButtonLabel\"\n (click)=\"token.closeClickHandler($event)\"\n ></span>\n </li>\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #moreElement>\n <span\n (click)=\"moreClicked()\"\n *ngIf=\"\n (moreTokensLeft.length > 0 || moreTokensRight.length > 0 || hiddenCozyTokenCount > 0) &&\n !open &&\n !_tokenizerHasFocus\n \"\n class=\"fd-tokenizer-more\"\n #moreElement\n >\n <ng-container *ngIf=\"compact || compactCollapse\"\n >{{ moreTokensLeft.length + moreTokensRight.length }} {{ moreTerm }}</ng-container\n >\n <ng-container *ngIf=\"!compact && !compactCollapse\">{{ hiddenCozyTokenCount }} {{ moreTerm }}</ng-container>\n </span>\n</ng-template>\n","import { Directive, ElementRef, Input, OnChanges, OnInit } from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/core/utils';\nimport { CssClassBuilder } from '@fundamental-ngx/core/utils';\n\n@Directive({\n // TODO to be discussed\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-tokenizer-input]'\n})\nexport class TokenizerInputDirective implements OnInit, OnChanges, CssClassBuilder {\n /** user's custom classes */\n @Input()\n class: string;\n\n @applyCssClass\n /** CssClassBuilder interface implementation\n * function must return single string\n * function is responsible for order which css classes are applied\n */\n buildComponentCssClass(): string[] {\n return ['fd-tokenizer__input', this.class];\n }\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n elementRef(): ElementRef<any> {\n return this._elementRef;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TokenComponent } from './token.component';\nimport { TokenizerComponent } from './tokenizer.component';\nimport { TokenizerInputDirective } from './token-input.directive';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ListModule } from '@fundamental-ngx/core/list';\n\n@NgModule({\n declarations: [TokenComponent, TokenizerComponent, TokenizerInputDirective],\n imports: [CommonModule, InputGroupModule, ButtonModule, PopoverModule, ListModule],\n exports: [TokenComponent, TokenizerComponent, TokenizerInputDirective]\n})\nexport class TokenModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
package/token/package.json
CHANGED
|
@@ -122,7 +122,7 @@ export declare class TokenizerComponent implements AfterViewChecked, AfterViewIn
|
|
|
122
122
|
/** @hidden */
|
|
123
123
|
private _collapseTokens;
|
|
124
124
|
/** @hidden */
|
|
125
|
-
private
|
|
125
|
+
private _resetTokens;
|
|
126
126
|
/** @hidden */
|
|
127
127
|
private _getHiddenCozyTokenCount;
|
|
128
128
|
/** @hidden */
|
package/toolbar/package.json
CHANGED
package/tree/package.json
CHANGED
package/utils/package.json
CHANGED