{"version":3,"file":"loading.mjs","sources":["../../../../../../packages/components/loading/src/loading.ts"],"sourcesContent":["import {\n  Transition,\n  createApp,\n  createVNode,\n  h,\n  reactive,\n  ref,\n  toRefs,\n  vShow,\n  withCtx,\n  withDirectives,\n} from 'vue'\nimport { useNamespace } from '@bigin/hooks'\nimport { removeClass } from '@bigin/utils'\n\nimport type { LoadingOptionsResolved } from './types'\n\nexport function createLoadingComponent(options: LoadingOptionsResolved) {\n  let afterLeaveTimer: number\n\n  const ns = useNamespace('loading')\n  const afterLeaveFlag = ref(false)\n  const data = reactive({\n    ...options,\n    originalPosition: '',\n    originalOverflow: '',\n    visible: false,\n  })\n\n  function setText(text: string) {\n    data.text = text\n  }\n\n  function destroySelf() {\n    const target = data.parent\n    if (!target.vLoadingAddClassList) {\n      let loadingNumber: number | string | null =\n        target.getAttribute('loading-number')\n      loadingNumber = Number.parseInt(loadingNumber as any) - 1\n      if (!loadingNumber) {\n        removeClass(target, ns.bm('parent', 'relative'))\n        target.removeAttribute('loading-number')\n      } else {\n        target.setAttribute('loading-number', loadingNumber.toString())\n      }\n      removeClass(target, ns.bm('parent', 'hidden'))\n    }\n    removeElLoadingChild()\n    loadingInstance.unmount()\n  }\n  function removeElLoadingChild(): void {\n    vm.$el?.parentNode?.removeChild(vm.$el)\n  }\n  function close() {\n    if (options.beforeClose && !options.beforeClose()) return\n\n    afterLeaveFlag.value = true\n    clearTimeout(afterLeaveTimer)\n\n    afterLeaveTimer = window.setTimeout(handleAfterLeave, 400)\n    data.visible = false\n\n    options.closed?.()\n  }\n\n  function handleAfterLeave() {\n    if (!afterLeaveFlag.value) return\n    const target = data.parent\n    afterLeaveFlag.value = false\n    target.vLoadingAddClassList = undefined\n    destroySelf()\n  }\n\n  const elLoadingComponent = {\n    name: 'BLoading',\n    setup() {\n      return () => {\n        const svg = data.spinner || data.svg\n        const spinner = h(\n          'svg',\n          {\n            class: 'circular',\n            viewBox: data.svgViewBox ? data.svgViewBox : '0 0 50 50',\n            ...(svg ? { innerHTML: svg } : {}),\n          },\n          [\n            h('circle', {\n              class: 'path',\n              cx: '25',\n              cy: '25',\n              r: '20',\n              fill: 'none',\n            }),\n          ]\n        )\n\n        const spinnerText = data.text\n          ? h('p', { class: ns.b('text') }, [data.text])\n          : undefined\n\n        return h(\n          Transition,\n          {\n            name: ns.b('fade'),\n            onAfterLeave: handleAfterLeave,\n          },\n          {\n            default: withCtx(() => [\n              withDirectives(\n                createVNode(\n                  'div',\n                  {\n                    style: {\n                      backgroundColor: data.background || '',\n                    },\n                    class: [\n                      ns.b('mask'),\n                      data.customClass,\n                      data.fullscreen ? 'is-fullscreen' : '',\n                    ],\n                  },\n                  [\n                    h(\n                      'div',\n                      {\n                        class: ns.b('spinner'),\n                      },\n                      [spinner, spinnerText]\n                    ),\n                  ]\n                ),\n                [[vShow, data.visible]]\n              ),\n            ]),\n          }\n        )\n      }\n    },\n  }\n\n  const loadingInstance = createApp(elLoadingComponent)\n  const vm = loadingInstance.mount(document.createElement('div'))\n\n  return {\n    ...toRefs(data),\n    setText,\n    removeElLoadingChild,\n    close,\n    handleAfterLeave,\n    vm,\n    get $el(): HTMLElement {\n      return vm.$el\n    },\n  }\n}\n\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>\n"],"names":[],"mappings":"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"}