{"version":3,"file":"backtop2.mjs","sources":["../../../../../../packages/components/backtop/src/backtop.vue"],"sourcesContent":["<template>\n  <transition :name=\"`${ns.namespace.value}-fade-in`\">\n    <div\n      v-if=\"visible\"\n      :style=\"backTopStyle\"\n      :class=\"[ns.b(), ns.is('custom', Boolean($slots.default))]\"\n      data-test-name=\"backtop\"\n      :data-test-variant=\"[Boolean($slots.default) && 'custom'].join('-')\"\n      data-test-state=\"\"\n      @click.stop=\"handleClick\"\n    >\n      <slot>\n        <b-icon :class=\"ns.e('icon')\"><ChevronUp /></b-icon>\n      </slot>\n    </div>\n  </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, ref, shallowRef } from 'vue'\nimport { useEventListener, useThrottleFn } from '@vueuse/core'\nimport { BIcon } from '@bigin/components/icon'\nimport { easeInOutCubic, throwError } from '@bigin/utils'\nimport { ChevronUp } from '@bigin/icons-vue'\nimport { useNamespace } from '@bigin/hooks'\nimport { backtopEmits, backtopProps } from './backtop'\n\nconst COMPONENT_NAME = 'BBacktop'\n\ndefineOptions({\n  name: COMPONENT_NAME,\n})\n\nconst props = defineProps(backtopProps)\nconst emit = defineEmits(backtopEmits)\n\nconst ns = useNamespace('backtop')\nconst el = shallowRef<HTMLElement>()\nconst container = shallowRef<Document | HTMLElement>()\nconst visible = ref(false)\n\nconst backTopStyle = computed(() => ({\n  right: `${props.right}px`,\n  bottom: `${props.bottom}px`,\n}))\n\nconst scrollToTop = () => {\n  // TODO: use https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo, with behavior: 'smooth'\n\n  if (!el.value) return\n  const beginTime = Date.now()\n  const beginValue = el.value.scrollTop\n  const frameFunc = () => {\n    if (!el.value) return\n    const progress = (Date.now() - beginTime) / 500\n    if (progress < 1) {\n      el.value.scrollTop = beginValue * (1 - easeInOutCubic(progress))\n      requestAnimationFrame(frameFunc)\n    } else {\n      el.value.scrollTop = 0\n    }\n  }\n  requestAnimationFrame(frameFunc)\n}\nconst handleScroll = () => {\n  if (el.value) visible.value = el.value.scrollTop >= props.visibilityHeight\n}\nconst handleClick = (event: MouseEvent) => {\n  scrollToTop()\n  emit('click', event)\n}\n\nconst handleScrollThrottled = useThrottleFn(handleScroll, 300)\n\nuseEventListener(container, 'scroll', handleScrollThrottled)\nonMounted(() => {\n  container.value = document\n  el.value = document.documentElement\n\n  if (props.target) {\n    el.value = document.querySelector<HTMLElement>(props.target) ?? undefined\n    if (!el.value) {\n      throwError(COMPONENT_NAME, `target is not existed: ${props.target}`)\n    }\n    container.value = el.value\n  }\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;mCA6Bc,CAAA;AAAA,EACZ,IAAM,EAAA,cAAA;AACR;;;;;;;AAKM,IAAA,MAAA,EAAA,GAAK,aAAa,SAAS,CAAA,CAAA;AACjC,IAAA,MAAM,KAAK,UAAwB,EAAA,CAAA;AACnC,IAAA,MAAM,YAAY,UAAmC,EAAA,CAAA;AAC/C,IAAA,MAAA,OAAA,GAAU,IAAI,KAAK,CAAA,CAAA;AAEnB,IAAA,MAAA,YAAA,GAAe,SAAS,OAAO;AAAA,MACnC,KAAA,EAAO,GAAG,KAAM,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,MAChB,MAAA,EAAQ,GAAG,KAAM,CAAA,MAAA,CAAA,EAAA,CAAA;AAAA,KACjB,CAAA,CAAA,CAAA;AAEF,IAAA,MAAM,cAAc,MAAM;AAGxB,MAAA,IAAI,CAAC,EAAG,CAAA,KAAA;AAAO,QAAA,OAAA;AACT,MAAA,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA,CAAA;AACrB,MAAA,MAAA,UAAA,GAAa,GAAG,KAAM,CAAA,SAAA,CAAA;AAC5B,MAAA,MAAM,YAAY,MAAM;AACtB,QAAA,IAAI,CAAC,EAAG,CAAA,KAAA;AAAO,UAAA,OAAA;AACf,QAAA,MAAM,QAAY,GAAA,CAAA,IAAA,CAAK,GAAI,EAAA,GAAI,SAAa,IAAA,GAAA,CAAA;AAC5C,QAAA,IAAI,WAAW,CAAG,EAAA;AAChB,UAAA,EAAA,CAAG,KAAM,CAAA,SAAA,GAAY,UAAc,IAAA,CAAA,GAAI,eAAe,QAAQ,CAAA,CAAA,CAAA;AAC9D,UAAA,qBAAA,CAAsB,SAAS,CAAA,CAAA;AAAA,SAC1B,MAAA;AACL,UAAA,EAAA,CAAG,MAAM,SAAY,GAAA,CAAA,CAAA;AAAA,SACvB;AAAA,OACF,CAAA;AACA,MAAA,qBAAA,CAAsB,SAAS,CAAA,CAAA;AAAA,KACjC,CAAA;AACA,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,EAAG,CAAA,KAAA;AAAO,QAAA,OAAA,CAAQ,KAAQ,GAAA,EAAA,CAAG,KAAM,CAAA,SAAA,IAAa,KAAM,CAAA,gBAAA,CAAA;AAAA,KAC5D,CAAA;AACM,IAAA,MAAA,WAAA,GAAc,CAAC,KAAsB,KAAA;AAC7B,MAAA,WAAA,EAAA,CAAA;AACZ,MAAA,IAAA,CAAK,SAAS,KAAK,CAAA,CAAA;AAAA,KACrB,CAAA;AAEM,IAAA,MAAA,qBAAA,GAAwB,aAAc,CAAA,YAAA,EAAc,GAAG,CAAA,CAAA;AAE5C,IAAA,gBAAA,CAAA,SAAA,EAAW,UAAU,qBAAqB,CAAA,CAAA;AAC3D,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,SAAA,CAAU,KAAQ,GAAA,QAAA,CAAA;AAClB,MAAA,EAAA,CAAG,QAAQ,QAAS,CAAA,eAAA,CAAA;AAEpB,MAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,QAAA,EAAA,CAAG,KAAQ,GAAA,QAAA,CAAS,aAA2B,CAAA,KAAA,CAAM,MAAM,CAAK,IAAA,KAAA,CAAA,CAAA;AAC5D,QAAA,IAAA,CAAC,GAAG,KAAO,EAAA;AACF,UAAA,UAAA,CAAA,cAAA,EAAgB,CAA0B,uBAAA,EAAA,KAAA,CAAM,MAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,SACrE;AACA,QAAA,SAAA,CAAU,QAAQ,EAAG,CAAA,KAAA,CAAA;AAAA,OACvB;AAAA,KACD,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}