{"version":3,"file":"index.mjs","sources":["../../../../src/components/Img/index.ts"],"sourcesContent":["import { defineComponent, h, onMounted, ref, toRefs, watch } from 'vue';\nimport RobustSpinner from '../Spinner/index.vue';\nimport { PhWarning } from '@phosphor-icons/vue';\nexport default defineComponent({\n  name: 'RobustImg',\n\n  props: {\n    src: {\n      type: String,\n      required: true,\n    },\n    fallbackSrc: {\n      type: String,\n      default: undefined,\n    },\n  },\n\n  emits: ['loaded', 'error'],\n\n  setup(props, { emit }) {\n    const loading = ref(true);\n    const error = ref(false);\n\n    const { src } = toRefs(props);\n\n    const image = new Image();\n\n    image.onload = () => {\n      emit('loaded', true);\n      loading.value = false;\n    };\n\n    image.onerror = (e) => {\n      emit('error', e);\n      error.value = true;\n      loading.value = false;\n    };\n\n    onMounted(() => {\n      image.src = src.value;\n    });\n\n    watch(src, () => {\n      image.src = src.value;\n    });\n\n    return {\n      error,\n      loading,\n    };\n  },\n\n  render() {\n    if (this.loading) {\n      return h(\n        'div',\n        {\n          class: 'flex items-center justify-center',\n        },\n        h(RobustSpinner, {\n          size: 24,\n          stroke: 2,\n        })\n      );\n    } else if (this.error) {\n      if (this.fallbackSrc) {\n        return h('img', {\n          src: this.fallbackSrc,\n        });\n      } else {\n        return h(PhWarning, {\n          size: 20,\n        });\n      }\n    } else {\n      return h('img', {\n        src: this.src,\n      });\n    }\n  },\n});\n"],"names":["index","defineComponent","props","emit","loading","ref","error","src","toRefs","image","e","onMounted","watch","h","RobustSpinner","PhWarning"],"mappings":";;;AAGA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EAEN,OAAO;AAAA,IACL,KAAK;AAAA,MACH,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,OAAO,CAAC,UAAU,OAAO;AAAA,EAEzB,MAAMC,GAAO,EAAE,MAAAC,KAAQ;AACf,UAAAC,IAAUC,EAAI,EAAI,GAClBC,IAAQD,EAAI,EAAK,GAEjB,EAAE,KAAAE,EAAA,IAAQC,EAAON,CAAK,GAEtBO,IAAQ,IAAI;AAElB,WAAAA,EAAM,SAAS,MAAM;AACnB,MAAAN,EAAK,UAAU,EAAI,GACnBC,EAAQ,QAAQ;AAAA,IAAA,GAGZK,EAAA,UAAU,CAACC,MAAM;AACrB,MAAAP,EAAK,SAASO,CAAC,GACfJ,EAAM,QAAQ,IACdF,EAAQ,QAAQ;AAAA,IAAA,GAGlBO,EAAU,MAAM;AACd,MAAAF,EAAM,MAAMF,EAAI;AAAA,IAAA,CACjB,GAEDK,EAAML,GAAK,MAAM;AACf,MAAAE,EAAM,MAAMF,EAAI;AAAA,IAAA,CACjB,GAEM;AAAA,MACL,OAAAD;AAAA,MACA,SAAAF;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,SAAS;AACP,WAAI,KAAK,UACAS;AAAA,MACL;AAAA,MACA;AAAA,QACE,OAAO;AAAA,MACT;AAAA,MACAA,EAAEC,GAAe;AAAA,QACf,MAAM;AAAA,QACN,QAAQ;AAAA,MAAA,CACT;AAAA,IAAA,IAEM,KAAK,QACV,KAAK,cACAD,EAAE,OAAO;AAAA,MACd,KAAK,KAAK;AAAA,IAAA,CACX,IAEMA,EAAEE,GAAW;AAAA,MAClB,MAAM;AAAA,IAAA,CACP,IAGIF,EAAE,OAAO;AAAA,MACd,KAAK,KAAK;AAAA,IAAA,CACX;AAAA,EAEL;AACF,CAAC;"}