@maas/vue-equipment 0.7.9 → 0.8.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/README.md +4 -0
- package/dist/composables/index.js +1 -1
- package/dist/composables/index.js.map +1 -1
- package/dist/composables/index.mjs +1 -1
- package/dist/composables/index.mjs.map +1 -1
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +8 -14
- package/dist/plugins/MagicMarquee/index.d.ts +3 -2
- package/dist/plugins/MagicMarquee/index.mjs +4 -4
- package/dist/plugins/MagicMarquee/nuxt.d.ts +0 -2
- package/dist/plugins/MagicMarquee/nuxt.mjs +19 -4
- package/dist/plugins/MagicModal/index.d.ts +3 -2
- package/dist/plugins/MagicModal/index.mjs +4 -4
- package/dist/plugins/MagicModal/nuxt.d.ts +0 -2
- package/dist/plugins/MagicModal/nuxt.mjs +28 -4
- package/dist/plugins/MagicPlayer/index.d.ts +8 -2
- package/dist/plugins/MagicPlayer/index.mjs +28 -9
- package/dist/plugins/MagicPlayer/nuxt.d.ts +0 -2
- package/dist/plugins/MagicPlayer/nuxt.mjs +35 -4
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerControls.vue +5 -2
- package/dist/plugins/MagicScroll/index.d.ts +7 -2
- package/dist/plugins/MagicScroll/index.mjs +12 -5
- package/dist/plugins/MagicScroll/nuxt.d.ts +0 -2
- package/dist/plugins/MagicScroll/nuxt.mjs +19 -4
- package/dist/plugins/MagicScroll/src/types/injectionKeys.d.ts +1 -4
- package/dist/plugins/MagicScroll/src/types/injectionKeys.mjs +1 -2
- package/dist/plugins/MagicToast/index.d.ts +3 -2
- package/dist/plugins/MagicToast/index.mjs +4 -4
- package/dist/plugins/MagicToast/nuxt.d.ts +0 -2
- package/dist/plugins/MagicToast/nuxt.mjs +26 -4
- package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue +1 -0
- package/dist/plugins/index.d.ts +5 -5
- package/dist/utils/index.js +1 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +1 -2
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/plugins/MagicScroll/src/store/index.d.ts +0 -4
- package/dist/plugins/MagicScroll/src/store/index.mjs +0 -5
package/README.md
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
|
|
11
11
|
> A _magic_ collection of essential Vue composables, plugins, components and directives
|
|
12
12
|
|
|
13
|
+
## 🚧 Disclaimer
|
|
14
|
+
|
|
15
|
+
This project is still under development. Expect breaking changes before the first stable release.
|
|
16
|
+
|
|
13
17
|
## 🧱 Contribute
|
|
14
18
|
|
|
15
19
|
> Coming soon
|
|
@@ -380,7 +380,7 @@ function useViewportDimensions(options) {
|
|
|
380
380
|
window.addEventListener("resize", setDimensions, { passive: true });
|
|
381
381
|
});
|
|
382
382
|
(0, import_vue3.onUnmounted)(() => {
|
|
383
|
-
window.
|
|
383
|
+
window.removeEventListener("resize", setDimensions);
|
|
384
384
|
});
|
|
385
385
|
}
|
|
386
386
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/composables/index.ts","../../packages/composables/useCountdown/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 './useCountdown'\nexport * from './useEasings'\nexport * from './useGlyphToSvg'\nexport * from './useScrollTo'\nexport * from './useViewportDimensions'\n","import { computed, onMounted, ref } from 'vue'\nimport { MagicTimer } from '@maas/magic-timer'\nimport { DateTime } from 'luxon'\n\n// type for DD-MM-YYYY\nexport type DateFormat = `${number}-${number}-${number}`\n\n// type for HH:MM:SS\nexport type TimeFormat = `${number}:${number}:${number}`\n\n// interface for the options\nexport interface CountdownOptions {\n endDate: DateFormat\n endTime?: TimeFormat\n timezone?: string\n}\n\n// default options\nconst defaultOptions: CountdownOptions = {\n endDate: '1970-01-01',\n endTime: '00:00:00',\n}\n\nexport function useCountdown(options: CountdownOptions, callback?: () => void) {\n // endDate needs to have this format: YYYY-MM-DD\n if (!options.endDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n options.endDate = '1970-01-01'\n console.error(\n 'useCountdownClock: The \"endDate\" option needs to be a string with the format YYYY-MM-DD',\n )\n }\n\n // endTime needs to have this format: HH:MM:SS\n if (options.endTime && !options.endTime.match(/^\\d{2}:\\d{2}:\\d{2}$/)) {\n console.error(\n 'useCountdownClock: The \"endTime\" option needs to be a string with the format HH:MM:SS',\n )\n }\n\n // invalid timezone\n if (options.timezone && !DateTime.now().setZone(options.timezone).isValid) {\n console.error(\n `useCountdownClock: The \"timezone\" option \"${\n options.timezone\n }\" is not a valid timezone. Do you mean ${\n DateTime.local().zoneName\n }? For more information see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones`,\n )\n }\n\n // Merge the options with the default options\n options = { ...defaultOptions, ...options } as CountdownOptions\n\n // Create a new timer instance\n const timer = new MagicTimer()\n\n // Create the countdown values\n const years = ref(0)\n const days = ref(0)\n const hours = ref(0)\n const minutes = ref(0)\n const seconds = ref(0)\n\n // Create reactive refs for endDate and endTime so we can update them later\n const endDate = ref(options.endDate)\n const endTime = ref(options.endTime)\n\n // Parse the date string into an date object\n const parseDate = (dateStr: DateFormat) => {\n const [year, month, day] = dateStr.split('-').map(Number)\n return { year, month, day }\n }\n\n // Parse the time string into an time object\n const parseTime = (timeStr: TimeFormat) => {\n const [hour, minute, second] = timeStr.split(':').map(Number)\n return { hour, minute, second }\n }\n\n // Calculate the target end date and time\n const endDateTime = computed(() => {\n const { year, month, day } = parseDate(endDate.value!)\n const { hour, minute, second } = parseTime(endTime.value!)\n\n return DateTime.fromObject(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n },\n {\n zone: options.timezone,\n },\n )\n })\n\n // Update the countdown values\n const tick = () => {\n const now = DateTime.now().setZone(options.timezone)\n const end = endDateTime.value\n\n const diff = end\n .diff(now, [\n 'years',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n ])\n .toObject()\n\n if (end < now) {\n timer.stop()\n if (callback) callback()\n return\n }\n\n years.value = diff.years ?? 0\n days.value = diff.days ?? 0\n hours.value = diff.hours ?? 0\n minutes.value = diff.minutes ?? 0\n seconds.value = diff.seconds ?? 0\n }\n\n // Format numbers with leading zero\n const pad = (value: number): string => {\n return ('0' + value).slice(-2)\n }\n\n const onTick = (callback: () => void) => timer.on('tick', callback)\n\n // Listen to the tick event\n timer.on('tick', tick)\n\n const restart = () => {\n timer.start()\n }\n\n // Start the timer on mount\n onMounted(() => {\n tick()\n timer.start()\n })\n\n return {\n years,\n days,\n hours,\n minutes,\n seconds,\n endDate,\n endTime,\n pad,\n restart,\n onTick,\n }\n}\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":["callback","easings","import_vue","import_core","import_vue"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/composables/index.ts","../../packages/composables/useCountdown/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 './useCountdown'\nexport * from './useEasings'\nexport * from './useGlyphToSvg'\nexport * from './useScrollTo'\nexport * from './useViewportDimensions'\n","import { computed, onMounted, ref } from 'vue'\nimport { MagicTimer } from '@maas/magic-timer'\nimport { DateTime } from 'luxon'\n\n// type for DD-MM-YYYY\nexport type DateFormat = `${number}-${number}-${number}`\n\n// type for HH:MM:SS\nexport type TimeFormat = `${number}:${number}:${number}`\n\n// interface for the options\nexport interface CountdownOptions {\n endDate: DateFormat\n endTime?: TimeFormat\n timezone?: string\n}\n\n// default options\nconst defaultOptions: CountdownOptions = {\n endDate: '1970-01-01',\n endTime: '00:00:00',\n}\n\nexport function useCountdown(options: CountdownOptions, callback?: () => void) {\n // endDate needs to have this format: YYYY-MM-DD\n if (!options.endDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n options.endDate = '1970-01-01'\n console.error(\n 'useCountdownClock: The \"endDate\" option needs to be a string with the format YYYY-MM-DD',\n )\n }\n\n // endTime needs to have this format: HH:MM:SS\n if (options.endTime && !options.endTime.match(/^\\d{2}:\\d{2}:\\d{2}$/)) {\n console.error(\n 'useCountdownClock: The \"endTime\" option needs to be a string with the format HH:MM:SS',\n )\n }\n\n // invalid timezone\n if (options.timezone && !DateTime.now().setZone(options.timezone).isValid) {\n console.error(\n `useCountdownClock: The \"timezone\" option \"${\n options.timezone\n }\" is not a valid timezone. Do you mean ${\n DateTime.local().zoneName\n }? For more information see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones`,\n )\n }\n\n // Merge the options with the default options\n options = { ...defaultOptions, ...options } as CountdownOptions\n\n // Create a new timer instance\n const timer = new MagicTimer()\n\n // Create the countdown values\n const years = ref(0)\n const days = ref(0)\n const hours = ref(0)\n const minutes = ref(0)\n const seconds = ref(0)\n\n // Create reactive refs for endDate and endTime so we can update them later\n const endDate = ref(options.endDate)\n const endTime = ref(options.endTime)\n\n // Parse the date string into an date object\n const parseDate = (dateStr: DateFormat) => {\n const [year, month, day] = dateStr.split('-').map(Number)\n return { year, month, day }\n }\n\n // Parse the time string into an time object\n const parseTime = (timeStr: TimeFormat) => {\n const [hour, minute, second] = timeStr.split(':').map(Number)\n return { hour, minute, second }\n }\n\n // Calculate the target end date and time\n const endDateTime = computed(() => {\n const { year, month, day } = parseDate(endDate.value!)\n const { hour, minute, second } = parseTime(endTime.value!)\n\n return DateTime.fromObject(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n },\n {\n zone: options.timezone,\n },\n )\n })\n\n // Update the countdown values\n const tick = () => {\n const now = DateTime.now().setZone(options.timezone)\n const end = endDateTime.value\n\n const diff = end\n .diff(now, [\n 'years',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n ])\n .toObject()\n\n if (end < now) {\n timer.stop()\n if (callback) callback()\n return\n }\n\n years.value = diff.years ?? 0\n days.value = diff.days ?? 0\n hours.value = diff.hours ?? 0\n minutes.value = diff.minutes ?? 0\n seconds.value = diff.seconds ?? 0\n }\n\n // Format numbers with leading zero\n const pad = (value: number): string => {\n return ('0' + value).slice(-2)\n }\n\n const onTick = (callback: () => void) => timer.on('tick', callback)\n\n // Listen to the tick event\n timer.on('tick', tick)\n\n const restart = () => {\n timer.start()\n }\n\n // Start the timer on mount\n onMounted(() => {\n tick()\n timer.start()\n })\n\n return {\n years,\n days,\n hours,\n minutes,\n seconds,\n endDate,\n endTime,\n pad,\n restart,\n onTick,\n }\n}\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.removeEventListener('resize', setDimensions)\n })\n}\n"],"mappings":"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","names":["callback","easings","import_vue","import_core","import_vue"]}
|
|
@@ -350,7 +350,7 @@ function useViewportDimensions(options) {
|
|
|
350
350
|
window.addEventListener("resize", setDimensions, { passive: true });
|
|
351
351
|
});
|
|
352
352
|
onUnmounted(() => {
|
|
353
|
-
window.
|
|
353
|
+
window.removeEventListener("resize", setDimensions);
|
|
354
354
|
});
|
|
355
355
|
}
|
|
356
356
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/composables/useCountdown/index.ts","../../packages/composables/useEasings/index.ts","../../packages/composables/useGlyphToSvg/index.ts","../../packages/composables/useScrollTo/index.ts","../../packages/composables/useViewportDimensions/index.ts"],"sourcesContent":["import { computed, onMounted, ref } from 'vue'\nimport { MagicTimer } from '@maas/magic-timer'\nimport { DateTime } from 'luxon'\n\n// type for DD-MM-YYYY\nexport type DateFormat = `${number}-${number}-${number}`\n\n// type for HH:MM:SS\nexport type TimeFormat = `${number}:${number}:${number}`\n\n// interface for the options\nexport interface CountdownOptions {\n endDate: DateFormat\n endTime?: TimeFormat\n timezone?: string\n}\n\n// default options\nconst defaultOptions: CountdownOptions = {\n endDate: '1970-01-01',\n endTime: '00:00:00',\n}\n\nexport function useCountdown(options: CountdownOptions, callback?: () => void) {\n // endDate needs to have this format: YYYY-MM-DD\n if (!options.endDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n options.endDate = '1970-01-01'\n console.error(\n 'useCountdownClock: The \"endDate\" option needs to be a string with the format YYYY-MM-DD',\n )\n }\n\n // endTime needs to have this format: HH:MM:SS\n if (options.endTime && !options.endTime.match(/^\\d{2}:\\d{2}:\\d{2}$/)) {\n console.error(\n 'useCountdownClock: The \"endTime\" option needs to be a string with the format HH:MM:SS',\n )\n }\n\n // invalid timezone\n if (options.timezone && !DateTime.now().setZone(options.timezone).isValid) {\n console.error(\n `useCountdownClock: The \"timezone\" option \"${\n options.timezone\n }\" is not a valid timezone. Do you mean ${\n DateTime.local().zoneName\n }? For more information see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones`,\n )\n }\n\n // Merge the options with the default options\n options = { ...defaultOptions, ...options } as CountdownOptions\n\n // Create a new timer instance\n const timer = new MagicTimer()\n\n // Create the countdown values\n const years = ref(0)\n const days = ref(0)\n const hours = ref(0)\n const minutes = ref(0)\n const seconds = ref(0)\n\n // Create reactive refs for endDate and endTime so we can update them later\n const endDate = ref(options.endDate)\n const endTime = ref(options.endTime)\n\n // Parse the date string into an date object\n const parseDate = (dateStr: DateFormat) => {\n const [year, month, day] = dateStr.split('-').map(Number)\n return { year, month, day }\n }\n\n // Parse the time string into an time object\n const parseTime = (timeStr: TimeFormat) => {\n const [hour, minute, second] = timeStr.split(':').map(Number)\n return { hour, minute, second }\n }\n\n // Calculate the target end date and time\n const endDateTime = computed(() => {\n const { year, month, day } = parseDate(endDate.value!)\n const { hour, minute, second } = parseTime(endTime.value!)\n\n return DateTime.fromObject(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n },\n {\n zone: options.timezone,\n },\n )\n })\n\n // Update the countdown values\n const tick = () => {\n const now = DateTime.now().setZone(options.timezone)\n const end = endDateTime.value\n\n const diff = end\n .diff(now, [\n 'years',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n ])\n .toObject()\n\n if (end < now) {\n timer.stop()\n if (callback) callback()\n return\n }\n\n years.value = diff.years ?? 0\n days.value = diff.days ?? 0\n hours.value = diff.hours ?? 0\n minutes.value = diff.minutes ?? 0\n seconds.value = diff.seconds ?? 0\n }\n\n // Format numbers with leading zero\n const pad = (value: number): string => {\n return ('0' + value).slice(-2)\n }\n\n const onTick = (callback: () => void) => timer.on('tick', callback)\n\n // Listen to the tick event\n timer.on('tick', tick)\n\n const restart = () => {\n timer.start()\n }\n\n // Start the timer on mount\n onMounted(() => {\n tick()\n timer.start()\n })\n\n return {\n years,\n days,\n hours,\n minutes,\n seconds,\n endDate,\n endTime,\n pad,\n restart,\n onTick,\n }\n}\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":["callback","easings","onMounted"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/composables/useCountdown/index.ts","../../packages/composables/useEasings/index.ts","../../packages/composables/useGlyphToSvg/index.ts","../../packages/composables/useScrollTo/index.ts","../../packages/composables/useViewportDimensions/index.ts"],"sourcesContent":["import { computed, onMounted, ref } from 'vue'\nimport { MagicTimer } from '@maas/magic-timer'\nimport { DateTime } from 'luxon'\n\n// type for DD-MM-YYYY\nexport type DateFormat = `${number}-${number}-${number}`\n\n// type for HH:MM:SS\nexport type TimeFormat = `${number}:${number}:${number}`\n\n// interface for the options\nexport interface CountdownOptions {\n endDate: DateFormat\n endTime?: TimeFormat\n timezone?: string\n}\n\n// default options\nconst defaultOptions: CountdownOptions = {\n endDate: '1970-01-01',\n endTime: '00:00:00',\n}\n\nexport function useCountdown(options: CountdownOptions, callback?: () => void) {\n // endDate needs to have this format: YYYY-MM-DD\n if (!options.endDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n options.endDate = '1970-01-01'\n console.error(\n 'useCountdownClock: The \"endDate\" option needs to be a string with the format YYYY-MM-DD',\n )\n }\n\n // endTime needs to have this format: HH:MM:SS\n if (options.endTime && !options.endTime.match(/^\\d{2}:\\d{2}:\\d{2}$/)) {\n console.error(\n 'useCountdownClock: The \"endTime\" option needs to be a string with the format HH:MM:SS',\n )\n }\n\n // invalid timezone\n if (options.timezone && !DateTime.now().setZone(options.timezone).isValid) {\n console.error(\n `useCountdownClock: The \"timezone\" option \"${\n options.timezone\n }\" is not a valid timezone. Do you mean ${\n DateTime.local().zoneName\n }? For more information see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones`,\n )\n }\n\n // Merge the options with the default options\n options = { ...defaultOptions, ...options } as CountdownOptions\n\n // Create a new timer instance\n const timer = new MagicTimer()\n\n // Create the countdown values\n const years = ref(0)\n const days = ref(0)\n const hours = ref(0)\n const minutes = ref(0)\n const seconds = ref(0)\n\n // Create reactive refs for endDate and endTime so we can update them later\n const endDate = ref(options.endDate)\n const endTime = ref(options.endTime)\n\n // Parse the date string into an date object\n const parseDate = (dateStr: DateFormat) => {\n const [year, month, day] = dateStr.split('-').map(Number)\n return { year, month, day }\n }\n\n // Parse the time string into an time object\n const parseTime = (timeStr: TimeFormat) => {\n const [hour, minute, second] = timeStr.split(':').map(Number)\n return { hour, minute, second }\n }\n\n // Calculate the target end date and time\n const endDateTime = computed(() => {\n const { year, month, day } = parseDate(endDate.value!)\n const { hour, minute, second } = parseTime(endTime.value!)\n\n return DateTime.fromObject(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n },\n {\n zone: options.timezone,\n },\n )\n })\n\n // Update the countdown values\n const tick = () => {\n const now = DateTime.now().setZone(options.timezone)\n const end = endDateTime.value\n\n const diff = end\n .diff(now, [\n 'years',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n 'milliseconds',\n ])\n .toObject()\n\n if (end < now) {\n timer.stop()\n if (callback) callback()\n return\n }\n\n years.value = diff.years ?? 0\n days.value = diff.days ?? 0\n hours.value = diff.hours ?? 0\n minutes.value = diff.minutes ?? 0\n seconds.value = diff.seconds ?? 0\n }\n\n // Format numbers with leading zero\n const pad = (value: number): string => {\n return ('0' + value).slice(-2)\n }\n\n const onTick = (callback: () => void) => timer.on('tick', callback)\n\n // Listen to the tick event\n timer.on('tick', tick)\n\n const restart = () => {\n timer.start()\n }\n\n // Start the timer on mount\n onMounted(() => {\n tick()\n timer.start()\n })\n\n return {\n years,\n days,\n hours,\n minutes,\n seconds,\n endDate,\n endTime,\n pad,\n restart,\n onTick,\n }\n}\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.removeEventListener('resize', setDimensions)\n })\n}\n"],"mappings":"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","names":["callback","easings","onMounted"]}
|
package/dist/nuxt/module.json
CHANGED
package/dist/nuxt/module.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineNuxtModule, createResolver,
|
|
1
|
+
import { defineNuxtModule, createResolver, installModule, addImportsSources } from '@nuxt/kit';
|
|
2
2
|
|
|
3
3
|
const packages = {
|
|
4
4
|
composables: {
|
|
@@ -18,35 +18,35 @@ const functions = [
|
|
|
18
18
|
{
|
|
19
19
|
name: "MagicMarquee",
|
|
20
20
|
"package": "plugins",
|
|
21
|
-
lastUpdated:
|
|
21
|
+
lastUpdated: 1695042962000,
|
|
22
22
|
docs: "https://maas.egineering/vue-equipment/plugins/MagicMarquee/",
|
|
23
23
|
description: "marquee"
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
name: "MagicModal",
|
|
27
27
|
"package": "plugins",
|
|
28
|
-
lastUpdated:
|
|
28
|
+
lastUpdated: 1695042962000,
|
|
29
29
|
docs: "https://maas.egineering/vue-equipment/plugins/MagicModal/",
|
|
30
30
|
description: "modal"
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
name: "MagicPlayer",
|
|
34
34
|
"package": "plugins",
|
|
35
|
-
lastUpdated:
|
|
35
|
+
lastUpdated: 1695042962000,
|
|
36
36
|
docs: "https://maas.egineering/vue-equipment/plugins/MagicPlayer/",
|
|
37
37
|
description: "player"
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
name: "MagicScroll",
|
|
41
41
|
"package": "plugins",
|
|
42
|
-
lastUpdated:
|
|
42
|
+
lastUpdated: 1695042962000,
|
|
43
43
|
docs: "https://maas.egineering/vue-equipment/plugins/MagicScroll/",
|
|
44
44
|
description: "scroll"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
name: "MagicToast",
|
|
48
48
|
"package": "plugins",
|
|
49
|
-
lastUpdated:
|
|
49
|
+
lastUpdated: 1695042962000,
|
|
50
50
|
docs: "https://maas.egineering/vue-equipment/plugins/MagicToast/",
|
|
51
51
|
description: "toast"
|
|
52
52
|
},
|
|
@@ -81,7 +81,7 @@ const functions = [
|
|
|
81
81
|
{
|
|
82
82
|
name: "useViewportDimensions",
|
|
83
83
|
"package": "composables",
|
|
84
|
-
lastUpdated:
|
|
84
|
+
lastUpdated: 1695037143000,
|
|
85
85
|
docs: "https://maas.egineering/vue-equipment/composables/useViewportDimensions/",
|
|
86
86
|
description: "attach viewport dimensions as css variables to the document"
|
|
87
87
|
}
|
|
@@ -119,13 +119,7 @@ const module = defineNuxtModule({
|
|
|
119
119
|
const nuxtPlugin = await resolver.resolvePath(
|
|
120
120
|
`@maas/vue-equipment/plugins/${plugin}/nuxt`
|
|
121
121
|
);
|
|
122
|
-
|
|
123
|
-
`@maas/vue-equipment/plugins/${plugin}/src/composables`
|
|
124
|
-
);
|
|
125
|
-
addPlugin(nuxtPlugin);
|
|
126
|
-
addImportsDir(pluginComposablesDir, {
|
|
127
|
-
prepend: true
|
|
128
|
-
});
|
|
122
|
+
installModule(nuxtPlugin);
|
|
129
123
|
}
|
|
130
124
|
if (options.composables === true) {
|
|
131
125
|
composables = metadata.functions.filter((fn) => fn.package === "composables").map((fn) => fn.name);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
const
|
|
1
|
+
import MagicMarquee from "./src/components/MagicMarquee.vue";
|
|
2
|
+
const MagicMarqueePlugin = {
|
|
3
3
|
install: (app) => {
|
|
4
|
-
app.component("MagicMarquee",
|
|
4
|
+
app.component("MagicMarquee", MagicMarquee);
|
|
5
5
|
}
|
|
6
6
|
};
|
|
7
|
-
export { MagicMarquee };
|
|
7
|
+
export { MagicMarqueePlugin, MagicMarquee };
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
defineNuxtModule,
|
|
3
|
+
createResolver,
|
|
4
|
+
addComponentsDir,
|
|
5
|
+
addImportsDir
|
|
6
|
+
} from "@nuxt/kit";
|
|
7
|
+
export default defineNuxtModule({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "@maas/vue-equipment/MagicMarquee"
|
|
10
|
+
},
|
|
11
|
+
setup() {
|
|
12
|
+
const resolver = createResolver(import.meta.url);
|
|
13
|
+
addComponentsDir({
|
|
14
|
+
path: resolver.resolve("src/components"),
|
|
15
|
+
global: true,
|
|
16
|
+
pathPrefix: false
|
|
17
|
+
});
|
|
18
|
+
addImportsDir(resolver.resolve("src/composables"));
|
|
19
|
+
}
|
|
5
20
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import MagicModal from './src/components/MagicModal.vue.js';
|
|
1
2
|
import { useModalApi } from './src/composables/useModalApi.js';
|
|
2
3
|
import { useModalEmitter } from './src/composables/useModalEmitter.js';
|
|
3
4
|
import type { Plugin } from 'vue';
|
|
4
|
-
declare const
|
|
5
|
-
export { MagicModal, useModalEmitter, useModalApi };
|
|
5
|
+
declare const MagicModalPlugin: Plugin;
|
|
6
|
+
export { MagicModalPlugin, MagicModal, useModalEmitter, useModalApi };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import MagicModal from "./src/components/MagicModal.vue";
|
|
2
2
|
import { useModalApi } from "./src/composables/useModalApi.mjs";
|
|
3
3
|
import { useModalEmitter } from "./src/composables/useModalEmitter.mjs";
|
|
4
|
-
const
|
|
4
|
+
const MagicModalPlugin = {
|
|
5
5
|
install: (app) => {
|
|
6
|
-
app.component("MagicModal",
|
|
6
|
+
app.component("MagicModal", MagicModal);
|
|
7
7
|
}
|
|
8
8
|
};
|
|
9
|
-
export { MagicModal, useModalEmitter, useModalApi };
|
|
9
|
+
export { MagicModalPlugin, MagicModal, useModalEmitter, useModalApi };
|
|
@@ -1,5 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
defineNuxtModule,
|
|
3
|
+
createResolver,
|
|
4
|
+
addComponentsDir,
|
|
5
|
+
addImports
|
|
6
|
+
} from "@nuxt/kit";
|
|
7
|
+
export default defineNuxtModule({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "@maas/vue-equipment/MagicModal"
|
|
10
|
+
},
|
|
11
|
+
setup() {
|
|
12
|
+
const resolver = createResolver(import.meta.url);
|
|
13
|
+
addComponentsDir({
|
|
14
|
+
path: resolver.resolve("src/components"),
|
|
15
|
+
global: true,
|
|
16
|
+
pathPrefix: false
|
|
17
|
+
});
|
|
18
|
+
addImports({
|
|
19
|
+
from: "@maas/vue-equipment/plugins/MagicModal",
|
|
20
|
+
typeFrom: "@maas/vue-equipment/plugins/MagicModal",
|
|
21
|
+
name: "useModalApi"
|
|
22
|
+
});
|
|
23
|
+
addImports({
|
|
24
|
+
from: "@maas/vue-equipment/plugins/MagicModal",
|
|
25
|
+
typeFrom: "@maas/vue-equipment/plugins/MagicModal",
|
|
26
|
+
name: "useModalEmitter"
|
|
27
|
+
});
|
|
28
|
+
}
|
|
5
29
|
});
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import type { Plugin } from 'vue';
|
|
2
|
+
import MagicPlayer from './src/components/MagicPlayer.vue.js';
|
|
3
|
+
import MagicPlayerControls from './src/components/MagicPlayerControls.vue.js';
|
|
4
|
+
import MagicPlayerTimeline from './src/components/MagicPlayerTimeline.vue.js';
|
|
5
|
+
import MagicPlayerMuxPopover from './src/components/MagicPlayerMuxPopover.vue.js';
|
|
2
6
|
import { useMediaApi } from './src/composables/useMediaApi.js';
|
|
3
7
|
import { usePlayerApi } from './src/composables/usePlayerApi.js';
|
|
8
|
+
import { useProvidePlayer, useInjectPlayer } from './src/composables/usePlayer.js';
|
|
9
|
+
import { useProvideControls, useInjectControls } from './src/composables/useControls.js';
|
|
4
10
|
import { useRuntimeSourceProvider } from './src/composables/useRuntimeSourceProvider.js';
|
|
5
11
|
export type * from './src/types';
|
|
6
|
-
declare const
|
|
7
|
-
export { MagicPlayer, useMediaApi, usePlayerApi, useRuntimeSourceProvider };
|
|
12
|
+
declare const MagicPlayerPlugin: Plugin;
|
|
13
|
+
export { MagicPlayerPlugin, MagicPlayer, MagicPlayerControls, MagicPlayerTimeline, MagicPlayerMuxPopover, useMediaApi, usePlayerApi, useRuntimeSourceProvider, useProvidePlayer, useInjectPlayer, useProvideControls, useInjectControls, };
|
|
@@ -1,15 +1,34 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import MagicPlayer from "./src/components/MagicPlayer.vue";
|
|
2
|
+
import MagicPlayerControls from "./src/components/MagicPlayerControls.vue";
|
|
3
|
+
import MagicPlayerTimeline from "./src/components/MagicPlayerTimeline.vue";
|
|
4
|
+
import MagicPlayerMuxPopover from "./src/components/MagicPlayerMuxPopover.vue";
|
|
5
5
|
import { useMediaApi } from "./src/composables/useMediaApi.mjs";
|
|
6
6
|
import { usePlayerApi } from "./src/composables/usePlayerApi.mjs";
|
|
7
|
+
import { useProvidePlayer, useInjectPlayer } from "./src/composables/usePlayer.mjs";
|
|
8
|
+
import {
|
|
9
|
+
useProvideControls,
|
|
10
|
+
useInjectControls
|
|
11
|
+
} from "./src/composables/useControls.mjs";
|
|
7
12
|
import { useRuntimeSourceProvider } from "./src/composables/useRuntimeSourceProvider.mjs";
|
|
8
|
-
const
|
|
13
|
+
const MagicPlayerPlugin = {
|
|
9
14
|
install: (app) => {
|
|
10
|
-
app.component("MagicPlayer",
|
|
11
|
-
app.component("MagicPlayerControls",
|
|
12
|
-
app.component("MagicPlayerTimeline",
|
|
15
|
+
app.component("MagicPlayer", MagicPlayer);
|
|
16
|
+
app.component("MagicPlayerControls", MagicPlayerControls);
|
|
17
|
+
app.component("MagicPlayerTimeline", MagicPlayerTimeline);
|
|
18
|
+
app.component("MagicPlayerMuxPopover", MagicPlayerMuxPopover);
|
|
13
19
|
}
|
|
14
20
|
};
|
|
15
|
-
export {
|
|
21
|
+
export {
|
|
22
|
+
MagicPlayerPlugin,
|
|
23
|
+
MagicPlayer,
|
|
24
|
+
MagicPlayerControls,
|
|
25
|
+
MagicPlayerTimeline,
|
|
26
|
+
MagicPlayerMuxPopover,
|
|
27
|
+
useMediaApi,
|
|
28
|
+
usePlayerApi,
|
|
29
|
+
useRuntimeSourceProvider,
|
|
30
|
+
useProvidePlayer,
|
|
31
|
+
useInjectPlayer,
|
|
32
|
+
useProvideControls,
|
|
33
|
+
useInjectControls
|
|
34
|
+
};
|
|
@@ -1,5 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
defineNuxtModule,
|
|
3
|
+
createResolver,
|
|
4
|
+
addComponentsDir,
|
|
5
|
+
addImports
|
|
6
|
+
} from "@nuxt/kit";
|
|
7
|
+
export default defineNuxtModule({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "@maas/vue-equipment/MagicPlayer"
|
|
10
|
+
},
|
|
11
|
+
setup() {
|
|
12
|
+
const resolver = createResolver(import.meta.url);
|
|
13
|
+
addComponentsDir({
|
|
14
|
+
path: resolver.resolve("src/components"),
|
|
15
|
+
global: true,
|
|
16
|
+
pathPrefix: false,
|
|
17
|
+
ignore: ["icons/*"]
|
|
18
|
+
});
|
|
19
|
+
addImports({
|
|
20
|
+
from: "@maas/vue-equipment/plugins/MagicPlayer",
|
|
21
|
+
name: "useProvidePlayer"
|
|
22
|
+
});
|
|
23
|
+
addImports({
|
|
24
|
+
from: "@maas/vue-equipment/plugins/MagicPlayer",
|
|
25
|
+
name: "useInjectPlayer"
|
|
26
|
+
});
|
|
27
|
+
addImports({
|
|
28
|
+
from: "@maas/vue-equipment/plugins/MagicPlayer",
|
|
29
|
+
name: "useProvideControls"
|
|
30
|
+
});
|
|
31
|
+
addImports({
|
|
32
|
+
from: "@maas/vue-equipment/plugins/MagicPlayer",
|
|
33
|
+
name: "useInjectControls"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
5
36
|
});
|
|
@@ -137,7 +137,7 @@ defineExpose({
|
|
|
137
137
|
--magic-player-controls-overlay-background-color: rgba(0, 0, 0, 0.3);
|
|
138
138
|
--magic-player-controls-overlay-color: rgba(255, 255, 255, 1);
|
|
139
139
|
--magic-player-controls-transition-duration: 300ms;
|
|
140
|
-
--magic-player-controls-transition-timing-function: ease-out:
|
|
140
|
+
--magic-player-controls-transition-timing-function: ease-out: ;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
@media (max-width: 640px) {
|
|
@@ -192,12 +192,15 @@ defineExpose({
|
|
|
192
192
|
align-items: flex-start;
|
|
193
193
|
gap: var(--magic-player-controls-gap);
|
|
194
194
|
transition-duration: var(--magic-player-controls-transition-duration);
|
|
195
|
-
transition-timing-function: var(
|
|
195
|
+
transition-timing-function: var(
|
|
196
|
+
--magic-player-controls-transition-timing-function
|
|
197
|
+
);
|
|
196
198
|
transition-property: opacity, transform;
|
|
197
199
|
}
|
|
198
200
|
|
|
199
201
|
.magic-player-controls__bar--inner {
|
|
200
202
|
width: 100%;
|
|
203
|
+
box-sizing: border-box;
|
|
201
204
|
height: var(--magic-player-controls-height);
|
|
202
205
|
padding: 0 var(--magic-player-controls-padding);
|
|
203
206
|
background-color: var(--magic-player-controls-background-color);
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import MagicScrollProvider from './src/components/MagicScrollProvider.vue.js';
|
|
2
|
+
import MagicScrollScene from './src/components/MagicScrollScene.vue.js';
|
|
3
|
+
import MagicScrollTransform from './src/components/MagicScrollTransform.vue.js';
|
|
4
|
+
import MagicScrollMotion from './src/components/MagicScrollMotion.vue.js';
|
|
5
|
+
import MagicScrollCollision from './src/components/MagicScrollCollision.vue.js';
|
|
1
6
|
import { useCollisionEmitter } from './src/composables/useCollisionEmitter.js';
|
|
2
7
|
import { useScrollApi } from './src/composables/useScrollApi.js';
|
|
3
8
|
import { useCollisionDetect } from './src/composables/useCollisionDetect.js';
|
|
4
9
|
import type { Plugin } from 'vue';
|
|
5
10
|
export type * from './src/types';
|
|
6
|
-
declare const
|
|
7
|
-
export {
|
|
11
|
+
declare const MagicScrollPlugin: Plugin;
|
|
12
|
+
export { MagicScrollPlugin, MagicScrollProvider, MagicScrollScene, MagicScrollTransform, MagicScrollMotion, MagicScrollCollision, useCollisionEmitter, useScrollApi, useCollisionDetect, };
|
|
@@ -3,19 +3,26 @@ import MagicScrollScene from "./src/components/MagicScrollScene.vue";
|
|
|
3
3
|
import MagicScrollTransform from "./src/components/MagicScrollTransform.vue";
|
|
4
4
|
import MagicScrollMotion from "./src/components/MagicScrollMotion.vue";
|
|
5
5
|
import MagicScrollCollision from "./src/components/MagicScrollCollision.vue";
|
|
6
|
-
import { magicScrollStore } from "./src/store/index.mjs";
|
|
7
6
|
import { useCollisionEmitter } from "./src/composables/useCollisionEmitter.mjs";
|
|
8
7
|
import { useScrollApi } from "./src/composables/useScrollApi.mjs";
|
|
9
8
|
import { useCollisionDetect } from "./src/composables/useCollisionDetect.mjs";
|
|
10
|
-
|
|
11
|
-
const MagicScroll = {
|
|
9
|
+
const MagicScrollPlugin = {
|
|
12
10
|
install: (app) => {
|
|
13
11
|
app.component("MagicScrollProvider", MagicScrollProvider);
|
|
14
12
|
app.component("MagicScrollScene", MagicScrollScene);
|
|
15
13
|
app.component("MagicScrollTransform", MagicScrollTransform);
|
|
16
14
|
app.component("MagicScrollMotion", MagicScrollMotion);
|
|
17
15
|
app.component("MagicScrollCollision", MagicScrollCollision);
|
|
18
|
-
app.provide(StoreKey, magicScrollStore);
|
|
19
16
|
}
|
|
20
17
|
};
|
|
21
|
-
export {
|
|
18
|
+
export {
|
|
19
|
+
MagicScrollPlugin,
|
|
20
|
+
MagicScrollProvider,
|
|
21
|
+
MagicScrollScene,
|
|
22
|
+
MagicScrollTransform,
|
|
23
|
+
MagicScrollMotion,
|
|
24
|
+
MagicScrollCollision,
|
|
25
|
+
useCollisionEmitter,
|
|
26
|
+
useScrollApi,
|
|
27
|
+
useCollisionDetect
|
|
28
|
+
};
|
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
defineNuxtModule,
|
|
3
|
+
createResolver,
|
|
4
|
+
addComponentsDir,
|
|
5
|
+
addImportsDir
|
|
6
|
+
} from "@nuxt/kit";
|
|
7
|
+
export default defineNuxtModule({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "@maas/vue-equipment/MagicScroll"
|
|
10
|
+
},
|
|
11
|
+
setup() {
|
|
12
|
+
const resolver = createResolver(import.meta.url);
|
|
13
|
+
addComponentsDir({
|
|
14
|
+
path: resolver.resolve("src/components"),
|
|
15
|
+
global: true,
|
|
16
|
+
pathPrefix: false
|
|
17
|
+
});
|
|
18
|
+
addImportsDir(resolver.resolve("src/composables"));
|
|
19
|
+
}
|
|
5
20
|
});
|
|
@@ -19,7 +19,4 @@ declare const ScrollPositionKey: InjectionKey<{
|
|
|
19
19
|
measure(): void;
|
|
20
20
|
} | undefined>;
|
|
21
21
|
declare const ScrollProgressKey: InjectionKey<Ref<number>>;
|
|
22
|
-
|
|
23
|
-
isNavigating: boolean;
|
|
24
|
-
}>;
|
|
25
|
-
export { ScrollParentKey, ScrollPositionKey, ScrollProgressKey, StoreKey };
|
|
22
|
+
export { ScrollParentKey, ScrollPositionKey, ScrollProgressKey };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const ScrollParentKey = Symbol();
|
|
2
2
|
const ScrollPositionKey = Symbol();
|
|
3
3
|
const ScrollProgressKey = Symbol();
|
|
4
|
-
|
|
5
|
-
export { ScrollParentKey, ScrollPositionKey, ScrollProgressKey, StoreKey };
|
|
4
|
+
export { ScrollParentKey, ScrollPositionKey, ScrollProgressKey };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import MagicToast from './src/components/MagicToast.vue.js';
|
|
1
2
|
import { useToastApi } from './src/composables/useToastApi.js';
|
|
2
3
|
import { useToastEmitter } from './src/composables/useToastEmitter.js';
|
|
3
4
|
import type { Plugin } from 'vue';
|
|
4
|
-
declare const
|
|
5
|
-
export { MagicToast, useToastApi, useToastEmitter };
|
|
5
|
+
declare const MagicToastPlugin: Plugin;
|
|
6
|
+
export { MagicToastPlugin, MagicToast, useToastApi, useToastEmitter };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import MagicToast from "./src/components/MagicToast.vue";
|
|
2
2
|
import { useToastApi } from "./src/composables/useToastApi.mjs";
|
|
3
3
|
import { useToastEmitter } from "./src/composables/useToastEmitter.mjs";
|
|
4
|
-
const
|
|
4
|
+
const MagicToastPlugin = {
|
|
5
5
|
install: (app) => {
|
|
6
|
-
app.component("MagicToast",
|
|
6
|
+
app.component("MagicToast", MagicToast);
|
|
7
7
|
}
|
|
8
8
|
};
|
|
9
|
-
export { MagicToast, useToastApi, useToastEmitter };
|
|
9
|
+
export { MagicToastPlugin, MagicToast, useToastApi, useToastEmitter };
|
|
@@ -1,5 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
defineNuxtModule,
|
|
3
|
+
createResolver,
|
|
4
|
+
addComponent,
|
|
5
|
+
addImports
|
|
6
|
+
} from "@nuxt/kit";
|
|
7
|
+
export default defineNuxtModule({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "@maas/vue-equipment/MagicToast"
|
|
10
|
+
},
|
|
11
|
+
setup() {
|
|
12
|
+
const resolver = createResolver(import.meta.url);
|
|
13
|
+
addComponent({
|
|
14
|
+
filePath: resolver.resolve("src/components/MagicToast.vue"),
|
|
15
|
+
name: "MagicToast",
|
|
16
|
+
global: true
|
|
17
|
+
});
|
|
18
|
+
addImports({
|
|
19
|
+
from: "@maas/vue-equipment/plugins/MagicToast",
|
|
20
|
+
name: "useToastApi"
|
|
21
|
+
});
|
|
22
|
+
addImports({
|
|
23
|
+
from: "@maas/vue-equipment/plugins/MagicToast",
|
|
24
|
+
name: "useToastEmitter"
|
|
25
|
+
});
|
|
26
|
+
}
|
|
5
27
|
});
|
package/dist/plugins/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './MagicMarquee.js';
|
|
2
|
-
export * from './MagicModal.js';
|
|
3
|
-
export * from './MagicPlayer.js';
|
|
4
|
-
export * from './MagicScroll.js';
|
|
5
|
-
export * from './MagicToast.js';
|
|
1
|
+
export * from './MagicMarquee/index.js';
|
|
2
|
+
export * from './MagicModal/index.js';
|
|
3
|
+
export * from './MagicPlayer/index.js';
|
|
4
|
+
export * from './MagicScroll/index.js';
|
|
5
|
+
export * from './MagicToast/index.js';
|
package/dist/utils/index.js
CHANGED
|
@@ -57,9 +57,8 @@ function mapValue(value, inMin, inMax, outMin, outMax) {
|
|
|
57
57
|
|
|
58
58
|
// src/functions/uuid.ts
|
|
59
59
|
var import_crypto = __toESM(require("crypto"));
|
|
60
|
-
var isBrowser = typeof window !== "undefined";
|
|
61
60
|
function uuid() {
|
|
62
|
-
return
|
|
61
|
+
return typeof window !== "undefined" ? window.crypto.randomUUID() : import_crypto.default.randomUUID();
|
|
63
62
|
}
|
|
64
63
|
|
|
65
64
|
// src/functions/uniq.ts
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts"],"sourcesContent":["export * from './src/functions/clampValue'\nexport * from './src/functions/isIOS'\nexport * from './src/functions/mapValue'\nexport * from './src/functions/uuid'\nexport * from './src/functions/uniq'\n","export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","import crypto from 'crypto'\
|
|
1
|
+
{"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts"],"sourcesContent":["export * from './src/functions/clampValue'\nexport * from './src/functions/isIOS'\nexport * from './src/functions/mapValue'\nexport * from './src/functions/uuid'\nexport * from './src/functions/uniq'\n","export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","import crypto from 'crypto'\n\nexport function uuid() {\n return typeof window !== 'undefined'\n ? window.crypto.randomUUID()\n : crypto.randomUUID()\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACFO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,WAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACRA,oBAAmB;AAEZ,SAAS,OAAO;AACrB,SAAO,OAAO,WAAW,cACrB,OAAO,OAAO,WAAW,IACzB,cAAAA,QAAO,WAAW;AACxB;;;ACNO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;","names":["crypto"]}
|
package/dist/utils/index.mjs
CHANGED
|
@@ -17,9 +17,8 @@ function mapValue(value, inMin, inMax, outMin, outMax) {
|
|
|
17
17
|
|
|
18
18
|
// src/functions/uuid.ts
|
|
19
19
|
import crypto from "crypto";
|
|
20
|
-
var isBrowser = typeof window !== "undefined";
|
|
21
20
|
function uuid() {
|
|
22
|
-
return
|
|
21
|
+
return typeof window !== "undefined" ? window.crypto.randomUUID() : crypto.randomUUID();
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
// src/functions/uniq.ts
|
package/dist/utils/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","import crypto from 'crypto'\
|
|
1
|
+
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","import crypto from 'crypto'\n\nexport function uuid() {\n return typeof window !== 'undefined'\n ? window.crypto.randomUUID()\n : crypto.randomUUID()\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n"],"mappings":";AAAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACFO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,WAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACRA,OAAO,YAAY;AAEZ,SAAS,OAAO;AACrB,SAAO,OAAO,WAAW,cACrB,OAAO,OAAO,WAAW,IACzB,OAAO,WAAW;AACxB;;;ACNO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maas/vue-equipment",
|
|
3
3
|
"description": "A magic collection of Vue composables, plugins, components and directives",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
5
|
"author": "Robin Scholz <https://github.com/robinscholz>, Christoph Jeworutzki <https://github.com/ChristophJeworutzki>",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@antfu/ni": "^0.21.5",
|