@maas/vue-equipment 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composables/index.js.map +1 -1
- package/dist/composables/index.mjs.map +1 -1
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +16 -2
- package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +3 -3
- package/dist/plugins/MagicMarquee/src/composables/{useMarquee.d.ts → useMarqueeApi.d.ts} +2 -2
- package/dist/plugins/MagicMarquee/src/composables/{useMarquee.mjs → useMarqueeApi.mjs} +1 -1
- package/dist/plugins/MagicModal/src/components/MagicModal.vue +39 -58
- package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +15 -15
- package/dist/plugins/MagicModal/src/composables/useModalApi.d.ts +4 -3
- package/dist/plugins/MagicModal/src/composables/useModalApi.mjs +4 -3
- package/dist/plugins/MagicModal/src/composables/useModalCallback.d.ts +22 -0
- package/dist/plugins/MagicModal/src/composables/useModalCallback.mjs +60 -0
- package/dist/plugins/MagicModal/src/types/index.d.ts +7 -5
- package/dist/plugins/MagicModal/src/utils/defaultOptions.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/composables/useControlsApi.mjs +1 -2
- package/dist/plugins/MagicPlayer/src/composables/useMediaApi.d.ts +1 -1
- package/dist/plugins/MagicPlayer/src/composables/useMediaApi.mjs +2 -2
- package/dist/plugins/MagicPlayer/src/composables/useRuntimeSourceProvider.mjs +1 -2
- package/dist/plugins/MagicPlayer/src/types/index.d.ts +1 -1
- package/dist/plugins/MagicScroll/index.mjs +2 -0
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +58 -0
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue.d.ts +42 -0
- package/dist/plugins/MagicScroll/src/components/MagicScrollTransform.vue.d.ts +9 -9
- package/dist/plugins/MagicScroll/src/composables/useProgress.d.ts +1 -1
- package/dist/plugins/MagicScroll/src/composables/useProgress.mjs +1 -2
- package/dist/plugins/MagicScroll/src/types/injectionKeys.d.ts +1 -2
- package/dist/plugins/MagicToast/demo/DemoToast.vue +22 -0
- package/dist/plugins/MagicToast/demo/DemoToast.vue.d.ts +14 -0
- package/dist/plugins/MagicToast/index.d.ts +5 -0
- package/dist/plugins/MagicToast/index.mjs +9 -0
- package/dist/plugins/MagicToast/nuxt.d.ts +2 -0
- package/dist/plugins/MagicToast/nuxt.mjs +5 -0
- package/dist/plugins/MagicToast/src/components/MagicToast.vue +229 -0
- package/dist/plugins/MagicToast/src/components/MagicToast.vue.d.ts +28 -0
- package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue +101 -0
- package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue.d.ts +48 -0
- package/dist/plugins/MagicToast/src/composables/useToastApi.d.ts +11 -0
- package/dist/plugins/MagicToast/src/composables/useToastApi.mjs +60 -0
- package/dist/plugins/MagicToast/src/composables/useToastCallback.d.ts +21 -0
- package/dist/plugins/MagicToast/src/composables/useToastCallback.mjs +43 -0
- package/dist/plugins/MagicToast/src/composables/useToastEmitter.d.ts +15 -0
- package/dist/plugins/MagicToast/src/composables/useToastEmitter.mjs +9 -0
- package/dist/plugins/MagicToast/src/composables/useToastInternalApi.d.ts +4 -0
- package/dist/plugins/MagicToast/src/composables/useToastInternalApi.mjs +26 -0
- package/dist/plugins/MagicToast/src/composables/useToastStore.d.ts +17 -0
- package/dist/plugins/MagicToast/src/composables/useToastStore.mjs +41 -0
- package/dist/plugins/MagicToast/src/types/index.d.ts +42 -0
- package/dist/plugins/MagicToast/src/types/index.mjs +0 -0
- package/dist/plugins/MagicToast/src/utils/defaultOptions.d.ts +3 -0
- package/dist/plugins/MagicToast/src/utils/defaultOptions.mjs +14 -0
- package/dist/plugins/index.d.ts +0 -4
- package/dist/plugins/index.mjs +0 -4
- package/package.json +13 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/composables/index.ts","../../packages/composables/useEasings/index.ts","../../packages/composables/useGlyphToSvg/index.ts","../../packages/composables/useScrollTo/index.ts","../../packages/composables/useViewportDimensions/index.ts"],"sourcesContent":["export * from './useEasings'\nexport * from './useGlyphToSvg'\nexport * from './useScrollTo'\nexport * from './useViewportDimensions'\n","export type EasingKey =\n | 'linear'\n | 'easeInQuad'\n | 'easeOutQuad'\n | 'easeInOutQuad'\n | 'easeInCubic'\n | 'easeOutCubic'\n | 'easeInOutCubic'\n | 'easeInQuart'\n | 'easeOutQuart'\n | 'easeInOutQuart'\n | 'easeInQuint'\n | 'easeOutQuint'\n | 'easeInOutQuint'\n\nexport type EasingFunction = (t: number) => number\n\nexport function useEasings() {\n const easings = {\n linear: (t: number) => t,\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => --t * t * t + 1,\n easeInOutCubic: (t: number) =>\n t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - --t * t * t * t,\n easeInOutQuart: (t: number) =>\n t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t,\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + --t * t * t * t * t,\n easeInOutQuint: (t: number) =>\n t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t,\n }\n\n return easings\n}\n","import { useClipboard } from '@vueuse/core'\nimport { unref } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Font } from 'fontkit'\n\nexport type useGlyphToSvgOptions = {\n fontSize: Ref<number> | number\n fontWeight: Ref<number> | number\n fontFile: Ref<Font> | Font\n}\n\nexport function useGlyphToSvg({\n fontSize,\n fontWeight,\n fontFile,\n}: useGlyphToSvgOptions) {\n const { copy } = useClipboard()\n const mappedFontFile = unref(fontFile)\n const mappedFontSize = unref(fontSize)\n const mappedFontWeight = unref(fontWeight)\n\n const loadVariableFont = () => {\n // @ts-ignore\n const variableFont = mappedFontFile.getVariation({\n wght: mappedFontWeight,\n })\n return variableFont\n }\n\n const convertToSvg = (glyph: any) => {\n // Scale according to current font size\n const scale = mappedFontSize / mappedFontFile.unitsPerEm\n const path = glyph.path.scale(scale, scale).scale(-1, 1).rotate(Math.PI)\n\n // Center inside square bounding box\n const bbox = path.bbox\n const minX = bbox.minX\n const minY = bbox.minY\n const height = bbox.height\n const width = bbox.width\n const dims = unref(fontSize)\n\n const centeredY = (height - dims) / 2 + minY\n const centeredX = (width - dims) / 2 + minX\n\n const viewBox = `${centeredX} ${centeredY} ${dims} ${dims}`\n\n let svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${viewBox}\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">`\n svg += `<path d=\"${path.toSVG()}\" fill=\"currentColor\" />`\n svg += '</svg>'\n\n return svg\n }\n\n const renderSvg = async (codePoint: string) => {\n const font = await loadVariableFont()\n const glyph = font.glyphForCodePoint(codePoint)\n const svg = convertToSvg(glyph)\n return svg\n }\n\n const copySvg = async (codePoint: string) => {\n const svg = await renderSvg(codePoint)\n copy(svg)\n }\n\n return { copySvg, renderSvg }\n}\n","import { useEasings } from '../useEasings'\nimport { unrefElement } from '@vueuse/core'\nimport type { EasingFunction } from '../useEasings'\nimport type { MaybeComputedElementRef, MaybeElement } from '@vueuse/core'\n\nexport type ScrollToTarget =\n | string\n | Element\n | MaybeElement\n | MaybeComputedElementRef\n\nexport type ScrollToParent = ScrollToTarget | Window\n\nexport type ScrollToParams = {\n parent?: Element | Window\n left: number\n top: number\n duration?: { x?: number; y?: number }\n easing?: EasingFunction\n callback?: () => void\n}\n\nexport type getScrollDurationParams = {\n parent: Element | Window\n left: number\n top: number\n speed: number\n}\n\nexport type scrollToTargetParams = {\n target: ScrollToTarget\n parent?: ScrollToParent\n offset?: {\n x?: number\n y?: number\n }\n speed?: number\n easing?: EasingFunction\n}\n\nconst easings = useEasings()\n\nfunction min(a: number, b: number) {\n return a < b ? a : b\n}\n\nfunction unwrapParent(parent: ScrollToParent) {\n if (parent === window) {\n return parent\n } else if (typeof parent === 'string') {\n return document.querySelector(parent) || document.documentElement\n } else {\n return (\n unrefElement(parent as MaybeComputedElementRef<MaybeElement>) ||\n document.documentElement\n )\n }\n}\n\nfunction unwrapTarget(target: ScrollToTarget, parentEl: Element | Window) {\n if (typeof target === 'string') {\n const queryTarget = parentEl === window ? document : (parentEl as Element)\n return queryTarget.querySelector(target)\n } else {\n return unrefElement(target as MaybeComputedElementRef<MaybeElement>)\n }\n}\n\nexport function useScrollTo() {\n function getScrollPosition(element: Element | Window): {\n x: number\n y: number\n } {\n if (element === window) {\n return { x: window.pageXOffset, y: window.pageYOffset }\n } else if (element instanceof Element) {\n return { x: element.scrollLeft, y: element.scrollTop }\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n function getDistance(element: Element): { top: number; left: number } {\n const rect = element.getBoundingClientRect()\n const scrollEl = document.scrollingElement || document.documentElement\n\n return {\n top: rect.top + scrollEl.scrollTop,\n left: rect.left + scrollEl.scrollLeft,\n }\n }\n\n function getScrollDuration({\n parent = document.documentElement || document.body,\n left = 0,\n top = 0,\n speed = 500,\n }: getScrollDurationParams) {\n const currentPos = getScrollPosition(parent)\n const distanceX = currentPos.x - left\n const distanceY = currentPos.y - top\n const durationX = Math.abs((distanceX / speed) * 100)\n const durationY = Math.abs((distanceY / speed) * 100)\n\n return { x: durationX, y: durationY }\n }\n\n function scrollTo({\n parent = document.documentElement || document.body,\n top,\n left,\n duration = {},\n easing = easings.easeOutQuad,\n callback,\n }: ScrollToParams) {\n const startTime = Date.now()\n const { x: fromX, y: fromY } = getScrollPosition(parent)\n\n if (fromX === top && fromY === left) {\n if (callback) callback()\n return\n }\n\n const mappedDuration = { x: 500, y: 500, ...duration }\n\n const scroll = () => {\n const currentTime = Date.now()\n\n const timeX = min(1, (currentTime - startTime) / mappedDuration.x)\n const timeY = min(1, (currentTime - startTime) / mappedDuration.y)\n const easedTimeX = easing(timeX)\n const easedTimeY = easing(timeY)\n\n // We use the min of the two times to make sure we scroll at the same speed\n const minTime = Math.min(easedTimeX, easedTimeY)\n\n parent.scroll({\n left: minTime * (left - fromX) + fromX,\n top: minTime * (top - fromY) + fromY,\n })\n\n if (easedTimeX < 1 || easedTimeY < 1) {\n requestAnimationFrame(scroll)\n } else if (callback) {\n callback()\n }\n }\n\n requestAnimationFrame(scroll)\n }\n\n function scrollToTarget({\n target,\n parent = document.documentElement || document.body,\n offset = {},\n speed = 500,\n easing = easings.easeOutQuad,\n }: scrollToTargetParams) {\n let parentEl = unwrapParent(parent)\n if (!parentEl) return\n let targetEl = unwrapTarget(target, parentEl)\n if (!targetEl) return\n\n const mappedOffset = { x: 0, y: 0, ...offset }\n const distance = getDistance(targetEl)\n const leftDistance = distance.left - mappedOffset.x\n const topDistance = distance.top - mappedOffset.y\n\n const scrollDuration = getScrollDuration({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n speed: speed,\n })\n\n scrollTo({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n duration: scrollDuration,\n easing: easing,\n })\n }\n\n return {\n getScrollPosition,\n getDistance,\n getScrollDuration,\n scrollTo,\n scrollToTarget,\n }\n}\n","import { onMounted, onUnmounted } from 'vue'\n\nexport type UseViewportDimensionsOptions = {\n width?: false | string\n height?: false | string\n initialWidth?: false | string\n initialHeight?: false | string\n}\n\nexport function useViewportDimensions(options?: UseViewportDimensionsOptions) {\n const mappedOptions = {\n width: '--vw',\n height: '--vh',\n initialWidth: '--initial-vw',\n initialHeight: '--initial-vh',\n ...options,\n }\n\n const setViewportWidth = (initial?: boolean) => {\n const vw = Number(window.innerWidth * 0.01).toFixed(2)\n\n if (mappedOptions.width) {\n document.documentElement.style.setProperty(mappedOptions.width, `${vw}px`)\n }\n\n if (initial && mappedOptions.initialWidth) {\n document.documentElement.style.setProperty(\n mappedOptions.initialWidth,\n `${vw}px`\n )\n }\n }\n\n const setViewportHeight = (initial?: boolean) => {\n const vh = Number(window.innerHeight * 0.01).toFixed(2)\n\n if (mappedOptions.height) {\n document.documentElement.style.setProperty(\n mappedOptions.height || '--vh',\n `${vh}px`\n )\n }\n\n if (initial && mappedOptions.initialHeight) {\n document.documentElement.style.setProperty(\n mappedOptions.initialHeight || '--initial-vh',\n `${vh}px`\n )\n }\n }\n\n const setDimensions = () => {\n setViewportWidth()\n setViewportHeight()\n }\n\n onMounted(() => {\n setViewportWidth(true)\n setViewportHeight(true)\n\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n\n onUnmounted(() => {\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n}\n"],"mappings":"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","names":["easings","import_core","import_vue"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/composables/index.ts","../../packages/composables/useEasings/index.ts","../../packages/composables/useGlyphToSvg/index.ts","../../packages/composables/useScrollTo/index.ts","../../packages/composables/useViewportDimensions/index.ts"],"sourcesContent":["export * from './useEasings'\nexport * from './useGlyphToSvg'\nexport * from './useScrollTo'\nexport * from './useViewportDimensions'\n","export type EasingKey =\n | 'linear'\n | 'easeInQuad'\n | 'easeOutQuad'\n | 'easeInOutQuad'\n | 'easeInCubic'\n | 'easeOutCubic'\n | 'easeInOutCubic'\n | 'easeInQuart'\n | 'easeOutQuart'\n | 'easeInOutQuart'\n | 'easeInQuint'\n | 'easeOutQuint'\n | 'easeInOutQuint'\n\nexport type EasingFunction = (t: number) => number\n\nexport function useEasings() {\n const easings = {\n linear: (t: number) => t,\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => --t * t * t + 1,\n easeInOutCubic: (t: number) =>\n t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - --t * t * t * t,\n easeInOutQuart: (t: number) =>\n t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t,\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + --t * t * t * t * t,\n easeInOutQuint: (t: number) =>\n t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t,\n }\n\n return easings\n}\n","import { useClipboard } from '@vueuse/core'\nimport { unref } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Font } from 'fontkit'\n\nexport type useGlyphToSvgOptions = {\n fontSize: Ref<number> | number\n fontWeight: Ref<number> | number\n fontFile: Ref<Font> | Font\n}\n\nexport function useGlyphToSvg({\n fontSize,\n fontWeight,\n fontFile,\n}: useGlyphToSvgOptions) {\n const { copy } = useClipboard()\n const mappedFontFile = unref(fontFile)\n const mappedFontSize = unref(fontSize)\n const mappedFontWeight = unref(fontWeight)\n\n const loadVariableFont = () => {\n // @ts-ignore\n const variableFont = mappedFontFile.getVariation({\n wght: mappedFontWeight,\n })\n return variableFont\n }\n\n const convertToSvg = (glyph: any) => {\n // Scale according to current font size\n const scale = mappedFontSize / mappedFontFile.unitsPerEm\n const path = glyph.path.scale(scale, scale).scale(-1, 1).rotate(Math.PI)\n\n // Center inside square bounding box\n const bbox = path.bbox\n const minX = bbox.minX\n const minY = bbox.minY\n const height = bbox.height\n const width = bbox.width\n const dims = unref(fontSize)\n\n const centeredY = (height - dims) / 2 + minY\n const centeredX = (width - dims) / 2 + minX\n\n const viewBox = `${centeredX} ${centeredY} ${dims} ${dims}`\n\n let svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${viewBox}\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">`\n svg += `<path d=\"${path.toSVG()}\" fill=\"currentColor\" />`\n svg += '</svg>'\n\n return svg\n }\n\n const renderSvg = async (codePoint: string) => {\n const font = await loadVariableFont()\n const glyph = font.glyphForCodePoint(codePoint)\n const svg = convertToSvg(glyph)\n return svg\n }\n\n const copySvg = async (codePoint: string) => {\n const svg = await renderSvg(codePoint)\n copy(svg)\n }\n\n return { copySvg, renderSvg }\n}\n","import { useEasings } from '../useEasings'\nimport { unrefElement } from '@vueuse/core'\nimport type { EasingFunction } from '../useEasings'\nimport type { MaybeComputedElementRef, MaybeElement } from '@vueuse/core'\n\nexport type ScrollToTarget =\n | string\n | Element\n | MaybeElement\n | MaybeComputedElementRef\n\nexport type ScrollToParent = ScrollToTarget | Window\n\nexport type ScrollToParams = {\n parent?: Element | Window\n left: number\n top: number\n duration?: { x?: number; y?: number }\n easing?: EasingFunction\n callback?: () => void\n}\n\nexport type getScrollDurationParams = {\n parent: Element | Window\n left: number\n top: number\n speed: number\n}\n\nexport type scrollToTargetParams = {\n target: ScrollToTarget\n parent?: ScrollToParent\n offset?: {\n x?: number\n y?: number\n }\n speed?: number\n easing?: EasingFunction\n}\n\nconst easings = useEasings()\n\nfunction min(a: number, b: number) {\n return a < b ? a : b\n}\n\nfunction unwrapParent(parent: ScrollToParent) {\n if (parent === window) {\n return parent\n } else if (typeof parent === 'string') {\n return document.querySelector(parent) || document.documentElement\n } else {\n return (\n unrefElement(parent as MaybeComputedElementRef<MaybeElement>) ||\n document.documentElement\n )\n }\n}\n\nfunction unwrapTarget(target: ScrollToTarget, parentEl: Element | Window) {\n if (typeof target === 'string') {\n const queryTarget = parentEl === window ? document : (parentEl as Element)\n return queryTarget.querySelector(target)\n } else {\n return unrefElement(target as MaybeComputedElementRef<MaybeElement>)\n }\n}\n\nexport function useScrollTo() {\n function getScrollPosition(element: Element | Window): {\n x: number\n y: number\n } {\n if (element === window) {\n return { x: window.pageXOffset, y: window.pageYOffset }\n } else if (element instanceof Element) {\n return { x: element.scrollLeft, y: element.scrollTop }\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n function getDistance(element: Element): { top: number; left: number } {\n const rect = element.getBoundingClientRect()\n const scrollEl = document.scrollingElement || document.documentElement\n\n return {\n top: rect.top + scrollEl.scrollTop,\n left: rect.left + scrollEl.scrollLeft,\n }\n }\n\n function getScrollDuration({\n parent = document.documentElement || document.body,\n left = 0,\n top = 0,\n speed = 500,\n }: getScrollDurationParams) {\n const currentPos = getScrollPosition(parent)\n const distanceX = currentPos.x - left\n const distanceY = currentPos.y - top\n const durationX = Math.abs((distanceX / speed) * 100)\n const durationY = Math.abs((distanceY / speed) * 100)\n\n return { x: durationX, y: durationY }\n }\n\n function scrollTo({\n parent = document.documentElement || document.body,\n top,\n left,\n duration = {},\n easing = easings.easeOutQuad,\n callback,\n }: ScrollToParams) {\n const startTime = Date.now()\n const { x: fromX, y: fromY } = getScrollPosition(parent)\n\n if (fromX === top && fromY === left) {\n if (callback) callback()\n return\n }\n\n const mappedDuration = { x: 500, y: 500, ...duration }\n\n const scroll = () => {\n const currentTime = Date.now()\n\n const timeX = min(1, (currentTime - startTime) / mappedDuration.x)\n const timeY = min(1, (currentTime - startTime) / mappedDuration.y)\n const easedTimeX = easing(timeX)\n const easedTimeY = easing(timeY)\n\n // We use the min of the two times to make sure we scroll at the same speed\n const minTime = Math.min(easedTimeX, easedTimeY)\n\n parent.scroll({\n left: minTime * (left - fromX) + fromX,\n top: minTime * (top - fromY) + fromY,\n })\n\n if (easedTimeX < 1 || easedTimeY < 1) {\n requestAnimationFrame(scroll)\n } else if (callback) {\n callback()\n }\n }\n\n requestAnimationFrame(scroll)\n }\n\n function scrollToTarget({\n target,\n parent = document.documentElement || document.body,\n offset = {},\n speed = 500,\n easing = easings.easeOutQuad,\n }: scrollToTargetParams) {\n let parentEl = unwrapParent(parent)\n if (!parentEl) return\n let targetEl = unwrapTarget(target, parentEl)\n if (!targetEl) return\n\n const mappedOffset = { x: 0, y: 0, ...offset }\n const distance = getDistance(targetEl)\n const leftDistance = distance.left - mappedOffset.x\n const topDistance = distance.top - mappedOffset.y\n\n const scrollDuration = getScrollDuration({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n speed: speed,\n })\n\n scrollTo({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n duration: scrollDuration,\n easing: easing,\n })\n }\n\n return {\n getScrollPosition,\n getDistance,\n getScrollDuration,\n scrollTo,\n scrollToTarget,\n }\n}\n","import { onMounted, onUnmounted } from 'vue'\n\nexport type UseViewportDimensionsOptions = {\n width?: false | string\n height?: false | string\n initialWidth?: false | string\n initialHeight?: false | string\n}\n\nexport function useViewportDimensions(options?: UseViewportDimensionsOptions) {\n const mappedOptions = {\n width: '--vw',\n height: '--vh',\n initialWidth: '--initial-vw',\n initialHeight: '--initial-vh',\n ...options,\n }\n\n const setViewportWidth = (initial?: boolean) => {\n const vw = Number(window.innerWidth * 0.01).toFixed(2)\n\n if (mappedOptions.width) {\n document.documentElement.style.setProperty(mappedOptions.width, `${vw}px`)\n }\n\n if (initial && mappedOptions.initialWidth) {\n document.documentElement.style.setProperty(\n mappedOptions.initialWidth,\n `${vw}px`,\n )\n }\n }\n\n const setViewportHeight = (initial?: boolean) => {\n const vh = Number(window.innerHeight * 0.01).toFixed(2)\n\n if (mappedOptions.height) {\n document.documentElement.style.setProperty(\n mappedOptions.height || '--vh',\n `${vh}px`,\n )\n }\n\n if (initial && mappedOptions.initialHeight) {\n document.documentElement.style.setProperty(\n mappedOptions.initialHeight || '--initial-vh',\n `${vh}px`,\n )\n }\n }\n\n const setDimensions = () => {\n setViewportWidth()\n setViewportHeight()\n }\n\n onMounted(() => {\n setViewportWidth(true)\n setViewportHeight(true)\n\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n\n onUnmounted(() => {\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n}\n"],"mappings":"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","names":["easings","import_core","import_vue"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/composables/useEasings/index.ts","../../packages/composables/useGlyphToSvg/index.ts","../../packages/composables/useScrollTo/index.ts","../../packages/composables/useViewportDimensions/index.ts"],"sourcesContent":["export type EasingKey =\n | 'linear'\n | 'easeInQuad'\n | 'easeOutQuad'\n | 'easeInOutQuad'\n | 'easeInCubic'\n | 'easeOutCubic'\n | 'easeInOutCubic'\n | 'easeInQuart'\n | 'easeOutQuart'\n | 'easeInOutQuart'\n | 'easeInQuint'\n | 'easeOutQuint'\n | 'easeInOutQuint'\n\nexport type EasingFunction = (t: number) => number\n\nexport function useEasings() {\n const easings = {\n linear: (t: number) => t,\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => --t * t * t + 1,\n easeInOutCubic: (t: number) =>\n t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - --t * t * t * t,\n easeInOutQuart: (t: number) =>\n t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t,\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + --t * t * t * t * t,\n easeInOutQuint: (t: number) =>\n t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t,\n }\n\n return easings\n}\n","import { useClipboard } from '@vueuse/core'\nimport { unref } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Font } from 'fontkit'\n\nexport type useGlyphToSvgOptions = {\n fontSize: Ref<number> | number\n fontWeight: Ref<number> | number\n fontFile: Ref<Font> | Font\n}\n\nexport function useGlyphToSvg({\n fontSize,\n fontWeight,\n fontFile,\n}: useGlyphToSvgOptions) {\n const { copy } = useClipboard()\n const mappedFontFile = unref(fontFile)\n const mappedFontSize = unref(fontSize)\n const mappedFontWeight = unref(fontWeight)\n\n const loadVariableFont = () => {\n // @ts-ignore\n const variableFont = mappedFontFile.getVariation({\n wght: mappedFontWeight,\n })\n return variableFont\n }\n\n const convertToSvg = (glyph: any) => {\n // Scale according to current font size\n const scale = mappedFontSize / mappedFontFile.unitsPerEm\n const path = glyph.path.scale(scale, scale).scale(-1, 1).rotate(Math.PI)\n\n // Center inside square bounding box\n const bbox = path.bbox\n const minX = bbox.minX\n const minY = bbox.minY\n const height = bbox.height\n const width = bbox.width\n const dims = unref(fontSize)\n\n const centeredY = (height - dims) / 2 + minY\n const centeredX = (width - dims) / 2 + minX\n\n const viewBox = `${centeredX} ${centeredY} ${dims} ${dims}`\n\n let svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${viewBox}\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">`\n svg += `<path d=\"${path.toSVG()}\" fill=\"currentColor\" />`\n svg += '</svg>'\n\n return svg\n }\n\n const renderSvg = async (codePoint: string) => {\n const font = await loadVariableFont()\n const glyph = font.glyphForCodePoint(codePoint)\n const svg = convertToSvg(glyph)\n return svg\n }\n\n const copySvg = async (codePoint: string) => {\n const svg = await renderSvg(codePoint)\n copy(svg)\n }\n\n return { copySvg, renderSvg }\n}\n","import { useEasings } from '../useEasings'\nimport { unrefElement } from '@vueuse/core'\nimport type { EasingFunction } from '../useEasings'\nimport type { MaybeComputedElementRef, MaybeElement } from '@vueuse/core'\n\nexport type ScrollToTarget =\n | string\n | Element\n | MaybeElement\n | MaybeComputedElementRef\n\nexport type ScrollToParent = ScrollToTarget | Window\n\nexport type ScrollToParams = {\n parent?: Element | Window\n left: number\n top: number\n duration?: { x?: number; y?: number }\n easing?: EasingFunction\n callback?: () => void\n}\n\nexport type getScrollDurationParams = {\n parent: Element | Window\n left: number\n top: number\n speed: number\n}\n\nexport type scrollToTargetParams = {\n target: ScrollToTarget\n parent?: ScrollToParent\n offset?: {\n x?: number\n y?: number\n }\n speed?: number\n easing?: EasingFunction\n}\n\nconst easings = useEasings()\n\nfunction min(a: number, b: number) {\n return a < b ? a : b\n}\n\nfunction unwrapParent(parent: ScrollToParent) {\n if (parent === window) {\n return parent\n } else if (typeof parent === 'string') {\n return document.querySelector(parent) || document.documentElement\n } else {\n return (\n unrefElement(parent as MaybeComputedElementRef<MaybeElement>) ||\n document.documentElement\n )\n }\n}\n\nfunction unwrapTarget(target: ScrollToTarget, parentEl: Element | Window) {\n if (typeof target === 'string') {\n const queryTarget = parentEl === window ? document : (parentEl as Element)\n return queryTarget.querySelector(target)\n } else {\n return unrefElement(target as MaybeComputedElementRef<MaybeElement>)\n }\n}\n\nexport function useScrollTo() {\n function getScrollPosition(element: Element | Window): {\n x: number\n y: number\n } {\n if (element === window) {\n return { x: window.pageXOffset, y: window.pageYOffset }\n } else if (element instanceof Element) {\n return { x: element.scrollLeft, y: element.scrollTop }\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n function getDistance(element: Element): { top: number; left: number } {\n const rect = element.getBoundingClientRect()\n const scrollEl = document.scrollingElement || document.documentElement\n\n return {\n top: rect.top + scrollEl.scrollTop,\n left: rect.left + scrollEl.scrollLeft,\n }\n }\n\n function getScrollDuration({\n parent = document.documentElement || document.body,\n left = 0,\n top = 0,\n speed = 500,\n }: getScrollDurationParams) {\n const currentPos = getScrollPosition(parent)\n const distanceX = currentPos.x - left\n const distanceY = currentPos.y - top\n const durationX = Math.abs((distanceX / speed) * 100)\n const durationY = Math.abs((distanceY / speed) * 100)\n\n return { x: durationX, y: durationY }\n }\n\n function scrollTo({\n parent = document.documentElement || document.body,\n top,\n left,\n duration = {},\n easing = easings.easeOutQuad,\n callback,\n }: ScrollToParams) {\n const startTime = Date.now()\n const { x: fromX, y: fromY } = getScrollPosition(parent)\n\n if (fromX === top && fromY === left) {\n if (callback) callback()\n return\n }\n\n const mappedDuration = { x: 500, y: 500, ...duration }\n\n const scroll = () => {\n const currentTime = Date.now()\n\n const timeX = min(1, (currentTime - startTime) / mappedDuration.x)\n const timeY = min(1, (currentTime - startTime) / mappedDuration.y)\n const easedTimeX = easing(timeX)\n const easedTimeY = easing(timeY)\n\n // We use the min of the two times to make sure we scroll at the same speed\n const minTime = Math.min(easedTimeX, easedTimeY)\n\n parent.scroll({\n left: minTime * (left - fromX) + fromX,\n top: minTime * (top - fromY) + fromY,\n })\n\n if (easedTimeX < 1 || easedTimeY < 1) {\n requestAnimationFrame(scroll)\n } else if (callback) {\n callback()\n }\n }\n\n requestAnimationFrame(scroll)\n }\n\n function scrollToTarget({\n target,\n parent = document.documentElement || document.body,\n offset = {},\n speed = 500,\n easing = easings.easeOutQuad,\n }: scrollToTargetParams) {\n let parentEl = unwrapParent(parent)\n if (!parentEl) return\n let targetEl = unwrapTarget(target, parentEl)\n if (!targetEl) return\n\n const mappedOffset = { x: 0, y: 0, ...offset }\n const distance = getDistance(targetEl)\n const leftDistance = distance.left - mappedOffset.x\n const topDistance = distance.top - mappedOffset.y\n\n const scrollDuration = getScrollDuration({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n speed: speed,\n })\n\n scrollTo({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n duration: scrollDuration,\n easing: easing,\n })\n }\n\n return {\n getScrollPosition,\n getDistance,\n getScrollDuration,\n scrollTo,\n scrollToTarget,\n }\n}\n","import { onMounted, onUnmounted } from 'vue'\n\nexport type UseViewportDimensionsOptions = {\n width?: false | string\n height?: false | string\n initialWidth?: false | string\n initialHeight?: false | string\n}\n\nexport function useViewportDimensions(options?: UseViewportDimensionsOptions) {\n const mappedOptions = {\n width: '--vw',\n height: '--vh',\n initialWidth: '--initial-vw',\n initialHeight: '--initial-vh',\n ...options,\n }\n\n const setViewportWidth = (initial?: boolean) => {\n const vw = Number(window.innerWidth * 0.01).toFixed(2)\n\n if (mappedOptions.width) {\n document.documentElement.style.setProperty(mappedOptions.width, `${vw}px`)\n }\n\n if (initial && mappedOptions.initialWidth) {\n document.documentElement.style.setProperty(\n mappedOptions.initialWidth,\n `${vw}px`\n )\n }\n }\n\n const setViewportHeight = (initial?: boolean) => {\n const vh = Number(window.innerHeight * 0.01).toFixed(2)\n\n if (mappedOptions.height) {\n document.documentElement.style.setProperty(\n mappedOptions.height || '--vh',\n `${vh}px`\n )\n }\n\n if (initial && mappedOptions.initialHeight) {\n document.documentElement.style.setProperty(\n mappedOptions.initialHeight || '--initial-vh',\n `${vh}px`\n )\n }\n }\n\n const setDimensions = () => {\n setViewportWidth()\n setViewportHeight()\n }\n\n onMounted(() => {\n setViewportWidth(true)\n setViewportHeight(true)\n\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n\n onUnmounted(() => {\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n}\n"],"mappings":"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","names":["easings"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/composables/useEasings/index.ts","../../packages/composables/useGlyphToSvg/index.ts","../../packages/composables/useScrollTo/index.ts","../../packages/composables/useViewportDimensions/index.ts"],"sourcesContent":["export type EasingKey =\n | 'linear'\n | 'easeInQuad'\n | 'easeOutQuad'\n | 'easeInOutQuad'\n | 'easeInCubic'\n | 'easeOutCubic'\n | 'easeInOutCubic'\n | 'easeInQuart'\n | 'easeOutQuart'\n | 'easeInOutQuart'\n | 'easeInQuint'\n | 'easeOutQuint'\n | 'easeInOutQuint'\n\nexport type EasingFunction = (t: number) => number\n\nexport function useEasings() {\n const easings = {\n linear: (t: number) => t,\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => --t * t * t + 1,\n easeInOutCubic: (t: number) =>\n t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - --t * t * t * t,\n easeInOutQuart: (t: number) =>\n t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t,\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + --t * t * t * t * t,\n easeInOutQuint: (t: number) =>\n t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t,\n }\n\n return easings\n}\n","import { useClipboard } from '@vueuse/core'\nimport { unref } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Font } from 'fontkit'\n\nexport type useGlyphToSvgOptions = {\n fontSize: Ref<number> | number\n fontWeight: Ref<number> | number\n fontFile: Ref<Font> | Font\n}\n\nexport function useGlyphToSvg({\n fontSize,\n fontWeight,\n fontFile,\n}: useGlyphToSvgOptions) {\n const { copy } = useClipboard()\n const mappedFontFile = unref(fontFile)\n const mappedFontSize = unref(fontSize)\n const mappedFontWeight = unref(fontWeight)\n\n const loadVariableFont = () => {\n // @ts-ignore\n const variableFont = mappedFontFile.getVariation({\n wght: mappedFontWeight,\n })\n return variableFont\n }\n\n const convertToSvg = (glyph: any) => {\n // Scale according to current font size\n const scale = mappedFontSize / mappedFontFile.unitsPerEm\n const path = glyph.path.scale(scale, scale).scale(-1, 1).rotate(Math.PI)\n\n // Center inside square bounding box\n const bbox = path.bbox\n const minX = bbox.minX\n const minY = bbox.minY\n const height = bbox.height\n const width = bbox.width\n const dims = unref(fontSize)\n\n const centeredY = (height - dims) / 2 + minY\n const centeredX = (width - dims) / 2 + minX\n\n const viewBox = `${centeredX} ${centeredY} ${dims} ${dims}`\n\n let svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${viewBox}\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">`\n svg += `<path d=\"${path.toSVG()}\" fill=\"currentColor\" />`\n svg += '</svg>'\n\n return svg\n }\n\n const renderSvg = async (codePoint: string) => {\n const font = await loadVariableFont()\n const glyph = font.glyphForCodePoint(codePoint)\n const svg = convertToSvg(glyph)\n return svg\n }\n\n const copySvg = async (codePoint: string) => {\n const svg = await renderSvg(codePoint)\n copy(svg)\n }\n\n return { copySvg, renderSvg }\n}\n","import { useEasings } from '../useEasings'\nimport { unrefElement } from '@vueuse/core'\nimport type { EasingFunction } from '../useEasings'\nimport type { MaybeComputedElementRef, MaybeElement } from '@vueuse/core'\n\nexport type ScrollToTarget =\n | string\n | Element\n | MaybeElement\n | MaybeComputedElementRef\n\nexport type ScrollToParent = ScrollToTarget | Window\n\nexport type ScrollToParams = {\n parent?: Element | Window\n left: number\n top: number\n duration?: { x?: number; y?: number }\n easing?: EasingFunction\n callback?: () => void\n}\n\nexport type getScrollDurationParams = {\n parent: Element | Window\n left: number\n top: number\n speed: number\n}\n\nexport type scrollToTargetParams = {\n target: ScrollToTarget\n parent?: ScrollToParent\n offset?: {\n x?: number\n y?: number\n }\n speed?: number\n easing?: EasingFunction\n}\n\nconst easings = useEasings()\n\nfunction min(a: number, b: number) {\n return a < b ? a : b\n}\n\nfunction unwrapParent(parent: ScrollToParent) {\n if (parent === window) {\n return parent\n } else if (typeof parent === 'string') {\n return document.querySelector(parent) || document.documentElement\n } else {\n return (\n unrefElement(parent as MaybeComputedElementRef<MaybeElement>) ||\n document.documentElement\n )\n }\n}\n\nfunction unwrapTarget(target: ScrollToTarget, parentEl: Element | Window) {\n if (typeof target === 'string') {\n const queryTarget = parentEl === window ? document : (parentEl as Element)\n return queryTarget.querySelector(target)\n } else {\n return unrefElement(target as MaybeComputedElementRef<MaybeElement>)\n }\n}\n\nexport function useScrollTo() {\n function getScrollPosition(element: Element | Window): {\n x: number\n y: number\n } {\n if (element === window) {\n return { x: window.pageXOffset, y: window.pageYOffset }\n } else if (element instanceof Element) {\n return { x: element.scrollLeft, y: element.scrollTop }\n } else {\n return { x: 0, y: 0 }\n }\n }\n\n function getDistance(element: Element): { top: number; left: number } {\n const rect = element.getBoundingClientRect()\n const scrollEl = document.scrollingElement || document.documentElement\n\n return {\n top: rect.top + scrollEl.scrollTop,\n left: rect.left + scrollEl.scrollLeft,\n }\n }\n\n function getScrollDuration({\n parent = document.documentElement || document.body,\n left = 0,\n top = 0,\n speed = 500,\n }: getScrollDurationParams) {\n const currentPos = getScrollPosition(parent)\n const distanceX = currentPos.x - left\n const distanceY = currentPos.y - top\n const durationX = Math.abs((distanceX / speed) * 100)\n const durationY = Math.abs((distanceY / speed) * 100)\n\n return { x: durationX, y: durationY }\n }\n\n function scrollTo({\n parent = document.documentElement || document.body,\n top,\n left,\n duration = {},\n easing = easings.easeOutQuad,\n callback,\n }: ScrollToParams) {\n const startTime = Date.now()\n const { x: fromX, y: fromY } = getScrollPosition(parent)\n\n if (fromX === top && fromY === left) {\n if (callback) callback()\n return\n }\n\n const mappedDuration = { x: 500, y: 500, ...duration }\n\n const scroll = () => {\n const currentTime = Date.now()\n\n const timeX = min(1, (currentTime - startTime) / mappedDuration.x)\n const timeY = min(1, (currentTime - startTime) / mappedDuration.y)\n const easedTimeX = easing(timeX)\n const easedTimeY = easing(timeY)\n\n // We use the min of the two times to make sure we scroll at the same speed\n const minTime = Math.min(easedTimeX, easedTimeY)\n\n parent.scroll({\n left: minTime * (left - fromX) + fromX,\n top: minTime * (top - fromY) + fromY,\n })\n\n if (easedTimeX < 1 || easedTimeY < 1) {\n requestAnimationFrame(scroll)\n } else if (callback) {\n callback()\n }\n }\n\n requestAnimationFrame(scroll)\n }\n\n function scrollToTarget({\n target,\n parent = document.documentElement || document.body,\n offset = {},\n speed = 500,\n easing = easings.easeOutQuad,\n }: scrollToTargetParams) {\n let parentEl = unwrapParent(parent)\n if (!parentEl) return\n let targetEl = unwrapTarget(target, parentEl)\n if (!targetEl) return\n\n const mappedOffset = { x: 0, y: 0, ...offset }\n const distance = getDistance(targetEl)\n const leftDistance = distance.left - mappedOffset.x\n const topDistance = distance.top - mappedOffset.y\n\n const scrollDuration = getScrollDuration({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n speed: speed,\n })\n\n scrollTo({\n parent: parentEl,\n left: leftDistance,\n top: topDistance,\n duration: scrollDuration,\n easing: easing,\n })\n }\n\n return {\n getScrollPosition,\n getDistance,\n getScrollDuration,\n scrollTo,\n scrollToTarget,\n }\n}\n","import { onMounted, onUnmounted } from 'vue'\n\nexport type UseViewportDimensionsOptions = {\n width?: false | string\n height?: false | string\n initialWidth?: false | string\n initialHeight?: false | string\n}\n\nexport function useViewportDimensions(options?: UseViewportDimensionsOptions) {\n const mappedOptions = {\n width: '--vw',\n height: '--vh',\n initialWidth: '--initial-vw',\n initialHeight: '--initial-vh',\n ...options,\n }\n\n const setViewportWidth = (initial?: boolean) => {\n const vw = Number(window.innerWidth * 0.01).toFixed(2)\n\n if (mappedOptions.width) {\n document.documentElement.style.setProperty(mappedOptions.width, `${vw}px`)\n }\n\n if (initial && mappedOptions.initialWidth) {\n document.documentElement.style.setProperty(\n mappedOptions.initialWidth,\n `${vw}px`,\n )\n }\n }\n\n const setViewportHeight = (initial?: boolean) => {\n const vh = Number(window.innerHeight * 0.01).toFixed(2)\n\n if (mappedOptions.height) {\n document.documentElement.style.setProperty(\n mappedOptions.height || '--vh',\n `${vh}px`,\n )\n }\n\n if (initial && mappedOptions.initialHeight) {\n document.documentElement.style.setProperty(\n mappedOptions.initialHeight || '--initial-vh',\n `${vh}px`,\n )\n }\n }\n\n const setDimensions = () => {\n setViewportWidth()\n setViewportHeight()\n }\n\n onMounted(() => {\n setViewportWidth(true)\n setViewportHeight(true)\n\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n\n onUnmounted(() => {\n window.addEventListener('resize', setDimensions, { passive: true })\n })\n}\n"],"mappings":"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","names":["easings"]}
|
package/dist/nuxt/module.json
CHANGED
package/dist/nuxt/module.mjs
CHANGED
|
@@ -39,10 +39,24 @@ const functions = [
|
|
|
39
39
|
{
|
|
40
40
|
name: "MagicScroll",
|
|
41
41
|
"package": "plugins",
|
|
42
|
-
lastUpdated:
|
|
42
|
+
lastUpdated: 1693997036000,
|
|
43
43
|
docs: "https://maas.egineering/vue-equipment/plugins/MagicScroll/",
|
|
44
44
|
description: "scroll"
|
|
45
45
|
},
|
|
46
|
+
{
|
|
47
|
+
name: "MagicToast",
|
|
48
|
+
"package": "plugins",
|
|
49
|
+
lastUpdated: 1694004931000,
|
|
50
|
+
docs: "https://maas.egineering/vue-equipment/plugins/MagicToast/",
|
|
51
|
+
description: "toast"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "useCountdown",
|
|
55
|
+
"package": "composables",
|
|
56
|
+
lastUpdated: 1693245015000,
|
|
57
|
+
docs: "https://maas.egineering/vue-equipment/composables/useCountdown/",
|
|
58
|
+
description: "counts down to a specific time and date"
|
|
59
|
+
},
|
|
46
60
|
{
|
|
47
61
|
name: "useEasings",
|
|
48
62
|
"package": "composables",
|
|
@@ -67,7 +81,7 @@ const functions = [
|
|
|
67
81
|
{
|
|
68
82
|
name: "useViewportDimensions",
|
|
69
83
|
"package": "composables",
|
|
70
|
-
lastUpdated:
|
|
84
|
+
lastUpdated: 1693245818000,
|
|
71
85
|
docs: "https://maas.egineering/vue-equipment/composables/useViewportDimensions/",
|
|
72
86
|
description: "attach viewport dimensions as css variables to the document"
|
|
73
87
|
}
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
</template>
|
|
17
17
|
|
|
18
18
|
<script setup lang="ts">
|
|
19
|
-
import { ref,
|
|
20
|
-
import {
|
|
19
|
+
import { ref, computed } from 'vue'
|
|
20
|
+
import { useMarqueeApi } from '../composables/useMarqueeApi'
|
|
21
21
|
|
|
22
22
|
interface Props {
|
|
23
23
|
direction?: 'reverse' | 'normal'
|
|
@@ -32,7 +32,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
32
32
|
const parentRef = ref<HTMLElement | undefined>(undefined)
|
|
33
33
|
const childRef = ref<HTMLElement | undefined>(undefined)
|
|
34
34
|
|
|
35
|
-
const { duplicates, playing, play, pause } =
|
|
35
|
+
const { duplicates, playing, play, pause } = useMarqueeApi({
|
|
36
36
|
child: childRef,
|
|
37
37
|
parent: parentRef,
|
|
38
38
|
options: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type MaybeRef } from '@vueuse/core';
|
|
2
|
-
export type
|
|
2
|
+
export type UseMarqueeApiParams = {
|
|
3
3
|
child: MaybeRef<HTMLElement | null | undefined>;
|
|
4
4
|
parent: MaybeRef<HTMLElement | null | undefined>;
|
|
5
5
|
options?: {
|
|
@@ -7,7 +7,7 @@ export type UseMarqueeParams = {
|
|
|
7
7
|
direction?: MaybeRef<'reverse' | 'normal'>;
|
|
8
8
|
};
|
|
9
9
|
};
|
|
10
|
-
export declare function
|
|
10
|
+
export declare function useMarqueeApi({ child, parent, options }: UseMarqueeApiParams): {
|
|
11
11
|
duplicates: import("vue").Ref<number>;
|
|
12
12
|
playing: import("vue").Ref<boolean>;
|
|
13
13
|
play: () => void;
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
useResizeObserver,
|
|
5
5
|
toValue
|
|
6
6
|
} from "@vueuse/core";
|
|
7
|
-
export function
|
|
7
|
+
export function useMarqueeApi({ child, parent, options }) {
|
|
8
8
|
const duplicates = ref(1);
|
|
9
9
|
const childRect = useElementBounding(child);
|
|
10
10
|
const parentRect = useElementBounding(parent);
|
|
@@ -25,8 +25,10 @@
|
|
|
25
25
|
<transition
|
|
26
26
|
:name="mappedOptions.transitions?.content"
|
|
27
27
|
@before-leave="onBeforeLeave"
|
|
28
|
+
@leave="onLeave"
|
|
28
29
|
@after-leave="onAfterLeave"
|
|
29
30
|
@before-enter="onBeforeEnter"
|
|
31
|
+
@enter="onEnter"
|
|
30
32
|
@after-enter="onAfterEnter"
|
|
31
33
|
>
|
|
32
34
|
<div
|
|
@@ -36,7 +38,7 @@
|
|
|
36
38
|
>
|
|
37
39
|
<component
|
|
38
40
|
v-if="component"
|
|
39
|
-
v-bind="
|
|
41
|
+
v-bind="props"
|
|
40
42
|
:is="component"
|
|
41
43
|
@close="close"
|
|
42
44
|
/>
|
|
@@ -49,20 +51,28 @@
|
|
|
49
51
|
</template>
|
|
50
52
|
|
|
51
53
|
<script setup lang="ts">
|
|
52
|
-
import {
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
import {
|
|
55
|
+
ref,
|
|
56
|
+
watch,
|
|
57
|
+
nextTick,
|
|
58
|
+
toValue,
|
|
59
|
+
type Component,
|
|
60
|
+
type MaybeRef,
|
|
61
|
+
} from 'vue'
|
|
62
|
+
import { onKeyStroke } from '@vueuse/core'
|
|
63
|
+
import { defu } from 'defu'
|
|
55
64
|
import { defaultOptions } from './../utils/defaultOptions'
|
|
65
|
+
import { useModalApi } from './../composables/useModalApi'
|
|
56
66
|
import { useModalEmitter } from './../composables/useModalEmitter'
|
|
67
|
+
import { useModalCallback } from '../composables/useModalCallback'
|
|
57
68
|
|
|
58
|
-
import type {
|
|
59
|
-
import type { DefaultOptions } from './../types/index'
|
|
69
|
+
import type { Options } from './../types/index'
|
|
60
70
|
|
|
61
71
|
interface MagicModalProps {
|
|
62
72
|
id: MaybeRef<string>
|
|
63
|
-
component?:
|
|
64
|
-
|
|
65
|
-
options?:
|
|
73
|
+
component?: Component
|
|
74
|
+
props?: Record<string, unknown>
|
|
75
|
+
options?: Options
|
|
66
76
|
}
|
|
67
77
|
|
|
68
78
|
const props = withDefaults(defineProps<MagicModalProps>(), {
|
|
@@ -71,13 +81,7 @@ const props = withDefaults(defineProps<MagicModalProps>(), {
|
|
|
71
81
|
|
|
72
82
|
const modal = ref<HTMLElement | undefined>(undefined)
|
|
73
83
|
const modalApi = useModalApi(props.id, { focusTarget: modal })
|
|
74
|
-
|
|
75
|
-
const mappedOptions = {
|
|
76
|
-
...defaultOptions,
|
|
77
|
-
...props.options,
|
|
78
|
-
teleport: { ...defaultOptions.teleport, ...props.options.teleport },
|
|
79
|
-
transitions: { ...defaultOptions.transitions, ...props.options.transitions },
|
|
80
|
-
}
|
|
84
|
+
const mappedOptions = defu(props.options, defaultOptions)
|
|
81
85
|
|
|
82
86
|
const {
|
|
83
87
|
isActive,
|
|
@@ -94,6 +98,25 @@ const {
|
|
|
94
98
|
const innerActive = ref(false)
|
|
95
99
|
const wrapperActive = ref(false)
|
|
96
100
|
|
|
101
|
+
const {
|
|
102
|
+
onBeforeEnter,
|
|
103
|
+
onEnter,
|
|
104
|
+
onAfterEnter,
|
|
105
|
+
onBeforeLeave,
|
|
106
|
+
onLeave,
|
|
107
|
+
onAfterLeave,
|
|
108
|
+
} = useModalCallback({
|
|
109
|
+
id: props.id,
|
|
110
|
+
mappedOptions,
|
|
111
|
+
addScrollLockPadding,
|
|
112
|
+
removeScrollLockPadding,
|
|
113
|
+
lockScroll,
|
|
114
|
+
unlockScroll,
|
|
115
|
+
trapFocus,
|
|
116
|
+
releaseFocus,
|
|
117
|
+
wrapperActive,
|
|
118
|
+
})
|
|
119
|
+
|
|
97
120
|
// Handle state
|
|
98
121
|
async function onOpen() {
|
|
99
122
|
wrapperActive.value = true
|
|
@@ -105,48 +128,6 @@ function onClose() {
|
|
|
105
128
|
innerActive.value = false
|
|
106
129
|
}
|
|
107
130
|
|
|
108
|
-
// Transition Callbacks
|
|
109
|
-
function onBeforeEnter() {
|
|
110
|
-
useModalEmitter().emit('beforeEnter', toValue(props.id))
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async function onAfterEnter() {
|
|
114
|
-
if (mappedOptions.scrollLock) {
|
|
115
|
-
if (mappedOptions.scrollLockPadding) {
|
|
116
|
-
addScrollLockPadding()
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
lockScroll()
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (mappedOptions.focusTrap) {
|
|
123
|
-
await nextTick()
|
|
124
|
-
trapFocus()
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
useModalEmitter().emit('afterEnter', toValue(props.id))
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
function onBeforeLeave() {
|
|
131
|
-
useModalEmitter().emit('beforeLeave', toValue(props.id))
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function onAfterLeave() {
|
|
135
|
-
if (mappedOptions.scrollLock) {
|
|
136
|
-
unlockScroll()
|
|
137
|
-
if (mappedOptions.scrollLockPadding) {
|
|
138
|
-
removeScrollLockPadding()
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
if (mappedOptions.focusTrap) {
|
|
143
|
-
releaseFocus()
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
wrapperActive.value = false
|
|
147
|
-
useModalEmitter().emit('afterLeave', toValue(props.id))
|
|
148
|
-
}
|
|
149
|
-
|
|
150
131
|
onKeyStroke('Escape', (e) => {
|
|
151
132
|
e.preventDefault()
|
|
152
133
|
close()
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type {
|
|
1
|
+
import { type Component, type MaybeRef } from 'vue';
|
|
2
|
+
import type { Options } from './../types/index';
|
|
3
3
|
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
4
|
+
props: {
|
|
5
|
+
type: import("vue").PropType<Record<string, unknown>>;
|
|
6
|
+
};
|
|
4
7
|
id: {
|
|
5
8
|
type: import("vue").PropType<MaybeRef<string>>;
|
|
6
9
|
required: true;
|
|
7
10
|
};
|
|
8
11
|
component: {
|
|
9
|
-
type: import("vue").PropType<
|
|
10
|
-
};
|
|
11
|
-
componentProps: {
|
|
12
|
-
type: import("vue").PropType<Record<string, unknown>>;
|
|
12
|
+
type: import("vue").PropType<Component>;
|
|
13
13
|
};
|
|
14
14
|
options: {
|
|
15
|
-
type: import("vue").PropType<
|
|
16
|
-
default: () =>
|
|
15
|
+
type: import("vue").PropType<Options>;
|
|
16
|
+
default: () => Options;
|
|
17
17
|
};
|
|
18
18
|
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
19
|
+
props: {
|
|
20
|
+
type: import("vue").PropType<Record<string, unknown>>;
|
|
21
|
+
};
|
|
19
22
|
id: {
|
|
20
23
|
type: import("vue").PropType<MaybeRef<string>>;
|
|
21
24
|
required: true;
|
|
22
25
|
};
|
|
23
26
|
component: {
|
|
24
|
-
type: import("vue").PropType<
|
|
25
|
-
};
|
|
26
|
-
componentProps: {
|
|
27
|
-
type: import("vue").PropType<Record<string, unknown>>;
|
|
27
|
+
type: import("vue").PropType<Component>;
|
|
28
28
|
};
|
|
29
29
|
options: {
|
|
30
|
-
type: import("vue").PropType<
|
|
31
|
-
default: () =>
|
|
30
|
+
type: import("vue").PropType<Options>;
|
|
31
|
+
default: () => Options;
|
|
32
32
|
};
|
|
33
33
|
}>>, {
|
|
34
|
-
options:
|
|
34
|
+
options: Options;
|
|
35
35
|
}, {}>, {
|
|
36
36
|
default?(_: {}): any;
|
|
37
37
|
}>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type {
|
|
3
|
-
|
|
1
|
+
import { type MaybeRef } from 'vue';
|
|
2
|
+
import type { Options } from '../types/index.js';
|
|
3
|
+
import type { MaybeElementRef } from '@vueuse/core';
|
|
4
|
+
export type useModalApiOptions = Pick<Options, 'scrollLock'> & {
|
|
4
5
|
focusTarget: MaybeElementRef;
|
|
5
6
|
};
|
|
6
7
|
export declare function useModalApi(id?: MaybeRef<string>, options?: useModalApiOptions): {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { ref, computed } from "vue";
|
|
1
|
+
import { ref, computed, toValue } from "vue";
|
|
2
|
+
import { defu } from "defu";
|
|
2
3
|
import { v4 as uuidv4 } from "uuid";
|
|
3
|
-
import {
|
|
4
|
+
import { useScrollLock } from "@vueuse/core";
|
|
4
5
|
import { useFocusTrap } from "@vueuse/integrations/useFocusTrap";
|
|
5
6
|
import { useModalStore } from "./useModalStore.mjs";
|
|
6
7
|
const defaultOptions = {
|
|
@@ -10,7 +11,7 @@ const defaultOptions = {
|
|
|
10
11
|
export function useModalApi(id, options) {
|
|
11
12
|
const positionFixedElements = ref([]);
|
|
12
13
|
const mappedId = computed(() => toValue(id) || uuidv4());
|
|
13
|
-
const mappedOptions =
|
|
14
|
+
const mappedOptions = defu(options, defaultOptions);
|
|
14
15
|
const focusTrap = mappedOptions.focusTarget ? useFocusTrap(mappedOptions.focusTarget) : void 0;
|
|
15
16
|
const scrollLock = mappedOptions.scrollLock && typeof window !== "undefined" ? useScrollLock(document.body) : ref(false);
|
|
16
17
|
const { modalStore, addIdToStore, removeIdFromStore } = useModalStore();
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Ref, type MaybeRef } from 'vue';
|
|
2
|
+
import type { Options } from '../types.js';
|
|
3
|
+
type Args = {
|
|
4
|
+
id: MaybeRef<string>;
|
|
5
|
+
mappedOptions: Options;
|
|
6
|
+
addScrollLockPadding: () => void;
|
|
7
|
+
removeScrollLockPadding: () => void;
|
|
8
|
+
lockScroll: () => void;
|
|
9
|
+
unlockScroll: () => void;
|
|
10
|
+
trapFocus: () => void;
|
|
11
|
+
releaseFocus: () => void;
|
|
12
|
+
wrapperActive: Ref<boolean>;
|
|
13
|
+
};
|
|
14
|
+
export declare function useModalCallback({ id, mappedOptions, addScrollLockPadding, removeScrollLockPadding, lockScroll, unlockScroll, trapFocus, releaseFocus, wrapperActive, }: Args): {
|
|
15
|
+
onBeforeEnter: (_el: Element) => void;
|
|
16
|
+
onEnter: (_el: Element) => void;
|
|
17
|
+
onAfterEnter: (el: Element) => Promise<void>;
|
|
18
|
+
onBeforeLeave: (_el: Element) => void;
|
|
19
|
+
onLeave: (el: Element) => void;
|
|
20
|
+
onAfterLeave: (_el: Element) => void;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { toValue, nextTick } from "vue";
|
|
2
|
+
import { useModalEmitter } from "./useModalEmitter.mjs";
|
|
3
|
+
export function useModalCallback({
|
|
4
|
+
id,
|
|
5
|
+
mappedOptions,
|
|
6
|
+
addScrollLockPadding,
|
|
7
|
+
removeScrollLockPadding,
|
|
8
|
+
lockScroll,
|
|
9
|
+
unlockScroll,
|
|
10
|
+
trapFocus,
|
|
11
|
+
releaseFocus,
|
|
12
|
+
wrapperActive
|
|
13
|
+
}) {
|
|
14
|
+
function onBeforeEnter(_el) {
|
|
15
|
+
useModalEmitter().emit("beforeEnter", toValue(id));
|
|
16
|
+
}
|
|
17
|
+
function onEnter(_el) {
|
|
18
|
+
useModalEmitter().emit("enter", toValue(id));
|
|
19
|
+
}
|
|
20
|
+
async function onAfterEnter(el) {
|
|
21
|
+
useModalEmitter().emit("afterEnter", toValue(id));
|
|
22
|
+
if (mappedOptions.scrollLock) {
|
|
23
|
+
if (mappedOptions.scrollLockPadding) {
|
|
24
|
+
addScrollLockPadding();
|
|
25
|
+
}
|
|
26
|
+
lockScroll();
|
|
27
|
+
}
|
|
28
|
+
if (mappedOptions.focusTrap) {
|
|
29
|
+
await nextTick();
|
|
30
|
+
trapFocus();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function onBeforeLeave(_el) {
|
|
34
|
+
useModalEmitter().emit("beforeLeave", toValue(id));
|
|
35
|
+
}
|
|
36
|
+
function onLeave(el) {
|
|
37
|
+
useModalEmitter().emit("leave", toValue(id));
|
|
38
|
+
}
|
|
39
|
+
function onAfterLeave(_el) {
|
|
40
|
+
useModalEmitter().emit("afterLeave", toValue(id));
|
|
41
|
+
if (mappedOptions.scrollLock) {
|
|
42
|
+
unlockScroll();
|
|
43
|
+
if (mappedOptions.scrollLockPadding) {
|
|
44
|
+
removeScrollLockPadding();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (mappedOptions.focusTrap) {
|
|
48
|
+
releaseFocus();
|
|
49
|
+
}
|
|
50
|
+
wrapperActive.value = false;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
onBeforeEnter,
|
|
54
|
+
onEnter,
|
|
55
|
+
onAfterEnter,
|
|
56
|
+
onBeforeLeave,
|
|
57
|
+
onLeave,
|
|
58
|
+
onAfterLeave
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
type
|
|
1
|
+
type Options = {
|
|
2
2
|
backdrop?: boolean;
|
|
3
3
|
focusTrap?: boolean;
|
|
4
4
|
scrollLock?: boolean;
|
|
5
5
|
scrollLockPadding?: boolean;
|
|
6
6
|
teleport?: {
|
|
7
|
-
target
|
|
7
|
+
target?: string;
|
|
8
8
|
disabled?: boolean;
|
|
9
9
|
};
|
|
10
10
|
transitions?: {
|
|
@@ -13,9 +13,11 @@ type DefaultOptions = {
|
|
|
13
13
|
};
|
|
14
14
|
};
|
|
15
15
|
type ModalEvents = {
|
|
16
|
-
afterEnter: string;
|
|
17
|
-
afterLeave: string;
|
|
18
16
|
beforeEnter: string;
|
|
17
|
+
enter: string;
|
|
18
|
+
afterEnter: string;
|
|
19
19
|
beforeLeave: string;
|
|
20
|
+
leave: string;
|
|
21
|
+
afterLeave: string;
|
|
20
22
|
};
|
|
21
|
-
export type {
|
|
23
|
+
export type { Options, ModalEvents };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
declare const defaultOptions:
|
|
1
|
+
import type { Options } from '../types/index.js';
|
|
2
|
+
declare const defaultOptions: Options;
|
|
3
3
|
export { defaultOptions };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ref, watch, unref } from "vue";
|
|
2
|
-
import { useEventListener,
|
|
1
|
+
import { ref, watch, unref, toValue } from "vue";
|
|
2
|
+
import { useEventListener, watchIgnorable } from "@vueuse/core";
|
|
3
3
|
export function useMediaApi(target) {
|
|
4
4
|
const currentTime = ref(0);
|
|
5
5
|
const duration = ref(0);
|