1 line
12 KiB
Plaintext
1 line
12 KiB
Plaintext
{"version":3,"file":"goto.mjs","names":["inject","mergeDeep","refElement","GoToSymbol","Symbol","for","genDefaults","container","undefined","duration","layout","offset","easing","patterns","linear","t","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getContainer","el","getTarget","document","scrollingElement","body","querySelector","getOffset","target","horizontal","rtl","totalOffset","offsetLeft","offsetTop","offsetParent","createGoTo","options","locale","isRtl","scrollTo","_target","_options","goTo","value","HTMLElement","parentElement","ease","TypeError","targetLocation","styles","window","getComputedStyle","layoutOffset","getPropertyValue","parseInt","startLocation","scrollLeft","scrollTop","Promise","resolve","startTime","performance","now","requestAnimationFrame","step","currentTime","timeElapsed","progress","Math","abs","min","location","floor","clientSize","reachEnd","documentElement","clientHeight","scrollHeight","clientWidth","scrollWidth","useGoTo","arguments","length","Error","go"],"sources":["../../src/composables/goto.ts"],"sourcesContent":["// Utilities\nimport { inject } from 'vue'\nimport { mergeDeep, refElement } from '@/util'\n\n// Types\nimport type { ComponentPublicInstance, InjectionKey, Ref } from 'vue'\nimport type { LocaleInstance, RtlInstance } from './locale'\n\nexport interface GoToInstance {\n rtl: Ref<boolean>\n options: GoToOptions\n}\n\nexport interface GoToOptions {\n container: ComponentPublicInstance | HTMLElement | string\n duration: number\n layout: boolean\n offset: number\n easing: string | ((t: number) => number)\n patterns: Record<string, (t: number) => number>\n}\n\nexport const GoToSymbol: InjectionKey<GoToInstance> = Symbol.for('vuetify:goto')\n\nfunction genDefaults () {\n return {\n container: undefined,\n duration: 300,\n layout: false,\n offset: 0,\n easing: 'easeInOutCubic',\n patterns: {\n linear: (t: number) => t,\n easeInQuad: (t: number) => t ** 2,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t ** 3,\n easeOutCubic: (t: number) => --t ** 3 + 1,\n easeInOutCubic: (t: number) => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInQuart: (t: number) => t ** 4,\n easeOutQuart: (t: number) => 1 - --t ** 4,\n easeInOutQuart: (t: number) => (t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4),\n easeInQuint: (t: number) => t ** 5,\n easeOutQuint: (t: number) => 1 + --t ** 5,\n easeInOutQuint: (t: number) => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5,\n },\n }\n}\n\nfunction getContainer (el?: ComponentPublicInstance | HTMLElement | string) {\n return getTarget(el) ?? (document.scrollingElement || document.body) as HTMLElement\n}\n\nfunction getTarget (el: ComponentPublicInstance | HTMLElement | string | undefined) {\n return (typeof el === 'string') ? document.querySelector<HTMLElement>(el) : refElement(el)\n}\n\nfunction getOffset (target: any, horizontal?: boolean, rtl?: boolean): number {\n if (typeof target === 'number') return horizontal && rtl ? -target : target\n\n let el = getTarget(target)\n let totalOffset = 0\n while (el) {\n totalOffset += horizontal ? el.offsetLeft : el.offsetTop\n el = el.offsetParent as HTMLElement\n }\n\n return totalOffset\n}\n\nexport function createGoTo (options: Partial<GoToOptions> | undefined, locale: LocaleInstance & RtlInstance) {\n return {\n rtl: locale.isRtl,\n options: mergeDeep(genDefaults(), options),\n }\n}\n\nasync function scrollTo (\n _target: ComponentPublicInstance | HTMLElement | number | string,\n _options: Partial<GoToOptions>,\n horizontal?: boolean,\n goTo?: GoToInstance,\n) {\n const options = mergeDeep(goTo?.options, _options)\n const rtl = goTo?.rtl.value\n const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0\n const container = options.container === 'parent' && target instanceof HTMLElement\n ? target.parentElement!\n : getContainer(options.container)\n const ease = typeof options.easing === 'function' ? options.easing : options.patterns[options.easing]\n\n if (!ease) throw new TypeError(`Easing function \"${options.easing}\" not found.`)\n\n let targetLocation: number\n if (typeof target === 'number') {\n targetLocation = getOffset(target, horizontal, rtl)\n } else {\n targetLocation = getOffset(target, horizontal, rtl) - getOffset(container, horizontal, rtl)\n\n if (options.layout) {\n const styles = window.getComputedStyle(target)\n const layoutOffset = styles.getPropertyValue('--v-layout-top')\n\n if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10)\n }\n }\n\n targetLocation += options.offset\n\n const startLocation = (horizontal ? container.scrollLeft : container.scrollTop) ?? 0\n\n if (targetLocation === startLocation) return Promise.resolve(targetLocation)\n\n const startTime = performance.now()\n\n return new Promise(resolve => requestAnimationFrame(function step (currentTime: number) {\n const timeElapsed = currentTime - startTime\n const progress = Math.abs(options.duration ? Math.min(timeElapsed / options.duration, 1) : 1)\n const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress))\n\n container[horizontal ? 'scrollLeft' : 'scrollTop'] = location\n\n if (progress === 1) return resolve(targetLocation)\n\n let clientSize\n let reachEnd\n\n if (!horizontal) {\n clientSize = container === document.body ? document.documentElement.clientHeight : container.clientHeight\n reachEnd = clientSize + container.scrollTop >= container.scrollHeight\n\n if (targetLocation > container.scrollTop && reachEnd) return resolve(targetLocation)\n } else {\n clientSize = container === document.body ? document.documentElement.clientWidth : container.clientWidth\n reachEnd = clientSize + container.scrollLeft >= container.scrollWidth\n\n if (targetLocation > container.scrollLeft && reachEnd) return resolve(targetLocation)\n }\n\n requestAnimationFrame(step)\n }))\n}\n\nexport function useGoTo (_options: Partial<GoToOptions> = {}) {\n const goTo = inject(GoToSymbol)\n\n if (!goTo) throw new Error('[Vuetify] Could not find injected goto instance')\n\n async function go (\n target: ComponentPublicInstance | HTMLElement | string | number,\n options?: Partial<GoToOptions>,\n ) {\n return scrollTo(target, mergeDeep(_options, options), false, goTo)\n }\n\n go.horizontal = async (\n target: ComponentPublicInstance | HTMLElement | string | number,\n options?: Partial<GoToOptions>,\n ) => {\n return scrollTo(target, mergeDeep(_options, options), true, goTo)\n }\n\n return go\n}\n"],"mappings":"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"} |