UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

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