{"version":3,"file":"breadcrumb.vue2.cjs","sources":["../../../components/breadcrumb/breadcrumb.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BreadcrumbItem } from '@/components/breadcrumb-item'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, provide, reactive, toRef, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { callIfFunc, debounceMinor, isNull } from '@vexip-ui/utils'\nimport { breadcrumbProps } from './props'\nimport { BREADCRUMB_STATE } from './symbol'\n\nimport type {\n  BreadcrumbItemState,\n  BreadcrumbOptions,\n  BreadcrumbSlots,\n  BreadcrumbState,\n  SelectEvent,\n} from './symbol'\n\ndefineOptions({ name: 'Breadcrumb' })\n\nconst _props = defineProps(breadcrumbProps)\nconst props = useProps('breadcrumb', _props, {\n  separator: '/',\n  border: false,\n  options: {\n    default: () => [],\n    static: true,\n  },\n  router: null,\n  slots: () => ({}),\n})\n\nconst slots = defineSlots<BreadcrumbSlots>()\n\nconst nh = useNameHelper('breadcrumb')\nconst itemStates = new Set<BreadcrumbItemState>()\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('border')]: props.border,\n  }\n})\nconst normalizedOptions = computed(() => {\n  if (props.router && !props.options?.length) {\n    const matched = props.router.currentRoute.value.matched\n    const options: BreadcrumbOptions[] = []\n\n    for (const route of matched) {\n      const meta = (route.meta || {}) as any\n\n      if (meta.menu === false) {\n        continue\n      }\n\n      options.push({\n        label: meta.label || route.path,\n        name: meta.name || route.name,\n      })\n    }\n\n    return options\n  }\n\n  return props.options.map(option => {\n    if (typeof option === 'string') {\n      return { label: option }\n    }\n\n    return option\n  })\n})\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(itemStates).forEach((item, index) => {\n    if (isNull(item.label)) {\n      item.label = index + 1\n    }\n  })\n})\n\nconst state: BreadcrumbState = reactive({\n  separator: toRef(props, 'separator'),\n  separatorRenderer: null,\n  increaseItem,\n  decreaseItem,\n  handleSelect,\n  refreshLabels,\n  handleSeparatorClick,\n})\n\nprovide(BREADCRUMB_STATE, state)\n\nwatch(\n  [() => slots.separator, () => props.slots.separator],\n  ([slotValue, propValue]) => {\n    state.separatorRenderer = slotValue\n      ? data => slotValue(data)\n      : propValue\n        ? data => propValue(data)\n        : null\n  },\n  { immediate: true },\n)\n\nfunction increaseItem(item: BreadcrumbItemState) {\n  itemStates.add(item)\n  refreshLabels()\n}\n\nfunction decreaseItem(item: BreadcrumbItemState) {\n  itemStates.delete(item)\n  refreshLabels()\n}\n\nfunction handleSelect(label: string | number) {\n  emitEvent(props.onSelect as SelectEvent, label)\n}\n\nfunction handleSeparatorClick(label: string | number) {\n  emitEvent(props.onSeparatorClick as SelectEvent, label)\n}\n</script>\n\n<template>\n  <ol :class=\"className\">\n    <slot>\n      <Renderer :renderer=\"props.slots.default\">\n        <BreadcrumbItem\n          v-for=\"(option, index) in normalizedOptions\"\n          :key=\"option.label\"\n          :label=\"option.label\"\n        >\n          <slot name=\"item\" :option=\"option\" :index=\"index\">\n            <Renderer :renderer=\"props.slots.item\" :data=\"{ option, index }\">\n              {{ option.name ? callIfFunc(option.name) : option.label }}\n            </Renderer>\n          </slot>\n        </BreadcrumbItem>\n      </Renderer>\n    </slot>\n  </ol>\n</template>\n"],"names":["_props","__props","props","useProps","slots","_useSlots","nh","useNameHelper","itemStates","className","computed","normalizedOptions","_a","matched","options","route","meta","option","refreshLabels","debounceMinor","item","index","isNull","state","reactive","toRef","increaseItem","decreaseItem","handleSelect","handleSeparatorClick","provide","BREADCRUMB_STATE","watch","slotValue","propValue","data","label","emitEvent","_createElementBlock","_renderSlot","_ctx","_createVNode","_unref","Renderer","_openBlock","_Fragment","_renderList","_createBlock","BreadcrumbItem","callIfFunc"],"mappings":"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"}