@koobiq/components 19.8.2 → 19.8.4

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.
Files changed (42) hide show
  1. package/actions-panel/actions-panel.d.ts +1 -0
  2. package/badge/badge.component.d.ts +4 -2
  3. package/breadcrumbs/breadcrumbs.d.ts +1 -0
  4. package/core/styles/common/_overlay.scss +4 -3
  5. package/fesm2022/koobiq-components-actions-panel.mjs +14 -5
  6. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  7. package/fesm2022/koobiq-components-autocomplete.mjs +7 -1
  8. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  9. package/fesm2022/koobiq-components-badge.mjs +6 -0
  10. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  11. package/fesm2022/koobiq-components-breadcrumbs.mjs +4 -2
  12. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-core.mjs +3 -2
  14. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-dropdown.mjs +6 -11
  16. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-inline-edit.mjs +8 -4
  18. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-navbar.mjs +2 -2
  20. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-overflow-items.mjs +8 -4
  22. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-search-expandable.mjs +54 -14
  24. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-select.mjs +1 -1
  26. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-tags.mjs +5 -0
  28. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-timepicker.mjs +9 -4
  30. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-timezone.mjs +1 -1
  32. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-top-bar.mjs +2 -2
  34. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  35. package/navbar/navbar.scss +2 -1
  36. package/package.json +4 -4
  37. package/prebuilt-themes/dark-theme.css +1 -1
  38. package/prebuilt-themes/light-theme.css +1 -1
  39. package/prebuilt-themes/theme.css +1 -1
  40. package/schematics/ng-add/index.js +2 -2
  41. package/search-expandable/search-expandable.d.ts +4 -1
  42. package/top-bar/top-bar.scss +2 -1
@@ -1533,6 +1533,11 @@ class KbqTagInput {
1533
1533
  return;
1534
1534
  }
