<div class="lazy-image" style={computedStyle} >
  {#if displaySrc}
    <img
      class={className}
      aria-hidden={ariaHidden}
      {alt}
      {title}
      {width}
      {height}
      src={displaySrc}
    />
  {/if}
</div>
<style>
  .lazy-image {
    overflow: hidden;
  }
</style>
<script>
  import { mark, stop } from '../_utils/marks'
  import { decodeImage } from '../_utils/decodeImage'

  export default {
    async oncreate () {
      mark('LazyImage oncreate()')
      let { src, fallback } = this.get()
      try {
        await decodeImage(src)
        this.set({ displaySrc: src })
      } catch (e) {
        if (fallback) {
          this.set({ displaySrc: fallback })
        }
      }
      stop('LazyImage oncreate()')
    },
    data: () => ({
      displaySrc: void 0,
      hidden: false,
      fallback: void 0,
      background: '',
      width: void 0,
      height: void 0,
      className: '',
      ariaHidden: '',
      alt: '',
      title: ''
    }),
    computed: {
      computedStyle: ({ width, height, background }) => {
        return [
          width && `width: ${width}px;`,
          height && `height: ${height}px;`,
          background && `background: ${background};`
        ].filter(Boolean).join('')
      }
    }
  }
</script>