{"version":3,"file":"loading-bar.mjs","sources":["../../../../../src/components/ivue-loading-bar/loading-bar.ts"],"sourcesContent":["import { createVNode, render } from 'vue';\r\nimport LoadingBar from './index.vue';\r\n\r\ntype options = {\r\n  percent?: number;\r\n  status?: string;\r\n  color?: string;\r\n  failedColor?: string;\r\n  height?: number;\r\n  visible?: boolean;\r\n  duration?: number;\r\n};\r\n\r\n// 实例列表\r\nlet instances;\r\n\r\n// 进度条的颜色\r\nlet color = 'primary';\r\n// 失败时的进度条颜色\r\nlet failedColor = 'error';\r\n// 进度条高度\r\nlet height = 2;\r\n// 隐藏时的持续时间\r\nlet duration = 800;\r\nlet timer: ReturnType<typeof setInterval> | null;\r\n\r\nconst newInstance = (options: options) => {\r\n  // 实例对象\r\n  const vm = instances || createVNode(LoadingBar, options);\r\n\r\n  const container = document.createElement('div');\r\n\r\n  // 清除通知元素防止内存泄漏\r\n  vm.props.onDestroy = () => {\r\n    // 既然元素被销毁了，那么VNode也应该被GC回收\r\n    // 我们不想造成任何内存泄漏，因为我们已经返回 vm 作为对用户的引用\r\n    // 以便我们手动将其设置为 false。\r\n    render(null, container);\r\n  };\r\n\r\n  render(vm, container);\r\n\r\n  // 当 close 函数被调用时，实例将删除此项。 所以我们不需要担心。\r\n  instances = vm;\r\n\r\n  document.body.appendChild(container.firstElementChild);\r\n\r\n  return {\r\n    update(options: options) {\r\n      const data = vm.component.proxy.data;\r\n\r\n      if (options.percent !== undefined) {\r\n        data.percent = options.percent;\r\n      }\r\n\r\n      data.visible = options.visible;\r\n\r\n      if (options.status) {\r\n        data.status = options.status;\r\n      }\r\n    },\r\n    component: vm,\r\n    // 销毁\r\n    destroy() {\r\n      document.body.removeChild(\r\n        document.getElementsByClassName('ivue-loading-bar')[0]\r\n      );\r\n    },\r\n  };\r\n};\r\n\r\n// 获取组件实例\r\nconst getIvueLoadingBarInstance = () => {\r\n  instances =\r\n    instances ||\r\n    newInstance({\r\n      color: color,\r\n      failedColor: failedColor,\r\n      height: height,\r\n    });\r\n\r\n  return instances;\r\n};\r\n\r\n// 更新组件\r\nconst update = (options: options) => {\r\n  const instance = getIvueLoadingBarInstance();\r\n\r\n  instance.update(options);\r\n};\r\n\r\n// 清除定时器\r\nconst clearTimer = () => {\r\n  if (timer) {\r\n    clearInterval(timer);\r\n    timer = null;\r\n  }\r\n};\r\n\r\n// 隐藏组件\r\nconst hide = () => {\r\n  setTimeout(() => {\r\n    update({\r\n      visible: false,\r\n    });\r\n\r\n    setTimeout(() => {\r\n      update({\r\n        percent: 0,\r\n      });\r\n    }, 500);\r\n  }, duration);\r\n};\r\n\r\nexport default {\r\n  // 开始\r\n  start() {\r\n    // 如果已经开始了不执行\r\n    if (timer) {\r\n      return;\r\n    }\r\n\r\n    let percent = 0;\r\n\r\n    update({\r\n      percent: percent,\r\n      status: 'success',\r\n      visible: true,\r\n    });\r\n\r\n    // 设置进度\r\n    timer = setInterval(() => {\r\n      percent += Math.floor(Math.random() * 3 + 1);\r\n\r\n      // 进度大于95清除定时器\r\n      if (percent > 95) {\r\n        clearTimer();\r\n      }\r\n\r\n      update({\r\n        percent: percent,\r\n        status: 'success',\r\n        visible: true,\r\n      });\r\n    }, 200);\r\n  },\r\n  // 更新\r\n  update(percent: number) {\r\n    clearTimer();\r\n\r\n    update({\r\n      percent: percent,\r\n      status: 'success',\r\n      visible: true,\r\n    });\r\n  },\r\n  // 完成\r\n  finish() {\r\n    clearTimer();\r\n\r\n    update({\r\n      percent: 100,\r\n      status: 'success',\r\n      visible: true,\r\n    });\r\n\r\n    // 隐藏组件\r\n    hide();\r\n  },\r\n  // 错误\r\n  error() {\r\n    clearTimer();\r\n\r\n    update({\r\n      percent: 100,\r\n      status: 'error',\r\n      visible: true,\r\n    });\r\n\r\n    // 隐藏组件\r\n    hide();\r\n  },\r\n  // 公共参数\r\n  config(options: options) {\r\n    if (options.color) {\r\n      color = options.color;\r\n    }\r\n\r\n    if (options.failedColor) {\r\n      failedColor = options.failedColor;\r\n    }\r\n\r\n    if (options.height) {\r\n      height = options.height;\r\n    }\r\n\r\n    if (options.duration) {\r\n      duration = options.duration;\r\n    }\r\n  },\r\n  // 销毁\r\n  destroy() {\r\n    clearTimer();\r\n    const _instance = getIvueLoadingBarInstance();\r\n\r\n    instances = null;\r\n\r\n    _instance.destroy();\r\n  },\r\n};\r\n"],"names":["LoadingBar","options"],"mappings":";;;AAcA,IAAI,SAAA,CAAA;AAGJ,IAAI,KAAQ,GAAA,SAAA,CAAA;AAEZ,IAAI,WAAc,GAAA,OAAA,CAAA;AAElB,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,IAAI,QAAW,GAAA,GAAA,CAAA;AACf,IAAI,KAAA,CAAA;AAEJ,MAAM,WAAA,GAAc,CAAC,OAAqB,KAAA;AAExC,EAAA,MAAM,EAAK,GAAA,SAAA,IAAa,WAAY,CAAAA,YAAA,EAAY,OAAO,CAAA,CAAA;AAEvD,EAAM,MAAA,SAAA,GAAY,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAG9C,EAAG,EAAA,CAAA,KAAA,CAAM,YAAY,MAAM;AAIzB,IAAA,MAAA,CAAO,MAAM,SAAS,CAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,MAAA,CAAO,IAAI,SAAS,CAAA,CAAA;AAGpB,EAAY,SAAA,GAAA,EAAA,CAAA;AAEZ,EAAS,QAAA,CAAA,IAAA,CAAK,WAAY,CAAA,SAAA,CAAU,iBAAiB,CAAA,CAAA;AAErD,EAAO,OAAA;AAAA,IACL,OAAOC,QAAkB,EAAA;AACvB,MAAM,MAAA,IAAA,GAAO,EAAG,CAAA,SAAA,CAAU,KAAM,CAAA,IAAA,CAAA;AAEhC,MAAIA,IAAAA,QAAAA,CAAQ,YAAY,KAAW,CAAA,EAAA;AACjC,QAAA,IAAA,CAAK,UAAUA,QAAQ,CAAA,OAAA,CAAA;AAAA,OACzB;AAEA,MAAA,IAAA,CAAK,UAAUA,QAAQ,CAAA,OAAA,CAAA;AAEvB,MAAA,IAAIA,SAAQ,MAAQ,EAAA;AAClB,QAAA,IAAA,CAAK,SAASA,QAAQ,CAAA,MAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAAA,IACA,SAAW,EAAA,EAAA;AAAA,IAEX,OAAU,GAAA;AACR,MAAA,QAAA,CAAS,IAAK,CAAA,WAAA;AAAA,QACZ,QAAA,CAAS,sBAAuB,CAAA,kBAAkB,CAAE,CAAA,CAAA,CAAA;AAAA,OACtD,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA,CAAA;AAGA,MAAM,4BAA4B,MAAM;AACtC,EAAA,SAAA,GACE,aACA,WAAY,CAAA;AAAA,IACV,KAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,GACD,CAAA,CAAA;AAEH,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAGA,MAAM,MAAA,GAAS,CAAC,OAAqB,KAAA;AACnC,EAAA,MAAM,WAAW,yBAA0B,EAAA,CAAA;AAE3C,EAAA,QAAA,CAAS,OAAO,OAAO,CAAA,CAAA;AACzB,CAAA,CAAA;AAGA,MAAM,aAAa,MAAM;AACvB,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AACnB,IAAQ,KAAA,GAAA,IAAA,CAAA;AAAA,GACV;AACF,CAAA,CAAA;AAGA,MAAM,OAAO,MAAM;AACjB,EAAA,UAAA,CAAW,MAAM;AACf,IAAO,MAAA,CAAA;AAAA,MACL,OAAS,EAAA,KAAA;AAAA,KACV,CAAA,CAAA;AAED,IAAA,UAAA,CAAW,MAAM;AACf,MAAO,MAAA,CAAA;AAAA,QACL,OAAS,EAAA,CAAA;AAAA,OACV,CAAA,CAAA;AAAA,OACA,GAAG,CAAA,CAAA;AAAA,KACL,QAAQ,CAAA,CAAA;AACb,CAAA,CAAA;AAEA,iBAAe;AAAA,EAEb,KAAQ,GAAA;AAEN,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AAEd,IAAO,MAAA,CAAA;AAAA,MACL,OAAA;AAAA,MACA,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,IAAA;AAAA,KACV,CAAA,CAAA;AAGD,IAAA,KAAA,GAAQ,YAAY,MAAM;AACxB,MAAA,OAAA,IAAW,KAAK,KAAM,CAAA,IAAA,CAAK,MAAO,EAAA,GAAI,IAAI,CAAC,CAAA,CAAA;AAG3C,MAAA,IAAI,UAAU,EAAI,EAAA;AAChB,QAAW,UAAA,EAAA,CAAA;AAAA,OACb;AAEA,MAAO,MAAA,CAAA;AAAA,QACL,OAAA;AAAA,QACA,MAAQ,EAAA,SAAA;AAAA,QACR,OAAS,EAAA,IAAA;AAAA,OACV,CAAA,CAAA;AAAA,OACA,GAAG,CAAA,CAAA;AAAA,GACR;AAAA,EAEA,OAAO,OAAiB,EAAA;AACtB,IAAW,UAAA,EAAA,CAAA;AAEX,IAAO,MAAA,CAAA;AAAA,MACL,OAAA;AAAA,MACA,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,IAAA;AAAA,KACV,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,MAAS,GAAA;AACP,IAAW,UAAA,EAAA,CAAA;AAEX,IAAO,MAAA,CAAA;AAAA,MACL,OAAS,EAAA,GAAA;AAAA,MACT,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,IAAA;AAAA,KACV,CAAA,CAAA;AAGD,IAAK,IAAA,EAAA,CAAA;AAAA,GACP;AAAA,EAEA,KAAQ,GAAA;AACN,IAAW,UAAA,EAAA,CAAA;AAEX,IAAO,MAAA,CAAA;AAAA,MACL,OAAS,EAAA,GAAA;AAAA,MACT,MAAQ,EAAA,OAAA;AAAA,MACR,OAAS,EAAA,IAAA;AAAA,KACV,CAAA,CAAA;AAGD,IAAK,IAAA,EAAA,CAAA;AAAA,GACP;AAAA,EAEA,OAAO,OAAkB,EAAA;AACvB,IAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,MAAA,KAAA,GAAQ,OAAQ,CAAA,KAAA,CAAA;AAAA,KAClB;AAEA,IAAA,IAAI,QAAQ,WAAa,EAAA;AACvB,MAAA,WAAA,GAAc,OAAQ,CAAA,WAAA,CAAA;AAAA,KACxB;AAEA,IAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,MAAA,MAAA,GAAS,OAAQ,CAAA,MAAA,CAAA;AAAA,KACnB;AAEA,IAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,MAAA,QAAA,GAAW,OAAQ,CAAA,QAAA,CAAA;AAAA,KACrB;AAAA,GACF;AAAA,EAEA,OAAU,GAAA;AACR,IAAW,UAAA,EAAA,CAAA;AACX,IAAA,MAAM,YAAY,yBAA0B,EAAA,CAAA;AAE5C,IAAY,SAAA,GAAA,IAAA,CAAA;AAEZ,IAAA,SAAA,CAAU,OAAQ,EAAA,CAAA;AAAA,GACpB;AACF,CAAA;;;;"}