{"version":3,"file":"ng-nest-ui-bubble.mjs","sources":["../../../../lib/ng-nest/ui/bubble/bubble.property.ts","../../../../lib/ng-nest/ui/bubble/bubbles.token.ts","../../../../lib/ng-nest/ui/bubble/bubble.component.ts","../../../../lib/ng-nest/ui/bubble/bubble.component.html","../../../../lib/ng-nest/ui/bubble/bubbles.component.ts","../../../../lib/ng-nest/ui/bubble/bubbles.component.html","../../../../lib/ng-nest/ui/bubble/bubble.module.ts","../../../../lib/ng-nest/ui/bubble/ng-nest-ui-bubble.ts"],"sourcesContent":["import { Component, input, output } from '@angular/core';\r\nimport { XBoolean, XNumber, XPropertyFunction, XSize, XTemplate, XToBoolean, XToNumber } from '@ng-nest/ui/core';\r\nimport { XAvatarOption } from '@ng-nest/ui/avatar';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Bubble\r\n * @selector x-bubble\r\n * @decorator component\r\n */\r\nexport const XBubblePrefix = 'x-bubble';\r\nconst X_BUBBLE_CONFIG_NAME = 'bubble';\r\n\r\n/**\r\n * Bubble Property\r\n */\r\n@Component({ selector: `${XBubblePrefix}-property`, template: '' })\r\nexport class XBubbleProperty extends XPropertyFunction(X_BUBBLE_CONFIG_NAME) {\r\n  /**\r\n   * @zh_CN 气泡内容\r\n   * @en_US Bubble content\r\n   */\r\n  readonly content = input<XTemplate>();\r\n  /**\r\n   * @zh_CN 推理内容\r\n   * @en_US reasoning content\r\n   */\r\n  readonly reasoningContent = input<XTemplate>();\r\n  /**\r\n   * @zh_CN 推理标题\r\n   * @en_US reasoning title\r\n   */\r\n  readonly reasoningTitle = input<XTemplate>(this.config?.reasoningTitle ?? '深度思考');\r\n  /**\r\n   * @zh_CN 头像\r\n   * @en_US Avatar\r\n   */\r\n  readonly avatar = input<XBubbleAvatarOption>();\r\n  /**\r\n   * @zh_CN 尺寸\r\n   * @en_US Size\r\n   */\r\n  readonly size = input<XSize>(this.config?.size ?? 'medium');\r\n  /**\r\n   * @zh_CN 形态变体\r\n   * @en_US Bubble variant\r\n   */\r\n  readonly variant = input<XBubbleVariant>(this.config?.variant ?? 'outlined');\r\n  /**\r\n   * @zh_CN 位置\r\n   * @en_US Bubble placement\r\n   */\r\n  readonly placement = input<XBubblePlacement>('start');\r\n  /**\r\n   * @zh_CN 气泡头部内容\r\n   * @en_US Bubble header content\r\n   */\r\n  readonly header = input<XTemplate>();\r\n  /**\r\n   * @zh_CN 气泡底部内容\r\n   * @en_US Bubble header content\r\n   */\r\n  readonly footer = input<XTemplate>();\r\n  /**\r\n   * @zh_CN 加载中\r\n   * @en_US Loading\r\n   */\r\n  readonly loading = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n  /**\r\n   * @zh_CN 内容输出打字机效果\r\n   * @en_US Typing effect\r\n   */\r\n  readonly typing = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n  /**\r\n   * @zh_CN 打字机输出速度\r\n   * @en_US Typing speed\r\n   */\r\n  readonly speed = input<number, XNumber>(30, { transform: XToNumber });\r\n  /**\r\n   * @zh_CN 内容渲染器，可自定义内容的渲染方式，如 HTML、Markdown\r\n   * @en_US Content renderer, can customize content rendering, such as HTML, Markdown\r\n   */\r\n  readonly renderer = input<XBubbleContentRenderer>();\r\n  /**\r\n   * @zh_CN 是否显示打字机光标\r\n   * @en_US Whether to show the typing cursor\r\n   */\r\n  readonly showCursor = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n  /**\r\n   * @zh_CN 打字开始\r\n   * @en_US Typing start\r\n   */\r\n  readonly typingStart = output<void>();\r\n  /**\r\n   * @zh_CN 打字正在输出的字符\r\n   * @en_US Typing output character\r\n   */\r\n  readonly typingOuput = output<string>();\r\n  /**\r\n   * @zh_CN 打字结束\r\n   * @en_US Typing end\r\n   */\r\n  readonly typingEnd = output<void>();\r\n}\r\n\r\n/**\r\n * @zh_CN 头像配置，继承了组件 Avatar 相关属性\r\n * @en_US Avatar settings\r\n */\r\nexport interface XBubbleAvatarOption extends XAvatarOption {\r\n  /**\r\n   * @zh_CN 是否显示头像\r\n   * @en_US Whether to show the avatar\r\n   */\r\n  hidden?: boolean;\r\n}\r\n\r\n/**\r\n * Bubbles\r\n * @selector x-bubbles\r\n * @decorator component\r\n */\r\nexport const XBubblesPrefix = 'x-bubbles';\r\nconst X_BUBBLES_CONFIG_NAME = 'bubbles';\r\n\r\n/**\r\n * Bubbles Property\r\n */\r\n@Component({ selector: `${XBubblesPrefix}-property`, template: '' })\r\nexport class XBubblesProperty extends XPropertyFunction(X_BUBBLES_CONFIG_NAME) {\r\n  /**\r\n   * @zh_CN 尺寸\r\n   * @en_US Size\r\n   */\r\n  readonly size = input<XSize>();\r\n  /**\r\n   * @zh_CN 形态变体\r\n   * @en_US Bubble variant\r\n   */\r\n  readonly variant = input<XBubbleVariant>();\r\n  /**\r\n   * @zh_CN 滚动条滚动事件，自动获取父级可滚动的元素\r\n   * @en_US Scroll event of the scroll bar, automatically obtaining the scrollable element of the parent\r\n   */\r\n  readonly scrollChange = output<Event>();\r\n}\r\n\r\n/**\r\n * @zh_CN 形态变体\r\n * @en_US Bubble variant\r\n */\r\nexport type XBubbleVariant = 'outlined' | 'filled' | 'shadow' | 'borderless';\r\n\r\n/**\r\n * @zh_CN 位置\r\n * @en_US Bubble placement\r\n */\r\nexport type XBubblePlacement = 'start' | 'end';\r\n\r\n/**\r\n * @zh_CN 内容渲染函数\r\n * @en_US Bubble content renderer\r\n */\r\nexport type XBubbleContentRenderer = (content: string) => string | Observable<string> | undefined;\r\n","import { InjectionToken, Signal } from '@angular/core';\r\n\r\nexport interface XBubblesContext {\r\n  size: Signal<string | undefined>;\r\n  variant: Signal<string | undefined>;\r\n}\r\n\r\nexport const X_BUBBLES_CONTEXT = new InjectionToken<XBubblesContext>('X_BUBBLES_CONTEXT');\r\n","import {\r\n  Component,\r\n  ViewEncapsulation,\r\n  ChangeDetectionStrategy,\r\n  computed,\r\n  viewChild,\r\n  ElementRef,\r\n  signal,\r\n  effect,\r\n  SimpleChanges,\r\n  inject,\r\n  Renderer2,\r\n  ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { XBubblePrefix, XBubbleProperty } from './bubble.property';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\nimport { XIsEmpty, XIsString, XIsTemplateRef, XSize, XVariant } from '@ng-nest/ui/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { XAvatarComponent } from '@ng-nest/ui/avatar';\r\nimport { XLoadingComponent } from '@ng-nest/ui/loading';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport { isObservable } from 'rxjs';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\nimport { X_BUBBLES_CONTEXT } from './bubbles.token';\r\n\r\n@Component({\r\n  selector: 'x-bubble',\r\n  templateUrl: './bubble.component.html',\r\n  styleUrls: ['./bubble.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [NgClass, XOutletDirective, XAvatarComponent, XIconComponent, XLoadingComponent]\r\n})\r\nexport class XBubbleComponent extends XBubbleProperty {\r\n  sanitizer = inject(DomSanitizer);\r\n  renderer2 = inject(Renderer2);\r\n  cdr = inject(ChangeDetectorRef);\r\n  private bubbles = inject(X_BUBBLES_CONTEXT, { optional: true });\r\n\r\n  wrapperRef = viewChild<ElementRef<HTMLElement>>('wrapperRef');\r\n\r\n  classMap = computed(() => ({\r\n    [`${XBubblePrefix}-${this.variantSignal()}`]: !XIsEmpty(this.variantSignal()),\r\n    [`${XBubblePrefix}-${this.placement()}`]: !XIsEmpty(this.placement()),\r\n    [`${XBubblePrefix}-cursor`]: this.showCursor() && this.typing(),\r\n    [`${XBubblePrefix}-typing`]:\r\n      this.typing() && (this.pendingContent().length > 0 || this.reasoningPendingContent().length > 0),\r\n    [`x-${this.sizeSignal()}`]: !XIsEmpty(this.sizeSignal())\r\n  }));\r\n\r\n  typedContent = signal('');\r\n  typedContentObserver = toObservable(this.typedContent);\r\n  pendingContent = signal('');\r\n  pendingContentObserver = toObservable(this.pendingContent);\r\n\r\n  reasoningTypedContent = signal('');\r\n  reasoningTypedContentObserver = toObservable(this.reasoningTypedContent);\r\n  reasoningPendingContent = signal('');\r\n  reasoningRenderedContent = signal<SafeHtml>('');\r\n  reasoningToggle = signal(true);\r\n\r\n  private typingInterval: any = null;\r\n  renderedContent = signal<SafeHtml>('');\r\n\r\n  sizeSignal = computed(() => {\r\n    return (this.bubbles?.size() || this.size()) as XSize;\r\n  });\r\n\r\n  variantSignal = computed(() => {\r\n    return (this.bubbles?.variant() || this.variant()) as XVariant;\r\n  });\r\n\r\n  isTemplate = computed(() => {\r\n    return XIsTemplateRef(this.content());\r\n  });\r\n\r\n  isString = computed(() => {\r\n    return XIsString(this.content());\r\n  });\r\n\r\n  isReasoningTemplate = computed(() => {\r\n    return XIsTemplateRef(this.reasoningContent());\r\n  });\r\n\r\n  isReasoningString = computed(() => {\r\n    return XIsString(this.reasoningContent()) && !XIsEmpty(this.reasoningContent());\r\n  });\r\n\r\n  constructor() {\r\n    super();\r\n    effect(() => {\r\n      if (this.isString() && !this.typing()) {\r\n        this.stopTyping();\r\n\r\n        if (this.reasoningPendingContent().length === 0) {\r\n          this.typedContent.set(this.typedContent() + this.pendingContent());\r\n          this.pendingContent.set('');\r\n        }\r\n      }\r\n    });\r\n\r\n    this.reasoningTypedContentObserver.subscribe(() => {\r\n      const finalReasoningContent = this.typing()\r\n        ? this.reasoningTypedContent()\r\n        : (this.reasoningContent() as string) || '';\r\n      const setValue = (value: string) => {\r\n        this.reasoningRenderedContent.set(this.sanitizer.bypassSecurityTrustHtml(value));\r\n      };\r\n\r\n      if (this.renderer() && XIsString(finalReasoningContent)) {\r\n        const rendered = this.renderer()!(finalReasoningContent);\r\n        if (isObservable(rendered)) {\r\n          rendered.subscribe((value) => {\r\n            setValue(value);\r\n          });\r\n        } else {\r\n          setValue(rendered as string);\r\n        }\r\n      } else {\r\n        setValue(finalReasoningContent);\r\n      }\r\n    });\r\n\r\n    this.typedContentObserver.subscribe(() => {\r\n      const finalContent = this.typing() ? this.typedContent() : (this.content() as string) || '';\r\n      const setValue = (value: string) => {\r\n        this.renderedContent.set(this.sanitizer.bypassSecurityTrustHtml(value));\r\n      };\r\n\r\n      if (this.renderer() && XIsString(finalContent)) {\r\n        const rendered = this.renderer()!(finalContent);\r\n        if (isObservable(rendered)) {\r\n          rendered.subscribe((value) => {\r\n            setValue(value);\r\n          });\r\n        } else {\r\n          setValue(rendered as string);\r\n        }\r\n      } else {\r\n        setValue(finalContent);\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const { content, reasoningContent } = changes;\r\n\r\n    if (reasoningContent && this.isReasoningString()) {\r\n      const newReasoningContent = reasoningContent.currentValue || '';\r\n      const currentTypedReasoningContent = this.reasoningTypedContent();\r\n\r\n      if (!this.typing()) {\r\n        this.reasoningTypedContent.set(newReasoningContent);\r\n        return;\r\n      }\r\n\r\n      if (newReasoningContent.startsWith(currentTypedReasoningContent)) {\r\n        this.reasoningPendingContent.set(newReasoningContent.substring(currentTypedReasoningContent.length));\r\n        if (this.reasoningPendingContent().length > 0 && !this.typingInterval) {\r\n          this.startTyping();\r\n        }\r\n      } else {\r\n        this.stopTyping();\r\n        this.reasoningTypedContent.set('');\r\n        this.reasoningPendingContent.set(newReasoningContent);\r\n        this.startTyping();\r\n      }\r\n    }\r\n\r\n    if (content && this.isString()) {\r\n      const newFullContent = content.currentValue || '';\r\n      const currentTypedContent = this.typedContent();\r\n\r\n      if (!this.typing()) {\r\n        if (this.reasoningPendingContent().length === 0) {\r\n          this.typedContent.set(newFullContent);\r\n        }\r\n        return;\r\n      }\r\n\r\n      if (newFullContent.startsWith(currentTypedContent)) {\r\n        this.pendingContent.set(newFullContent.substring(currentTypedContent.length));\r\n        if (this.reasoningPendingContent().length === 0 && this.pendingContent().length > 0 && !this.typingInterval) {\r\n          this.startTyping();\r\n        }\r\n      } else {\r\n        this.stopTyping();\r\n        this.typedContent.set('');\r\n        this.pendingContent.set(newFullContent);\r\n        if (this.reasoningPendingContent().length === 0 && this.pendingContent().length > 0) {\r\n          this.startTyping();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private startTyping(): void {\r\n    if (this.typingInterval) {\r\n      return;\r\n    }\r\n\r\n    if (this.reasoningPendingContent().length === 0 && this.pendingContent().length === 0) {\r\n      return;\r\n    }\r\n\r\n    this.typingStart.emit();\r\n    this.typingInterval = setInterval(() => {\r\n      if (this.reasoningPendingContent().length > 0) {\r\n        const nextChar = this.reasoningPendingContent().charAt(0);\r\n        this.reasoningTypedContent.update((current) => current + nextChar);\r\n        this.reasoningPendingContent.update((current) => current.substring(1));\r\n        this.typingOuput.emit(nextChar);\r\n      } else if (this.pendingContent().length > 0) {\r\n        const nextChar = this.pendingContent().charAt(0);\r\n        this.typedContent.update((current) => current + nextChar);\r\n        this.pendingContent.update((current) => current.substring(1));\r\n        this.typingOuput.emit(nextChar);\r\n      } else {\r\n        this.typingEnd.emit();\r\n        this.stopTyping();\r\n      }\r\n    }, this.speed());\r\n  }\r\n\r\n  private stopTyping(): void {\r\n    if (this.typingInterval) {\r\n      clearInterval(this.typingInterval);\r\n      this.typingInterval = null;\r\n    }\r\n  }\r\n\r\n  onReasoningToggle() {\r\n    this.reasoningToggle.update((x) => !x);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.stopTyping();\r\n  }\r\n}\r\n","<div class=\"x-bubble\" [ngClass]=\"classMap()\">\r\n  @if (!!avatar()) {\r\n    <div class=\"x-bubble-avatar\" [class.x-bubble-avatar-hidden]=\"avatar()?.hidden\">\r\n      <x-avatar\r\n        [icon]=\"avatar()?.icon!\"\r\n        [label]=\"avatar()?.label!\"\r\n        [src]=\"avatar()?.src!\"\r\n        [size]=\"avatar()?.size ?? sizeSignal()\"\r\n        [gap]=\"avatar()?.gap ?? '0.25rem'\"\r\n        [fit]=\"avatar()?.fit ?? 'cover'\"\r\n        [backgroundColor]=\"avatar()?.backgroundColor ?? '#999999'\"\r\n        [color]=\"avatar()?.color ?? '#FFFFFF'\"\r\n        [shape]=\"avatar()?.shape ?? 'circle'\"\r\n      ></x-avatar>\r\n    </div>\r\n  }\r\n  <div #wrapperRef class=\"x-bubble-wrapper\">\r\n    @if (loading()) {\r\n      <div class=\"x-bubble-content\" [x-loading]=\"true\" [size]=\"'small'\" inline></div>\r\n    } @else {\r\n      @if (header()) {\r\n        <div class=\"x-bubble-header\">\r\n          <ng-container *xOutlet=\"header()\">{{ header() }}</ng-container>\r\n        </div>\r\n      }\r\n\r\n      @if (isReasoningString()) {\r\n        <div class=\"x-bubble-reasoning\">\r\n          <ng-container *xOutlet=\"reasoningHeaderTpl\"></ng-container>\r\n          @if (reasoningToggle()) {\r\n            <div class=\"x-bubble-reasoning-content\" #reasoningContentRef [innerHTML]=\"reasoningRenderedContent()\"></div>\r\n          }\r\n        </div>\r\n      } @else if (isReasoningTemplate()) {\r\n        <div class=\"x-bubble-reasoning\">\r\n          <ng-container *xOutlet=\"reasoningHeaderTpl\"></ng-container>\r\n          @if (reasoningToggle()) {\r\n            <div class=\"x-bubble-reasoning-content\" #reasoningContentRef>\r\n              <ng-container *xOutlet=\"reasoningContent()\"></ng-container>\r\n            </div>\r\n          }\r\n        </div>\r\n      }\r\n\r\n      <ng-template #reasoningHeaderTpl>\r\n        <div class=\"x-bubble-reasoning-header\" (click)=\"onReasoningToggle()\">\r\n          <x-icon\r\n            class=\"x-bubble-reasoning-toggle\"\r\n            [type]=\"reasoningToggle() ? 'fto-chevron-down' : 'fto-chevron-right'\"\r\n          ></x-icon>\r\n          <span>{{ reasoningTitle() }}</span>\r\n        </div>\r\n      </ng-template>\r\n\r\n      @if (isString()) {\r\n        <div class=\"x-bubble-content\" #contentRef [innerHTML]=\"renderedContent()\"></div>\r\n      } @else if (isTemplate()) {\r\n        <div class=\"x-bubble-content\" #contentRef>\r\n          <ng-container *xOutlet=\"content()\"></ng-container>\r\n        </div>\r\n      }\r\n\r\n      @if (footer()) {\r\n        <div class=\"x-bubble-footer\">\r\n          <ng-container *xOutlet=\"footer()\">{{ footer() }}</ng-container>\r\n        </div>\r\n      }\r\n    }\r\n  </div>\r\n</div>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  contentChildren,\r\n  ElementRef,\r\n  inject,\r\n  Renderer2,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { XBubblesProperty } from './bubble.property';\r\nimport { XBubbleComponent } from './bubble.component';\r\nimport { fromEvent, Subject, Subscription, takeUntil } from 'rxjs';\r\nimport { X_BUBBLES_CONTEXT, XBubblesContext } from './bubbles.token';\r\n\r\n@Component({\r\n  selector: 'x-bubbles',\r\n  templateUrl: './bubbles.component.html',\r\n  styleUrls: ['./bubbles.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [],\r\n  providers: [\r\n    {\r\n      provide: X_BUBBLES_CONTEXT,\r\n      useExisting: XBubblesComponent\r\n    }\r\n  ]\r\n})\r\nexport class XBubblesComponent extends XBubblesProperty implements XBubblesContext {\r\n  elementRef = inject(ElementRef);\r\n  renderer = inject(Renderer2);\r\n\r\n  private parentScrollElement: HTMLElement | null = null;\r\n  private isFollowing = true;\r\n  private removeScrollListener: Subscription | null = null;\r\n  private contentMutationObserver: MutationObserver | null = null;\r\n  private typingObserver: MutationObserver | null = null;\r\n  private $destroy = new Subject<void>();\r\n\r\n  bubbles = contentChildren(XBubbleComponent);\r\n\r\n  ngAfterViewInit(): void {\r\n    this.stepScroll();\r\n    this.observeContentChanges();\r\n  }\r\n\r\n  ngDoCheck(): void {\r\n    const bubbles = this.bubbles();\r\n    if (bubbles.length <= 0) return;\r\n    const lastBubble = bubbles[bubbles.length - 1];\r\n    if (\r\n      lastBubble &&\r\n      lastBubble.typing() &&\r\n      (lastBubble.pendingContent().length > 0 || lastBubble.reasoningPendingContent().length > 0)\r\n    ) {\r\n      if (!this.typingObserver) {\r\n        this.startTypingObserver(lastBubble);\r\n      }\r\n    } else {\r\n      if (this.typingObserver) {\r\n        this.stopTypingObserver();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.removeScrollListener?.unsubscribe();\r\n    this.contentMutationObserver?.disconnect();\r\n    this.stopTypingObserver();\r\n    this.$destroy.next();\r\n    this.$destroy.complete();\r\n  }\r\n\r\n  private stepScroll() {\r\n    const newScroll = this.getParentScrollElement(this.elementRef.nativeElement);\r\n    if (this.parentScrollElement && newScroll === this.parentScrollElement) return;\r\n    this.parentScrollElement = newScroll;\r\n    if (this.parentScrollElement) {\r\n      this.removeScrollListener?.unsubscribe();\r\n      this.removeScrollListener = fromEvent(this.parentScrollElement, 'scroll')\r\n        .pipe(takeUntil(this.$destroy))\r\n        .subscribe((event: Event) => {\r\n          const atBottom =\r\n            this.parentScrollElement!.scrollHeight - this.parentScrollElement!.scrollTop ===\r\n            this.parentScrollElement!.clientHeight;\r\n          if (!atBottom) {\r\n            this.isFollowing = false;\r\n          } else {\r\n            this.isFollowing = true;\r\n          }\r\n          this.scrollChange.emit(event);\r\n        });\r\n    }\r\n  }\r\n\r\n  private getParentScrollElement(element: HTMLElement): HTMLElement | null {\r\n    let parent = this.renderer.parentNode(element) as HTMLElement;\r\n    while (parent && parent.nodeType === 1) {\r\n      const overflowY = getComputedStyle(parent).overflowY;\r\n      if (overflowY === 'auto' || overflowY === 'scroll') {\r\n        return parent;\r\n      }\r\n      parent = this.renderer.parentNode(parent);\r\n    }\r\n    return null;\r\n  }\r\n  private observeContentChanges(): void {\r\n    this.contentMutationObserver = new MutationObserver(() => {\r\n      this.isFollowing = true;\r\n      this.scrollToBottom();\r\n    });\r\n\r\n    this.contentMutationObserver.observe(this.elementRef.nativeElement, { childList: true });\r\n  }\r\n\r\n  private startTypingObserver(bubble: XBubbleComponent): void {\r\n    const bubbleContent = bubble.wrapperRef()?.nativeElement;\r\n    if (bubbleContent) {\r\n      this.typingObserver = new MutationObserver(() => {\r\n        if (this.isFollowing) {\r\n          this.scrollToBottom();\r\n        }\r\n      });\r\n\r\n      this.typingObserver.observe(bubbleContent, {\r\n        childList: true,\r\n        subtree: true,\r\n        characterData: true\r\n      });\r\n    }\r\n  }\r\n\r\n  private stopTypingObserver(): void {\r\n    if (this.typingObserver) {\r\n      this.typingObserver.disconnect();\r\n      this.typingObserver = null;\r\n    }\r\n  }\r\n\r\n  scrollToBottom(): void {\r\n    this.stepScroll();\r\n    if (this.parentScrollElement) {\r\n      this.parentScrollElement.scrollTop = this.parentScrollElement.scrollHeight;\r\n    }\r\n  }\r\n\r\n  scrollToTop(): void {\r\n    this.stepScroll();\r\n    if (this.parentScrollElement) {\r\n      this.parentScrollElement.scrollTop = 0;\r\n    }\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import { NgModule } from '@angular/core';\r\nimport { XBubbleComponent } from './bubble.component';\r\nimport { XBubblesComponent } from './bubbles.component';\r\n\r\n@NgModule({\r\n  exports: [XBubbleComponent, XBubblesComponent],\r\n  imports: [XBubbleComponent, XBubblesComponent]\r\n})\r\nexport class XBubbleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}