{"version":3,"file":"useTagScroll.mjs","sources":["../../../../components/tag-input/hooks/useTagScroll.ts"],"sourcesContent":["/**\n * 当标签数量过多时，输入框显示不下，则需要滚动查看，以下为滚动逻辑\n * 如果标签过多时的处理方式，是标签省略，则不需要此功能\n */\n\nimport { isFunction } from 'lodash-es';\nimport { onMounted, onUnmounted, ref, toRefs } from 'vue';\nimport { TdTagInputProps } from '../type';\n\nexport function useTagScroll(props: TdTagInputProps) {\n  const tagInputRef = ref();\n  const { excessTagsDisplayType, readonly, disabled } = toRefs(props);\n  // 允许向右滚动的最大距离\n  const scrollDistance = ref(0);\n  const scrollElement = ref<HTMLElement>();\n  const mouseEnterTimer = ref();\n  const isScrollable = ref(false); // 设置可滚动\n\n  const updateScrollElement = (element: HTMLElement) => {\n    const inputElement = element.children[0] as HTMLElement;\n    scrollElement.value = inputElement;\n  };\n\n  const updateScrollDistance = () => {\n    scrollDistance.value = scrollElement.value.scrollWidth - scrollElement.value.clientWidth;\n  };\n\n  const scrollTo = (distance: number) => {\n    if (!isFunction(scrollElement.value?.scroll)) return;\n    scrollElement.value.scroll({ left: distance, behavior: 'smooth' });\n  };\n\n  const scrollToRight = () => {\n    updateScrollDistance();\n    scrollTo(scrollDistance.value);\n    setTimeout(() => {\n      isScrollable.value = true;\n    }, 200);\n  };\n\n  const scrollToLeft = () => {\n    scrollTo(0);\n  };\n\n  // TODO：MAC 电脑横向滚动，Windows 纵向滚动。当前只处理了横向滚动\n  const onWheel = ({ e }: { e: WheelEvent }) => {\n    if (readonly.value || disabled.value) return;\n    if (!scrollElement.value) return;\n    if (e.deltaX > 0) {\n      const distance = Math.min(scrollElement.value.scrollLeft + 120, scrollDistance.value);\n      scrollTo(distance);\n    } else {\n      const distance = Math.max(scrollElement.value.scrollLeft - 120, 0);\n      scrollTo(distance);\n    }\n  };\n\n  // 鼠标 hover，自动滑动到最右侧，以便输入新标签\n  const scrollToRightOnEnter = () => {\n    if (excessTagsDisplayType.value !== 'scroll') return;\n    // 一闪而过的 mousenter 不需要执行\n    mouseEnterTimer.value = setTimeout(() => {\n      scrollToRight();\n      clearTimeout(mouseEnterTimer.value);\n    }, 100);\n  };\n\n  const scrollToLeftOnLeave = () => {\n    if (excessTagsDisplayType.value !== 'scroll') return;\n    isScrollable.value = false; // 离开焦点不可滚动\n    scrollTo(0);\n    clearTimeout(mouseEnterTimer.value);\n  };\n\n  const init = () => {\n    const element = tagInputRef.value?.$el;\n    if (!element) return;\n    updateScrollElement(element);\n  };\n\n  const clear = () => {\n    clearTimeout(mouseEnterTimer.value);\n  };\n\n  onMounted(init);\n\n  onUnmounted(clear);\n\n  return {\n    tagInputRef,\n    scrollElement,\n    scrollDistance,\n    scrollTo,\n    scrollToRight,\n    scrollToLeft,\n    updateScrollElement,\n    updateScrollDistance,\n    onWheel,\n    scrollToRightOnEnter,\n    scrollToLeftOnLeave,\n    isScrollable,\n  };\n}\n"],"names":["useTagScroll","props","tagInputRef","ref","_toRefs","toRefs","excessTagsDisplayType","readonly","disabled","scrollDistance","scrollElement","mouseEnterTimer","isScrollable","updateScrollElement","element","inputElement","children","value","updateScrollDistance","scrollWidth","clientWidth","scrollTo","distance","_scrollElement$value","isFunction","scroll","left","behavior","scrollToRight","setTimeout","scrollToLeft","onWheel","_ref","e","deltaX","Math","min","scrollLeft","max","scrollToRightOnEnter","clearTimeout","scrollToLeftOnLeave","init","_tagInputRef$value","$el","clear","onMounted","onUnmounted"],"mappings":";;;;;;;;;AASO,SAASA,aAAaC,KAAwB,EAAA;AACnD,EAAA,IAAMC,cAAcC,GAAI,EAAA,CAAA;AACxB,EAAA,IAAAC,OAAA,GAAsDC,OAAOJ,KAAK,CAAA;IAA1DK,qBAAuB,GAAAF,OAAA,CAAvBE,qBAAuB;IAAAC,QAAA,GAAAH,OAAA,CAAAG,QAAA;IAAUC,QAAS,GAAAJ,OAAA,CAATI,QAAS,CAAA;AAE5C,EAAA,IAAAC,cAAA,GAAiBN,IAAI,CAAC,CAAA,CAAA;AAC5B,EAAA,IAAMO,gBAAgBP,GAAiB,EAAA,CAAA;AACvC,EAAA,IAAMQ,kBAAkBR,GAAI,EAAA,CAAA;AACtB,EAAA,IAAAS,YAAA,GAAeT,IAAI,KAAK,CAAA,CAAA;AAExB,EAAA,IAAAU,mBAAA,GAAsB,SAAtBA,mBAAAA,CAAuBC,OAAyB,EAAA;AAC9C,IAAA,IAAAC,YAAA,GAAeD,QAAQE,QAAS,CAAA,CAAA,CAAA,CAAA;IACtCN,aAAA,CAAcO,KAAQ,GAAAF,YAAA,CAAA;GACxB,CAAA;AAEA,EAAA,IAAMG,uBAAuB,SAAvBA,uBAA6B;AACjCT,IAAAA,cAAA,CAAeQ,KAAQ,GAAAP,aAAA,CAAcO,KAAM,CAAAE,WAAA,GAAcT,cAAcO,KAAM,CAAAG,WAAA,CAAA;GAC/E,CAAA;AAEM,EAAA,IAAAC,QAAA,GAAW,SAAXA,QAAAA,CAAYC,QAAqB,EAAA;AAAA,IAAA,IAAAC,oBAAA,CAAA;AACrC,IAAA,IAAI,CAACC,UAAA,CAAAD,CAAAA,oBAAA,GAAWb,aAAc,CAAAO,KAAA,MAAA,IAAA,IAAAM,oBAAA,KAAdA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAqBE,MAAM,CAAA,EAAG,OAAA;AAC9Cf,IAAAA,aAAA,CAAcO,MAAMQ,MAAO,CAAA;AAAEC,MAAAA,MAAMJ,QAAU;AAAAK,MAAAA,QAAA,EAAU,QAAA;AAAS,KAAC,CAAA,CAAA;GACnE,CAAA;AAEA,EAAA,IAAMC,gBAAgB,SAAhBA,gBAAsB;AACLV,IAAAA,oBAAA,EAAA,CAAA;AACrBG,IAAAA,QAAA,CAASZ,eAAeQ,KAAK,CAAA,CAAA;AAC7BY,IAAAA,UAAA,CAAW,YAAM;MACfjB,YAAA,CAAaK,KAAQ,GAAA,IAAA,CAAA;OACpB,GAAG,CAAA,CAAA;GACR,CAAA;AAEA,EAAA,IAAMa,eAAe,SAAfA,eAAqB;IACzBT,QAAA,CAAS,CAAC,CAAA,CAAA;GACZ,CAAA;AAGA,EAAA,IAAMU,OAAU,GAAA,SAAVA,OAAUA,CAAAC,IAAA,EAA8B;AAAA,IAAA,IAA3BC,CAAA,GAAAD,IAAA,CAAAC,CAAA,CAAA;AACb,IAAA,IAAA1B,QAAA,CAASU,SAAST,QAAS,CAAAS,KAAA,EAAO,OAAA;AACtC,IAAA,IAAI,CAACP,aAAc,CAAAO,KAAA,EAAO,OAAA;AACtB,IAAA,IAAAgB,CAAA,CAAEC,SAAS,CAAG,EAAA;AACV,MAAA,IAAAZ,QAAA,GAAWa,KAAKC,GAAI,CAAA1B,aAAA,CAAcO,MAAMoB,UAAa,GAAA,GAAA,EAAK5B,eAAeQ,KAAK,CAAA,CAAA;MACpFI,QAAA,CAASC,QAAQ,CAAA,CAAA;AACnB,KAAO,MAAA;AACL,MAAA,IAAMA,YAAWa,IAAK,CAAAG,GAAA,CAAI5B,cAAcO,KAAM,CAAAoB,UAAA,GAAa,KAAK,CAAC,CAAA,CAAA;MACjEhB,QAAA,CAASC,SAAQ,CAAA,CAAA;AACnB,KAAA;GACF,CAAA;AAGA,EAAA,IAAMiB,uBAAuB,SAAvBA,uBAA6B;AACjC,IAAA,IAAIjC,sBAAsBW,KAAU,KAAA,QAAA,EAAU,OAAA;AAE9BN,IAAAA,eAAA,CAAAM,KAAA,GAAQY,WAAW,YAAM;AACzBD,MAAAA,aAAA,EAAA,CAAA;AACdY,MAAAA,YAAA,CAAa7B,gBAAgBM,KAAK,CAAA,CAAA;OACjC,GAAG,CAAA,CAAA;GACR,CAAA;AAEA,EAAA,IAAMwB,sBAAsB,SAAtBA,sBAA4B;AAChC,IAAA,IAAInC,sBAAsBW,KAAU,KAAA,QAAA,EAAU,OAAA;IAC9CL,YAAA,CAAaK,KAAQ,GAAA,KAAA,CAAA;IACrBI,QAAA,CAAS,CAAC,CAAA,CAAA;AACVmB,IAAAA,YAAA,CAAa7B,gBAAgBM,KAAK,CAAA,CAAA;GACpC,CAAA;AAEA,EAAA,IAAMyB,OAAO,SAAPA,OAAa;AAAA,IAAA,IAAAC,kBAAA,CAAA;AACX,IAAA,IAAA7B,OAAA,GAAA,CAAA6B,kBAAA,GAAUzC,YAAYe,KAAO,MAAA,IAAA,IAAA0B,kBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAnBA,kBAAA,CAAmBC,GAAA,CAAA;IACnC,IAAI,CAAC9B,OAAA,EAAS,OAAA;IACdD,mBAAA,CAAoBC,OAAO,CAAA,CAAA;GAC7B,CAAA;AAEA,EAAA,IAAM+B,QAAQ,SAARA,QAAc;AAClBL,IAAAA,YAAA,CAAa7B,gBAAgBM,KAAK,CAAA,CAAA;GACpC,CAAA;EAEA6B,SAAA,CAAUJ,IAAI,CAAA,CAAA;EAEdK,WAAA,CAAYF,KAAK,CAAA,CAAA;EAEV,OAAA;AACL3C,IAAAA,WAAA,EAAAA,WAAA;AACAQ,IAAAA,aAAA,EAAAA,aAAA;AACAD,IAAAA,cAAA,EAAAA,cAAA;AACAY,IAAAA,QAAA,EAAAA,QAAA;AACAO,IAAAA,aAAA,EAAAA,aAAA;AACAE,IAAAA,YAAA,EAAAA,YAAA;AACAjB,IAAAA,mBAAA,EAAAA,mBAAA;AACAK,IAAAA,oBAAA,EAAAA,oBAAA;AACAa,IAAAA,OAAA,EAAAA,OAAA;AACAQ,IAAAA,oBAAA,EAAAA,oBAAA;AACAE,IAAAA,mBAAA,EAAAA,mBAAA;AACA7B,IAAAA,YAAA,EAAAA,YAAAA;GACF,CAAA;AACF;;;;"}