1535
1535
  if (isSeparatorKey) {
1536
+ if (event.keyCode === ENTER$1 &&
1537
+ this.autocompleteTrigger?.panelOpen &&
1538
+ this.autocompleteTrigger?.activeOption) {
1539
+ return;
1540
+ }
1536
1541
  this.emitTagEnd();
1537
1542
  event.preventDefault();
1538
1543
  }
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-tags.mjs","sources":["../../../packages/components/tags/tag-default-options.ts","../../../packages/components/tags/tag.component.ts","../../../packages/components/tags/tag-list.component.ts","../../../packages/components/tags/tag-input.ts","../../../packages/components/tags/tag.module.ts","../../../packages/components/tags/koobiq-components-tags.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { KbqTagSeparator } from './tag-input';\n\n/** Default options, for the chips module, that can be overridden. */\nexport interface KbqTagsDefaultOptions {\n /** The list of key codes that will trigger a chipEnd event. */\n separatorKeyCodes: number[];\n separators?: { [key: number]: KbqTagSeparator };\n addOnPaste?: boolean;\n}\n\n/** Injection token to be used to override the default options for the chips module. */\nexport const KBQ_TAGS_DEFAULT_OPTIONS = new InjectionToken<KbqTagsDefaultOptions>('kbq-tags-default-options');\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\nimport { BACKSPACE, DELETE, ENTER, ESCAPE, F2, SPACE } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n signal,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IFocusableOption } from '@koobiq/cdk/a11y';\nimport { hasModifierKey } from '@koobiq/cdk/keycodes';\nimport {\n isNull,\n KBQ_TITLE_TEXT_REF,\n KbqColorDirective,\n KbqComponentColors,\n KbqFieldSizingContent,\n KbqTitleTextRef\n} from '@koobiq/components/core';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { Subject } from 'rxjs';\nimport { KbqTagList } from './tag-list.component';\n\n/**\n * Event object emitted by KbqTag.\n */\nexport type KbqTagEvent = {\n tag: KbqTag;\n};\n\n/**\n * Event object emitted by KbqTag when the tag is edited.\n */\nexport class KbqTagEditChange {\n constructor(\n public readonly tag: KbqTag,\n public readonly type: 'start' | 'submit' | 'cancel',\n public readonly reason: string\n ) {}\n}\n\n/** Event object emitted by KbqTag when selected or deselected. */\nexport class KbqTagSelectionChange {\n constructor(\n public source: KbqTag,\n public selected: boolean,\n public isUserInput = false\n ) {}\n}\n\n/**\n * Event object emitted when the KbqTag is focused.\n */\nexport type KbqTagFocusEvent = KbqTagEvent & {\n origin: FocusOrigin;\n};\n\nconst TAG_ATTRIBUTE_NAMES = ['kbq-basic-tag'];\n\nconst getTagEditInputMissingError = (): Error => {\n return Error('Editable kbq-tag must contain a KbqTagEditInput.');\n};\n\n/**\n * Object passed to the drag data event when a tag is being dragged.\n *\n * @docs-private\n */\nexport type KbqTagDragData = KbqTagEvent;\n\n/**\n * Dummy directive to add CSS class to tag avatar.\n * @docs-private\n */\n@Directive({\n selector: 'kbq-tag-avatar, [kbqTagAvatar]',\n host: { class: 'kbq-tag-avatar' }\n})\nexport class KbqTagAvatar {}\n\n/**\n * Dummy directive to add CSS class to tag trailing icon.\n * @docs-private\n */\n@Directive({\n selector: 'kbq-tag-trailing-icon, [kbqTagTrailingIcon]',\n host: { class: 'kbq-tag-trailing-icon' }\n})\nexport class KbqTagTrailingIcon {}\n\n/**\n * Directive to add submit behavior for the editable tag.\n */\n@Directive({\n selector: '[kbqTagEditSubmit]',\n exportAs: 'kbqTagEditSubmit',\n host: {\n class: 'kbq-tag-edit-submit',\n '[attr.tabindex]': '-1',\n\n '(click)': 'tag.submitEditing(\"click\")'\n }\n})\nexport class KbqTagEditSubmit {\n /** @docs-private */\n protected readonly tag = inject(KbqTag);\n}\n\n/**\n * Directive to add input behavior for the editable tag.\n */\n@Directive({\n selector: '[kbqTagEditInput]',\n exportAs: 'kbqTagEditInput',\n host: {\n class: 'kbq-tag-edit-input',\n\n '(keydown)': 'handleKeydown($event)',\n '(click)': 'handleClick($event)'\n },\n hostDirectives: [KbqFieldSizingContent]\n})\nexport class KbqTagEditInput {\n private readonly tag = inject(KbqTag);\n\n /** @docs-private */\n protected handleClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /** @docs-private */\n protected handleKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case ESCAPE: {\n event.stopPropagation();\n this.tag.cancelEditing('escape');\n break;\n }\n case ENTER: {\n event.stopPropagation();\n this.tag.submitEditing('enter');\n break;\n }\n\n // We should prevent KbqTag from receiving these keydown events\n case BACKSPACE:\n case SPACE:\n case DELETE: {\n event.stopPropagation();\n break;\n }\n\n default:\n }\n }\n}\n\n@Component({\n selector: 'kbq-tag, [kbq-tag], kbq-basic-tag, [kbq-basic-tag]',\n template: `\n <div class=\"kbq-tag__wrapper\">\n <ng-content select=\"[kbq-icon]:not([kbqTagRemove]):not([kbqTagEditSubmit])\" />\n <span #kbqTitleText class=\"kbq-tag__text\">\n @if (editing()) {\n <ng-content select=\"[kbqTagEditInput]\" />\n } @else {\n <ng-content />\n }\n </span>\n @if (editing()) {\n <ng-content select=\"[kbqTagEditSubmit]\" />\n } @else {\n @if (removable) {\n <ng-content select=\"[kbqTagRemove]\" />\n }\n }\n </div>\n `,\n styleUrls: ['./tag.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kbqTag',\n hostDirectives: [CdkDrag],\n host: {\n class: 'kbq-tag',\n '[attr.tabindex]': 'tabindex',\n '[attr.disabled]': 'disabled || null',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-tag-with-avatar]': 'avatar',\n '[class.kbq-tag-with-icon]': 'contentChildren',\n '[class.kbq-tag-with-trailing-icon]': 'trailingIcon || removeIcon',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-tag_editable]': 'editable',\n '[class.kbq-tag_editing]': 'editing()',\n '[class.kbq-tag_removable]': 'removable',\n '[class.kbq-tag_selectable]': 'selectable',\n '[class.kbq-tag_draggable]': 'draggable',\n '(dblclick)': 'handleDblClick($event)',\n '(click)': 'handleClick($event)',\n '(keydown)': 'handleKeydown($event)'\n },\n providers: [{ provide: KBQ_TITLE_TEXT_REF, useExisting: KbqTag }]\n})\nexport class KbqTag\n extends KbqColorDirective\n implements IFocusableOption, OnDestroy, KbqTitleTextRef, AfterContentInit, AfterViewInit\n{\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly tagList = inject(KbqTagList, { optional: true });\n private readonly drag: CdkDrag<KbqTagDragData> = inject(CdkDrag, { host: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /** @docs-private */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Emits when the tag is focused.\n *\n * @docs-private\n */\n readonly onFocus = new Subject<KbqTagFocusEvent>();\n\n /**\n * Emits when the tag is blurred.\n *\n * @docs-private\n */\n readonly onBlur = new Subject<KbqTagEvent>();\n\n /** @docs-private */\n readonly nativeElement = this.elementRef.nativeElement;\n\n /**\n * Whether the tag has focus.\n *\n * @docs-private\n */\n hasFocus: boolean = false;\n\n /** Whether the tag is editable. */\n @Input({ transform: booleanAttribute })\n get editable(): boolean {\n return this._editable ?? !!this.tagList?.editable;\n }\n\n set editable(value: boolean) {\n this._editable = value;\n }\n\n private _editable: boolean | undefined;\n\n /** Whether the tag edits can't be submitted. */\n @Input({ transform: booleanAttribute }) preventEditSubmit: boolean = false;\n\n @ContentChild(KbqTagEditInput, { read: ElementRef })\n private readonly editInputElementRef: ElementRef<HTMLInputElement>;\n\n /**\n * Emits event when the tag is edited.\n */\n @Output() readonly editChange = new EventEmitter<KbqTagEditChange>();\n\n /**\n * @docs-private\n */\n protected readonly editing = signal(false);\n\n /**\n * @docs-private\n */\n @ViewChild('kbqTitleText') readonly textElement: ElementRef<HTMLSpanElement>;\n\n @ContentChildren(KbqIcon) contentChildren: QueryList<KbqIcon>;\n\n /** The tag avatar */\n @ContentChild(KbqTagAvatar, { static: false }) avatar: KbqTagAvatar;\n\n /** The tag's trailing icon. */\n @ContentChild(KbqTagTrailingIcon, { static: false }) trailingIcon: KbqTagTrailingIcon;\n\n /** The tag's remove toggler. */\n @ContentChild(forwardRef(() => KbqTagRemove), { static: false }) removeIcon: KbqTagRemove;\n\n /** Emitted when the tag is selected or deselected. */\n @Output() readonly selectionChange: EventEmitter<KbqTagSelectionChange> = new EventEmitter<KbqTagSelectionChange>();\n\n /** Emitted when the tag is destroyed and leaving the DOM. */\n @Output() readonly destroyed: EventEmitter<KbqTagEvent> = new EventEmitter<KbqTagEvent>();\n\n /**\n * Emitted when a tag is to be removed.\n * Fires on programmatic and UI removal (click or keyboard).\n */\n @Output() readonly removed: EventEmitter<KbqTagEvent> = new EventEmitter<KbqTagEvent>();\n\n /** Whether the tag is selected. */\n @Input({ transform: booleanAttribute })\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(value: boolean) {\n this.setSelectedState(value, { emitEvent: true });\n }\n\n private _selected: boolean = false;\n\n /** The value of the tag. Defaults to the content inside `<kbq-tag>` tags. */\n @Input()\n get value(): any {\n return this._value ?? this.elementRef.nativeElement.textContent?.trim();\n }\n\n set value(value: any) {\n this._value = value;\n }\n\n private _value: any;\n\n /**\n * Whether the tag is selectable.\n */\n @Input({ transform: booleanAttribute })\n get selectable(): boolean {\n return this._selectable || !!this.tagList?.selectable;\n }\n\n set selectable(value: boolean) {\n this._selectable = value;\n }\n\n private _selectable: boolean = false;\n\n /**\n * Determines whether the tag is removable.\n */\n @Input({ transform: booleanAttribute })\n get removable(): boolean {\n return this._removable && (this.tagList?.removable ?? true);\n }\n\n set removable(value: boolean) {\n this._removable = value;\n }\n\n private _removable: boolean = true;\n\n @Input()\n get tabindex() {\n if (this.disabled) return null;\n if (this._tabindex === -1 && this.selectable && !this.tagList) return 0;\n\n return this._tabindex;\n }\n\n set tabindex(value: any) {\n this._tabindex = value;\n }\n\n private _tabindex = -1;\n\n /**\n * Whether the tag is disabled.\n */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled || (this.tagList?.disabled ?? false);\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n this.syncDragDisabledState();\n }\n\n private _disabled: boolean = false;\n\n /**\n * Whether the tag is draggable.\n *\n * @docs-private\n */\n protected get draggable(): boolean {\n return (this.tagList?.draggable ?? false) && !this.disabled;\n }\n\n constructor(public changeDetectorRef: ChangeDetectorRef) {\n super();\n\n this.color = KbqComponentColors.ContrastFade;\n this.setDefaultColor(KbqComponentColors.ContrastFade);\n\n this.addHostClassName();\n this.setupDragInitialProperties();\n }\n\n ngAfterContentInit() {\n this.addClassModificatorForIcons();\n }\n\n ngAfterViewInit(): void {\n this.setupFocusMonitor();\n }\n\n ngOnDestroy(): void {\n this.cancelEditing('destroy');\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.destroyed.emit({ tag: this });\n }\n\n /** @docs-private */\n addClassModificatorForIcons() {\n const icons = this.contentChildren.map((item) => item.elementRef.nativeElement);\n\n if (icons.length === 1) {\n const iconElement = icons[0];\n\n if (iconElement.classList.contains('kbq-tag-remove')) {\n iconElement.classList.add('kbq-icon_right');\n this.nativeElement.classList.add('kbq-right-icon');\n } else {\n iconElement.classList.add('kbq-icon_left');\n this.nativeElement.classList.add('kbq-left-icon');\n }\n } else if (icons.length > 1) {\n const firstIconElement = icons[0];\n const secondIconElement = icons[1];\n\n firstIconElement.classList.add('kbq-icon_left');\n secondIconElement.classList.add('kbq-icon_right');\n }\n }\n\n /** @docs-private */\n addHostClassName() {\n // Add class for the different tags\n for (const attr of TAG_ATTRIBUTE_NAMES) {\n if (\n this.elementRef.nativeElement.hasAttribute(attr) ||\n this.elementRef.nativeElement.tagName.toLowerCase() === attr\n ) {\n (this.elementRef.nativeElement as HTMLElement).classList.add(attr);\n\n return;\n }\n }\n\n (this.elementRef.nativeElement as HTMLElement).classList.add('kbq-standard-tag');\n }\n\n /**\n * Selects the tag.\n */\n select(): void {\n if (this.disabled || !this.selectable) return;\n\n this.setSelectedState(true, { emitEvent: true });\n }\n\n /**\n * Deselects the tag.\n */\n deselect(): void {\n if (this.disabled || !this.selectable) return;\n\n this.setSelectedState(false, { emitEvent: true });\n }\n\n /**\n * Selects the tag and emits event with isUserInput flag.\n *\n * @docs-private\n */\n selectViaInteraction(): void {\n if (this.disabled || !this.selectable) return;\n\n this.setSelectedState(true, { isUserInput: true, emitEvent: true });\n }\n\n /**\n * Toggles the current selected state of the tag.\n */\n toggleSelected(isUserInput: boolean = false): boolean {\n if (this.disabled || !this.selectable) return this.selected;\n\n this.setSelectedState(!this.selected, { isUserInput, emitEvent: true });\n\n return this.selected;\n }\n\n /** Focuses the tag. */\n focus(): void {\n if (this.disabled) return;\n\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * Allows for programmatic removal of the tag. Called by the KbqTagList when the DELETE or\n * BACKSPACE keys are pressed.\n *\n * Informs any listeners of the removal request. Does not remove the tag from the DOM.\n */\n remove(): void {\n if (this.removable) {\n this.removed.emit({ tag: this });\n }\n }\n\n /** @docs-private */\n handleClick(event: MouseEvent): void {\n if (this.disabled || this.editing()) {\n event.preventDefault();\n\n return;\n }\n\n if (\n // We should toggle selection only if tag inside of a tag list.\n // Single tag can only be toggled on focus or blur.\n this.tagList &&\n this.selectable &&\n hasModifierKey(event, 'metaKey', 'ctrlKey', 'shiftKey')\n ) {\n this.toggleSelected(true);\n\n // We should stop event propagation to prevent the tag list from handling the click event.\n event.stopPropagation();\n\n return;\n }\n\n if (!this.tagList && this.selectable) {\n this.toggleSelected(true);\n }\n }\n\n /** @docs-private */\n handleKeydown(event: KeyboardEvent): void {\n if (this.disabled || this.editing()) return;\n\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE: {\n // If there is a tag list and it has selected tags, remove them, otherwise remove focused tag.\n this.tagList?.selected.length ? this.tagList.removeSelected() : this.remove();\n\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n }\n case SPACE: {\n this.toggleSelected(true);\n this.focusMonitor.focusVia(this.elementRef, 'keyboard');\n\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n case F2:\n case ENTER:\n this.startEditing(event.key);\n break;\n default:\n }\n }\n\n /** @docs-private */\n blur(): void {\n this.elementRef.nativeElement.blur();\n }\n\n /** @docs-private */\n protected handleDblClick(event: MouseEvent): void {\n if (this.disabled || !this.editable) return;\n\n event.stopPropagation();\n this.startEditing('dblclick');\n }\n\n private startEditing(reason: string): void {\n if (!this.editable || this.editing()) return;\n\n this.editing.set(true);\n this.editChange.emit({ tag: this, type: 'start', reason });\n\n setTimeout(() => {\n const input = this.editInputElementRef?.nativeElement;\n\n if (!input) throw getTagEditInputMissingError();\n\n this.focusMonitor.focusVia(this.elementRef.nativeElement, 'keyboard');\n input.select();\n });\n }\n\n /** @docs-private */\n cancelEditing(reason: string): void {\n if (!this.editing()) return;\n\n this.editing.set(false);\n this.editChange.emit({ tag: this, type: 'cancel', reason });\n\n this.textElement.nativeElement.scrollTo?.({ left: 0, behavior: 'instant' });\n }\n\n /** @docs-private */\n submitEditing(reason: string): void {\n if (!this.editing() || this.preventEditSubmit) return;\n\n this.editing.set(false);\n this.editChange.emit({ tag: this, type: 'submit', reason });\n\n this.textElement.nativeElement.scrollTo?.({ left: 0, behavior: 'instant' });\n }\n\n /**\n * Sets the selected state of the tag.\n *\n * @docs-private\n */\n setSelectedState(selected: boolean, options: Partial<{ isUserInput: boolean; emitEvent: boolean }> = {}): void {\n const { isUserInput = false, emitEvent = false } = options;\n\n if (selected !== this.selected) {\n this._selected = selected;\n\n if (emitEvent) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this.selected\n });\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private setupDragInitialProperties(): void {\n this.syncDragDisabledState();\n\n this.drag.started.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.drag.data = { tag: this };\n });\n }\n\n private syncDragDisabledState(): void {\n this.drag.disabled = !this.draggable;\n }\n\n private setupFocusMonitor(): void {\n this.focusMonitor.monitor(this.elementRef, true).subscribe((origin) => {\n if (this.disabled) return;\n\n const hasFocus = !isNull(origin);\n\n if (hasFocus !== this.hasFocus) {\n this.hasFocus = hasFocus;\n\n if (this.hasFocus) {\n this.onFocus.next({ tag: this, origin });\n if (!this.tagList && origin !== 'mouse') this.select();\n } else {\n this.onBlur.next({ tag: this });\n this.cancelEditing('blur');\n if (!this.tagList) this.deselect();\n }\n\n this.changeDetectorRef.markForCheck();\n }\n });\n }\n}\n\n/**\n *\n * Example:\n *\n * `<kbq-tag>\n * <kbq-icon kbqTagRemove>cancel</kbq-icon>\n * </kbq-tag>`\n *\n * You *may* use a custom icon, but you may need to override the `kbq-tag-remove` positioning\n * styles to properly center the icon within the tag.\n */\n@Directive({\n selector: '[kbqTagRemove]',\n host: {\n class: 'kbq-tag-remove kbq-tag-trailing-icon',\n '[attr.tabindex]': '-1',\n '(click)': 'handleClick($event)',\n '(focus)': 'focus($event)'\n }\n})\nexport class KbqTagRemove {\n constructor(@Inject(forwardRef(() => KbqTag)) protected parentTag: KbqTag) {}\n\n /** @docs-private */\n focus(event: FocusEvent): void {\n event.stopPropagation();\n }\n\n /**\n * Calls the parent tag's public `remove()` method if applicable.\n *\n * @docs-private\n */\n handleClick(event: Event): void {\n if (this.parentTag.removable) {\n this.parentTag.hasFocus = true;\n\n this.parentTag.remove();\n }\n\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused tag that has been focused after tag removal. Usually the parent\n // the parent click listener of the `KbqTag` would prevent propagation, but it can happen\n // that the tag is being removed before the event bubbles up.\n event.stopPropagation();\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\nimport { BACKSPACE, END, HOME, LEFT_ARROW, TAB } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Self,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport { FocusKeyManager } from '@koobiq/cdk/a11y';\nimport { isSelectAll } from '@koobiq/cdk/keycodes';\nimport {\n CanUpdateErrorState,\n ErrorStateMatcher,\n isNull,\n KBQ_VALIDATION,\n KbqOrientation\n} from '@koobiq/components/core';\nimport { KbqCleaner, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { filter, startWith, takeUntil } from 'rxjs/operators';\nimport { KbqTagTextControl } from './tag-text-control';\nimport {\n KbqTag,\n KbqTagDragData,\n KbqTagEditChange,\n KbqTagEvent,\n KbqTagFocusEvent,\n KbqTagSelectionChange\n} from './tag.component';\n\n// Increasing integer for generating unique ids for tag-list components.\nlet nextUniqueId = 0;\n\n/** Change event object that is emitted when the tag list value has changed. */\nexport class KbqTagListChange {\n constructor(\n public source: KbqTagList,\n public value: any\n ) {}\n}\n\nexport type KbqTagListDroppedEvent = Pick<CdkDragDrop<unknown>, 'event' | 'previousIndex' | 'currentIndex'> & {\n tag: KbqTag;\n};\n\n@Component({\n selector: 'kbq-tag-list',\n exportAs: 'kbqTagList',\n template: `\n <div class=\"kbq-tags-list__list-container\">\n <ng-content />\n </div>\n\n @if (canShowCleaner) {\n <div class=\"kbq-tags-list__cleaner\">\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n `,\n styleUrls: ['tag-list.scss', 'tag-tokens.scss'],\n host: {\n class: 'kbq-tag-list',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-invalid]': 'errorState',\n '[class.kbq-tag-list_selectable]': 'selectable',\n '[class.kbq-tag-list_editable]': 'editable',\n '[class.kbq-tag-list_removable]': 'removable',\n '[class.kbq-tag-list_draggable]': 'draggable',\n '[attr.tabindex]': 'tabIndex',\n '[id]': 'uid',\n '(focus)': 'focus()',\n '(blur)': 'blur()',\n '(keydown)': 'keydown($event)'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: KbqFormFieldControl, useExisting: KbqTagList }],\n hostDirectives: [CdkDropList]\n})\nexport class KbqTagList\n implements\n KbqFormFieldControl<any>,\n ControlValueAccessor,\n AfterContentInit,\n DoCheck,\n OnDestroy,\n CanUpdateErrorState,\n AfterViewInit\n{\n private readonly useLegacyValidation = inject(KBQ_VALIDATION, { optional: true })?.useValidation ?? false;\n private readonly dropList = inject(CdkDropList, { host: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusMonitor = inject(FocusMonitor);\n\n /**\n * Implemented as part of KbqFormFieldControl.\n *\n * @docs-private\n */\n readonly controlType: string = 'tag-list';\n\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `KbqFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n /**\n * Combined stream of all of the child tags' selection change events.\n *\n * @docs-private\n */\n get tagSelectionChanges(): Observable<KbqTagSelectionChange> {\n return merge(...this.tags.map((tag) => tag.selectionChange));\n }\n\n /**\n * Combined stream of all of the child tags' focus change events.\n *\n * @docs-private\n */\n get tagFocusChanges(): Observable<KbqTagFocusEvent> {\n return merge(...this.tags.map((tag) => tag.onFocus));\n }\n\n /**\n * Combined stream of all of the child tags' blur change events.\n *\n * @docs-private\n */\n get tagBlurChanges(): Observable<KbqTagEvent> {\n return merge(...this.tags.map((tag) => tag.onBlur));\n }\n\n /**\n * Combined stream of all of the child tags' destroyed events.\n *\n * @docs-private\n */\n get tagRemoveChanges(): Observable<KbqTagEvent> {\n return merge(...this.tags.map((tag) => tag.destroyed));\n }\n\n /**\n * Combined stream of all of the child tags' removal request events.\n *\n * @docs-private\n */\n protected get tagBeforeRemoveChanges(): Observable<KbqTagEvent> {\n return merge(...this.tags.map((tag) => tag.removed));\n }\n\n /**\n * Combined stream of all of the child tags' edit change events.\n *\n * @docs-private\n */\n get tagEditChanges(): Observable<KbqTagEditChange> {\n return merge(...this.tags.map((tag) => tag.editChange));\n }\n\n /**\n * The array of selected tags inside tag list.\n *\n * @docs-private\n */\n get selected(): KbqTag[] {\n return this.tags.filter(({ selected }) => selected);\n }\n\n /** @docs-private */\n get canShowCleaner(): boolean {\n return this.cleaner && this.tags.length > 0;\n }\n\n /**\n * @deprecated Unused. Will be removed in next major release.\n *\n * @docs-private\n */\n @Input({ transform: booleanAttribute }) multiple: boolean = false;\n\n /**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n @Input() compareWith = (o1: any, o2: any) => o1 === o2;\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): any {\n return this._value;\n }\n\n set value(value: any) {\n this._value = value;\n }\n\n private _value: any;\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n get id(): string {\n return this.tagInput ? this.tagInput.id : this.uid;\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n\n this.stateChanges.next();\n }\n\n private _required: boolean = false;\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input()\n get placeholder(): string {\n return this.tagInput ? this.tagInput.placeholder : this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n /** Whether any tags or the kbqTagInput inside of this tag-list has focus. */\n get focused(): boolean {\n return (this.tagInput && this.tagInput.focused) || this.hasFocusedTag();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return (!this.tagInput || this.tagInput.empty) && this.tags.length === 0;\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n return !this.empty || this.focused;\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n this.syncDropListDisabledState();\n }\n\n private _disabled: boolean = false;\n\n @Input({ transform: booleanAttribute })\n get draggable(): boolean {\n return this._draggable && !this.disabled;\n }\n\n set draggable(value: boolean) {\n this._draggable = value;\n this.syncDropListDisabledState();\n }\n\n private _draggable: boolean = false;\n\n /**\n * Emits when the user drops tag inside tag list container.\n */\n @Output() readonly dropped = new EventEmitter<KbqTagListDroppedEvent>();\n\n /**\n * Whether or not this tag list is selectable. When a tag list is not selectable,\n * the selected states for all the tags inside the tag list are always ignored.\n */\n @Input({ transform: booleanAttribute }) selectable = true;\n\n /** Whether the tags in the list are editable. */\n @Input({ transform: booleanAttribute }) editable = false;\n\n /**\n * Whether to emit change events when tags are added/removed.\n *\n * @deprecated No longer needed. Will be removed in the next major release.\n */\n @Input({ transform: booleanAttribute }) emitOnTagChanges = true;\n\n /** Whether the tags in the list are removable. */\n @Input({ transform: booleanAttribute })\n get removable(): boolean {\n return this._removable;\n }\n\n set removable(value: boolean) {\n this._removable = value;\n this.syncTagsRemovableState();\n }\n\n private _removable = true;\n\n /**\n * Tab index of the tag list. This property is ignored when the tag list contains a tag input or is disabled.\n *\n * @docs-private\n */\n @Input()\n get tabIndex(): number | null {\n return this.disabled || this.tagInput ? null : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this.userTabIndex = value;\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /**\n * Event that emits whenever the raw value of the tag-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n /** @docs-private */\n uid: string = `kbq-tag-list-${nextUniqueId++}`;\n\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use tabIndex\n *\n * @docs-private\n */\n userTabIndex: number | null = null;\n\n /** @docs-private */\n keyManager: FocusKeyManager<KbqTag>;\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n selectionModel: SelectionModel<KbqTag>;\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n tagChanges = new EventEmitter<any>();\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Orientation of the tag list.\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n @Input() orientation: KbqOrientation = 'horizontal';\n\n /** Event emitted when the selected tag list value has been changed by the user. */\n @Output() readonly change: EventEmitter<KbqTagListChange> = new EventEmitter<KbqTagListChange>();\n\n /** @docs-private */\n @ContentChild('kbqTagListCleaner', { static: true }) cleaner: KbqCleaner;\n\n /**\n * The tag components contained within this tag list.\n *\n * @docs-private\n */\n @ContentChildren(forwardRef(() => KbqTag), {\n // Need to use `descendants: true`,\n // Ivy will no longer match indirect descendants if it's left as false.\n descendants: true\n })\n tags: QueryList<KbqTag>;\n\n /**\n * Whether the component is in an error state.\n *\n * @docs-private\n */\n errorState: boolean = false;\n\n /** The tag input to add more tags */\n private tagInput: KbqTagTextControl;\n\n /** True when the next `tags.changes` emission is triggered by a UI action, not programmatic update. */\n private pendingUIChange = false;\n\n /**\n * When a tag is destroyed, we store the index of the destroyed tag until the tags\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate tag that should receive focus until the array of tags updated completely.\n */\n private lastDestroyedTagIndex: number | null = null;\n\n /** Triggers unsubscription from all per-tags streams when tags are reset. */\n private readonly tagsSubscriptions$ = new Subject<void>();\n\n constructor(\n protected elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef,\n public defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() private dir: Directionality,\n @Optional() public parentForm: NgForm,\n @Optional() public parentFormGroup: FormGroupDirective,\n @Optional() @Self() public ngControl: NgControl\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.setupDropListInitialProperties();\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n\n ngAfterContentInit() {\n this.keyManager = new FocusKeyManager<KbqTag>(this.tags)\n .withVerticalOrientation()\n .withHorizontalOrientation(this.dir ? this.dir.value : 'ltr')\n .skipPredicate(({ disabled }) => disabled);\n\n if (this.dir) {\n this.dir.change\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((dir) => this.keyManager.withHorizontalOrientation(dir));\n }\n\n // Prevents the tag list from capturing focus and redirecting\n // it back to the first tag when the user tabs out.\n this.keyManager.tabOut.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this.userTabIndex || 0;\n this.changeDetectorRef.markForCheck();\n });\n });\n\n // When the list changes, re-subscribe\n this.tags.changes\n .pipe(startWith(null), takeUntilDestroyed(this.destroyRef))\n .subscribe((currentTags: QueryList<KbqTag> | null) => {\n this.resetTags();\n\n // Check to see if we need to update our tab index\n this.updateTabIndex();\n\n // Check to see if we have a destroyed tag and need to refocus\n this.updateFocusForDestroyedTags();\n\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this.stateChanges.next();\n\n if (currentTags && this.pendingUIChange) {\n this.pendingUIChange = false;\n this.propagateTagsChanges();\n }\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.setupFocusMonitor();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.tagsSubscriptions$.next();\n }\n\n /** @docs-private */\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n\n /** @docs-private */\n onTouched = () => {};\n\n /** @docs-private */\n onChange: (value: any) => void = () => {};\n\n /** Notifies that the next `tags.changes` emission is UI-initiated. */\n notifyPendingTagChange(): void {\n this.pendingUIChange = true;\n }\n\n /**\n * Associates an HTML input element with this tag list.\n *\n * @docs-private\n */\n registerInput(inputElement: KbqTagTextControl): void {\n this.tagInput = inputElement;\n\n // todo need rethink about it (#DS-3740)\n if (this.ngControl && inputElement.ngControl?.statusChanges) {\n inputElement.ngControl.statusChanges.subscribe(() =>\n this.ngControl.control!.setErrors(inputElement.ngControl!.errors)\n );\n }\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n writeValue(value: any): void {\n this.value = value;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n *\n * @docs-private\n */\n onContainerClick(): void {\n this.focus();\n }\n\n /**\n * Focuses the tag list. If there is a tag input, focuses that instead.\n */\n focus(): void {\n if (this.disabled) return;\n\n if (this.tagInput) {\n this.focusInput();\n this.stateChanges.next();\n\n return;\n }\n\n if (this.tags.length > 0) {\n this.keyManager.setFirstItemActive();\n this.stateChanges.next();\n\n return;\n }\n }\n\n /**\n * Focuses the tag input inside the tag list.\n *\n * @docs-private\n */\n focusInput() {\n if (this.tagInput) {\n this.tagInput.focus();\n }\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n *\n * @docs-private\n */\n keydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement | null;\n\n if (this.disabled || isNull(target)) return;\n\n const shouldSelectAll = this.selectable && isSelectAll(event);\n\n if (this.isInputEmpty(target)) {\n if (\n event.keyCode === BACKSPACE ||\n event.keyCode === LEFT_ARROW ||\n (event.keyCode === TAB && event.shiftKey)\n ) {\n this.keyManager.setLastItemActive();\n event.preventDefault();\n\n return;\n }\n\n if (shouldSelectAll) {\n this.selectAll();\n this.keyManager.setLastItemActive();\n event.preventDefault();\n\n return;\n }\n } else if (this.isTagElement(target)) {\n if (event.keyCode === HOME) {\n this.keyManager.setFirstItemActive();\n event.preventDefault();\n } else if (event.keyCode === END) {\n this.keyManager.setLastItemActive();\n event.preventDefault();\n } else if (shouldSelectAll) {\n this.selectAll();\n this.keyManager.setLastItemActive();\n event.preventDefault();\n } else {\n this.keyManager.onKeydown(event);\n }\n\n this.stateChanges.next();\n }\n }\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n setSelectionByValue(_value: any, _isUserInput: boolean = true): void {}\n\n /** When blurred, mark the field as touched when focus moved outside the tag list. */\n blur() {\n if (!this.hasFocusedTag()) {\n this.keyManager.setActiveItem(-1);\n }\n\n if (!this.disabled) {\n if (this.tagInput) {\n // If there's a tag input, we should check whether the focus moved to tag input.\n // If the focus is not moved to tag input, mark the field as touched. If the focus moved\n // to tag input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on tag input.\n setTimeout(() => {\n if (!this.focused) {\n this.markAsTouched();\n this.revalidate();\n }\n });\n } else {\n // If there's no tag input, then mark the field as touched.\n this.markAsTouched();\n this.revalidate();\n }\n }\n }\n\n /** Mark the field as touched */\n markAsTouched() {\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n *\n * @docs-private\n */\n protected updateTabIndex(): void {\n // If we have 0 tags, we should not allow keyboard focus\n this._tabIndex = this.userTabIndex || (this.tags.length === 0 ? -1 : 0);\n }\n\n /**\n * If the amount of tags changed, we need to update the\n * key manager state and focus the next closest tag.\n *\n * @docs-private\n */\n protected updateFocusForDestroyedTags() {\n if (this.lastDestroyedTagIndex != null) {\n if (this.tags.length) {\n const newTagIndex = Math.min(this.lastDestroyedTagIndex, this.tags.length - 1);\n\n this.keyManager.setActiveItem(newTagIndex);\n } else {\n this.focusInput();\n }\n }\n\n this.lastDestroyedTagIndex = null;\n }\n\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of tags.\n */\n private isValidIndex(index: number): boolean {\n return index >= 0 && index < this.tags.length;\n }\n\n private isInputElement(element: HTMLElement): element is HTMLInputElement {\n return element.nodeName.toLowerCase() === 'input';\n }\n\n private isInputEmpty(element: HTMLElement): boolean {\n if (!this.isInputElement(element)) return false;\n\n return !element.value;\n }\n\n private isTagElement(element: HTMLElement): boolean {\n return element.classList.contains('kbq-tag');\n }\n\n private selectAll(): void {\n this.tags.forEach((tag) => tag.selectViaInteraction());\n }\n\n /**\n * Unselects all tags in the list.\n *\n * @docs-private\n */\n unselectAll(): void {\n this.tags.forEach((tag) => tag.setSelectedState(false));\n }\n\n /**\n * Removes all selected tags from the list.\n *\n * @docs-private\n */\n removeSelected(): void {\n this.selected.forEach((tag) => tag.remove());\n }\n\n private propagateTagsChanges(): void {\n const valueToEmit: any = this.tags.map((tag) => tag.value);\n\n this._value = valueToEmit;\n this.change.emit(new KbqTagListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this.onChange(valueToEmit);\n this.changeDetectorRef.markForCheck();\n }\n\n private resetTags(): void {\n this.tagsSubscriptions$.next();\n this.listenToTagsFocus();\n this.listenToTagsRemoved();\n this.listenToTagsEdit();\n }\n\n /** Listens to user-generated selection events on each tag. */\n private listenToTagsFocus(): void {\n this.tagFocusChanges.pipe(takeUntil(this.tagsSubscriptions$)).subscribe(({ tag, origin }) => {\n const tagIndex = this.tags.toArray().indexOf(tag);\n\n if (this.isValidIndex(tagIndex)) {\n this.keyManager.setFocusOrigin(origin);\n this.keyManager.updateActiveItem(tagIndex);\n }\n\n this.stateChanges.next();\n });\n\n this.tagBlurChanges.pipe(takeUntil(this.tagsSubscriptions$)).subscribe(() => {\n this.blur();\n\n this.stateChanges.next();\n });\n }\n\n private listenToTagsRemoved(): void {\n this.tagRemoveChanges.pipe(takeUntil(this.tagsSubscriptions$)).subscribe((event) => {\n const tag = event.tag;\n const tagIndex = this.tags.toArray().indexOf(event.tag);\n\n // In case the tag that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling tag that will\n // receive focus.\n if (this.isValidIndex(tagIndex) && tag.hasFocus) {\n this.lastDestroyedTagIndex = tagIndex;\n }\n });\n\n // Set the pending flag so the subsequent `tags.changes` is treated as UI action.\n this.tagBeforeRemoveChanges\n .pipe(takeUntil(this.tagsSubscriptions$))\n .subscribe(() => (this.pendingUIChange = true));\n }\n\n private listenToTagsEdit(): void {\n this.tagEditChanges\n .pipe(\n filter(({ type }) => type === 'submit'),\n takeUntil(this.tagsSubscriptions$)\n )\n .subscribe(() => this.propagateTagsChanges());\n }\n\n /** Checks whether any of the tags is focused. */\n private hasFocusedTag() {\n return this.tags.some((tag) => tag.hasFocus);\n }\n\n private syncTagsRemovableState(): void {\n this.tags?.forEach((tag) => (tag.removable = this.removable));\n }\n\n /** Revalidate control. */\n private revalidate() {\n if (this.useLegacyValidation && this.ngControl?.control) {\n const control = this.ngControl.control;\n\n control.updateValueAndValidity({ emitEvent: false });\n (control.statusChanges as EventEmitter<string>).emit(control.status);\n }\n }\n\n private setupDropListInitialProperties(): void {\n this.syncDropListDisabledState();\n this.dropList.elementContainerSelector = '.kbq-tags-list__list-container';\n this.dropList.orientation = 'mixed';\n this.dropList.dropped\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ currentIndex, previousIndex, event, item }) => {\n this.pendingUIChange = true;\n\n const { tag }: KbqTagDragData = item.data;\n\n this.dropped.emit({ currentIndex, previousIndex, event, tag });\n });\n }\n\n private syncDropListDisabledState(): void {\n this.dropList.disabled = !this.draggable;\n }\n\n private setupFocusMonitor(): void {\n this.focusMonitor.monitor(this.elementRef, true).subscribe((origin) => {\n if (!origin) this.unselectAll();\n });\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n Optional,\n Output,\n Self\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { COMMA, ENTER, hasModifierKey, SEMICOLON, SPACE, TAB } from '@koobiq/cdk/keycodes';\nimport { KbqAutocompleteTrigger } from '@koobiq/components/autocomplete';\nimport { KbqFieldSizingContent } from '@koobiq/components/core';\nimport { KbqTrim } from '@koobiq/components/form-field';\nimport { KBQ_TAGS_DEFAULT_OPTIONS, KbqTagsDefaultOptions } from './tag-default-options';\nimport { KbqTagList } from './tag-list.component';\nimport { KbqTagTextControl } from './tag-text-control';\n\nconst KBQ_TAG_INPUT_DEFAULT_SEPARATORS: { [key: number]: KbqTagSeparator } = {\n [ENTER]: { symbol: /\\r?\\n/, key: 'Enter' },\n [TAB]: { symbol: /\\t/, key: 'Tab' },\n [SPACE]: { symbol: / /, key: ' ' },\n [COMMA]: { symbol: /,/, key: ',' },\n [SEMICOLON]: { symbol: /;/, key: ';' }\n};\n\n/** Represents an input event on a `kbqTagInput`. */\nexport interface KbqTagInputEvent {\n /** The native `<input>` element that the event is being fired for. */\n input: HTMLInputElement;\n\n /** The value of the input. */\n value: string;\n}\n\nexport interface KbqTagSeparator {\n symbol: RegExp;\n key: string;\n}\n// Increasing integer for generating unique ids.\nlet nextUniqueId = 0;\n\n/**\n * Directive that adds tag-specific behaviors to an input element inside `<kbq-form-field>`.\n * May be placed inside or outside of an `<kbq-tag-list>`.\n */\n@Directive({\n selector: 'input[kbqTagInputFor]',\n exportAs: 'kbqTagInput, kbqTagInputFor',\n host: {\n class: 'kbq-tag-input',\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n '(keydown)': 'onKeydown($event)',\n '(blur)': 'blur($event)',\n '(focus)': 'onFocus()',\n '(input)': 'onInput()',\n '(paste)': 'onPaste($event)'\n },\n hostDirectives: [KbqFieldSizingContent]\n})\nexport class KbqTagInput implements KbqTagTextControl, OnChanges {\n /** Whether the control is focused. */\n focused: boolean = false;\n\n /**\n * The list of key codes that will trigger a tagEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n @Input('kbqTagInputSeparatorKeyCodes')\n set separatorKeyCodes(value: number[]) {\n this._separatorKeyCodes = value || [];\n }\n\n private _separatorKeyCodes: number[] = this.defaultOptions.separatorKeyCodes;\n\n /** @docs-private */\n get separators(): KbqTagSeparator[] {\n return this._separatorKeyCodes.reduce((acc: any, key) => {\n const separator = this.getSeparatorByKeyCode(key);\n\n return separator ? [...acc, separator] : acc;\n }, []);\n }\n\n private _separators = this.defaultOptions.separators || KBQ_TAG_INPUT_DEFAULT_SEPARATORS;\n\n /** Emitted when a tag is to be added. */\n @Output('kbqTagInputTokenEnd') readonly tagEnd: EventEmitter<KbqTagInputEvent> =\n new EventEmitter<KbqTagInputEvent>();\n\n /** A value indicating whether allow/prevent tags duplication */\n @Input() distinct: boolean = false;\n\n /** The input's placeholder text. */\n @Input() placeholder: string = '';\n\n /** Unique id for the input. */\n @Input() id: string = `kbq-tag-list-input-${nextUniqueId++}`;\n\n /** Register input for tag list */\n @Input('kbqTagInputFor')\n set tagList(value: KbqTagList) {\n if (value) {\n this._tagList = value;\n this._tagList.registerInput(this);\n }\n }\n\n private _tagList: KbqTagList;\n\n /**\n * Whether or not the tagEnd event will be emitted when the input is blurred.\n */\n @Input('kbqTagInputAddOnBlur')\n get addOnBlur(): boolean {\n return this._addOnBlur;\n }\n\n set addOnBlur(value: boolean) {\n this._addOnBlur = coerceBooleanProperty(value);\n }\n\n private _addOnBlur: boolean = true;\n\n /**\n * Whether the tagEnd event will be emitted when the text pasted.\n * @default true\n */\n @Input({ alias: 'kbqTagInputAddOnPaste', transform: booleanAttribute }) addOnPaste =\n this.defaultOptions.addOnPaste ?? true;\n\n /** Whether the input is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this._tagList && this._tagList.disabled);\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n\n /** Whether the input is empty. */\n get empty(): boolean {\n return !this.inputElement.value;\n }\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n countOfSymbolsForUpdateWidth: number = 3;\n\n /** The native input element to which this directive is attached. */\n private inputElement: HTMLInputElement;\n\n constructor(\n private elementRef: ElementRef<HTMLInputElement>,\n @Inject(KBQ_TAGS_DEFAULT_OPTIONS) private defaultOptions: KbqTagsDefaultOptions,\n @Optional() @Self() private trimDirective: KbqTrim,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() @Self() public autocompleteTrigger?: KbqAutocompleteTrigger\n ) {\n this.inputElement = this.elementRef.nativeElement as HTMLInputElement;\n }\n\n ngOnChanges() {\n this._tagList.stateChanges.next();\n }\n\n /** @docs-private */\n onKeydown(event: KeyboardEvent) {\n const isSeparatorKey = this.isSeparatorKey(event);\n\n if (!this.inputElement.value) {\n if (isSeparatorKey) {\n event.preventDefault();\n }\n\n this._tagList.keydown(event);\n event.stopPropagation();\n\n return;\n }\n\n if (isSeparatorKey) {\n this.emitTagEnd();\n\n event.preventDefault();\n }\n }\n\n /** Checks to see if the blur should emit the (tagEnd) event. */\n blur(event: FocusEvent) {\n this.focused = false;\n\n // Blur the tag list if it is not focused\n if (!this._tagList.focused) {\n this.triggerValidation();\n\n this._tagList.blur();\n }\n\n if (this.addOnBlur && (this.autocompleteTrigger?.onInputBlur(event) || true)) {\n this.emitTagEnd();\n }\n\n this._tagList.stateChanges.next();\n }\n\n triggerValidation() {\n if (!this.hasControl()) {\n return;\n }\n\n (this.ngControl.statusChanges as EventEmitter<string | null>).emit(this.ngControl.status);\n }\n\n /** Checks to see if the (tagEnd) event needs to be emitted. */\n emitTagEnd() {\n if (!this.hasControl() || (this.hasControl() && !this.ngControl.invalid)) {\n if (this.distinct && this.hasDuplicates) return;\n\n this._tagList?.notifyPendingTagChange();\n this.tagEnd.emit({ input: this.inputElement, value: this.trimValue(this.inputElement.value) });\n }\n }\n\n get hasDuplicates(): boolean {\n return this._tagList.tags\n .map(({ value }) => value)\n .some((tagValue) => tagValue === this.trimValue(this.inputElement.value));\n }\n\n onInput() {\n // Let tag list know whenever the value changes.\n this._tagList.stateChanges.next();\n }\n\n onPaste($event: ClipboardEvent) {\n if (!$event.clipboardData) {\n return;\n }\n\n const data = $event.clipboardData.getData('text');\n\n if ((data && data.length === 0) || !this.addOnPaste) {\n return;\n }\n\n const separatorsInString = this.getSeparatorsForString(data);\n\n // prettier-ignore\n const dividedString: string[] = separatorsInString.length > 0 ?\n [...data.split(new RegExp(`${separatorsInString.join('|')}`))] :\n [data];\n\n let items: string[] = dividedString.map((item) => this.trimValue(item));\n\n if (items.length === 0) {\n items.push(data);\n }\n\n if (this.distinct) {\n const tagValues: string[] = this._tagList.tags.map(({ value }) => value);\n\n items = items.filter((item) => !tagValues.includes(item));\n }\n\n if (items.length) {\n this._tagList?.notifyPendingTagChange();\n }\n\n items.forEach((item) => this.tagEnd.emit({ input: this.inputElement, value: item }));\n\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n updateInputWidth(): void {}\n\n /** @docs-private */\n onFocus(): void {\n this.focused = true;\n this._tagList.unselectAll();\n this._tagList.stateChanges.next();\n }\n\n /** Focuses the input. */\n focus(): void {\n this.inputElement.focus();\n }\n\n private getSeparatorsForString(value: string): string[] {\n return this.separators\n .filter((separator) => value.search(separator.symbol) > -1)\n .map((separator) => separator.symbol.source);\n }\n\n private trimValue(value) {\n return this.trimDirective ? this.trimDirective.trim(value) : value;\n }\n\n private getSeparatorByKeyCode(keyCode: number): KbqTagSeparator | null {\n const sep = this._separators[keyCode];\n\n if (sep) {\n return sep;\n }\n\n return null;\n }\n\n private hasControl(): boolean {\n return !!this.ngControl;\n }\n\n /** Checks whether a keycode is one of the configured separators. */\n private isSeparatorKey(event: KeyboardEvent) {\n return this.separators.some((separator) => separator.key === event.key && !hasModifierKey(event));\n }\n}\n","import { PlatformModule } from '@angular/cdk/platform';\nimport { NgModule } from '@angular/core';\nimport { ENTER } from '@koobiq/cdk/keycodes';\nimport { KBQ_TAGS_DEFAULT_OPTIONS, KbqTagsDefaultOptions } from './tag-default-options';\nimport { KbqTagInput } from './tag-input';\nimport { KbqTagList } from './tag-list.component';\nimport {\n KbqTag,\n KbqTagAvatar,\n KbqTagEditInput,\n KbqTagEditSubmit,\n KbqTagRemove,\n KbqTagTrailingIcon\n} from './tag.component';\n\nconst COMPONENTS = [\n KbqTagEditSubmit,\n KbqTagEditInput\n];\n\n@NgModule({\n imports: [\n PlatformModule,\n ...COMPONENTS,\n KbqTagList,\n KbqTag,\n KbqTagInput,\n KbqTagTrailingIcon,\n KbqTagAvatar,\n KbqTagRemove\n ],\n exports: [\n KbqTagList,\n KbqTag,\n KbqTagInput,\n KbqTagTrailingIcon,\n KbqTagAvatar,\n KbqTagRemove,\n ...COMPONENTS\n ],\n providers: [\n {\n provide: KBQ_TAGS_DEFAULT_OPTIONS,\n useValue: { separatorKeyCodes: [ENTER] } as KbqTagsDefaultOptions\n }\n ]\n})\nexport class KbqTagsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextUniqueId","i2","i4","ENTER","TAB","SPACE","i1","i3"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-tags.mjs","sources":["../../../packages/components/tags/tag-default-options.ts","../../../packages/components/tags/tag.component.ts","../../../packages/components/tags/tag-list.component.ts","../../../packages/components/tags/tag-input.ts","../../../packages/components/tags/tag.module.ts","../../../packages/components/tags/koobiq-components-tags.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { KbqTagSeparator } from './tag-input';\n\n/** Default options, for the chips module, that can be overridden. */\nexport interface KbqTagsDefaultOptions {\n /** The list of key codes that will trigger a chipEnd event. */\n separatorKeyCodes: number[];\n separators?: { [key: number]: KbqTagSeparator };\n addOnPaste?: boolean;\n}\n\n/** Injection token to be used to override the default options for the chips module. */\nexport const KBQ_TAGS_DEFAULT_OPTIONS = new InjectionToken<KbqTagsDefaultOptions>('kbq-tags-default-options');\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\nimport { BACKSPACE, DELETE, ENTER, ESCAPE, F2, SPACE } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n signal,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IFocusableOption } from '@koobiq/cdk/a11y';\nimport { hasModifierKey } from '@koobiq/cdk/keycodes';\nimport {\n isNull,\n KBQ_TITLE_TEXT_REF,\n KbqColorDirective,\n KbqComponentColors,\n KbqFieldSizingContent,\n KbqTitleTextRef\n} from '@koobiq/components/core';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { Subject } from 'rxjs';\nimport { KbqTagList } from './tag-list.component';\n\n/**\n * Event object emitted by KbqTag.\n */\nexport type KbqTagEvent = {\n tag: KbqTag;\n};\n\n/**\n * Event object emitted by KbqTag when the tag is edited.\n */\nexport class KbqTagEditChange {\n constructor(\n public readonly tag: KbqTag,\n public readonly type: 'start' | 'submit' | 'cancel',\n public readonly reason: string\n ) {}\n}\n\n/** Event object emitted by KbqTag when selected or deselected. */\nexport class KbqTagSelectionChange {\n constructor(\n public source: KbqTag,\n public selected: boolean,\n public isUserInput = false\n ) {}\n}\n\n/**\n * Event object emitted when the KbqTag is focused.\n */\nexport type KbqTagFocusEvent = KbqTagEvent & {\n origin: FocusOrigin;\n};\n\nconst TAG_ATTRIBUTE_NAMES = ['kbq-basic-tag'];\n\nconst getTagEditInputMissingError = (): Error => {\n return Error('Editable kbq-tag must contain a KbqTagEditInput.');\n};\n\n/**\n * Object passed to the drag data event when a tag is being dragged.\n *\n * @docs-private\n */\nexport type KbqTagDragData = KbqTagEvent;\n\n/**\n * Dummy directive to add CSS class to tag avatar.\n * @docs-private\n */\n@Directive({\n selector: 'kbq-tag-avatar, [kbqTagAvatar]',\n host: { class: 'kbq-tag-avatar' }\n})\nexport class KbqTagAvatar {}\n\n/**\n * Dummy directive to add CSS class to tag trailing icon.\n * @docs-private\n */\n@Directive({\n selector: 'kbq-tag-trailing-icon, [kbqTagTrailingIcon]',\n host: { class: 'kbq-tag-trailing-icon' }\n})\nexport class KbqTagTrailingIcon {}\n\n/**\n * Directive to add submit behavior for the editable tag.\n */\n@Directive({\n selector: '[kbqTagEditSubmit]',\n exportAs: 'kbqTagEditSubmit',\n host: {\n class: 'kbq-tag-edit-submit',\n '[attr.tabindex]': '-1',\n\n '(click)': 'tag.submitEditing(\"click\")'\n }\n})\nexport class KbqTagEditSubmit {\n /** @docs-private */\n protected readonly tag = inject(KbqTag);\n}\n\n/**\n * Directive to add input behavior for the editable tag.\n */\n@Directive({\n selector: '[kbqTagEditInput]',\n exportAs: 'kbqTagEditInput',\n host: {\n class: 'kbq-tag-edit-input',\n\n '(keydown)': 'handleKeydown($event)',\n '(click)': 'handleClick($event)'\n },\n hostDirectives: [KbqFieldSizingContent]\n})\nexport class KbqTagEditInput {\n private readonly tag = inject(KbqTag);\n\n /** @docs-private */\n protected handleClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /** @docs-private */\n protected handleKeydown(event: KeyboardEvent): void {\n switch (event.keyCode) {\n case ESCAPE: {\n event.stopPropagation();\n this.tag.cancelEditing('escape');\n break;\n }\n case ENTER: {\n event.stopPropagation();\n this.tag.submitEditing('enter');\n break;\n }\n\n // We should prevent KbqTag from receiving these keydown events\n case BACKSPACE:\n case SPACE:\n case DELETE: {\n event.stopPropagation();\n break;\n }\n\n default:\n }\n }\n}\n\n@Component({\n selector: 'kbq-tag, [kbq-tag], kbq-basic-tag, [kbq-basic-tag]',\n template: `\n <div class=\"kbq-tag__wrapper\">\n <ng-content select=\"[kbq-icon]:not([kbqTagRemove]):not([kbqTagEditSubmit])\" />\n <span #kbqTitleText class=\"kbq-tag__text\">\n @if (editing()) {\n <ng-content select=\"[kbqTagEditInput]\" />\n } @else {\n <ng-content />\n }\n </span>\n @if (editing()) {\n <ng-content select=\"[kbqTagEditSubmit]\" />\n } @else {\n @if (removable) {\n <ng-content select=\"[kbqTagRemove]\" />\n }\n }\n </div>\n `,\n styleUrls: ['./tag.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kbqTag',\n hostDirectives: [CdkDrag],\n host: {\n class: 'kbq-tag',\n '[attr.tabindex]': 'tabindex',\n '[attr.disabled]': 'disabled || null',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-tag-with-avatar]': 'avatar',\n '[class.kbq-tag-with-icon]': 'contentChildren',\n '[class.kbq-tag-with-trailing-icon]': 'trailingIcon || removeIcon',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-tag_editable]': 'editable',\n '[class.kbq-tag_editing]': 'editing()',\n '[class.kbq-tag_removable]': 'removable',\n '[class.kbq-tag_selectable]': 'selectable',\n '[class.kbq-tag_draggable]': 'draggable',\n '(dblclick)': 'handleDblClick($event)',\n '(click)': 'handleClick($event)',\n '(keydown)': 'handleKeydown($event)'\n },\n providers: [{ provide: KBQ_TITLE_TEXT_REF, useExisting: KbqTag }]\n})\nexport class KbqTag\n extends KbqColorDirective\n implements IFocusableOption, OnDestroy, KbqTitleTextRef, AfterContentInit, AfterViewInit\n{\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly tagList = inject(KbqTagList, { optional: true });\n private readonly drag: CdkDrag<KbqTagDragData> = inject(CdkDrag, { host: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /** @docs-private */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Emits when the tag is focused.\n *\n * @docs-private\n */\n readonly onFocus = new Subject<KbqTagFocusEvent>();\n\n /**\n * Emits when the tag is blurred.\n *\n * @docs-private\n */\n readonly onBlur = new Subject<KbqTagEvent>();\n\n /** @docs-private */\n readonly nativeElement = this.elementRef.nativeElement;\n\n /**\n * Whether the tag has focus.\n *\n * @docs-private\n */\n hasFocus: boolean = false;\n\n /** Whether the tag is editable. */\n @Input({ transform: booleanAttribute })\n get editable(): boolean {\n return this._editable ?? !!this.tagList?.editable;\n }\n\n set editable(value: boolean) {\n this._editable = value;\n }\n\n private _editable: boolean | undefined;\n\n /** Whether the tag edits can't be submitted. */\n @Input({ transform: booleanAttribute }) preventEditSubmit: boolean = false;\n\n @ContentChild(KbqTagEditInput, { read: ElementRef })\n private readonly editInputElementRef: ElementRef<HTMLInputElement>;\n\n /**\n * Emits event when the tag is edited.\n */\n @Output() readonly editChange = new EventEmitter<KbqTagEditChange>();\n\n /**\n * @docs-private\n */\n protected readonly editing = signal(false);\n\n /**\n * @docs-private\n */\n @ViewChild('kbqTitleText') readonly textElement: ElementRef<HTMLSpanElement>;\n\n @ContentChildren(KbqIcon) contentChildren: QueryList<KbqIcon>;\n\n /** The tag avatar */\n @ContentChild(KbqTagAvatar, { static: false }) avatar: KbqTagAvatar;\n\n /** The tag's trailing icon. */\n @ContentChild(KbqTagTrailingIcon, { static: false }) trailingIcon: KbqTagTrailingIcon;\n\n /** The tag's remove toggler. */\n @ContentChild(forwardRef(() => KbqTagRemove), { static: false }) removeIcon: KbqTagRemove;\n\n /** Emitted when the tag is selected or deselected. */\n @Output() readonly selectionChange: EventEmitter<KbqTagSelectionChange> = new EventEmitter<KbqTagSelectionChange>();\n\n /** Emitted when the tag is destroyed and leaving the DOM. */\n @Output() readonly destroyed: EventEmitter<KbqTagEvent> = new EventEmitter<KbqTagEvent>();\n\n /**\n * Emitted when a tag is to be removed.\n * Fires on programmatic and UI removal (click or keyboard).\n */\n @Output() readonly removed: EventEmitter<KbqTagEvent> = new EventEmitter<KbqTagEvent>();\n\n /** Whether the tag is selected. */\n @Input({ transform: booleanAttribute })\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(value: boolean) {\n this.setSelectedState(value, { emitEvent: true });\n }\n\n private _selected: boolean = false;\n\n /** The value of the tag. Defaults to the content inside `<kbq-tag>` tags. */\n @Input()\n get value(): any {\n return this._value ?? this.elementRef.nativeElement.textContent?.trim();\n }\n\n set value(value: any) {\n this._value = value;\n }\n\n private _value: any;\n\n /**\n * Whether the tag is selectable.\n */\n @Input({ transform: booleanAttribute })\n get selectable(): boolean {\n return this._selectable || !!this.tagList?.selectable;\n }\n\n set selectable(value: boolean) {\n this._selectable = value;\n }\n\n private _selectable: boolean = false;\n\n /**\n * Determines whether the tag is removable.\n */\n @Input({ transform: booleanAttribute })\n get removable(): boolean {\n return this._removable && (this.tagList?.removable ?? true);\n }\n\n set removable(value: boolean) {\n this._removable = value;\n }\n\n private _removable: boolean = true;\n\n @Input()\n get tabindex() {\n if (this.disabled) return null;\n if (this._tabindex === -1 && this.selectable && !this.tagList) return 0;\n\n return this._tabindex;\n }\n\n set tabindex(value: any) {\n this._tabindex = value;\n }\n\n private _tabindex = -1;\n\n /**\n * Whether the tag is disabled.\n */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled || (this.tagList?.disabled ?? false);\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n this.syncDragDisabledState();\n }\n\n private _disabled: boolean = false;\n\n /**\n * Whether the tag is draggable.\n *\n * @docs-private\n */\n protected get draggable(): boolean {\n return (this.tagList?.draggable ?? false) && !this.disabled;\n }\n\n constructor(public changeDetectorRef: ChangeDetectorRef) {\n super();\n\n this.color = KbqComponentColors.ContrastFade;\n this.setDefaultColor(KbqComponentColors.ContrastFade);\n\n this.addHostClassName();\n this.setupDragInitialProperties();\n }\n\n ngAfterContentInit() {\n this.addClassModificatorForIcons();\n }\n\n ngAfterViewInit(): void {\n this.setupFocusMonitor();\n }\n\n ngOnDestroy(): void {\n this.cancelEditing('destroy');\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.destroyed.emit({ tag: this });\n }\n\n /** @docs-private */\n addClassModificatorForIcons() {\n const icons = this.contentChildren.map((item) => item.elementRef.nativeElement);\n\n if (icons.length === 1) {\n const iconElement = icons[0];\n\n if (iconElement.classList.contains('kbq-tag-remove')) {\n iconElement.classList.add('kbq-icon_right');\n this.nativeElement.classList.add('kbq-right-icon');\n } else {\n iconElement.classList.add('kbq-icon_left');\n this.nativeElement.classList.add('kbq-left-icon');\n }\n } else if (icons.length > 1) {\n const firstIconElement = icons[0];\n const secondIconElement = icons[1];\n\n firstIconElement.classList.add('kbq-icon_left');\n secondIconElement.classList.add('kbq-icon_right');\n }\n }\n\n /** @docs-private */\n addHostClassName() {\n // Add class for the different tags\n for (const attr of TAG_ATTRIBUTE_NAMES) {\n if (\n this.elementRef.nativeElement.hasAttribute(attr) ||\n this.elementRef.nativeElement.tagName.toLowerCase() === attr\n ) {\n (this.elementRef.nativeElement as HTMLElement).classList.add(attr);\n\n return;\n }\n }\n\n (this.elementRef.nativeElement as HTMLElement).classList.add('kbq-standard-tag');\n }\n\n /**\n * Selects the tag.\n */\n select(): void {\n if (this.disabled || !this.selectable) return;\n\n this.setSelectedState(true, { emitEvent: true });\n }\n\n /**\n * Deselects the tag.\n */\n deselect(): void {\n if (this.disabled || !this.selectable) return;\n\n this.setSelectedState(false, { emitEvent: true });\n }\n\n /**\n * Selects the tag and emits event with isUserInput flag.\n *\n * @docs-private\n */\n selectViaInteraction(): void {\n if (this.disabled || !this.selectable) return;\n\n this.setSelectedState(true, { isUserInput: true, emitEvent: true });\n }\n\n /**\n * Toggles the current selected state of the tag.\n */\n toggleSelected(isUserInput: boolean = false): boolean {\n if (this.disabled || !this.selectable) return this.selected;\n\n this.setSelectedState(!this.selected, { isUserInput, emitEvent: true });\n\n return this.selected;\n }\n\n /** Focuses the tag. */\n focus(): void {\n if (this.disabled) return;\n\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * Allows for programmatic removal of the tag. Called by the KbqTagList when the DELETE or\n * BACKSPACE keys are pressed.\n *\n * Informs any listeners of the removal request. Does not remove the tag from the DOM.\n */\n remove(): void {\n if (this.removable) {\n this.removed.emit({ tag: this });\n }\n }\n\n /** @docs-private */\n handleClick(event: MouseEvent): void {\n if (this.disabled || this.editing()) {\n event.preventDefault();\n\n return;\n }\n\n if (\n // We should toggle selection only if tag inside of a tag list.\n // Single tag can only be toggled on focus or blur.\n this.tagList &&\n this.selectable &&\n hasModifierKey(event, 'metaKey', 'ctrlKey', 'shiftKey')\n ) {\n this.toggleSelected(true);\n\n // We should stop event propagation to prevent the tag list from handling the click event.\n event.stopPropagation();\n\n return;\n }\n\n if (!this.tagList && this.selectable) {\n this.toggleSelected(true);\n }\n }\n\n /** @docs-private */\n handleKeydown(event: KeyboardEvent): void {\n if (this.disabled || this.editing()) return;\n\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE: {\n // If there is a tag list and it has selected tags, remove them, otherwise remove focused tag.\n this.tagList?.selected.length ? this.tagList.removeSelected() : this.remove();\n\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n }\n case SPACE: {\n this.toggleSelected(true);\n this.focusMonitor.focusVia(this.elementRef, 'keyboard');\n\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n }\n case F2:\n case ENTER:\n this.startEditing(event.key);\n break;\n default:\n }\n }\n\n /** @docs-private */\n blur(): void {\n this.elementRef.nativeElement.blur();\n }\n\n /** @docs-private */\n protected handleDblClick(event: MouseEvent): void {\n if (this.disabled || !this.editable) return;\n\n event.stopPropagation();\n this.startEditing('dblclick');\n }\n\n private startEditing(reason: string): void {\n if (!this.editable || this.editing()) return;\n\n this.editing.set(true);\n this.editChange.emit({ tag: this, type: 'start', reason });\n\n setTimeout(() => {\n const input = this.editInputElementRef?.nativeElement;\n\n if (!input) throw getTagEditInputMissingError();\n\n this.focusMonitor.focusVia(this.elementRef.nativeElement, 'keyboard');\n input.select();\n });\n }\n\n /** @docs-private */\n cancelEditing(reason: string): void {\n if (!this.editing()) return;\n\n this.editing.set(false);\n this.editChange.emit({ tag: this, type: 'cancel', reason });\n\n this.textElement.nativeElement.scrollTo?.({ left: 0, behavior: 'instant' });\n }\n\n /** @docs-private */\n submitEditing(reason: string): void {\n if (!this.editing() || this.preventEditSubmit) return;\n\n this.editing.set(false);\n this.editChange.emit({ tag: this, type: 'submit', reason });\n\n this.textElement.nativeElement.scrollTo?.({ left: 0, behavior: 'instant' });\n }\n\n /**\n * Sets the selected state of the tag.\n *\n * @docs-private\n */\n setSelectedState(selected: boolean, options: Partial<{ isUserInput: boolean; emitEvent: boolean }> = {}): void {\n const { isUserInput = false, emitEvent = false } = options;\n\n if (selected !== this.selected) {\n this._selected = selected;\n\n if (emitEvent) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this.selected\n });\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private setupDragInitialProperties(): void {\n this.syncDragDisabledState();\n\n this.drag.started.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.drag.data = { tag: this };\n });\n }\n\n private syncDragDisabledState(): void {\n this.drag.disabled = !this.draggable;\n }\n\n private setupFocusMonitor(): void {\n this.focusMonitor.monitor(this.elementRef, true).subscribe((origin) => {\n if (this.disabled) return;\n\n const hasFocus = !isNull(origin);\n\n if (hasFocus !== this.hasFocus) {\n this.hasFocus = hasFocus;\n\n if (this.hasFocus) {\n this.onFocus.next({ tag: this, origin });\n if (!this.tagList && origin !== 'mouse') this.select();\n } else {\n this.onBlur.next({ tag: this });\n this.cancelEditing('blur');\n if (!this.tagList) this.deselect();\n }\n\n this.changeDetectorRef.markForCheck();\n }\n });\n }\n}\n\n/**\n *\n * Example:\n *\n * `<kbq-tag>\n * <kbq-icon kbqTagRemove>cancel</kbq-icon>\n * </kbq-tag>`\n *\n * You *may* use a custom icon, but you may need to override the `kbq-tag-remove` positioning\n * styles to properly center the icon within the tag.\n */\n@Directive({\n selector: '[kbqTagRemove]',\n host: {\n class: 'kbq-tag-remove kbq-tag-trailing-icon',\n '[attr.tabindex]': '-1',\n '(click)': 'handleClick($event)',\n '(focus)': 'focus($event)'\n }\n})\nexport class KbqTagRemove {\n constructor(@Inject(forwardRef(() => KbqTag)) protected parentTag: KbqTag) {}\n\n /** @docs-private */\n focus(event: FocusEvent): void {\n event.stopPropagation();\n }\n\n /**\n * Calls the parent tag's public `remove()` method if applicable.\n *\n * @docs-private\n */\n handleClick(event: Event): void {\n if (this.parentTag.removable) {\n this.parentTag.hasFocus = true;\n\n this.parentTag.remove();\n }\n\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused tag that has been focused after tag removal. Usually the parent\n // the parent click listener of the `KbqTag` would prevent propagation, but it can happen\n // that the tag is being removed before the event bubbles up.\n event.stopPropagation();\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\nimport { BACKSPACE, END, HOME, LEFT_ARROW, TAB } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Self,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport { FocusKeyManager } from '@koobiq/cdk/a11y';\nimport { isSelectAll } from '@koobiq/cdk/keycodes';\nimport {\n CanUpdateErrorState,\n ErrorStateMatcher,\n isNull,\n KBQ_VALIDATION,\n KbqOrientation\n} from '@koobiq/components/core';\nimport { KbqCleaner, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { filter, startWith, takeUntil } from 'rxjs/operators';\nimport { KbqTagTextControl } from './tag-text-control';\nimport {\n KbqTag,\n KbqTagDragData,\n KbqTagEditChange,\n KbqTagEvent,\n KbqTagFocusEvent,\n KbqTagSelectionChange\n} from './tag.component';\n\n// Increasing integer for generating unique ids for tag-list components.\nlet nextUniqueId = 0;\n\n/** Change event object that is emitted when the tag list value has changed. */\nexport class KbqTagListChange {\n constructor(\n public source: KbqTagList,\n public value: any\n ) {}\n}\n\nexport type KbqTagListDroppedEvent = Pick<CdkDragDrop<unknown>, 'event' | 'previousIndex' | 'currentIndex'> & {\n tag: KbqTag;\n};\n\n@Component({\n selector: 'kbq-tag-list',\n exportAs: 'kbqTagList',\n template: `\n <div class=\"kbq-tags-list__list-container\">\n <ng-content />\n </div>\n\n @if (canShowCleaner) {\n <div class=\"kbq-tags-list__cleaner\">\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n `,\n styleUrls: ['tag-list.scss', 'tag-tokens.scss'],\n host: {\n class: 'kbq-tag-list',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-invalid]': 'errorState',\n '[class.kbq-tag-list_selectable]': 'selectable',\n '[class.kbq-tag-list_editable]': 'editable',\n '[class.kbq-tag-list_removable]': 'removable',\n '[class.kbq-tag-list_draggable]': 'draggable',\n '[attr.tabindex]': 'tabIndex',\n '[id]': 'uid',\n '(focus)': 'focus()',\n '(blur)': 'blur()',\n '(keydown)': 'keydown($event)'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: KbqFormFieldControl, useExisting: KbqTagList }],\n hostDirectives: [CdkDropList]\n})\nexport class KbqTagList\n implements\n KbqFormFieldControl<any>,\n ControlValueAccessor,\n AfterContentInit,\n DoCheck,\n OnDestroy,\n CanUpdateErrorState,\n AfterViewInit\n{\n private readonly useLegacyValidation = inject(KBQ_VALIDATION, { optional: true })?.useValidation ?? false;\n private readonly dropList = inject(CdkDropList, { host: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusMonitor = inject(FocusMonitor);\n\n /**\n * Implemented as part of KbqFormFieldControl.\n *\n * @docs-private\n */\n readonly controlType: string = 'tag-list';\n\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `KbqFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n /**\n * Combined stream of all of the child tags' selection change events.\n *\n * @docs-private\n */\n get tagSelectionChanges(): Observable<KbqTagSelectionChange> {\n return merge(...this.tags.map((tag) => tag.selectionChange));\n }\n\n /**\n * Combined stream of all of the child tags' focus change events.\n *\n * @docs-private\n */\n get tagFocusChanges(): Observable<KbqTagFocusEvent> {\n return merge(...this.tags.map((tag) => tag.onFocus));\n }\n\n /**\n * Combined stream of all of the child tags' blur change events.\n *\n * @docs-private\n */\n get tagBlurChanges(): Observable<KbqTagEvent> {\n return merge(...this.tags.map((tag) => tag.onBlur));\n }\n\n /**\n * Combined stream of all of the child tags' destroyed events.\n *\n * @docs-private\n */\n get tagRemoveChanges(): Observable<KbqTagEvent> {\n return merge(...this.tags.map((tag) => tag.destroyed));\n }\n\n /**\n * Combined stream of all of the child tags' removal request events.\n *\n * @docs-private\n */\n protected get tagBeforeRemoveChanges(): Observable<KbqTagEvent> {\n return merge(...this.tags.map((tag) => tag.removed));\n }\n\n /**\n * Combined stream of all of the child tags' edit change events.\n *\n * @docs-private\n */\n get tagEditChanges(): Observable<KbqTagEditChange> {\n return merge(...this.tags.map((tag) => tag.editChange));\n }\n\n /**\n * The array of selected tags inside tag list.\n *\n * @docs-private\n */\n get selected(): KbqTag[] {\n return this.tags.filter(({ selected }) => selected);\n }\n\n /** @docs-private */\n get canShowCleaner(): boolean {\n return this.cleaner && this.tags.length > 0;\n }\n\n /**\n * @deprecated Unused. Will be removed in next major release.\n *\n * @docs-private\n */\n @Input({ transform: booleanAttribute }) multiple: boolean = false;\n\n /**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n @Input() compareWith = (o1: any, o2: any) => o1 === o2;\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): any {\n return this._value;\n }\n\n set value(value: any) {\n this._value = value;\n }\n\n private _value: any;\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n get id(): string {\n return this.tagInput ? this.tagInput.id : this.uid;\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n\n this.stateChanges.next();\n }\n\n private _required: boolean = false;\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input()\n get placeholder(): string {\n return this.tagInput ? this.tagInput.placeholder : this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n /** Whether any tags or the kbqTagInput inside of this tag-list has focus. */\n get focused(): boolean {\n return (this.tagInput && this.tagInput.focused) || this.hasFocusedTag();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return (!this.tagInput || this.tagInput.empty) && this.tags.length === 0;\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n return !this.empty || this.focused;\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n this.syncDropListDisabledState();\n }\n\n private _disabled: boolean = false;\n\n @Input({ transform: booleanAttribute })\n get draggable(): boolean {\n return this._draggable && !this.disabled;\n }\n\n set draggable(value: boolean) {\n this._draggable = value;\n this.syncDropListDisabledState();\n }\n\n private _draggable: boolean = false;\n\n /**\n * Emits when the user drops tag inside tag list container.\n */\n @Output() readonly dropped = new EventEmitter<KbqTagListDroppedEvent>();\n\n /**\n * Whether or not this tag list is selectable. When a tag list is not selectable,\n * the selected states for all the tags inside the tag list are always ignored.\n */\n @Input({ transform: booleanAttribute }) selectable = true;\n\n /** Whether the tags in the list are editable. */\n @Input({ transform: booleanAttribute }) editable = false;\n\n /**\n * Whether to emit change events when tags are added/removed.\n *\n * @deprecated No longer needed. Will be removed in the next major release.\n */\n @Input({ transform: booleanAttribute }) emitOnTagChanges = true;\n\n /** Whether the tags in the list are removable. */\n @Input({ transform: booleanAttribute })\n get removable(): boolean {\n return this._removable;\n }\n\n set removable(value: boolean) {\n this._removable = value;\n this.syncTagsRemovableState();\n }\n\n private _removable = true;\n\n /**\n * Tab index of the tag list. This property is ignored when the tag list contains a tag input or is disabled.\n *\n * @docs-private\n */\n @Input()\n get tabIndex(): number | null {\n return this.disabled || this.tagInput ? null : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this.userTabIndex = value;\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /**\n * Event that emits whenever the raw value of the tag-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n /** @docs-private */\n uid: string = `kbq-tag-list-${nextUniqueId++}`;\n\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use tabIndex\n *\n * @docs-private\n */\n userTabIndex: number | null = null;\n\n /** @docs-private */\n keyManager: FocusKeyManager<KbqTag>;\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n selectionModel: SelectionModel<KbqTag>;\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n tagChanges = new EventEmitter<any>();\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Orientation of the tag list.\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n @Input() orientation: KbqOrientation = 'horizontal';\n\n /** Event emitted when the selected tag list value has been changed by the user. */\n @Output() readonly change: EventEmitter<KbqTagListChange> = new EventEmitter<KbqTagListChange>();\n\n /** @docs-private */\n @ContentChild('kbqTagListCleaner', { static: true }) cleaner: KbqCleaner;\n\n /**\n * The tag components contained within this tag list.\n *\n * @docs-private\n */\n @ContentChildren(forwardRef(() => KbqTag), {\n // Need to use `descendants: true`,\n // Ivy will no longer match indirect descendants if it's left as false.\n descendants: true\n })\n tags: QueryList<KbqTag>;\n\n /**\n * Whether the component is in an error state.\n *\n * @docs-private\n */\n errorState: boolean = false;\n\n /** The tag input to add more tags */\n private tagInput: KbqTagTextControl;\n\n /** True when the next `tags.changes` emission is triggered by a UI action, not programmatic update. */\n private pendingUIChange = false;\n\n /**\n * When a tag is destroyed, we store the index of the destroyed tag until the tags\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate tag that should receive focus until the array of tags updated completely.\n */\n private lastDestroyedTagIndex: number | null = null;\n\n /** Triggers unsubscription from all per-tags streams when tags are reset. */\n private readonly tagsSubscriptions$ = new Subject<void>();\n\n constructor(\n protected elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef,\n public defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() private dir: Directionality,\n @Optional() public parentForm: NgForm,\n @Optional() public parentFormGroup: FormGroupDirective,\n @Optional() @Self() public ngControl: NgControl\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.setupDropListInitialProperties();\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n\n ngAfterContentInit() {\n this.keyManager = new FocusKeyManager<KbqTag>(this.tags)\n .withVerticalOrientation()\n .withHorizontalOrientation(this.dir ? this.dir.value : 'ltr')\n .skipPredicate(({ disabled }) => disabled);\n\n if (this.dir) {\n this.dir.change\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((dir) => this.keyManager.withHorizontalOrientation(dir));\n }\n\n // Prevents the tag list from capturing focus and redirecting\n // it back to the first tag when the user tabs out.\n this.keyManager.tabOut.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this.userTabIndex || 0;\n this.changeDetectorRef.markForCheck();\n });\n });\n\n // When the list changes, re-subscribe\n this.tags.changes\n .pipe(startWith(null), takeUntilDestroyed(this.destroyRef))\n .subscribe((currentTags: QueryList<KbqTag> | null) => {\n this.resetTags();\n\n // Check to see if we need to update our tab index\n this.updateTabIndex();\n\n // Check to see if we have a destroyed tag and need to refocus\n this.updateFocusForDestroyedTags();\n\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this.stateChanges.next();\n\n if (currentTags && this.pendingUIChange) {\n this.pendingUIChange = false;\n this.propagateTagsChanges();\n }\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.setupFocusMonitor();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.tagsSubscriptions$.next();\n }\n\n /** @docs-private */\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n\n /** @docs-private */\n onTouched = () => {};\n\n /** @docs-private */\n onChange: (value: any) => void = () => {};\n\n /** Notifies that the next `tags.changes` emission is UI-initiated. */\n notifyPendingTagChange(): void {\n this.pendingUIChange = true;\n }\n\n /**\n * Associates an HTML input element with this tag list.\n *\n * @docs-private\n */\n registerInput(inputElement: KbqTagTextControl): void {\n this.tagInput = inputElement;\n\n // todo need rethink about it (#DS-3740)\n if (this.ngControl && inputElement.ngControl?.statusChanges) {\n inputElement.ngControl.statusChanges.subscribe(() =>\n this.ngControl.control!.setErrors(inputElement.ngControl!.errors)\n );\n }\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n writeValue(value: any): void {\n this.value = value;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n *\n * @docs-private\n */\n onContainerClick(): void {\n this.focus();\n }\n\n /**\n * Focuses the tag list. If there is a tag input, focuses that instead.\n */\n focus(): void {\n if (this.disabled) return;\n\n if (this.tagInput) {\n this.focusInput();\n this.stateChanges.next();\n\n return;\n }\n\n if (this.tags.length > 0) {\n this.keyManager.setFirstItemActive();\n this.stateChanges.next();\n\n return;\n }\n }\n\n /**\n * Focuses the tag input inside the tag list.\n *\n * @docs-private\n */\n focusInput() {\n if (this.tagInput) {\n this.tagInput.focus();\n }\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n *\n * @docs-private\n */\n keydown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement | null;\n\n if (this.disabled || isNull(target)) return;\n\n const shouldSelectAll = this.selectable && isSelectAll(event);\n\n if (this.isInputEmpty(target)) {\n if (\n event.keyCode === BACKSPACE ||\n event.keyCode === LEFT_ARROW ||\n (event.keyCode === TAB && event.shiftKey)\n ) {\n this.keyManager.setLastItemActive();\n event.preventDefault();\n\n return;\n }\n\n if (shouldSelectAll) {\n this.selectAll();\n this.keyManager.setLastItemActive();\n event.preventDefault();\n\n return;\n }\n } else if (this.isTagElement(target)) {\n if (event.keyCode === HOME) {\n this.keyManager.setFirstItemActive();\n event.preventDefault();\n } else if (event.keyCode === END) {\n this.keyManager.setLastItemActive();\n event.preventDefault();\n } else if (shouldSelectAll) {\n this.selectAll();\n this.keyManager.setLastItemActive();\n event.preventDefault();\n } else {\n this.keyManager.onKeydown(event);\n }\n\n this.stateChanges.next();\n }\n }\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n setSelectionByValue(_value: any, _isUserInput: boolean = true): void {}\n\n /** When blurred, mark the field as touched when focus moved outside the tag list. */\n blur() {\n if (!this.hasFocusedTag()) {\n this.keyManager.setActiveItem(-1);\n }\n\n if (!this.disabled) {\n if (this.tagInput) {\n // If there's a tag input, we should check whether the focus moved to tag input.\n // If the focus is not moved to tag input, mark the field as touched. If the focus moved\n // to tag input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on tag input.\n setTimeout(() => {\n if (!this.focused) {\n this.markAsTouched();\n this.revalidate();\n }\n });\n } else {\n // If there's no tag input, then mark the field as touched.\n this.markAsTouched();\n this.revalidate();\n }\n }\n }\n\n /** Mark the field as touched */\n markAsTouched() {\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n *\n * @docs-private\n */\n protected updateTabIndex(): void {\n // If we have 0 tags, we should not allow keyboard focus\n this._tabIndex = this.userTabIndex || (this.tags.length === 0 ? -1 : 0);\n }\n\n /**\n * If the amount of tags changed, we need to update the\n * key manager state and focus the next closest tag.\n *\n * @docs-private\n */\n protected updateFocusForDestroyedTags() {\n if (this.lastDestroyedTagIndex != null) {\n if (this.tags.length) {\n const newTagIndex = Math.min(this.lastDestroyedTagIndex, this.tags.length - 1);\n\n this.keyManager.setActiveItem(newTagIndex);\n } else {\n this.focusInput();\n }\n }\n\n this.lastDestroyedTagIndex = null;\n }\n\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of tags.\n */\n private isValidIndex(index: number): boolean {\n return index >= 0 && index < this.tags.length;\n }\n\n private isInputElement(element: HTMLElement): element is HTMLInputElement {\n return element.nodeName.toLowerCase() === 'input';\n }\n\n private isInputEmpty(element: HTMLElement): boolean {\n if (!this.isInputElement(element)) return false;\n\n return !element.value;\n }\n\n private isTagElement(element: HTMLElement): boolean {\n return element.classList.contains('kbq-tag');\n }\n\n private selectAll(): void {\n this.tags.forEach((tag) => tag.selectViaInteraction());\n }\n\n /**\n * Unselects all tags in the list.\n *\n * @docs-private\n */\n unselectAll(): void {\n this.tags.forEach((tag) => tag.setSelectedState(false));\n }\n\n /**\n * Removes all selected tags from the list.\n *\n * @docs-private\n */\n removeSelected(): void {\n this.selected.forEach((tag) => tag.remove());\n }\n\n private propagateTagsChanges(): void {\n const valueToEmit: any = this.tags.map((tag) => tag.value);\n\n this._value = valueToEmit;\n this.change.emit(new KbqTagListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this.onChange(valueToEmit);\n this.changeDetectorRef.markForCheck();\n }\n\n private resetTags(): void {\n this.tagsSubscriptions$.next();\n this.listenToTagsFocus();\n this.listenToTagsRemoved();\n this.listenToTagsEdit();\n }\n\n /** Listens to user-generated selection events on each tag. */\n private listenToTagsFocus(): void {\n this.tagFocusChanges.pipe(takeUntil(this.tagsSubscriptions$)).subscribe(({ tag, origin }) => {\n const tagIndex = this.tags.toArray().indexOf(tag);\n\n if (this.isValidIndex(tagIndex)) {\n this.keyManager.setFocusOrigin(origin);\n this.keyManager.updateActiveItem(tagIndex);\n }\n\n this.stateChanges.next();\n });\n\n this.tagBlurChanges.pipe(takeUntil(this.tagsSubscriptions$)).subscribe(() => {\n this.blur();\n\n this.stateChanges.next();\n });\n }\n\n private listenToTagsRemoved(): void {\n this.tagRemoveChanges.pipe(takeUntil(this.tagsSubscriptions$)).subscribe((event) => {\n const tag = event.tag;\n const tagIndex = this.tags.toArray().indexOf(event.tag);\n\n // In case the tag that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling tag that will\n // receive focus.\n if (this.isValidIndex(tagIndex) && tag.hasFocus) {\n this.lastDestroyedTagIndex = tagIndex;\n }\n });\n\n // Set the pending flag so the subsequent `tags.changes` is treated as UI action.\n this.tagBeforeRemoveChanges\n .pipe(takeUntil(this.tagsSubscriptions$))\n .subscribe(() => (this.pendingUIChange = true));\n }\n\n private listenToTagsEdit(): void {\n this.tagEditChanges\n .pipe(\n filter(({ type }) => type === 'submit'),\n takeUntil(this.tagsSubscriptions$)\n )\n .subscribe(() => this.propagateTagsChanges());\n }\n\n /** Checks whether any of the tags is focused. */\n private hasFocusedTag() {\n return this.tags.some((tag) => tag.hasFocus);\n }\n\n private syncTagsRemovableState(): void {\n this.tags?.forEach((tag) => (tag.removable = this.removable));\n }\n\n /** Revalidate control. */\n private revalidate() {\n if (this.useLegacyValidation && this.ngControl?.control) {\n const control = this.ngControl.control;\n\n control.updateValueAndValidity({ emitEvent: false });\n (control.statusChanges as EventEmitter<string>).emit(control.status);\n }\n }\n\n private setupDropListInitialProperties(): void {\n this.syncDropListDisabledState();\n this.dropList.elementContainerSelector = '.kbq-tags-list__list-container';\n this.dropList.orientation = 'mixed';\n this.dropList.dropped\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ currentIndex, previousIndex, event, item }) => {\n this.pendingUIChange = true;\n\n const { tag }: KbqTagDragData = item.data;\n\n this.dropped.emit({ currentIndex, previousIndex, event, tag });\n });\n }\n\n private syncDropListDisabledState(): void {\n this.dropList.disabled = !this.draggable;\n }\n\n private setupFocusMonitor(): void {\n this.focusMonitor.monitor(this.elementRef, true).subscribe((origin) => {\n if (!origin) this.unselectAll();\n });\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n Optional,\n Output,\n Self\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { COMMA, ENTER, hasModifierKey, SEMICOLON, SPACE, TAB } from '@koobiq/cdk/keycodes';\nimport { KbqAutocompleteTrigger } from '@koobiq/components/autocomplete';\nimport { KbqFieldSizingContent } from '@koobiq/components/core';\nimport { KbqTrim } from '@koobiq/components/form-field';\nimport { KBQ_TAGS_DEFAULT_OPTIONS, KbqTagsDefaultOptions } from './tag-default-options';\nimport { KbqTagList } from './tag-list.component';\nimport { KbqTagTextControl } from './tag-text-control';\n\nconst KBQ_TAG_INPUT_DEFAULT_SEPARATORS: { [key: number]: KbqTagSeparator } = {\n [ENTER]: { symbol: /\\r?\\n/, key: 'Enter' },\n [TAB]: { symbol: /\\t/, key: 'Tab' },\n [SPACE]: { symbol: / /, key: ' ' },\n [COMMA]: { symbol: /,/, key: ',' },\n [SEMICOLON]: { symbol: /;/, key: ';' }\n};\n\n/** Represents an input event on a `kbqTagInput`. */\nexport interface KbqTagInputEvent {\n /** The native `<input>` element that the event is being fired for. */\n input: HTMLInputElement;\n\n /** The value of the input. */\n value: string;\n}\n\nexport interface KbqTagSeparator {\n symbol: RegExp;\n key: string;\n}\n// Increasing integer for generating unique ids.\nlet nextUniqueId = 0;\n\n/**\n * Directive that adds tag-specific behaviors to an input element inside `<kbq-form-field>`.\n * May be placed inside or outside of an `<kbq-tag-list>`.\n */\n@Directive({\n selector: 'input[kbqTagInputFor]',\n exportAs: 'kbqTagInput, kbqTagInputFor',\n host: {\n class: 'kbq-tag-input',\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n '(keydown)': 'onKeydown($event)',\n '(blur)': 'blur($event)',\n '(focus)': 'onFocus()',\n '(input)': 'onInput()',\n '(paste)': 'onPaste($event)'\n },\n hostDirectives: [KbqFieldSizingContent]\n})\nexport class KbqTagInput implements KbqTagTextControl, OnChanges {\n /** Whether the control is focused. */\n focused: boolean = false;\n\n /**\n * The list of key codes that will trigger a tagEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n @Input('kbqTagInputSeparatorKeyCodes')\n set separatorKeyCodes(value: number[]) {\n this._separatorKeyCodes = value || [];\n }\n\n private _separatorKeyCodes: number[] = this.defaultOptions.separatorKeyCodes;\n\n /** @docs-private */\n get separators(): KbqTagSeparator[] {\n return this._separatorKeyCodes.reduce((acc: any, key) => {\n const separator = this.getSeparatorByKeyCode(key);\n\n return separator ? [...acc, separator] : acc;\n }, []);\n }\n\n private _separators = this.defaultOptions.separators || KBQ_TAG_INPUT_DEFAULT_SEPARATORS;\n\n /** Emitted when a tag is to be added. */\n @Output('kbqTagInputTokenEnd') readonly tagEnd: EventEmitter<KbqTagInputEvent> =\n new EventEmitter<KbqTagInputEvent>();\n\n /** A value indicating whether allow/prevent tags duplication */\n @Input() distinct: boolean = false;\n\n /** The input's placeholder text. */\n @Input() placeholder: string = '';\n\n /** Unique id for the input. */\n @Input() id: string = `kbq-tag-list-input-${nextUniqueId++}`;\n\n /** Register input for tag list */\n @Input('kbqTagInputFor')\n set tagList(value: KbqTagList) {\n if (value) {\n this._tagList = value;\n this._tagList.registerInput(this);\n }\n }\n\n private _tagList: KbqTagList;\n\n /**\n * Whether or not the tagEnd event will be emitted when the input is blurred.\n */\n @Input('kbqTagInputAddOnBlur')\n get addOnBlur(): boolean {\n return this._addOnBlur;\n }\n\n set addOnBlur(value: boolean) {\n this._addOnBlur = coerceBooleanProperty(value);\n }\n\n private _addOnBlur: boolean = true;\n\n /**\n * Whether the tagEnd event will be emitted when the text pasted.\n * @default true\n */\n @Input({ alias: 'kbqTagInputAddOnPaste', transform: booleanAttribute }) addOnPaste =\n this.defaultOptions.addOnPaste ?? true;\n\n /** Whether the input is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this._tagList && this._tagList.disabled);\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n\n /** Whether the input is empty. */\n get empty(): boolean {\n return !this.inputElement.value;\n }\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n countOfSymbolsForUpdateWidth: number = 3;\n\n /** The native input element to which this directive is attached. */\n private inputElement: HTMLInputElement;\n\n constructor(\n private elementRef: ElementRef<HTMLInputElement>,\n @Inject(KBQ_TAGS_DEFAULT_OPTIONS) private defaultOptions: KbqTagsDefaultOptions,\n @Optional() @Self() private trimDirective: KbqTrim,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() @Self() public autocompleteTrigger?: KbqAutocompleteTrigger\n ) {\n this.inputElement = this.elementRef.nativeElement as HTMLInputElement;\n }\n\n ngOnChanges() {\n this._tagList.stateChanges.next();\n }\n\n /** @docs-private */\n onKeydown(event: KeyboardEvent) {\n const isSeparatorKey = this.isSeparatorKey(event);\n\n if (!this.inputElement.value) {\n if (isSeparatorKey) {\n event.preventDefault();\n }\n\n this._tagList.keydown(event);\n event.stopPropagation();\n\n return;\n }\n\n if (isSeparatorKey) {\n if (\n event.keyCode === ENTER &&\n this.autocompleteTrigger?.panelOpen &&\n this.autocompleteTrigger?.activeOption\n ) {\n return;\n }\n\n this.emitTagEnd();\n\n event.preventDefault();\n }\n }\n\n /** Checks to see if the blur should emit the (tagEnd) event. */\n blur(event: FocusEvent) {\n this.focused = false;\n\n // Blur the tag list if it is not focused\n if (!this._tagList.focused) {\n this.triggerValidation();\n\n this._tagList.blur();\n }\n\n if (this.addOnBlur && (this.autocompleteTrigger?.onInputBlur(event) || true)) {\n this.emitTagEnd();\n }\n\n this._tagList.stateChanges.next();\n }\n\n triggerValidation() {\n if (!this.hasControl()) {\n return;\n }\n\n (this.ngControl.statusChanges as EventEmitter<string | null>).emit(this.ngControl.status);\n }\n\n /** Checks to see if the (tagEnd) event needs to be emitted. */\n emitTagEnd() {\n if (!this.hasControl() || (this.hasControl() && !this.ngControl.invalid)) {\n if (this.distinct && this.hasDuplicates) return;\n\n this._tagList?.notifyPendingTagChange();\n this.tagEnd.emit({ input: this.inputElement, value: this.trimValue(this.inputElement.value) });\n }\n }\n\n get hasDuplicates(): boolean {\n return this._tagList.tags\n .map(({ value }) => value)\n .some((tagValue) => tagValue === this.trimValue(this.inputElement.value));\n }\n\n onInput() {\n // Let tag list know whenever the value changes.\n this._tagList.stateChanges.next();\n }\n\n onPaste($event: ClipboardEvent) {\n if (!$event.clipboardData) {\n return;\n }\n\n const data = $event.clipboardData.getData('text');\n\n if ((data && data.length === 0) || !this.addOnPaste) {\n return;\n }\n\n const separatorsInString = this.getSeparatorsForString(data);\n\n // prettier-ignore\n const dividedString: string[] = separatorsInString.length > 0 ?\n [...data.split(new RegExp(`${separatorsInString.join('|')}`))] :\n [data];\n\n let items: string[] = dividedString.map((item) => this.trimValue(item));\n\n if (items.length === 0) {\n items.push(data);\n }\n\n if (this.distinct) {\n const tagValues: string[] = this._tagList.tags.map(({ value }) => value);\n\n items = items.filter((item) => !tagValues.includes(item));\n }\n\n if (items.length) {\n this._tagList?.notifyPendingTagChange();\n }\n\n items.forEach((item) => this.tagEnd.emit({ input: this.inputElement, value: item }));\n\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n /**\n * @docs-private\n *\n * @deprecated Unused. Will be removed in next major release.\n */\n updateInputWidth(): void {}\n\n /** @docs-private */\n onFocus(): void {\n this.focused = true;\n this._tagList.unselectAll();\n this._tagList.stateChanges.next();\n }\n\n /** Focuses the input. */\n focus(): void {\n this.inputElement.focus();\n }\n\n private getSeparatorsForString(value: string): string[] {\n return this.separators\n .filter((separator) => value.search(separator.symbol) > -1)\n .map((separator) => separator.symbol.source);\n }\n\n private trimValue(value) {\n return this.trimDirective ? this.trimDirective.trim(value) : value;\n }\n\n private getSeparatorByKeyCode(keyCode: number): KbqTagSeparator | null {\n const sep = this._separators[keyCode];\n\n if (sep) {\n return sep;\n }\n\n return null;\n }\n\n private hasControl(): boolean {\n return !!this.ngControl;\n }\n\n /** Checks whether a keycode is one of the configured separators. */\n private isSeparatorKey(event: KeyboardEvent) {\n return this.separators.some((separator) => separator.key === event.key && !hasModifierKey(event));\n }\n}\n","import { PlatformModule } from '@angular/cdk/platform';\nimport { NgModule } from '@angular/core';\nimport { ENTER } from '@koobiq/cdk/keycodes';\nimport { KBQ_TAGS_DEFAULT_OPTIONS, KbqTagsDefaultOptions } from './tag-default-options';\nimport { KbqTagInput } from './tag-input';\nimport { KbqTagList } from './tag-list.component';\nimport {\n KbqTag,\n KbqTagAvatar,\n KbqTagEditInput,\n KbqTagEditSubmit,\n KbqTagRemove,\n KbqTagTrailingIcon\n} from './tag.component';\n\nconst COMPONENTS = [\n KbqTagEditSubmit,\n KbqTagEditInput\n];\n\n@NgModule({\n imports: [\n PlatformModule,\n ...COMPONENTS,\n KbqTagList,\n KbqTag,\n KbqTagInput,\n KbqTagTrailingIcon,\n KbqTagAvatar,\n KbqTagRemove\n ],\n exports: [\n KbqTagList,\n KbqTag,\n KbqTagInput,\n KbqTagTrailingIcon,\n KbqTagAvatar,\n KbqTagRemove,\n ...COMPONENTS\n ],\n providers: [\n {\n provide: KBQ_TAGS_DEFAULT_OPTIONS,\n useValue: { separatorKeyCodes: [ENTER] } as KbqTagsDefaultOptions\n }\n ]\n})\nexport class KbqTagsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextUniqueId","i2","i4","ENTER","TAB","SPACE","i1","i3"],"mappings":"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"}
@@ -324,11 +324,16 @@ class KbqTimepicker {
324
324
  }
325
325
  onBlur() {
326
326
  this.focusChanged(false);
327
- if (this.viewValue === this.getTimeStringFromDate(this.value, this.format)) {
328
- return;
327
+ if (this.viewValue !== this.getTimeStringFromDate(this.value, this.format)) {
328
+ this.setViewValue(this.formatUserPaste(this.viewValue));
329
+ this.onInput();
330
+ }
331
+ // Re-run validation now that the field lost focus: while focused, KbqValidateDirective
332
+ // suppresses validation errors, so status has to be recomputed explicitly here.
333
+ if (this.useLegacyValidation && this.control) {
334
+ this.control.updateValueAndValidity({ emitEvent: false });
335
+ this.control.statusChanges.emit(this.control.status);
329
336
  }
330
- this.setViewValue(this.formatUserPaste(this.viewValue));
331
- this.onInput();
332
337
  }
333
338
  onPaste($event) {
334
339
  $event.preventDefault();