{"version":3,"file":"message.mjs","sources":["../../../../../../packages/components/message/src/message.ts"],"sourcesContent":["import { createVNode, render, isVNode } from 'vue'\nimport type { VNode } from 'vue'\nimport { isFunction, isObject } from '../../../utils/is'\nimport { getElement } from '../../../utils/dom'\nimport { messageTypes } from './types'\nimport type {\n  IMessageParams,\n  IMessage,\n  IMessageOptions,\n  IMessageMethods,\n  IMessageType,\n  IMessageHandler,\n  IMessageCaller\n} from './types'\nimport MessageComponent from './message.vue'\n\nconst domMap = new WeakMap()\n\nconst Message: Partial<IMessageMethods> & IMessageCaller = (\n  options: IMessageParams\n): IMessageHandler => {\n  if (typeof options === 'string' || isVNode(options)) {\n    options = {\n      message: options\n    }\n  }\n\n  const renderContainer: HTMLElement = getElement(options.renderTo || 'body') as HTMLElement\n\n  if (!domMap.has(renderContainer)) {\n    domMap.set(renderContainer, [] as VNode[])\n  }\n\n  const instances: VNode[] = domMap.get(renderContainer)\n\n  let offset = options.offset || 20\n\n  instances.forEach((vm: VNode) => {\n    offset += vm.el?.offsetHeight + 20\n  })\n\n  const userClose = options.onClose\n\n  let props: Record<string, any> = {}\n\n  const onClose = () => {\n    const index = instances.findIndex((_vm: VNode) => _vm === vm)\n    if (index < 0) return\n    const closingInstanceOffset = vm.el?.offsetHeight + 20\n    // 找到当前关闭的message实例位置 从它开始后面的message实例top都要减去当前关闭的message实例offsetHeight + 20\n    instances.slice(index + 1).forEach((_vm: VNode) => {\n      const top = _vm.component?.props.offset as number\n      _vm.component!.props.offset = top - closingInstanceOffset\n    })\n    instances.splice(index, 1)\n    userClose && userClose(vm)\n  }\n  const onDestroy = () => {\n    render(null, container)\n  }\n\n  props = { ...options, onClose, onDestroy, offset }\n\n  const vm = createVNode(\n    MessageComponent,\n    props,\n    isFunction(props.message) || isVNode(props.message)\n      ? {\n          default: isFunction(props.message) ? props.message : () => props.message\n        }\n      : null\n  )\n\n  const container = document.createElement('div')\n  render(vm, container)\n\n  if (renderContainer.tagName === 'BODY') {\n    vm.el!.style.position = 'fixed'\n  } else {\n    // TODO 获取挂在对象的position 没有的话就设置个relative\n    renderContainer!.style.position = 'relative'\n    vm.el!.style.position = 'absolute'\n  }\n\n  renderContainer!.appendChild(container.firstElementChild!)\n\n  instances.push(vm)\n\n  const close = () => {\n    ;(vm.component!.proxy as any).handleClose()\n  }\n\n  return {\n    close\n  }\n}\n\nconst registerAllMethods = () => {\n  messageTypes.forEach((method: IMessageType) => {\n    Message[method] = (message: IMessage | IMessageOptions) => {\n      if (isObject(message)) {\n        return Message({\n          type: method,\n          ...message\n        })\n      }\n      return Message({\n        message: message as string,\n        type: method\n      })\n    }\n  })\n}\n\nregisterAllMethods()\n\nexport default Message as IMessageMethods\n"],"names":["vm","_a"],"mappings":"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"}