UNPKG

@vuesax-alpha/nightly

Version:
1 lines 10.4 kB
{"version":3,"file":"navbar2.mjs","sources":["../../../../../../packages/components/navbar/src/navbar.vue"],"sourcesContent":["<template>\n <div ref=\"navbarRef\" :class=\"navbarKls\" :style=\"navbarStyles\">\n <div :class=\"ns.e('content')\">\n <div v-if=\"isLeft\" ref=\"navbarLeftRef\" :class=\"ns.e('left')\">\n <slot name=\"left\" />\n </div>\n\n <div v-if=\"isCenter\" ref=\"navbarCenterRef\" :class=\"ns.e('center')\">\n <slot />\n </div>\n\n <div v-if=\"isRight\" ref=\"navbarRightRef\" :class=\"ns.e('right')\">\n <slot name=\"right\" />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onMounted,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport {\n useColor,\n useNamespace,\n useVuesaxBaseComponent,\n} from '@vuesax-alpha/hooks'\nimport { getVsColor } from '@vuesax-alpha/utils'\nimport {\n navbarContextKey,\n navbarRegisterContextKey,\n} from '@vuesax-alpha/tokens/navbar'\nimport { UPDATE_MODEL_EVENT } from '@vuesax-alpha/constants'\nimport { navbarEmits, navbarProps } from './navbar'\n\ndefineOptions({\n name: 'VsNavbar',\n})\n\nconst props = defineProps(navbarProps)\nconst emit = defineEmits(navbarEmits)\n\nconst ns = useNamespace('navbar')\n\nconst navbarRef = ref<HTMLElement>()\nconst navbarLeftRef = ref<HTMLElement>()\nconst navbarRightRef = ref<HTMLElement>()\nconst navbarCenterRef = ref<HTMLElement>()\n\nconst children = reactive<Set<string>>(new Set())\n\nconst state = reactive({\n scrollTop: 0,\n\n collapsedWidth: 0,\n collapsedForced: false,\n\n hidden: false,\n shadowActive: false,\n paddingScrollActive: false,\n lineNotTransition: false,\n})\n\nconst vsBaseClasses = useVuesaxBaseComponent(useColor())\nconst navbarKls = computed(() => [\n ns.b(),\n vsBaseClasses,\n ns.is('fixed', props.fixed),\n ns.is('shadow', props.shadow),\n ns.is('not-line', props.notLine),\n ns.is('hidden', state.hidden),\n ns.is('shadow-active', state.shadowActive),\n ns.is('text-white', props.textWhite),\n ns.is('padding-scroll', props.paddingScroll),\n ns.is('padding-scroll-active', state.paddingScrollActive),\n ns.is('square', props.square),\n])\n\nconst navbarStyles = computed(() =>\n ns.cssVar({\n color: getVsColor(props.color),\n })\n)\n\nconst scroll = () => {\n const _scrollTop = props.targetScroll\n ? document.querySelector(props.targetScroll)!.scrollTop\n : window.pageYOffset\n if (props.hideScroll) {\n if (Math.sign(_scrollTop - state.scrollTop) === 1) {\n state.hidden = true\n } else {\n state.hidden = false\n }\n }\n\n if (props.shadowScroll) {\n if (_scrollTop > 0) {\n state.shadowActive = true\n } else {\n state.shadowActive = false\n }\n }\n\n if (props.paddingScroll) {\n if (_scrollTop > 0) {\n state.paddingScrollActive = true\n } else {\n state.paddingScrollActive = false\n }\n }\n state.scrollTop = _scrollTop\n}\n\nconst handleScroll = () => {\n if (props.hideScroll || props.shadowScroll || props.paddingScroll) {\n if (props.targetScroll) {\n const scrollElement = document.querySelector(props.targetScroll)\n scrollElement?.addEventListener('scroll', scroll)\n } else {\n window.addEventListener('scroll', scroll)\n }\n }\n}\n\nconst handleResize = () => {\n const navbar = navbarRef.value!\n\n if (props.leftCollapsed || props.centerCollapsed || props.rightCollapsed) {\n if (navbar.offsetWidth < state.collapsedWidth) {\n state.collapsedForced = true\n }\n }\n\n if (state.collapsedForced) {\n emit('collapsed', true)\n } else {\n emit('collapsed', false)\n }\n\n if (navbar.offsetWidth < state.collapsedWidth) {\n emit('collapsed', true)\n } else {\n emit('collapsed', false)\n state.collapsedForced = false\n }\n}\n\nconst isLeft = computed(() =>\n props.leftCollapsed ? !state.collapsedForced : true\n)\nconst isRight = computed(() =>\n props.rightCollapsed ? !state.collapsedForced : true\n)\nconst isCenter = computed(() =>\n props.centerCollapsed ? !state.collapsedForced : true\n)\n\nwatch(\n [() => props.hideScroll, () => props.paddingScroll, () => props.shadowScroll],\n handleScroll\n)\n\nprovide(navbarContextKey, {\n modelValue: computed(() => props.modelValue),\n})\n\nprovide(navbarRegisterContextKey, (id: string) => {\n children.add(id)\n\n return {\n unregister: () => children.delete(id),\n onClick: () => emit(UPDATE_MODEL_EVENT, id),\n isActive: computed(() => props.modelValue === id),\n }\n})\n\nonMounted(() => {\n nextTick(() => {\n if (\n navbarRef.value &&\n navbarLeftRef.value &&\n navbarCenterRef.value &&\n navbarRightRef.value\n ) {\n const left = navbarLeftRef.value\n const center = navbarCenterRef.value\n const right = navbarRightRef.value\n const navbar = navbarRef.value\n\n const GAP_PADDING_SLOT = 120 + 30\n state.collapsedWidth =\n left.offsetWidth +\n center.offsetWidth +\n right.offsetWidth +\n GAP_PADDING_SLOT\n\n if (navbar.offsetWidth < state.collapsedWidth) {\n state.collapsedForced = true\n emit('collapsed', true)\n handleResize()\n }\n }\n })\n\n handleScroll()\n useEventListener(window, 'resize', handleResize)\n})\n</script>\n"],"names":[],"mappings":"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"}