{"version":3,"file":"useEllipsis.mjs","sources":["../../../../components/breadcrumb/hooks/useEllipsis.ts"],"sourcesContent":["import { computed, ComputedRef, toRefs } from 'vue';\nimport type { TdBreadcrumbItemProps, TdBreadcrumbProps } from '../type';\nimport log from '@tdesign/common-js/log/index';\nimport type { TNode } from '../../common';\n\nfunction valueIsZeroOrUndefined(val: number | string) {\n  return val === 0 || val === undefined;\n}\n\nexport const useEllipsis = (\n  props: TdBreadcrumbProps,\n  getBreadcrumbItems: ComputedRef<TdBreadcrumbItemProps[]>,\n  ellipsisContent: string | TNode,\n) => {\n  const { maxItems, itemsBeforeCollapse, itemsAfterCollapse } = toRefs(props);\n\n  // 是否需要显示省略号\n  const shouldShowEllipsis = computed(() => {\n    const items = getBreadcrumbItems.value;\n    const currentMaxItems = maxItems.value ?? 0;\n    const totalItems = items.length;\n    const itemsCollapseSum = itemsBeforeCollapse.value + itemsAfterCollapse.value;\n\n    // 配置有误的情况，不显示省略并告警\n    if (\n      currentMaxItems > 0 &&\n      (valueIsZeroOrUndefined(itemsBeforeCollapse.value) || valueIsZeroOrUndefined(itemsAfterCollapse.value))\n    ) {\n      log.error('Breadcrumb', '需要设置 itemsBeforeCollapse 和 itemsAfterCollapse 属性来控制省略号前后的显示项数。');\n      return false;\n    }\n\n    // 不需要显示省略号的情况：\n    // 1. 最大显示数量 <= 0\n    // 2. 项目总数 <= 最大显示数量\n    // 3. 省略号前后显示数量（itemsBeforeCollapse、itemsAfterCollapse）之和 >= 项目总数\n    if (currentMaxItems <= 0 || totalItems <= currentMaxItems || itemsCollapseSum >= totalItems) {\n      return false;\n    }\n\n    return true;\n  });\n\n  // 显示的项目合集，包含省略号\n  const getDisplayItems = computed(() => {\n    const items = getBreadcrumbItems.value;\n    const showEllipsis = shouldShowEllipsis.value;\n\n    if (!showEllipsis) {\n      return items;\n    }\n\n    const totalItems = items.length;\n    const beforeItems = items.slice(0, itemsBeforeCollapse.value);\n    const afterItems = items.slice(totalItems - itemsAfterCollapse.value, totalItems);\n\n    return [\n      ...beforeItems,\n      {\n        content: ellipsisContent,\n        disabled: true,\n        isEllipsisItem: true,\n      },\n      ...afterItems,\n    ];\n  });\n\n  // 被省略的项目\n  const getEllipsisItems = computed(() => {\n    const items = getBreadcrumbItems.value;\n    if (!shouldShowEllipsis.value) {\n      return [];\n    }\n    const sliceItems = items.slice(itemsBeforeCollapse.value, items.length - itemsAfterCollapse.value);\n    return sliceItems.map((item, index) => ({\n      ...item,\n      isLast: index === sliceItems.length - 1,\n    }));\n  });\n\n  return {\n    getDisplayItems,\n    getEllipsisItems,\n  };\n};\n"],"names":["valueIsZeroOrUndefined","val","useEllipsis","props","getBreadcrumbItems","ellipsisContent","_toRefs","toRefs","maxItems","itemsBeforeCollapse","itemsAfterCollapse","shouldShowEllipsis","computed","_maxItems$value","items","value","currentMaxItems","totalItems","length","itemsCollapseSum","log","error","getDisplayItems","showEllipsis","beforeItems","slice","afterItems","concat","_toConsumableArray","content","disabled","isEllipsisItem","getEllipsisItems","sliceItems","map","item","index","_objectSpread","isLast"],"mappings":"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"}