{"version":3,"file":"createLoadingComponent.mjs","sources":["../../../../../src/components/ivue-loading/createLoadingComponent.ts"],"sourcesContent":["import {\r\n  createApp,\r\n  createVNode,\r\n  reactive,\r\n  ref,\r\n  toRefs,\r\n  h,\r\n  Transition,\r\n  vShow,\r\n  withCtx,\r\n  withDirectives,\r\n} from 'vue';\r\nimport { removeClass } from '../../utils/assist';\r\n\r\n// ts\r\nimport type { LoadingOptionsResolved } from './types/loading';\r\n\r\nexport function createLoadingComponent(options: LoadingOptionsResolved) {\r\n  // 离开后的时间\r\n  let afterLeaveTimer: number;\r\n\r\n  // 离开的标志\r\n  const afterLeaveFlag = ref(false);\r\n\r\n  const data = reactive({\r\n    // 选项\r\n    ...options,\r\n    // 定位\r\n    originalPosition: '',\r\n    // 显示/隐藏\r\n    originalOverflow: '',\r\n    // 是否隐藏\r\n    visible: false,\r\n  });\r\n\r\n  // 设置文字\r\n  function setText(text: string) {\r\n    data.text = text;\r\n  }\r\n\r\n  // 销毁\r\n  function destroySelf() {\r\n    // 父节点\r\n    const target = data.parent;\r\n\r\n    if (!target.LoadingAddClassList) {\r\n      let loadingNumber: number | string | null =\r\n        target.getAttribute('loading-number');\r\n      loadingNumber = Number.parseInt(loadingNumber as any) - 1;\r\n\r\n      // 删除当前loading\r\n      if (!loadingNumber) {\r\n        // 删除相对定位\r\n        removeClass(target, 'ivue-loading-parent--relative');\r\n\r\n        target.removeAttribute('loading-number');\r\n      }\r\n      // add loading-number to parent\r\n      else {\r\n        target.setAttribute('loading-number', loadingNumber.toString());\r\n      }\r\n\r\n      // 删除隐藏\r\n      removeClass(target, 'ivue-loading-parent--hidden');\r\n    }\r\n\r\n    // 删除节点\r\n    removeLoadingChild();\r\n\r\n    loadingInstance.unmount();\r\n  }\r\n\r\n  // 删除节点\r\n  function removeLoadingChild(): void {\r\n    vm.$el?.parentNode?.removeChild(vm.$el);\r\n  }\r\n\r\n  // 关闭\r\n  function close() {\r\n    // 自定义 beforeClose\r\n    if (options.beforeClose && !options.beforeClose()) {\r\n      return;\r\n    }\r\n\r\n    // 离开的标志\r\n    afterLeaveFlag.value = true;\r\n\r\n    // 延迟销毁关闭 400 ms\r\n    clearTimeout(afterLeaveTimer);\r\n\r\n    // 销毁元素\r\n    afterLeaveTimer = window.setTimeout(handleAfterLeave, 400);\r\n\r\n    // 关闭\r\n    data.visible = false;\r\n\r\n    // close\r\n    options.close?.();\r\n  }\r\n\r\n  // 离开方法\r\n  function handleAfterLeave() {\r\n    if (!afterLeaveFlag.value) {\r\n      return;\r\n    }\r\n\r\n    afterLeaveFlag.value = false;\r\n\r\n    // 清除class\r\n    const target = data.parent;\r\n    target.LoadingAddClassList = undefined;\r\n\r\n    // 销毁元素\r\n    destroySelf();\r\n  }\r\n\r\n  // 节点元素\r\n  const LoadingComponent = {\r\n    name: 'ivue-loading',\r\n    setup() {\r\n      return () => {\r\n        // 圆形\r\n        const spinner = h(\r\n          'svg',\r\n          {\r\n            class: 'circular',\r\n            viewBox: '25 25 50 50',\r\n          },\r\n          [\r\n            h('circle', {\r\n              class: 'path',\r\n              cx: '50',\r\n              cy: '50',\r\n              r: '20',\r\n              fill: 'none',\r\n            }),\r\n          ]\r\n        );\r\n\r\n        // 图标\r\n        const noSpinner = h('i', { class: data.iconClass }, data.iconText);\r\n\r\n        // 需要渲染的文字\r\n        const spinnerText = h('span', { class: 'ivue-loading-text' }, [\r\n          data.text,\r\n        ]);\r\n\r\n        // 渲染\r\n        return h(\r\n          Transition,\r\n          {\r\n            name: 'ivue-loading-fade',\r\n            onAfterLeave: handleAfterLeave,\r\n          },\r\n          {\r\n            default: withCtx(() => [\r\n              withDirectives(\r\n                createVNode(\r\n                  'div',\r\n                  {\r\n                    style: {\r\n                      backgroundColor: data.background || '',\r\n                    },\r\n                    class: [\r\n                      'ivue-loading-mask',\r\n                      data.customClass,\r\n                      data.fullscreen ? 'is-fullscreen' : '',\r\n                    ],\r\n                  },\r\n                  [\r\n                    h(\r\n                      'div',\r\n                      {\r\n                        class: 'ivue-loading-spinner',\r\n                      },\r\n                      h(\r\n                        'div',\r\n                        {\r\n                          class: 'ivue-loading-spinner--content',\r\n                        },\r\n                        [\r\n                          // 图标渲染函数\r\n                          data.loadingSpinner\r\n                            ? data.loadingSpinner()\r\n                            : !data.iconClass\r\n                            ? spinner\r\n                            : noSpinner,\r\n                          data.text ? spinnerText : null,\r\n                        ]\r\n                      )\r\n                    ),\r\n                  ]\r\n                ),\r\n                [[vShow, data.visible]]\r\n              ),\r\n            ]),\r\n          }\r\n        );\r\n      };\r\n    },\r\n  };\r\n\r\n  // 创建节点\r\n  const loadingInstance = createApp(LoadingComponent);\r\n  const vm = loadingInstance.mount(document.createElement('div'));\r\n\r\n  return {\r\n    ...toRefs(data),\r\n    setText,\r\n    close,\r\n    removeLoadingChild,\r\n    handleAfterLeave,\r\n    vm,\r\n    get $el(): HTMLElement {\r\n      return vm.$el;\r\n    },\r\n  };\r\n}\r\n\r\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>;\r\n"],"names":[],"mappings":"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"}