{"version":3,"file":"wheel2.mjs","sources":["../../../../../../packages/components/wheel/src/wheel.vue"],"sourcesContent":["<template>\n  <div :class=\"ns.b()\">\n    <lt-icon v-if=\"isShowArrow\" :class=\"[ns.m(props.type)]\" @click=\"scrollUp\">\n      <ArrowUp />\n    </lt-icon>\n    <div\n      :class=\"[`state-${props.type}`, ns.e('content')]\"\n      @wheel.prevent=\"onScroll\"\n      @mousedown=\"startDrag\"\n      @mouseup=\"stopDrag\"\n      @mouseleave=\"stopDrag\"\n    >\n      <div\n        :class=\"[ns.e('scroll-content')]\"\n        :style=\"{ transform: `translateY(${scrollPosition}px)` }\"\n      >\n        <div\n          v-for=\"(item, index) in displayedOptions\"\n          :key=\"item.value\"\n          :class=\"[\n            ns.e('scroll-item'),\n            ns.e('hover-color'),\n            { active: item.value === modelValue, disabled: item.disabled },\n          ]\"\n          @mouseover=\"hoveredItem = item\"\n          @mouseleave=\"hoveredItem = null\"\n          @click=\"selectOption(index, item)\"\n        >\n          {{ item.label || '-' }}\n        </div>\n      </div>\n    </div>\n    <lt-icon v-if=\"isShowArrow\" :class=\"[ns.m(props.type)]\" @click=\"scrollDown\">\n      <ArrowDown />\n    </lt-icon>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, ref, toRef, watch } from 'vue'\nimport { LtIcon } from '@lit-element/components/icon'\nimport { useNamespace } from '@lit-element/hooks'\nimport { ArrowDown, ArrowUp } from '@inte-cloud/icons-vue'\nimport { wheelProps } from './wheel'\n\ndefineOptions({\n  name: 'LtWheel',\n})\nconst ns = useNamespace('wheel')\nconst props = defineProps(wheelProps)\nconst currentValue = ref(props.modelValue)\nconst scrollPosition = ref(0)\nconst hoveredItem = ref<any>(null) // 当前悬停的项目\n\nconst emit = defineEmits<{\n  (e: 'update:modelValue', value: string): void\n  (e: 'handleChange', value: object): void\n}>()\n\nconst updateCurrentValue = (index: number) => {\n  const newValue = displayedOptions.value[index].value\n  currentValue.value = newValue\n  scrollPosition.value =\n    -index * props.itemHeight +\n    Math.floor(props.visibleItems / 2) * props.itemHeight\n  emit('update:modelValue', newValue || '') // 确保传递的值不为 undefined\n}\n\n// 初始化位置\nconst initializeScrollPosition = () => {\n  const initialIndex = displayedOptions.value.findIndex(\n    (item) => item.value === currentValue.value\n  )\n  if (initialIndex !== -1) {\n    scrollPosition.value =\n      -initialIndex * props.itemHeight +\n      Math.floor(props.visibleItems / 2) * props.itemHeight\n  } else {\n    // 如果没有找到匹配的值，默认选中空值\n    const emptyIndex = displayedOptions.value.findIndex(\n      (item) => item.value === props.insertEmpty\n    )\n    if (emptyIndex !== -1) {\n      updateCurrentValue(emptyIndex)\n    }\n  }\n}\n\nconst onScroll = (event: WheelEvent) => {\n  const direction = event.deltaY < 0 ? -1 : 1\n  const currentIndex = displayedOptions.value.findIndex(\n    (item) => item.value === currentValue.value\n  )\n  let newIndex = currentIndex + direction\n  // 跳过禁用的选项\n  while (newIndex >= 0 && newIndex < displayedOptions.value.length) {\n    if (!displayedOptions.value[newIndex].disabled) {\n      updateCurrentValue(newIndex)\n      break\n    }\n    newIndex += direction\n  }\n}\n\nlet isDragging = false\nlet startY = 0\n\nconst startDrag = (event: MouseEvent) => {\n  isDragging = true\n  startY = event.clientY\n}\n\nconst stopDrag = () => {\n  isDragging = false\n}\n\nconst onMouseMove = (event: MouseEvent) => {\n  if (!isDragging) return\n\n  const deltaY = Math.floor((startY - event.clientY) / props.itemHeight)\n\n  if (deltaY !== 0) {\n    const currentIndex = displayedOptions.value.findIndex(\n      (item) => item.value === currentValue.value\n    )\n    let newIndex = currentIndex + deltaY\n\n    while (newIndex >= 0 && newIndex < displayedOptions.value.length) {\n      if (!displayedOptions.value[newIndex].disabled) {\n        updateCurrentValue(newIndex)\n        startY = event.clientY // 更新起始位置以继续拖动\n        break\n      }\n      newIndex += deltaY\n    }\n  }\n}\n\nconst scrollUp = () => {\n  const currentIndex = displayedOptions.value.findIndex(\n    (item) => item.value === currentValue.value\n  )\n  let newIndex = Math.max(0, currentIndex - 1)\n\n  while (newIndex >= 0) {\n    if (!displayedOptions.value[newIndex].disabled) {\n      updateCurrentValue(newIndex)\n      break\n    }\n    newIndex--\n  }\n}\n\nconst scrollDown = () => {\n  const currentIndex = displayedOptions.value.findIndex(\n    (item) => item.value === currentValue.value\n  )\n  let newIndex = Math.min(displayedOptions.value.length - 1, currentIndex + 1)\n\n  while (newIndex < displayedOptions.value.length) {\n    if (!displayedOptions.value[newIndex].disabled) {\n      updateCurrentValue(newIndex)\n      break\n    }\n    newIndex++\n  }\n}\n\nconst displayedOptions = computed(() => {\n  const options = props.option || []\n  // 将props.option中 转化为label和value组合\n  // if (props.aaa) {\n  //   function transformArray(arr, { key, value }) {\n  //     return arr.map((item) => ({\n  //       label: item[key],\n  //       value: item[value],\n  //     }));\n  //   }\n  //   options = transformArray(props.option, props.aaa);\n  // }\n  // 如果空值存在，则在最前面插入一个空值\n\n  if (props.insertEmpty) {\n    return [{ label: props.insertEmpty, value: props.insertEmpty }, ...options]\n  }\n\n  return options\n})\n\nonMounted(() => {\n  initializeScrollPosition()\n  document.addEventListener('mousemove', onMouseMove)\n})\n\nonBeforeUnmount(() => {\n  document.removeEventListener('mousemove', onMouseMove)\n})\n\nwatch([toRef(props, 'option'), toRef(props, 'insertEmpty')], () => {\n  initializeScrollPosition()\n})\n\n// 点击选择选项\nconst selectOption = (index: number, item: object) => {\n  if (!props.selectable) return\n  updateCurrentValue(index)\n  emit('handleChange', item)\n}\n</script>\n"],"names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createBlock","_withCtx"],"mappings":"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"}