{"version":3,"file":"manager.mjs","sources":["../../../../../../packages/components/modeless-dialog/src/manager.ts"],"sourcesContent":["import { createVNode, isVNode, render, watch, isReactive } from 'vue'\nimport isServer from '@hongluan-business-ui/utils/isServer'\nimport { useZIndex, usePanelProps } from 'hongluan-ui'\nimport ModelessDialogConstructor from './modeless-dialog.vue'\n\nimport type { ComponentPublicInstance, VNode } from 'vue'\nimport type { ModelessDialogProps, ModelessInsance, ModelessProxy } from './modeless-dialog'\nimport type { Indexable } from '@hongluan-business-ui/utils/types'\n\nexport type ModelessDialogOptions = Partial<ModelessDialogProps & {\n  header?: VNode\n  body?: VNode\n  footer?: VNode\n  onResize?: (dlg: HTMLDivElement) => void\n  onOpen?: () => void\n  onOpened?: () => void\n  onClose?: () => void\n  onClosed?: () => void\n  onDestroy?: () => void\n  onCollapse?: (value: boolean) => void\n  onMaximize?: (value: boolean) => void\n}>\n\nconst ModelessDialogInstances: Record<string, ModelessInsance> = {}\nconst ModelessDialogListeners: Array<Record<string, (id: string) => void>> = []\nlet seed = 1\n\nconst { nextZIndex } = useZIndex()\n\nfunction show(options: ModelessDialogOptions = {}): ModelessInsance {\n  if (isServer) return\n  if (ModelessDialogInstances[options.id]) return ModelessDialogInstances[options.id]\n\n  const id = options.id || `modeless_dialog_${seed++}`\n\n  const props: ModelessDialogOptions = {\n    zIndex: nextZIndex(),\n    ...options,\n    id,\n    modelValue: true,\n  }\n\n  const container = document.createElement('div')\n\n  const slots: Indexable<() => VNode> = {}\n  if (props.header) {\n    slots.header = () => props.header\n  }\n  if (props.body) {\n    slots.default = () => props.body\n  }\n  if (props.footer) {\n    slots.footer = () => props.footer\n  }\n  const vm = createVNode(\n    ModelessDialogConstructor,\n    props,\n    Object.keys(slots).length ? slots : null,\n  )\n\n  // clean notification element preventing mem leak\n  vm.props.onDestroy = () => {\n    ModelessDialogInstances[id] = null\n    delete ModelessDialogInstances[id]\n\n    // render(null, container)\n  }\n\n  // instances will remove this item when close function gets called. So we do not need to worry about it.\n  render(vm, container)\n\n  const proxy = vm.component.proxy as ComponentPublicInstance<ModelessProxy>\n\n  if (isReactive(options)) {\n    watch(options, newVal => {\n      Object.assign(vm.component.props, options)\n\n      if (isVNode(newVal.header)) {\n        vm.component.slots.header = () => [newVal.header]\n      }\n      if (isVNode(newVal.body)) {\n        vm.component.slots.default = () => [newVal.body]\n      }\n      if (isVNode(newVal.footer)) {\n        vm.component.slots.footer = () => [newVal.footer]\n      }\n\n      const {\n        panelStyle,\n        panelClass,\n        headerClass: panelHeaderClass,\n        bodyClass: panelBodyClass,\n        footerClass: panelFooterClass,\n      } = usePanelProps(newVal as any)\n      Object.assign(proxy, { panelClass, panelStyle, panelHeaderClass, panelBodyClass, panelFooterClass })\n\n      vm.component.proxy.$forceUpdate()\n    })\n  }\n\n  const returnVal = {\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      proxy.visible = false\n      proxy.$emit('destroy')\n    },\n    toggleShow: (shown?: boolean) => {\n      proxy.shown = shown ?? !proxy.shown\n    },\n    toggleCollapse: (collapsable?: boolean) => {\n      proxy.collapseDialog(collapsable)\n    },\n    toggleMaximize: (maximizable?: boolean) => {\n      proxy.maximizeDialog(maximizable)\n    },\n    isShown: () => {\n      return proxy.shown\n    },\n    isClosed: () => {\n      return !!ModelessDialogInstances[id]\n    },\n    isCollapsed: () => {\n      return proxy.collapse\n    },\n    isMaximized: () => {\n      return proxy.maximize\n    },\n    title: props.title,\n    snapshot: props.snapshot,\n  }\n\n  ModelessDialogInstances[id] = returnVal\n\n  return returnVal\n}\n\nfunction callAllDialogMethods(name: string, ...args: any[]) {\n  for (const vm of Object.values(ModelessDialogInstances)) {\n    vm[name](...args)\n  }\n}\n\nfunction closeAll(): void {\n  callAllDialogMethods('close')\n}\n\nfunction showAll(): void {\n  callAllDialogMethods('toggleShow', true)\n}\n\nfunction hideAll(): void {\n  callAllDialogMethods('toggleShow', false)\n}\n\nfunction collapseAll(): void {\n  callAllDialogMethods('toggleCollapse', true)\n}\n\nfunction expandAll(): void {\n  callAllDialogMethods('toggleCollapse', false)\n}\n\nfunction get(id: string): ModelessInsance {\n  return ModelessDialogInstances[id]\n}\n\nfunction has(id: string): boolean {\n  return !!ModelessDialogInstances[id]\n}\n\nfunction addEventListener(listener: Record<string, (id: string) => void>) {\n  !ModelessDialogListeners.includes(listener) && ModelessDialogListeners.push(listener)\n  return () => {\n    ModelessDialogListeners.splice(ModelessDialogListeners.indexOf(listener), 1)\n  }\n}\n\nfunction triggerEvent(name: string, id: string) {\n  id && ModelessDialogListeners.forEach(listener => {\n    if (listener[name]) {\n      listener[name](id)\n    }\n  })\n}\n\nconst ModelessDialogManager = {\n  get,\n  has,\n  show,\n  closeAll,\n  showAll,\n  hideAll,\n  collapseAll,\n  expandAll,\n  addEventListener,\n  triggerEvent,\n}\n\nexport { ModelessDialogManager }\n"],"names":["ModelessDialogConstructor"],"mappings":"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"}