{"version":3,"file":"overflow.mjs","sources":["../../../../../../packages/components/overflow/src/overflow.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"overflowContainer\"\n    :class=\"ns.b()\"\n    :style=\"{ flexWrap: props.maxCount ? 'wrap' : 'nowrap' }\"\n  >\n    <template v-if=\"Array.isArray(props.items) && props.items.length\">\n      <div v-for=\"(item, index) in transItems\" :key=\"index\" ref=\"itemRefs\">\n        <!-- default的插槽 -->\n        <slot name=\"default\" :item=\"item\" />\n      </div>\n    </template>\n    <slot v-else ref=\"itemRefs\" />\n\n    <!-- counter 插槽 -->\n    <div v-if=\"$slots.counter\" ref=\"counter\">\n      <slot name=\"counter\" :count=\"count\" />\n    </div>\n\n    <!-- suffix 的插槽 -->\n    <div v-if=\"$slots.suffix\" ref=\"suffixRef\">\n      <slot name=\"suffix\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref, toRaw, useSlots, watch } from 'vue'\nimport { useNamespace } from '@lit-element/hooks'\nimport { overflowProps } from './overflow'\n\nconst ns = useNamespace('overflow')\nconst props = defineProps(overflowProps)\nconst slots = useSlots() // 使用 useSlots 获取插槽\ndefineOptions({\n  name: 'LtOverflow',\n})\nconst transItems = ref<string[]>([])\nconst count = ref(0) //剩下的个数\nconst overflowContainer = ref<HTMLElement | null>(null)\nconst itemRefs = ref<HTMLElement[]>([])\nconst counter = ref<HTMLElement | null>(null)\nconst suffixRef = ref<HTMLElement | null>(null)\n\nonMounted(() => {\n  transItems.value = (props.items as string[]) || []\n  updateItems()\n})\n\nwatch(\n  () => [props.items, props.maxCount],\n  (newData) => {\n    const data = toRaw(newData)\n    transItems.value = Array.isArray(data[0]) ? (data[0] as string[]) : []\n    updateItems()\n  }\n)\n\nwatch(\n  () => slots,\n  (newData) => {\n    transItems.value = (props.items as string[]) || []\n    updateItems()\n  },\n  { deep: true }\n)\n\nconst updateItems = async () => {\n  await nextTick()\n  nextTick(() => {\n    // 容器的宽度\n    const containerWidth = overflowContainer.value?.offsetWidth || 0\n    // 计算 suffix\n    const suffixRefWidth = suffixRef.value?.offsetWidth || 0\n\n    // 如果counterWidth = 0或者空，表示没有传入counter插槽\n    const counterWidth = counter.value?.offsetWidth || 0\n    // 计算去除suffix后剩余宽度，方便计算还剩下的个数\n    const leftoverWidth = containerWidth - suffixRefWidth - counterWidth\n\n    if (!props.items || !Array.isArray(props.items)) {\n      const allChilden = Array.prototype.slice.call(\n        overflowContainer.value?.children || []\n      )\n      if (counterWidth) {\n        allChilden.pop()\n      }\n      itemRefs.value = allChilden\n    } else {\n      const allChilden = Array.prototype.slice.call(\n        overflowContainer.value?.children || []\n      )\n      if (counterWidth) {\n        allChilden.pop()\n      }\n      itemRefs.value = allChilden\n    }\n\n    // 计算count\n    let totalWidth = 0,\n      transCount = 0,\n      overflowStatus = false\n    for (const item of itemRefs.value) {\n      totalWidth += item.offsetWidth + 4\n      if (totalWidth <= leftoverWidth) {\n        transCount++\n      }\n    }\n    // 剩下的个数\n    let spliceIndex = props.maxCount ? props.maxCount : transCount\n    if (Array.isArray(props.items) && props.items.length) {\n      count.value = props.maxCount\n        ? props.items.length - props.maxCount\n        : props.items.length - transCount\n      // 深拷贝 防止splice影响原数据\n      const transItem = JSON.parse(JSON.stringify(props.items))\n\n      if (props.maxCount >= props.items.length) {\n        spliceIndex = props.items.length\n      }\n      if (spliceIndex) overflowStatus = true\n      transItems.value = transItem.splice(0, spliceIndex)\n    } else {\n      count.value = props.maxCount\n        ? itemRefs.value.length - props.maxCount\n        : itemRefs.value.length - transCount\n      // 如果设置了最大个数 且小于计算得到的剩余个数，就截取就取最大个数，没有就正常逻辑截取\n      const removeMiddleChildren = () => {\n        if (overflowContainer.value) {\n          // 确定要删除的子元素的范围，例如删除索引为 1 和 2 的子元素\n          const startIndex = spliceIndex // 开始索引（包含）\n          let endIndex = itemRefs.value.length // 结束索引（不包含）\n          if (suffixRef.value) {\n            endIndex--\n          }\n          // 获取所有子元素\n          const children = overflowContainer.value.children\n\n          // 从后往前删除，以避免索引变化影响删除操作\n          for (let i = endIndex - 1; i >= startIndex; i--) {\n            overflowContainer.value.removeChild(children[i])\n          }\n        }\n      }\n\n      removeMiddleChildren()\n    }\n\n    emit('toggle', overflowStatus)\n  })\n}\nconst emit = defineEmits(['toggle'])\n</script>\n"],"names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_Fragment","_renderList"],"mappings":"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"}