{"version":3,"file":"thumb.vue2.mjs","sources":["../../../../../../packages/components/scrollbar/src/thumb.vue"],"sourcesContent":["<script lang=\"ts\">\n  import { computed, defineComponent, ref } from 'vue'\n  import { getComponentNamespace, getNamespace } from '../../../utils/global-config'\n  import { on, off } from '../../../utils/dom'\n  import { thumbProps } from './thumb'\n  import type { ThumbMap } from './types'\n\n  export default defineComponent({\n    name: getComponentNamespace('Thumb'),\n    props: thumbProps,\n    emits: ['scroll'],\n    setup(props, { emit }) {\n      const track_ns = getNamespace('scrollbar-track')\n      const trackCls = computed(() => [track_ns, `${track_ns}__${props.direction}`])\n      const thumb_ns = getNamespace('scrollbar-thumb')\n      const thumbCls = computed(() => [\n        thumb_ns,\n        `${thumb_ns}__${props.direction}`,\n        isDragging.value && 'is-dragging'\n      ])\n\n      const trackRef = ref<HTMLElement>()\n      const thumbRef = ref<HTMLElement>()\n\n      const thumbMap = computed<ThumbMap>(() => {\n        if (props.direction === 'horizontal') {\n          return {\n            size: 'width',\n            direction: 'left',\n            offset: 'offsetWidth',\n            client: 'clientX'\n          }\n        }\n        return {\n          size: 'height',\n          direction: 'top',\n          offset: 'offsetHeight',\n          client: 'clientY'\n        }\n      })\n\n      const offset = ref(0)\n\n      const isDragging = ref(false)\n      const mouseOffset = ref(0)\n\n      const thumbStyle = computed(() => {\n        return {\n          [thumbMap.value.size]: `${props.data?.thumbSize ?? 0}px`,\n          [thumbMap.value.direction]: `${offset.value}px`\n        }\n      })\n\n      const handleThumbMouseDown = (ev: MouseEvent) => {\n        ev.preventDefault()\n        if (thumbRef.value) {\n          mouseOffset.value =\n            ev[thumbMap.value.client] -\n            thumbRef.value.getBoundingClientRect()[thumbMap.value.direction]\n          isDragging.value = true\n          on(window, 'mousemove', handleMouseMove)\n          on(window, 'mouseup', handleMouseUp)\n          on(window, 'contextmenu', handleMouseUp)\n        }\n      }\n\n      const handleTrackClick = (ev: MouseEvent) => {\n        ev.preventDefault()\n\n        if (thumbRef.value) {\n          const _offset = getLegalOffset(\n            ev[thumbMap.value.client] >\n              thumbRef.value.getBoundingClientRect()[thumbMap.value.direction]\n              ? offset.value + (props.data?.thumbSize ?? 0)\n              : offset.value - (props.data?.thumbSize ?? 0)\n          )\n          if (_offset !== offset.value) {\n            offset.value = _offset\n            emit('scroll', _offset)\n          }\n        }\n      }\n\n      const getLegalOffset = (offset: number) => {\n        if (offset < 0) {\n          return 0\n        }\n        if (props.data && offset > props.data.max) {\n          return props.data.max\n        }\n        return offset\n      }\n\n      const handleMouseMove = (ev: MouseEvent) => {\n        if (trackRef.value && thumbRef.value) {\n          const _offset = getLegalOffset(\n            ev[thumbMap.value.client] -\n              trackRef.value.getBoundingClientRect()[thumbMap.value.direction] -\n              mouseOffset.value\n          )\n          if (_offset !== offset.value) {\n            offset.value = _offset\n            emit('scroll', _offset)\n          }\n        }\n      }\n\n      const handleMouseUp = () => {\n        isDragging.value = false\n        off(window, 'mousemove', handleMouseMove)\n        off(window, 'mouseup', handleMouseUp)\n      }\n\n      const setOffset = (_offset: number) => {\n        if (!isDragging.value) {\n          _offset = getLegalOffset(_offset)\n          if (_offset !== offset.value) {\n            offset.value = _offset\n          }\n        }\n      }\n\n      return {\n        trackCls,\n        thumbCls,\n        thumb_ns,\n        trackRef,\n        thumbRef,\n        handleThumbMouseDown,\n        handleTrackClick,\n        thumbStyle,\n        setOffset\n      }\n    },\n    expose: ['setOffset']\n  })\n</script>\n\n<template>\n  <div ref=\"trackRef\" :class=\"trackCls\" @mousedown.self=\"handleTrackClick\">\n    <div ref=\"thumbRef\" :class=\"thumbCls\" :style=\"thumbStyle\" @mousedown=\"handleThumbMouseDown\">\n    </div>\n  </div>\n</template>\n"],"names":["offset"],"mappings":";;;;;AAOE,gBAAe,eAAgB,CAAA;AAAA,EAC7B,IAAA,EAAM,sBAAsB,OAAO,CAAA;AAAA,EACnC,KAAO,EAAA,UAAA;AAAA,EACP,KAAA,EAAO,CAAC,QAAQ,CAAA;AAAA,EAChB,KAAM,CAAA,KAAA,EAAO,EAAE,IAAA,EAAQ,EAAA;AACrB,IAAM,MAAA,QAAA,GAAW,aAAa,iBAAiB,CAAA,CAAA;AAC/C,IAAM,MAAA,QAAA,GAAW,SAAS,MAAM,CAAC,UAAU,CAAG,EAAA,QAAA,CAAA,EAAA,EAAa,KAAM,CAAA,SAAA,CAAA,CAAW,CAAC,CAAA,CAAA;AAC7E,IAAM,MAAA,QAAA,GAAW,aAAa,iBAAiB,CAAA,CAAA;AAC/C,IAAM,MAAA,QAAA,GAAW,SAAS,MAAM;AAAA,MAC9B,QAAA;AAAA,MACA,CAAA,EAAG,aAAa,KAAM,CAAA,SAAA,CAAA,CAAA;AAAA,MACtB,WAAW,KAAS,IAAA,aAAA;AAAA,KACrB,CAAA,CAAA;AAED,IAAA,MAAM,WAAW,GAAiB,EAAA,CAAA;AAClC,IAAA,MAAM,WAAW,GAAiB,EAAA,CAAA;AAElC,IAAM,MAAA,QAAA,GAAW,SAAmB,MAAM;AACxC,MAAI,IAAA,KAAA,CAAM,cAAc,YAAc,EAAA;AACpC,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,OAAA;AAAA,UACN,SAAW,EAAA,MAAA;AAAA,UACX,MAAQ,EAAA,aAAA;AAAA,UACR,MAAQ,EAAA,SAAA;AAAA,SACV,CAAA;AAAA,OACF;AACA,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,QAAA;AAAA,QACN,SAAW,EAAA,KAAA;AAAA,QACX,MAAQ,EAAA,cAAA;AAAA,QACR,MAAQ,EAAA,SAAA;AAAA,OACV,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAM,MAAA,MAAA,GAAS,IAAI,CAAC,CAAA,CAAA;AAEpB,IAAM,MAAA,UAAA,GAAa,IAAI,KAAK,CAAA,CAAA;AAC5B,IAAM,MAAA,WAAA,GAAc,IAAI,CAAC,CAAA,CAAA;AAEzB,IAAM,MAAA,UAAA,GAAa,SAAS,MAAM;;AAChC,MAAO,OAAA;AAAA,QACL,CAAC,QAAS,CAAA,KAAA,CAAM,IAAI,GAAG,IAAG,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,IAAA,KAAN,IAAY,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,KAAZ,IAAyB,GAAA,EAAA,GAAA,CAAA,CAAA,EAAA,CAAA;AAAA,QACnD,CAAC,QAAS,CAAA,KAAA,CAAM,SAAS,GAAG,GAAG,MAAO,CAAA,KAAA,CAAA,EAAA,CAAA;AAAA,OACxC,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAM,MAAA,oBAAA,GAAuB,CAAC,EAAmB,KAAA;AAC/C,MAAA,EAAA,CAAG,cAAe,EAAA,CAAA;AAClB,MAAA,IAAI,SAAS,KAAO,EAAA;AAClB,QAAA,WAAA,CAAY,KACV,GAAA,EAAA,CAAG,QAAS,CAAA,KAAA,CAAM,MAAM,CAAA,GACxB,QAAS,CAAA,KAAA,CAAM,qBAAsB,EAAA,CAAE,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA,CAAA;AACjE,QAAA,UAAA,CAAW,KAAQ,GAAA,IAAA,CAAA;AACnB,QAAG,EAAA,CAAA,MAAA,EAAQ,aAAa,eAAe,CAAA,CAAA;AACvC,QAAG,EAAA,CAAA,MAAA,EAAQ,WAAW,aAAa,CAAA,CAAA;AACnC,QAAG,EAAA,CAAA,MAAA,EAAQ,eAAe,aAAa,CAAA,CAAA;AAAA,OACzC;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,gBAAA,GAAmB,CAAC,EAAmB,KAAA;;AAC3C,MAAA,EAAA,CAAG,cAAe,EAAA,CAAA;AAElB,MAAA,IAAI,SAAS,KAAO,EAAA;AAClB,QAAA,MAAM,OAAU,GAAA,cAAA;AAAA,UACd,EAAA,CAAG,QAAS,CAAA,KAAA,CAAM,MAAM,CAAA,GACtB,QAAS,CAAA,KAAA,CAAM,qBAAsB,EAAA,CAAE,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA,GAC7D,MAAO,CAAA,KAAA,IAAA,CAAS,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,IAAA,KAAN,IAAY,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,KAAZ,IAAyB,GAAA,EAAA,GAAA,CAAA,CAAA,GACzC,MAAO,CAAA,KAAA,IAAA,CAAS,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,IAAA,KAAN,IAAY,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,KAAZ,IAAyB,GAAA,EAAA,GAAA,CAAA,CAAA;AAAA,SAC/C,CAAA;AACA,QAAI,IAAA,OAAA,KAAY,OAAO,KAAO,EAAA;AAC5B,UAAA,MAAA,CAAO,KAAQ,GAAA,OAAA,CAAA;AACf,UAAA,IAAA,CAAK,UAAU,OAAO,CAAA,CAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,cAAA,GAAiB,CAACA,OAAmB,KAAA;AACzC,MAAA,IAAIA,UAAS,CAAG,EAAA;AACd,QAAO,OAAA,CAAA,CAAA;AAAA,OACT;AACA,MAAA,IAAI,KAAM,CAAA,IAAA,IAAQA,OAAS,GAAA,KAAA,CAAM,KAAK,GAAK,EAAA;AACzC,QAAA,OAAO,MAAM,IAAK,CAAA,GAAA,CAAA;AAAA,OACpB;AACA,MAAOA,OAAAA,OAAAA,CAAAA;AAAA,KACT,CAAA;AAEA,IAAM,MAAA,eAAA,GAAkB,CAAC,EAAmB,KAAA;AAC1C,MAAI,IAAA,QAAA,CAAS,KAAS,IAAA,QAAA,CAAS,KAAO,EAAA;AACpC,QAAA,MAAM,OAAU,GAAA,cAAA;AAAA,UACd,EAAG,CAAA,QAAA,CAAS,KAAM,CAAA,MAAM,CACtB,GAAA,QAAA,CAAS,KAAM,CAAA,qBAAA,EAAwB,CAAA,QAAA,CAAS,KAAM,CAAA,SAAS,IAC/D,WAAY,CAAA,KAAA;AAAA,SAChB,CAAA;AACA,QAAI,IAAA,OAAA,KAAY,OAAO,KAAO,EAAA;AAC5B,UAAA,MAAA,CAAO,KAAQ,GAAA,OAAA,CAAA;AACf,UAAA,IAAA,CAAK,UAAU,OAAO,CAAA,CAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,UAAA,CAAW,KAAQ,GAAA,KAAA,CAAA;AACnB,MAAI,GAAA,CAAA,MAAA,EAAQ,aAAa,eAAe,CAAA,CAAA;AACxC,MAAI,GAAA,CAAA,MAAA,EAAQ,WAAW,aAAa,CAAA,CAAA;AAAA,KACtC,CAAA;AAEA,IAAM,MAAA,SAAA,GAAY,CAAC,OAAoB,KAAA;AACrC,MAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,QAAA,OAAA,GAAU,eAAe,OAAO,CAAA,CAAA;AAChC,QAAI,IAAA,OAAA,KAAY,OAAO,KAAO,EAAA;AAC5B,UAAA,MAAA,CAAO,KAAQ,GAAA,OAAA,CAAA;AAAA,SACjB;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAO,OAAA;AAAA,MACL,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,oBAAA;AAAA,MACA,gBAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EACA,MAAA,EAAQ,CAAC,WAAW,CAAA;AACtB,CAAC,CAAA;;;;"}