{"version":3,"file":"ng-nest-ui-message.mjs","sources":["../../../../lib/ng-nest/ui/message/message.property.ts","../../../../lib/ng-nest/ui/message/message.component.ts","../../../../lib/ng-nest/ui/message/message.component.html","../../../../lib/ng-nest/ui/message/message-ref.ts","../../../../lib/ng-nest/ui/message/message.service.ts","../../../../lib/ng-nest/ui/message/message.module.ts","../../../../lib/ng-nest/ui/message/ng-nest-ui-message.ts"],"sourcesContent":["import { XStatus, XPlace } from '@ng-nest/ui/core';\r\nimport { XAlertOption } from '@ng-nest/ui/alert';\r\nimport { Subscription, Subject } from 'rxjs';\r\nimport { XPortalOverlayRef } from '@ng-nest/ui/portal';\r\nimport { ChangeDetectorRef } from '@angular/core';\r\n\r\n/**\r\n * Message\r\n * @selector x-message\r\n * @decorator component\r\n */\r\nexport const XMessagePrefix = 'x-message';\r\nexport const XMessagePortal = 'x-message-portal';\r\nexport const X_MESSAGE_CONFIG_NAME = 'message';\r\n\r\n/**\r\n * Message Option\r\n */\r\nexport interface XMessageOption extends XAlertOption {\r\n  /**\r\n   * @zh_CN 消息框的 id\r\n   * @en_US Message id\r\n   */\r\n  id?: string;\r\n  /**\r\n   * @zh_CN 方位，九宫格\r\n   * @en_US Direction, nine grid\r\n   * @default 'top'\r\n   * @withConfig true\r\n   */\r\n  placement?: XPlace;\r\n  /**\r\n   * @zh_CN 偏移距离\r\n   * @en_US Offset distance\r\n   * @default '2rem'\r\n   * @withConfig true\r\n   */\r\n  offset?: string | string[];\r\n  /**\r\n   * @zh_CN 类型\r\n   * @en_US Types of\r\n   * @default 'info'\r\n   * @withConfig true\r\n   */\r\n  type?: XMessageType;\r\n  /**\r\n   * @zh_CN 多个消息的时候，显示类型\r\n   * @en_US When multiple messages, the display type\r\n   * @default 'list'\r\n   * @withConfig true\r\n   */\r\n  displayType?: XMessageDisplayType;\r\n  /**\r\n   * @zh_CN 宽度\r\n   * @en_US Width\r\n   * @withConfig true\r\n   */\r\n  width?: string;\r\n  /**\r\n   * @zh_CN 高度\r\n   * @en_US Height\r\n   */\r\n  height?: string;\r\n  /**\r\n   * @zh_CN 延迟关闭时间\r\n   * @en_US Delay off time\r\n   * @default 3000\r\n   * @withConfig true\r\n   */\r\n  duration?: number;\r\n  /**\r\n   * @zh_CN 隐藏关闭按钮\r\n   * @en_US Hide close button\r\n   * @default true\r\n   * @withConfig true\r\n   */\r\n  hideClose?: boolean;\r\n  /**\r\n   * @zh_CN 显示图标\r\n   * @en_US Show icon\r\n   * @default true\r\n   * @withConfig true\r\n   */\r\n  showIcon?: boolean;\r\n  /**\r\n   * @zh_CN 延迟关闭订阅后的对象，用来释放或取消\r\n   * @en_US Delayed closing the subscribed object, used to release or cancel\r\n   */\r\n  durationSubscription?: Subscription | null;\r\n  /**\r\n   * @zh_CN 延迟关闭订阅对象\r\n   * @en_US Delay in closing the subscription object\r\n   */\r\n  durationSub?: Subject<any>;\r\n}\r\n\r\n/**\r\n * @zh_CN 创建的消息对象\r\n * @en_US Message object created\r\n */\r\nexport interface XMessageOverlayRef extends XPortalOverlayRef<XMessageHandle> {}\r\n\r\n/**\r\n * @zh_CN 创建的消息组件定义\r\n * @en_US Message object created\r\n */\r\nexport interface XMessageHandle {\r\n  message: XMessagePlacementRef;\r\n  cdr: ChangeDetectorRef;\r\n  onClose(item: XMessageOption): void;\r\n  moveDone($event: AnimationEvent): void;\r\n  onEnter(item: XMessageOption): void;\r\n  onLeave(item: XMessageOption): void;\r\n}\r\n\r\n/**\r\n * @zh_CN 九宫格中的消息对象\r\n * @en_US Message object in Jiugongge\r\n */\r\nexport interface XMessagePlacement {\r\n  [property: string]: XMessagePlacementRef;\r\n}\r\n\r\n/**\r\n * @zh_CN 九宫格中的消息对象\r\n * @en_US Message object in Jiugongge\r\n */\r\nexport interface XMessagePlacementRef {\r\n  /**\r\n   * @zh_CN 方位对应的 overlayRef\r\n   * @en_US Placement overlayRef\r\n   */\r\n  ref: XMessageOverlayRef;\r\n  /**\r\n   * @zh_CN 对应的消息 list 数据\r\n   * @en_US Corresponding message list data\r\n   */\r\n  list: XMessageOption[];\r\n  /**\r\n   * @zh_CN 关闭所有数据\r\n   * @en_US Close all data\r\n   */\r\n  closeAll: () => void;\r\n}\r\n\r\n/**\r\n * @zh_CN 类型\r\n * @en_US Types of\r\n */\r\nexport type XMessageType = XStatus;\r\n\r\n/**\r\n * @zh_CN 多个消息的时候，显示类型\r\n * @en_US When multiple messages, the display type\r\n */\r\nexport type XMessageDisplayType = 'list' | 'single';\r\n","import { Component, ViewEncapsulation, ChangeDetectorRef, ChangeDetectionStrategy, inject } from '@angular/core';\r\nimport { XIsEmpty } from '@ng-nest/ui/core';\r\nimport { XMessagePrefix, XMessageOption, XMessagePlacementRef, XMessageHandle } from './message.property';\r\nimport { of } from 'rxjs';\r\nimport { delay } from 'rxjs/operators';\r\nimport { XAlertComponent } from '@ng-nest/ui/alert';\r\n\r\n@Component({\r\n  selector: `${XMessagePrefix}`,\r\n  imports: [XAlertComponent],\r\n  templateUrl: './message.component.html',\r\n  styleUrls: ['./message.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XMessageComponent implements XMessageHandle {\r\n  message: XMessagePlacementRef = { ref: {}, list: [], closeAll: () => {} };\r\n  cdr = inject(ChangeDetectorRef);\r\n\r\n  onClose(item: XMessageOption) {\r\n    this.message.list?.splice(this.message.list.indexOf(item), 1);\r\n    item.durationSubscription?.unsubscribe();\r\n    this.cdr.detectChanges();\r\n  }\r\n  moveDone($event: AnimationEvent) {\r\n    if ($event.animationName.endsWith('-leave') && XIsEmpty(this.message.list)) {\r\n      this.message.ref?.overlayRef?.detach();\r\n    }\r\n  }\r\n\r\n  onEnter(item: XMessageOption) {\r\n    item.durationSubscription?.unsubscribe();\r\n  }\r\n\r\n  onLeave(item: XMessageOption) {\r\n    if (item.duration) {\r\n      item.durationSubscription = of(true)\r\n        .pipe(delay(item.duration))\r\n        .subscribe(() => this.onClose(item));\r\n    }\r\n  }\r\n}\r\n","<div class=\"x-message\">\r\n  <!-- TODO The style of x-alert will be cleared when the leave animation starts. This ensures that the style will definitely be loaded -->\r\n  <x-alert [style.display]=\"'none'\"></x-alert>\r\n  @for (item of message.list; track item.id) {\r\n    <x-alert\r\n      [animate.enter]=\"`x-move-${item.placement}-enter`\"\r\n      [animate.leave]=\"`x-move-${item.placement}-leave`\"\r\n      (animationend)=\"moveDone($event)\"\r\n      (mouseenter)=\"onEnter(item)\"\r\n      (mouseleave)=\"onLeave(item)\"\r\n      (close)=\"onClose(item)\"\r\n      [hide]=\"item.hide!\"\r\n      [title]=\"item.title\"\r\n      [content]=\"item.content\"\r\n      [type]=\"item.type!\"\r\n      [effect]=\"item.effect!\"\r\n      [hideClose]=\"item.hideClose!\"\r\n      [closeText]=\"item.closeText!\"\r\n      [showIcon]=\"item.showIcon!\"\r\n      [duration]=\"0\"\r\n      manual\r\n      disabledAnimation\r\n    ></x-alert>\r\n  }\r\n</div>\r\n","import { XMessageOption } from './message.property';\r\n\r\n// TODO: add more function\r\nexport class XMessageRef {\r\n  option: XMessageOption;\r\n  constructor(option: XMessageOption) {\r\n    if (!option.id) option.id = `${new Date().getTime()}`;\r\n    this.option = option;\r\n  }\r\n  close = () => {};\r\n  opened = () => {};\r\n  closeAll = () => {};\r\n  update = (_option: XMessageOption) => {};\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport {\r\n  XTemplate,\r\n  XIsXTemplate,\r\n  XIsEmpty,\r\n  XFillDefault,\r\n  XIsString,\r\n  XConfigService,\r\n  XMessageConfig,\r\n  XIsUndefined\r\n} from '@ng-nest/ui/core';\r\nimport {\r\n  XMessageOverlayRef,\r\n  XMessageType,\r\n  XMessagePlacement,\r\n  XMessagePortal,\r\n  XMessageOption,\r\n  X_MESSAGE_CONFIG_NAME,\r\n  XMessagePlacementRef\r\n} from './message.property';\r\nimport { XMessageComponent } from './message.component';\r\nimport { of } from 'rxjs';\r\nimport { delay } from 'rxjs/operators';\r\nimport { XPortalService } from '@ng-nest/ui/portal';\r\nimport { XMessageRef } from './message-ref';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class XMessageService {\r\n  messages: XMessagePlacement = {};\r\n\r\n  default: XMessageOption = {\r\n    type: 'info',\r\n    placement: 'top',\r\n    offset: '2rem',\r\n    effect: 'white',\r\n    displayType: 'list',\r\n    duration: 3000,\r\n    hideClose: true,\r\n    showIcon: true,\r\n    hide: false\r\n  };\r\n\r\n  private portal = inject(XPortalService);\r\n  private configService = inject(XConfigService);\r\n  configDefault?: XMessageConfig = this.configService.getConfigForComponent(X_MESSAGE_CONFIG_NAME);\r\n\r\n  constructor() {\r\n    Object.assign(this.default, this.configDefault);\r\n  }\r\n\r\n  info(option: XTemplate | XMessageOption): XMessageRef {\r\n    return this.create(option, 'info');\r\n  }\r\n\r\n  success(option: XTemplate | XMessageOption): XMessageRef {\r\n    return this.create(option, 'success');\r\n  }\r\n\r\n  warning(option: XTemplate | XMessageOption): XMessageRef {\r\n    return this.create(option, 'warning');\r\n  }\r\n\r\n  error(option: XTemplate | XMessageOption): XMessageRef {\r\n    return this.create(option, 'error');\r\n  }\r\n\r\n  loading(option: XTemplate | XMessageOption): XMessageRef {\r\n    return this.create(option, 'loading');\r\n  }\r\n\r\n  create(option: XTemplate | XMessageOption, type: XMessageType): XMessageRef {\r\n    let opt: XMessageOption;\r\n    if (XIsXTemplate(option)) {\r\n      opt = { title: option as XTemplate, type: type };\r\n    } else {\r\n      opt = option as XMessageOption;\r\n      opt.type = type;\r\n    }\r\n    XFillDefault(opt, this.default);\r\n    const ref = new XMessageRef(opt);\r\n    if (XIsUndefined(opt.placement)) {\r\n      return ref;\r\n    }\r\n    ref.close = () => {\r\n      this.removeMessage(opt);\r\n    };\r\n    ref.closeAll = () => {\r\n      this.closeAll();\r\n    };\r\n    ref.update = (_opt) => {\r\n      this.updateMessage(_opt, opt);\r\n    };\r\n    ref.opened = () => {\r\n      return this.messages[opt.placement!].list.includes(opt);\r\n    };\r\n    this.setDuration(opt);\r\n    this.createMessagePlacement(opt);\r\n\r\n    return ref;\r\n  }\r\n\r\n  private createMessage(option: XMessageOption): XMessageOverlayRef {\r\n    const offset = XIsString(option.offset) ? [option.offset as string] : (option.offset as string[]);\r\n    return this.portal.attach({\r\n      content: XMessageComponent,\r\n      overlayConfig: {\r\n        panelClass: XMessagePortal,\r\n        width: option.width,\r\n        height: option.height,\r\n        positionStrategy: this.portal.setPlace(option.placement, ...offset)\r\n      }\r\n    });\r\n  }\r\n\r\n  private closeAll(excludeOption?: XMessageOption) {\r\n    for (let key in this.messages) {\r\n      for (let option of this.messages[key].list) {\r\n        option !== excludeOption && this.removeMessage(option);\r\n      }\r\n    }\r\n  }\r\n\r\n  private createMessagePlacement(option: XMessageOption) {\r\n    let msgPlacement = this.messages[option.placement!];\r\n    if (XIsEmpty(msgPlacement) || !msgPlacement.ref?.overlayRef?.hasAttached()) {\r\n      this.messages[option.placement!] = {\r\n        ref: this.createMessage(option),\r\n        list: [option],\r\n        closeAll: () => {\r\n          this.closeAll();\r\n        }\r\n      };\r\n      msgPlacement = this.messages[option.placement!];\r\n    } else {\r\n      msgPlacement.list = [...(this.messages[option.placement!].list as XMessageOption[]), option];\r\n    }\r\n    this.messageChange(msgPlacement);\r\n\r\n    option.displayType === 'single' && this.closeAll(option);\r\n  }\r\n\r\n  private messageChange(message: XMessagePlacementRef) {\r\n    if (!message.ref?.overlayRef?.hasAttached() || !message?.ref?.componentRef?.instance) return;\r\n    message.ref.componentRef.instance.message = message;\r\n    message.ref.componentRef.instance.cdr.detectChanges();\r\n  }\r\n\r\n  private setDuration(option: XMessageOption) {\r\n    if (option.duration && option.type !== 'loading') {\r\n      option.durationSubscription = of(true)\r\n        .pipe(delay(option.duration))\r\n        .subscribe(() => {\r\n          this.removeMessage(option);\r\n        });\r\n    }\r\n  }\r\n\r\n  private removeMessage(option: XMessageOption) {\r\n    if (typeof option.placement === 'undefined') return;\r\n    this.messages[option.placement].ref?.componentRef?.instance.onClose(option);\r\n  }\r\n\r\n  private updateMessage(newOption: XMessageOption, oldOption: XMessageOption) {\r\n    Object.assign(oldOption, newOption);\r\n    this.setDuration(oldOption);\r\n    const refs = this.messages[oldOption.placement!];\r\n    if (refs) {\r\n      refs.ref.componentRef?.instance.cdr.detectChanges();\r\n    }\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n  exports: [],\r\n  imports: []\r\n})\r\nexport class XMessageModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}