{"version":3,"file":"message-method.mjs","sources":["../../../../../packages/components/message/src/message-method.ts"],"sourcesContent":["import { createVNode, render } from 'vue'\nimport { isClient } from '@vueuse/core'\nimport { isVNode, isNumber, debugWarn } from '@element-ultra/utils'\nimport { useZIndex } from '@element-ultra/hooks'\nimport { useConfig } from '@element-ultra/hooks'\nimport MessageConstructor from './message.vue'\nimport { messageTypes } from './message'\n\nimport type { Message, MessageFn, MessageQueue, MessageProps } from './message'\nimport type { ComponentPublicInstance, VNode } from 'vue'\nconst [store] = useConfig()\nconst instances: MessageQueue = []\nlet seed = 1\n\n// TODO: Since Notify.ts is basically the same like this file. So we could do some encapsulation against them to reduce code duplication.\n\nconst message: MessageFn & Partial<Message> = function (options = {}) {\n  if (!isClient) return { close: () => undefined }\n  if (isNumber(store.message?.max) && instances.length >= store.message!.max) {\n    return { close: () => undefined }\n  }\n\n  if (\n    !isVNode(options) &&\n    typeof options === 'object' &&\n    options.grouping &&\n    !isVNode(options.message) &&\n    instances.length\n  ) {\n    const tempVm: any = instances.find(\n      (item) =>\n        `${item.vm.props?.message ?? ''}` ===\n        `${(options as any).message ?? ''}`\n    )\n    if (tempVm) {\n      tempVm.vm.component!.props.repeatNum += 1\n      tempVm.vm.component!.props.type = options?.type\n      return {\n        close: () =>\n          ((\n            vm.component!.proxy as ComponentPublicInstance<{ visible: boolean }>\n          ).visible = false),\n      }\n    }\n  }\n\n  if (typeof options === 'string' || isVNode(options)) {\n    options = { message: options }\n  }\n\n  let verticalOffset = options.offset || 20\n  instances.forEach(({ vm }) => {\n    verticalOffset += (vm.el?.offsetHeight || 0) + 16\n  })\n  verticalOffset += 16\n\n  const { nextZIndex } = useZIndex()\n\n  const id = `message_${seed++}`\n  const userOnClose = options.onClose\n  const props: Partial<MessageProps> = {\n    zIndex: nextZIndex(),\n    offset: verticalOffset,\n    ...options,\n    id,\n    onClose: () => {\n      close(id, userOnClose)\n    },\n  }\n\n  let appendTo: HTMLElement | null = document.body\n  if (options.appendTo instanceof HTMLElement) {\n    appendTo = options.appendTo\n  } else if (typeof options.appendTo === 'string') {\n    appendTo = document.querySelector(options.appendTo)\n  }\n  // should fallback to default value with a warning\n  if (!(appendTo instanceof HTMLElement)) {\n    debugWarn(\n      'ElMessage',\n      'the appendTo option is not an HTMLElement. Falling back to document.body.'\n    )\n    appendTo = document.body\n  }\n\n  const container = document.createElement('div')\n\n  container.className = `container_${id}`\n\n  const message = props.message\n  const vm = createVNode(\n    MessageConstructor,\n    props,\n    isVNode(props.message) ? { default: () => message } : null\n  )\n\n  // clean message element preventing mem leak\n  vm.props!.onDestroy = () => {\n    render(null, container)\n    // since the element is destroy, then the VNode should be collected by GC as well\n    // we do not want cause any mem leak because we have returned vm as a reference to users\n    // so that we manually set it to false.\n  }\n\n  render(vm, container)\n  // instances will remove this item when close function gets called. So we do not need to worry about it.\n  instances.push({ vm })\n  appendTo.appendChild(container.firstElementChild!)\n\n  return {\n    // instead of calling the onClose function directly, setting this value so that we can have the full lifecycle\n    // for out component, so that all closing steps will not be skipped.\n    close: () =>\n      ((\n        vm.component!.proxy as ComponentPublicInstance<{ visible: boolean }>\n      ).visible = false),\n  }\n}\n\nmessageTypes.forEach((type) => {\n  message[type] = (options = {}) => {\n    if (typeof options === 'string' || isVNode(options)) {\n      options = {\n        message: options,\n      }\n    }\n    return message({\n      ...options,\n      type,\n    })\n  }\n})\n\nexport function close(id: string, userOnClose?: (vm: VNode) => void): void {\n  const idx = instances.findIndex(({ vm }) => id === vm.component!.props.id)\n  if (idx === -1) return\n\n  const { vm } = instances[idx]\n  if (!vm) return\n  userOnClose?.(vm)\n\n  const removedHeight = vm.el!.offsetHeight\n  instances.splice(idx, 1)\n\n  // adjust other instances vertical offset\n  const len = instances.length\n  if (len < 1) return\n  for (let i = idx; i < len; i++) {\n    const pos =\n      parseInt(instances[i].vm.el!.style['top'], 10) - removedHeight - 16\n\n    instances[i].vm.component!.props.offset = pos\n  }\n}\n\nexport function closeAll(): void {\n  for (let i = instances.length - 1; i >= 0; i--) {\n    const instance = instances[i].vm.component\n    ;(instance?.proxy as any)?.close()\n  }\n}\n\nmessage.closeAll = closeAll\n\nexport default message as Message\n"],"names":["_a","vm","message"],"mappings":"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"}