{"version":3,"file":"breadcrumb.vue2.mjs","sources":["../../../../../../packages/components/breadcrumb/src/breadcrumb.vue"],"sourcesContent":["<template>\r\n  <a-breadcrumb\r\n    v-bind=\"attrs\"\r\n    ref=\"breadcrumbRef\"\r\n    :class=\"[\r\n      bem.b(),\r\n      bem.is(`${props.size}`),\r\n      props.type === 'card' ? bem.is('card') : bem.is('default'),\r\n    ]\"\r\n  >\r\n    <template v-if=\"props.items && props.items.length > 0\">\r\n      <a-breadcrumb-item\r\n        v-for=\"(item, index) in processedItems\"\r\n        :key=\"item.key || index\"\r\n        :class=\"[\r\n          bem.e('item'),\r\n          item.type === 'ellipsis' ? bem.is('ellipsis') : '',\r\n        ]\"\r\n        :style=\"{\r\n          'margin-right':\r\n            props.type === 'card' ? `${props.separatorSpace}px` : '',\r\n        }\"\r\n        :href=\"\r\n          item.type === 'ellipsis' || !props.isLinkSkip ? undefined : item.url\r\n        \"\r\n        @click=\"(e: MouseEvent) => handleItemClick(e, item, index)\"\r\n      >\r\n        <template v-if=\"item.type === 'ellipsis'\">\r\n          <div :class=\"bem.e('ellipsis')\">\r\n            <ll-tooltip\r\n              v-if=\"props.showHiddenItem && hiddenItems.length > 0\"\r\n              :tip=\"hiddenItems.map((item) => item.title).join(` / `)\"\r\n            >\r\n              <ll-icon icon-name=\"icon-more\" />\r\n            </ll-tooltip>\r\n            <ll-icon v-else icon-name=\"icon-more\" />\r\n          </div>\r\n        </template>\r\n\r\n        <template v-else>\r\n          <slot\r\n            v-if=\"item.key && hasSlot(item.key) && item.key !== 'item'\"\r\n            :name=\"item.key\"\r\n            :item=\"item\"\r\n            :index=\"index\"\r\n          />\r\n\r\n          <slot\r\n            v-else-if=\"hasSlot('item')\"\r\n            name=\"item\"\r\n            :item=\"item\"\r\n            :index=\"index\"\r\n          />\r\n\r\n          <template v-else>\r\n            <div\r\n              :class=\"bem.e('text-content')\"\r\n              @mouseenter=\"setActiveIndex(index)\"\r\n              @mouseleave=\"activeIndex = null\"\r\n            >\r\n              <ll-icon\r\n                v-if=\"showIcon && item.icon\"\r\n                :icon-name=\"item.icon\"\r\n                :color=\"getIconColor(index)\"\r\n              />\r\n              <span\r\n                v-if=\"item.title\"\r\n                :style=\"getTitleStyle(index)\"\r\n                :class=\"[\r\n                  processedItems.length - 1 === index ? 'last-title' : 'title',\r\n                ]\"\r\n              >\r\n                {{ item.title }}\r\n              </span>\r\n            </div>\r\n          </template>\r\n        </template>\r\n      </a-breadcrumb-item>\r\n    </template>\r\n\r\n    <slot v-else />\r\n\r\n    <template #separator>\r\n      <span v-if=\"!$slots.separator\" :style=\"separatorStyle\">\r\n        {{ props.separator }}\r\n      </span>\r\n      <slot v-else name=\"separator\"></slot>\r\n    </template>\r\n  </a-breadcrumb>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { createNamespace } from '@ll-plus/utils'\r\nimport { computed, ref, useAttrs, useSlots, watch } from 'vue'\r\nimport { BreadcrumbItem, breadcrumbProps } from './breadcrumb'\r\n\r\ndefineOptions({ name: 'LlBreadcrumb' })\r\n\r\nconst bem = createNamespace('breadcrumb')\r\nconst attrs = useAttrs()\r\nconst slots = useSlots()\r\n\r\nconst props = defineProps(breadcrumbProps)\r\n\r\n// 新增：当前活动的面包屑索引\r\nconst activeIndex = ref<number | null>(null)\r\nconst breadcrumbRef = ref()\r\n\r\n// 新增：获取图标颜色\r\nconst getIconColor = (index: number) => {\r\n  const isLast = processedItems.value.length - 1 === index\r\n  const isActive = activeIndex.value === index\r\n\r\n  // 优先级：最后一项 > 活动项 > 默认\r\n  if (isLast) return props.lastIconColor\r\n  if (isActive) return props.hoverTitleColor\r\n  return props.iconColor\r\n}\r\n\r\n// 新增：获取标题样式\r\nconst getTitleStyle = (index: number) => {\r\n  const isLast = processedItems.value.length - 1 === index\r\n  const isActive = activeIndex.value === index\r\n\r\n  // 最后一项使用最后一级颜色，活动项使用hover颜色，其它使用默认颜色\r\n  return {\r\n    color: isLast\r\n      ? props.lastTitleColor\r\n      : isActive\r\n        ? props.hoverTitleColor\r\n        : props.titleColor,\r\n  }\r\n}\r\n\r\n// 新增：设置当前活动项\r\nconst setActiveIndex = (index: number) => {\r\n  // 最后一项不可交互\r\n  if (index < processedItems.value.length - 1) {\r\n    activeIndex.value = index\r\n  }\r\n}\r\n\r\n// 存储隐藏的面包屑项\r\nconst hiddenItems = ref<BreadcrumbItem[]>([])\r\n\r\n// 处理后的面包屑项数组\r\nconst processedItems = computed(() => {\r\n  if (!props.items || props.items.length === 0) return []\r\n\r\n  // 不需要折叠的情况\r\n  if (props.maxCount <= 0 || props.items.length <= props.maxCount) {\r\n    return props.items\r\n  }\r\n\r\n  // 需要折叠的情况\r\n  const result: BreadcrumbItem[] = []\r\n\r\n  // 1. 添加第一项\r\n  result.push(props.items[0])\r\n\r\n  // 2. 添加省略号项\r\n  result.push({\r\n    type: 'ellipsis',\r\n    key: 'breadcrumb-ellipsis',\r\n    title: '...',\r\n  })\r\n\r\n  // 3. 添加最后 maxCount-1 项\r\n  const startIndex = props.items.length - (props.maxCount - 1)\r\n  for (let i = startIndex; i < props.items.length; i++) {\r\n    result.push(props.items[i])\r\n  }\r\n\r\n  return result\r\n})\r\n\r\n// 分隔符样式\r\nconst separatorStyle = computed(() => ({\r\n  'margin-inline': `${props.separatorSpace}px`,\r\n  color: props.separatorColor,\r\n}))\r\n\r\n// 检查插槽是否存在\r\nconst hasSlot = (name: string) => {\r\n  return !!slots[name]\r\n}\r\n\r\n// 处理面包屑项点击事件\r\nconst handleItemClick = (\r\n  event: MouseEvent,\r\n  item: BreadcrumbItem,\r\n  index: number,\r\n) => {\r\n  // 优先调用项上的自定义处理器\r\n  if (item.onClick) {\r\n    item.onClick(event, item, index)\r\n  }\r\n\r\n  // 处理链接跳转\r\n  if (item.url && props.isLinkSkip) {\r\n    switch (item.target) {\r\n      case '_blank':\r\n        window.open(item.url, '_blank', 'noopener,noreferrer')\r\n        break\r\n\r\n      case '_parent':\r\n        if (window.parent !== window) {\r\n          window.parent.location.href = item.url\r\n        } else {\r\n          window.location.href = item.url\r\n        }\r\n        break\r\n\r\n      case '_top':\r\n        window.top!.location.href = item.url\r\n        break\r\n\r\n      case '_self':\r\n      default:\r\n        window.location.href = item.url\r\n        break\r\n    }\r\n    return\r\n  }\r\n}\r\n\r\n// 监听 items 和 maxCount 变化，更新隐藏项\r\nwatch(\r\n  () => [props.items, props.maxCount],\r\n  () => {\r\n    hiddenItems.value = []\r\n\r\n    if (!props.items || props.items.length === 0) return\r\n\r\n    // 不需要折叠的情况\r\n    if (props.maxCount <= 0 || props.items.length <= props.maxCount) return\r\n\r\n    // 收集隐藏项 (索引1到startIndex-1)\r\n    const startIndex = props.items.length - (props.maxCount - 1)\r\n    for (let i = 1; i < startIndex; i++) {\r\n      hiddenItems.value.push(props.items[i])\r\n    }\r\n  },\r\n  { immediate: true, deep: true },\r\n)\r\n// // 处理分割线颜色\r\n// watch(\r\n//   () => [props.separatorColor, breadcrumbRef.value],\r\n//   () => {\r\n//     if (props.separatorColor && breadcrumbRef.value) {\r\n//       const antBreadcrumbSeparators =\r\n//         breadcrumbRef.value?.$el?.querySelectorAll('.ant-breadcrumb-separator')\r\n//       if (antBreadcrumbSeparators) {\r\n//         antBreadcrumbSeparators.forEach(\r\n//           (antBreadcrumbSeparator) =>\r\n//             (antBreadcrumbSeparator.style.color = props.separatorColor)\r\n//         )\r\n//       }\r\n//     }\r\n//   },\r\n//   {\r\n//     immediate: true,\r\n//   }\r\n// )\r\n</script>\r\n"],"names":["_createBlock","_mergeProps","_unref","$slots","_createElementBlock","_toDisplayString","_renderSlot","_openBlock","_Fragment","_renderList","_normalizeClass","_normalizeStyle","item","_createVNode","showIcon"],"mappings":"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"}