@vuesax-alpha/nightly
Version:
A Component Library for Vue 3
1 lines • 9.48 kB
Source Map (JSON)
{"version":3,"file":"use-floating.mjs","sources":["../../../../../../packages/hooks/use-floating/vue/use-floating.ts"],"sourcesContent":["import {\n computed,\n getCurrentScope,\n onMounted,\n onScopeDispose,\n ref,\n shallowReadonly,\n shallowRef,\n unref,\n watch,\n} from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport { computePosition } from '@vuesax-alpha/hooks/use-floating/dom'\n\nimport { getDPR } from './utils/get-dpr'\nimport { roundByDPR } from './utils/round-by-dpr'\nimport { unwrapElement } from './utils/unwrap-element'\nimport type {\n MaybeElement,\n MiddlewareData,\n UseFloatingOptions,\n UseFloatingReturn,\n} from './types'\nimport type { Ref } from 'vue'\nimport type {\n FloatingElement,\n ReferenceElement,\n} from '@vuesax-alpha/hooks/use-floating/dom'\n\nexport function useFloating<T extends ReferenceElement = ReferenceElement>(\n reference: Ref<MaybeElement<T>>,\n floating: Ref<MaybeElement<FloatingElement>>,\n options: UseFloatingOptions<T> = {}\n): UseFloatingReturn {\n const whileElementsMountedOption = options.whileElementsMounted\n const openOption = computed(() => unref(options.open) ?? true)\n const fitOption = computed(() => unref(options.fit) ?? false)\n const middlewareOption = computed(() => unref(options.middleware))\n const placementOption = computed(() => unref(options.placement) ?? 'bottom')\n const strategyOption = computed(() => unref(options.strategy) ?? 'absolute')\n const transformOption = computed(() => unref(options.transform) ?? true)\n const referenceElement = computed(() => unwrapElement(reference.value))\n const floatingElement = computed(() => unwrapElement(floating.value))\n\n const x = ref(0)\n const y = ref(0)\n const strategy = ref(strategyOption.value)\n const placement = ref(placementOption.value)\n const middlewareData = shallowRef<MiddlewareData>({})\n const isPositioned = ref(false)\n const floatingStyles = computed(() => {\n const initialStyles = {\n position: strategy.value,\n left: '0',\n top: '0',\n }\n\n if (!floatingElement.value) {\n return initialStyles\n }\n\n const xVal = roundByDPR(floatingElement.value, x.value)\n const yVal = roundByDPR(floatingElement.value, y.value)\n\n if (transformOption.value) {\n return {\n ...initialStyles,\n transform: `translate(${xVal}px, ${yVal}px)`,\n ...(getDPR(floatingElement.value) >= 1.5 && {\n willChange: 'transform',\n }),\n }\n }\n\n return {\n position: strategy.value,\n left: `${xVal}px`,\n top: `${yVal}px`,\n }\n })\n\n let whileElementsMountedCleanup: (() => void) | undefined\n\n function update() {\n if (referenceElement.value == null || floatingElement.value == null) {\n return\n }\n\n if (fitOption.value) {\n floatingElement.value.style.width = `${\n referenceElement.value.getBoundingClientRect().width\n }px`\n }\n\n computePosition(referenceElement.value, floatingElement.value, {\n middleware: middlewareOption.value,\n placement: placementOption.value,\n strategy: strategyOption.value,\n }).then((position) => {\n x.value = position.x\n y.value = position.y\n strategy.value = position.strategy\n placement.value = position.placement\n middlewareData.value = position.middlewareData\n isPositioned.value = true\n })\n }\n\n function cleanup() {\n if (typeof whileElementsMountedCleanup === 'function') {\n whileElementsMountedCleanup()\n whileElementsMountedCleanup = undefined\n }\n }\n\n function attach() {\n cleanup()\n\n if (whileElementsMountedOption === undefined) {\n update()\n return\n }\n\n if (referenceElement.value != null && floatingElement.value != null) {\n whileElementsMountedCleanup = whileElementsMountedOption(\n referenceElement.value,\n floatingElement.value,\n update\n )\n return\n }\n }\n\n function reset() {\n if (!openOption.value) {\n isPositioned.value = false\n }\n }\n\n onMounted(() => {\n useEventListener('resize', attach, true)\n useEventListener('scroll', attach, true)\n\n watch([middlewareOption, placementOption, strategyOption], update, {\n flush: 'sync',\n })\n watch([referenceElement, floatingElement], attach, { flush: 'sync' })\n watch(openOption, reset, { flush: 'sync' })\n })\n\n if (getCurrentScope()) {\n onScopeDispose(cleanup)\n }\n\n return {\n x: shallowReadonly(x),\n y: shallowReadonly(y),\n strategy: shallowReadonly(strategy),\n placement: shallowReadonly(placement),\n middlewareData: shallowReadonly(middlewareData),\n isPositioned: shallowReadonly(isPositioned),\n floatingStyles,\n update,\n }\n}\n"],"names":[],"mappings":"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"}