@maas/vue-equipment 0.8.2 → 0.9.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.d.mts +8 -9
- package/dist/composables/index.d.ts +8 -9
- package/dist/composables/index.js +34 -35
- package/dist/composables/index.js.map +1 -1
- package/dist/composables/index.mjs +35 -36
- package/dist/composables/index.mjs.map +1 -1
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +2 -2
- package/package.json +1 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { Ref } from 'vue';
|
|
3
3
|
import { MagicTimer } from '@maas/magic-timer';
|
|
4
|
+
import { DateTime } from 'luxon';
|
|
5
|
+
import { MaybeRef, MaybeElement, MaybeComputedElementRef } from '@vueuse/core';
|
|
4
6
|
import { Font } from 'fontkit';
|
|
5
|
-
import { MaybeElement, MaybeComputedElementRef } from '@vueuse/core';
|
|
6
7
|
|
|
7
|
-
type
|
|
8
|
-
type TimeFormat = `${number}:${number}:${number}`;
|
|
8
|
+
type DateTimeArray = [number, number, number, number?, number?, number?];
|
|
9
9
|
interface CountdownOptions {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
endDateTime: MaybeRef<DateTimeArray>;
|
|
11
|
+
timezone?: MaybeRef<string>;
|
|
12
|
+
zeroIndexedMonths?: boolean;
|
|
13
13
|
}
|
|
14
14
|
declare function useCountdown(options: CountdownOptions, callback?: () => void): {
|
|
15
15
|
years: vue.Ref<number>;
|
|
@@ -17,8 +17,7 @@ declare function useCountdown(options: CountdownOptions, callback?: () => void):
|
|
|
17
17
|
hours: vue.Ref<number>;
|
|
18
18
|
minutes: vue.Ref<number>;
|
|
19
19
|
seconds: vue.Ref<number>;
|
|
20
|
-
|
|
21
|
-
endTime: vue.Ref<`${number}:${number}:${number}` | undefined>;
|
|
20
|
+
endDateTime: vue.ComputedRef<DateTime>;
|
|
22
21
|
pad: (value: number) => string;
|
|
23
22
|
restart: () => void;
|
|
24
23
|
onTick: (callback: () => void) => MagicTimer;
|
|
@@ -106,4 +105,4 @@ type UseViewportDimensionsOptions = {
|
|
|
106
105
|
};
|
|
107
106
|
declare function useViewportDimensions(options?: UseViewportDimensionsOptions): void;
|
|
108
107
|
|
|
109
|
-
export { CountdownOptions,
|
|
108
|
+
export { CountdownOptions, DateTimeArray, EasingFunction, EasingKey, ScrollToParams, ScrollToParent, ScrollToTarget, UseViewportDimensionsOptions, getScrollDurationParams, scrollToTargetParams, useCountdown, useEasings, useGlyphToSvg, useGlyphToSvgOptions, useScrollTo, useViewportDimensions };
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { Ref } from 'vue';
|
|
3
3
|
import { MagicTimer } from '@maas/magic-timer';
|
|
4
|
+
import { DateTime } from 'luxon';
|
|
5
|
+
import { MaybeRef, MaybeElement, MaybeComputedElementRef } from '@vueuse/core';
|
|
4
6
|
import { Font } from 'fontkit';
|
|
5
|
-
import { MaybeElement, MaybeComputedElementRef } from '@vueuse/core';
|
|
6
7
|
|
|
7
|
-
type
|
|
8
|
-
type TimeFormat = `${number}:${number}:${number}`;
|
|
8
|
+
type DateTimeArray = [number, number, number, number?, number?, number?];
|
|
9
9
|
interface CountdownOptions {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
endDateTime: MaybeRef<DateTimeArray>;
|
|
11
|
+
timezone?: MaybeRef<string>;
|
|
12
|
+
zeroIndexedMonths?: boolean;
|
|
13
13
|
}
|
|
14
14
|
declare function useCountdown(options: CountdownOptions, callback?: () => void): {
|
|
15
15
|
years: vue.Ref<number>;
|
|
@@ -17,8 +17,7 @@ declare function useCountdown(options: CountdownOptions, callback?: () => void):
|
|
|
17
17
|
hours: vue.Ref<number>;
|
|
18
18
|
minutes: vue.Ref<number>;
|
|
19
19
|
seconds: vue.Ref<number>;
|
|
20
|
-
|
|
21
|
-
endTime: vue.Ref<`${number}:${number}:${number}` | undefined>;
|
|
20
|
+
endDateTime: vue.ComputedRef<DateTime>;
|
|
22
21
|
pad: (value: number) => string;
|
|
23
22
|
restart: () => void;
|
|
24
23
|
onTick: (callback: () => void) => MagicTimer;
|
|
@@ -106,4 +105,4 @@ type UseViewportDimensionsOptions = {
|
|
|
106
105
|
};
|
|
107
106
|
declare function useViewportDimensions(options?: UseViewportDimensionsOptions): void;
|
|
108
107
|
|
|
109
|
-
export { CountdownOptions,
|
|
108
|
+
export { CountdownOptions, DateTimeArray, EasingFunction, EasingKey, ScrollToParams, ScrollToParent, ScrollToTarget, UseViewportDimensionsOptions, getScrollDurationParams, scrollToTargetParams, useCountdown, useEasings, useGlyphToSvg, useGlyphToSvgOptions, useScrollTo, useViewportDimensions };
|
|
@@ -32,47 +32,47 @@ module.exports = __toCommonJS(composables_exports);
|
|
|
32
32
|
var import_vue = require("vue");
|
|
33
33
|
var import_magic_timer = require("@maas/magic-timer");
|
|
34
34
|
var import_luxon = require("luxon");
|
|
35
|
+
var import_core = require("@vueuse/core");
|
|
35
36
|
var defaultOptions = {
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
endDateTime: [1970, 1, 1, 0, 0, 0],
|
|
38
|
+
zeroIndexedMonths: false
|
|
38
39
|
};
|
|
39
40
|
function useCountdown(options, callback) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
console.error(
|
|
43
|
-
'useCountdownClock: The "endDate" option needs to be a string with the format YYYY-MM-DD'
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
if (options.endTime && !options.endTime.match(/^\d{2}:\d{2}:\d{2}$/)) {
|
|
41
|
+
options = { ...defaultOptions, ...options };
|
|
42
|
+
if ((0, import_vue.unref)(options.endDateTime).length < 3) {
|
|
47
43
|
console.error(
|
|
48
|
-
'useCountdownClock: The "
|
|
44
|
+
'useCountdownClock: The "endDateTime" option needs to be an array with the format [YYYY, MM, DD, HH?, MM?, SS?]'
|
|
49
45
|
);
|
|
50
46
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
const timezone = (0, import_vue.unref)(options.timezone);
|
|
48
|
+
if (timezone) {
|
|
49
|
+
if (!import_luxon.DateTime.now().setZone(timezone).isValid) {
|
|
50
|
+
console.error(
|
|
51
|
+
`useCountdownClock: The "timezone" option "${timezone}" is not a valid timezone. Do you mean ${import_luxon.DateTime.local().zoneName}? For more information see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones`
|
|
52
|
+
);
|
|
53
|
+
}
|
|
55
54
|
}
|
|
56
|
-
options = { ...defaultOptions, ...options };
|
|
57
55
|
const timer = new import_magic_timer.MagicTimer();
|
|
58
56
|
const years = (0, import_vue.ref)(0);
|
|
59
57
|
const days = (0, import_vue.ref)(0);
|
|
60
58
|
const hours = (0, import_vue.ref)(0);
|
|
61
59
|
const minutes = (0, import_vue.ref)(0);
|
|
62
60
|
const seconds = (0, import_vue.ref)(0);
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
const parseDateTimeArray = (dateTimeArr) => {
|
|
62
|
+
const [year, month, day, hour, minute, second] = dateTimeArr;
|
|
63
|
+
return {
|
|
64
|
+
year,
|
|
65
|
+
month: options.zeroIndexedMonths ? month + 1 : month,
|
|
66
|
+
day,
|
|
67
|
+
hour: hour ?? 0,
|
|
68
|
+
minute: minute ?? 0,
|
|
69
|
+
second: second ?? 0
|
|
70
|
+
};
|
|
72
71
|
};
|
|
73
72
|
const endDateTime = (0, import_vue.computed)(() => {
|
|
74
|
-
const { year, month, day } =
|
|
75
|
-
|
|
73
|
+
const { year, month, day, hour, minute, second } = parseDateTimeArray(
|
|
74
|
+
(0, import_vue.unref)(options.endDateTime)
|
|
75
|
+
);
|
|
76
76
|
return import_luxon.DateTime.fromObject(
|
|
77
77
|
{
|
|
78
78
|
year,
|
|
@@ -83,12 +83,12 @@ function useCountdown(options, callback) {
|
|
|
83
83
|
second
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
|
-
zone: options.timezone
|
|
86
|
+
zone: (0, import_vue.unref)(options.timezone)
|
|
87
87
|
}
|
|
88
88
|
);
|
|
89
89
|
});
|
|
90
90
|
const tick = () => {
|
|
91
|
-
const now = import_luxon.DateTime.now().setZone(options.timezone);
|
|
91
|
+
const now = import_luxon.DateTime.now().setZone((0, import_vue.unref)(options.timezone));
|
|
92
92
|
const end = endDateTime.value;
|
|
93
93
|
const diff = end.diff(now, [
|
|
94
94
|
"years",
|
|
@@ -128,8 +128,7 @@ function useCountdown(options, callback) {
|
|
|
128
128
|
hours,
|
|
129
129
|
minutes,
|
|
130
130
|
seconds,
|
|
131
|
-
|
|
132
|
-
endTime,
|
|
131
|
+
endDateTime,
|
|
133
132
|
pad,
|
|
134
133
|
restart,
|
|
135
134
|
onTick
|
|
@@ -157,14 +156,14 @@ function useEasings() {
|
|
|
157
156
|
}
|
|
158
157
|
|
|
159
158
|
// useGlyphToSvg/index.ts
|
|
160
|
-
var
|
|
159
|
+
var import_core2 = require("@vueuse/core");
|
|
161
160
|
var import_vue2 = require("vue");
|
|
162
161
|
function useGlyphToSvg({
|
|
163
162
|
fontSize,
|
|
164
163
|
fontWeight,
|
|
165
164
|
fontFile
|
|
166
165
|
}) {
|
|
167
|
-
const { copy } = (0,
|
|
166
|
+
const { copy } = (0, import_core2.useClipboard)();
|
|
168
167
|
const mappedFontFile = (0, import_vue2.unref)(fontFile);
|
|
169
168
|
const mappedFontSize = (0, import_vue2.unref)(fontSize);
|
|
170
169
|
const mappedFontWeight = (0, import_vue2.unref)(fontWeight);
|
|
@@ -205,7 +204,7 @@ function useGlyphToSvg({
|
|
|
205
204
|
}
|
|
206
205
|
|
|
207
206
|
// useScrollTo/index.ts
|
|
208
|
-
var
|
|
207
|
+
var import_core3 = require("@vueuse/core");
|
|
209
208
|
var easings = useEasings();
|
|
210
209
|
function min(a, b) {
|
|
211
210
|
return a < b ? a : b;
|
|
@@ -216,7 +215,7 @@ function unwrapParent(parent) {
|
|
|
216
215
|
} else if (typeof parent === "string") {
|
|
217
216
|
return document.querySelector(parent) || document.documentElement;
|
|
218
217
|
} else {
|
|
219
|
-
return (0,
|
|
218
|
+
return (0, import_core3.unrefElement)(parent) || document.documentElement;
|
|
220
219
|
}
|
|
221
220
|
}
|
|
222
221
|
function unwrapTarget(target, parentEl) {
|
|
@@ -224,7 +223,7 @@ function unwrapTarget(target, parentEl) {
|
|
|
224
223
|
const queryTarget = parentEl === window ? document : parentEl;
|
|
225
224
|
return queryTarget.querySelector(target);
|
|
226
225
|
} else {
|
|
227
|
-
return (0,
|
|
226
|
+
return (0, import_core3.unrefElement)(target);
|
|
228
227
|
}
|
|
229
228
|
}
|
|
230
229
|
function useScrollTo() {
|
|
@@ -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.removeEventListener('resize', setDimensions)\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, unref } from 'vue'\nimport { MagicTimer } from '@maas/magic-timer'\nimport { DateTime } from 'luxon'\nimport { type MaybeRef } from '@vueuse/core'\n\n// Type for [YYYY, MM, DD, HH, MM, SS]\nexport type DateTimeArray = [number, number, number, number?, number?, number?]\n\n// Interface for the options\nexport interface CountdownOptions {\n endDateTime: MaybeRef<DateTimeArray>\n timezone?: MaybeRef<string>\n zeroIndexedMonths?: boolean\n}\n\n// Define the default options\nconst defaultOptions: CountdownOptions = {\n endDateTime: [1970, 1, 1, 0, 0, 0],\n zeroIndexedMonths: false,\n}\n\nexport function useCountdown(options: CountdownOptions, callback?: () => void) {\n // Merge the options with the default options\n options = { ...defaultOptions, ...options } as CountdownOptions\n\n // Check if the endDateTime is valid\n if (unref(options.endDateTime).length < 3) {\n console.error(\n 'useCountdownClock: The \"endDateTime\" option needs to be an array with the format [YYYY, MM, DD, HH?, MM?, SS?]',\n )\n }\n\n // Check if the timezone is valid\n const timezone = unref(options.timezone)\n if (timezone) {\n if (!DateTime.now().setZone(timezone).isValid) {\n console.error(\n `useCountdownClock: The \"timezone\" option \"${timezone}\" 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\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 // Parse the end dateTime array into an date and time object\n // if the hour, minute and second are not set, set them to 0\n // if the month is not zero indexed, add 1 to the month\n const parseDateTimeArray = (dateTimeArr: DateTimeArray) => {\n const [year, month, day, hour, minute, second] = dateTimeArr\n return {\n year,\n month: options.zeroIndexedMonths ? month + 1 : month,\n day,\n hour: hour ?? 0,\n minute: minute ?? 0,\n second: second ?? 0,\n }\n }\n\n // Calculate the target end date and time\n const endDateTime = computed(() => {\n const { year, month, day, hour, minute, second } = parseDateTimeArray(\n unref(options.endDateTime),\n )\n\n return DateTime.fromObject(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n },\n {\n zone: unref(options.timezone),\n },\n )\n })\n\n // Update the countdown values\n const tick = () => {\n const now = DateTime.now().setZone(unref(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 // Listen to the tick event\n const onTick = (callback: () => void) => timer.on('tick', callback)\n\n // Listen to the tick event\n timer.on('tick', tick)\n\n // Restart the timer\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 the values and functions\n return {\n years,\n days,\n hours,\n minutes,\n seconds,\n endDateTime,\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_core","import_vue","import_core","import_vue"]}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
// useCountdown/index.ts
|
|
2
|
-
import { computed, onMounted, ref } from "vue";
|
|
2
|
+
import { computed, onMounted, ref, unref } from "vue";
|
|
3
3
|
import { MagicTimer } from "@maas/magic-timer";
|
|
4
4
|
import { DateTime } from "luxon";
|
|
5
|
+
import "@vueuse/core";
|
|
5
6
|
var defaultOptions = {
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
endDateTime: [1970, 1, 1, 0, 0, 0],
|
|
8
|
+
zeroIndexedMonths: false
|
|
8
9
|
};
|
|
9
10
|
function useCountdown(options, callback) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
console.error(
|
|
13
|
-
'useCountdownClock: The "endDate" option needs to be a string with the format YYYY-MM-DD'
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
if (options.endTime && !options.endTime.match(/^\d{2}:\d{2}:\d{2}$/)) {
|
|
11
|
+
options = { ...defaultOptions, ...options };
|
|
12
|
+
if (unref(options.endDateTime).length < 3) {
|
|
17
13
|
console.error(
|
|
18
|
-
'useCountdownClock: The "
|
|
14
|
+
'useCountdownClock: The "endDateTime" option needs to be an array with the format [YYYY, MM, DD, HH?, MM?, SS?]'
|
|
19
15
|
);
|
|
20
16
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
const timezone = unref(options.timezone);
|
|
18
|
+
if (timezone) {
|
|
19
|
+
if (!DateTime.now().setZone(timezone).isValid) {
|
|
20
|
+
console.error(
|
|
21
|
+
`useCountdownClock: The "timezone" option "${timezone}" is not a valid timezone. Do you mean ${DateTime.local().zoneName}? For more information see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones`
|
|
22
|
+
);
|
|
23
|
+
}
|
|
25
24
|
}
|
|
26
|
-
options = { ...defaultOptions, ...options };
|
|
27
25
|
const timer = new MagicTimer();
|
|
28
26
|
const years = ref(0);
|
|
29
27
|
const days = ref(0);
|
|
30
28
|
const hours = ref(0);
|
|
31
29
|
const minutes = ref(0);
|
|
32
30
|
const seconds = ref(0);
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
const parseDateTimeArray = (dateTimeArr) => {
|
|
32
|
+
const [year, month, day, hour, minute, second] = dateTimeArr;
|
|
33
|
+
return {
|
|
34
|
+
year,
|
|
35
|
+
month: options.zeroIndexedMonths ? month + 1 : month,
|
|
36
|
+
day,
|
|
37
|
+
hour: hour ?? 0,
|
|
38
|
+
minute: minute ?? 0,
|
|
39
|
+
second: second ?? 0
|
|
40
|
+
};
|
|
42
41
|
};
|
|
43
42
|
const endDateTime = computed(() => {
|
|
44
|
-
const { year, month, day } =
|
|
45
|
-
|
|
43
|
+
const { year, month, day, hour, minute, second } = parseDateTimeArray(
|
|
44
|
+
unref(options.endDateTime)
|
|
45
|
+
);
|
|
46
46
|
return DateTime.fromObject(
|
|
47
47
|
{
|
|
48
48
|
year,
|
|
@@ -53,12 +53,12 @@ function useCountdown(options, callback) {
|
|
|
53
53
|
second
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
|
-
zone: options.timezone
|
|
56
|
+
zone: unref(options.timezone)
|
|
57
57
|
}
|
|
58
58
|
);
|
|
59
59
|
});
|
|
60
60
|
const tick = () => {
|
|
61
|
-
const now = DateTime.now().setZone(options.timezone);
|
|
61
|
+
const now = DateTime.now().setZone(unref(options.timezone));
|
|
62
62
|
const end = endDateTime.value;
|
|
63
63
|
const diff = end.diff(now, [
|
|
64
64
|
"years",
|
|
@@ -98,8 +98,7 @@ function useCountdown(options, callback) {
|
|
|
98
98
|
hours,
|
|
99
99
|
minutes,
|
|
100
100
|
seconds,
|
|
101
|
-
|
|
102
|
-
endTime,
|
|
101
|
+
endDateTime,
|
|
103
102
|
pad,
|
|
104
103
|
restart,
|
|
105
104
|
onTick
|
|
@@ -128,16 +127,16 @@ function useEasings() {
|
|
|
128
127
|
|
|
129
128
|
// useGlyphToSvg/index.ts
|
|
130
129
|
import { useClipboard } from "@vueuse/core";
|
|
131
|
-
import { unref } from "vue";
|
|
130
|
+
import { unref as unref2 } from "vue";
|
|
132
131
|
function useGlyphToSvg({
|
|
133
132
|
fontSize,
|
|
134
133
|
fontWeight,
|
|
135
134
|
fontFile
|
|
136
135
|
}) {
|
|
137
136
|
const { copy } = useClipboard();
|
|
138
|
-
const mappedFontFile =
|
|
139
|
-
const mappedFontSize =
|
|
140
|
-
const mappedFontWeight =
|
|
137
|
+
const mappedFontFile = unref2(fontFile);
|
|
138
|
+
const mappedFontSize = unref2(fontSize);
|
|
139
|
+
const mappedFontWeight = unref2(fontWeight);
|
|
141
140
|
const loadVariableFont = () => {
|
|
142
141
|
const variableFont = mappedFontFile.getVariation({
|
|
143
142
|
wght: mappedFontWeight
|
|
@@ -152,7 +151,7 @@ function useGlyphToSvg({
|
|
|
152
151
|
const minY = bbox.minY;
|
|
153
152
|
const height = bbox.height;
|
|
154
153
|
const width = bbox.width;
|
|
155
|
-
const dims =
|
|
154
|
+
const dims = unref2(fontSize);
|
|
156
155
|
const centeredY = (height - dims) / 2 + minY;
|
|
157
156
|
const centeredX = (width - dims) / 2 + minX;
|
|
158
157
|
const viewBox = `${centeredX} ${centeredY} ${dims} ${dims}`;
|
|
@@ -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.removeEventListener('resize', setDimensions)\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, unref } from 'vue'\nimport { MagicTimer } from '@maas/magic-timer'\nimport { DateTime } from 'luxon'\nimport { type MaybeRef } from '@vueuse/core'\n\n// Type for [YYYY, MM, DD, HH, MM, SS]\nexport type DateTimeArray = [number, number, number, number?, number?, number?]\n\n// Interface for the options\nexport interface CountdownOptions {\n endDateTime: MaybeRef<DateTimeArray>\n timezone?: MaybeRef<string>\n zeroIndexedMonths?: boolean\n}\n\n// Define the default options\nconst defaultOptions: CountdownOptions = {\n endDateTime: [1970, 1, 1, 0, 0, 0],\n zeroIndexedMonths: false,\n}\n\nexport function useCountdown(options: CountdownOptions, callback?: () => void) {\n // Merge the options with the default options\n options = { ...defaultOptions, ...options } as CountdownOptions\n\n // Check if the endDateTime is valid\n if (unref(options.endDateTime).length < 3) {\n console.error(\n 'useCountdownClock: The \"endDateTime\" option needs to be an array with the format [YYYY, MM, DD, HH?, MM?, SS?]',\n )\n }\n\n // Check if the timezone is valid\n const timezone = unref(options.timezone)\n if (timezone) {\n if (!DateTime.now().setZone(timezone).isValid) {\n console.error(\n `useCountdownClock: The \"timezone\" option \"${timezone}\" 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\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 // Parse the end dateTime array into an date and time object\n // if the hour, minute and second are not set, set them to 0\n // if the month is not zero indexed, add 1 to the month\n const parseDateTimeArray = (dateTimeArr: DateTimeArray) => {\n const [year, month, day, hour, minute, second] = dateTimeArr\n return {\n year,\n month: options.zeroIndexedMonths ? month + 1 : month,\n day,\n hour: hour ?? 0,\n minute: minute ?? 0,\n second: second ?? 0,\n }\n }\n\n // Calculate the target end date and time\n const endDateTime = computed(() => {\n const { year, month, day, hour, minute, second } = parseDateTimeArray(\n unref(options.endDateTime),\n )\n\n return DateTime.fromObject(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n },\n {\n zone: unref(options.timezone),\n },\n )\n })\n\n // Update the countdown values\n const tick = () => {\n const now = DateTime.now().setZone(unref(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 // Listen to the tick event\n const onTick = (callback: () => void) => timer.on('tick', callback)\n\n // Listen to the tick event\n timer.on('tick', tick)\n\n // Restart the timer\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 the values and functions\n return {\n years,\n days,\n hours,\n minutes,\n seconds,\n endDateTime,\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":";AAAA,SAAS,UAAU,WAAW,KAAK,aAAa;AAChD,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,OAA8B;AAa9B,IAAM,iBAAmC;AAAA,EACvC,aAAa,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EACjC,mBAAmB;AACrB;AAEO,SAAS,aAAa,SAA2B,UAAuB;AAE7E,YAAU,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAG1C,MAAI,MAAM,QAAQ,WAAW,EAAE,SAAS,GAAG;AACzC,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAGA,QAAM,WAAW,MAAM,QAAQ,QAAQ;AACvC,MAAI,UAAU;AACZ,QAAI,CAAC,SAAS,IAAI,EAAE,QAAQ,QAAQ,EAAE,SAAS;AAC7C,cAAQ;AAAA,QACN,6CAA6C,QAAQ,0CACnD,SAAS,MAAM,EAAE,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,QAAM,QAAQ,IAAI,WAAW;AAG7B,QAAM,QAAQ,IAAI,CAAC;AACnB,QAAM,OAAO,IAAI,CAAC;AAClB,QAAM,QAAQ,IAAI,CAAC;AACnB,QAAM,UAAU,IAAI,CAAC;AACrB,QAAM,UAAU,IAAI,CAAC;AAKrB,QAAM,qBAAqB,CAAC,gBAA+B;AACzD,UAAM,CAAC,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,IAAI;AACjD,WAAO;AAAA,MACL;AAAA,MACA,OAAO,QAAQ,oBAAoB,QAAQ,IAAI;AAAA,MAC/C;AAAA,MACA,MAAM,QAAQ;AAAA,MACd,QAAQ,UAAU;AAAA,MAClB,QAAQ,UAAU;AAAA,IACpB;AAAA,EACF;AAGA,QAAM,cAAc,SAAS,MAAM;AACjC,UAAM,EAAE,MAAM,OAAO,KAAK,MAAM,QAAQ,OAAO,IAAI;AAAA,MACjD,MAAM,QAAQ,WAAW;AAAA,IAC3B;AAEA,WAAO,SAAS;AAAA,MACd;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM,MAAM,QAAQ,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,OAAO,MAAM;AACjB,UAAM,MAAM,SAAS,IAAI,EAAE,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAC1D,UAAM,MAAM,YAAY;AAExB,UAAM,OAAO,IACV,KAAK,KAAK;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EACA,SAAS;AAEZ,QAAI,MAAM,KAAK;AACb,YAAM,KAAK;AACX,UAAI;AAAU,iBAAS;AACvB;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK,SAAS;AAC5B,SAAK,QAAQ,KAAK,QAAQ;AAC1B,UAAM,QAAQ,KAAK,SAAS;AAC5B,YAAQ,QAAQ,KAAK,WAAW;AAChC,YAAQ,QAAQ,KAAK,WAAW;AAAA,EAClC;AAGA,QAAM,MAAM,CAAC,UAA0B;AACrC,YAAQ,MAAM,OAAO,MAAM,EAAE;AAAA,EAC/B;AAGA,QAAM,SAAS,CAACA,cAAyB,MAAM,GAAG,QAAQA,SAAQ;AAGlE,QAAM,GAAG,QAAQ,IAAI;AAGrB,QAAM,UAAU,MAAM;AACpB,UAAM,MAAM;AAAA,EACd;AAGA,YAAU,MAAM;AACd,SAAK;AACL,UAAM,MAAM;AAAA,EACd,CAAC;AAGD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACxIO,SAAS,aAAa;AAC3B,QAAMC,WAAU;AAAA,IACd,QAAQ,CAAC,MAAc;AAAA,IACvB,YAAY,CAAC,MAAc,IAAI;AAAA,IAC/B,aAAa,CAAC,MAAc,KAAK,IAAI;AAAA,IACrC,eAAe,CAAC,MAAe,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,KAAK;AAAA,IACxE,aAAa,CAAC,MAAc,IAAI,IAAI;AAAA,IACpC,cAAc,CAAC,MAAc,EAAE,IAAI,IAAI,IAAI;AAAA,IAC3C,gBAAgB,CAAC,MACf,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,KAAK;AAAA,IAClE,aAAa,CAAC,MAAc,IAAI,IAAI,IAAI;AAAA,IACxC,cAAc,CAAC,MAAc,IAAI,EAAE,IAAI,IAAI,IAAI;AAAA,IAC/C,gBAAgB,CAAC,MACf,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI;AAAA,IACtD,aAAa,CAAC,MAAc,IAAI,IAAI,IAAI,IAAI;AAAA,IAC5C,cAAc,CAAC,MAAc,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI;AAAA,IACnD,gBAAgB,CAAC,MACf,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI;AAAA,EAClE;AAEA,SAAOA;AACT;;;ACtCA,SAAS,oBAAoB;AAC7B,SAAS,SAAAC,cAAa;AAWf,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,EAAE,KAAK,IAAI,aAAa;AAC9B,QAAM,iBAAiBA,OAAM,QAAQ;AACrC,QAAM,iBAAiBA,OAAM,QAAQ;AACrC,QAAM,mBAAmBA,OAAM,UAAU;AAEzC,QAAM,mBAAmB,MAAM;AAE7B,UAAM,eAAe,eAAe,aAAa;AAAA,MAC/C,MAAM;AAAA,IACR,CAAC;AACD,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,CAAC,UAAe;AAEnC,UAAM,QAAQ,iBAAiB,eAAe;AAC9C,UAAM,OAAO,MAAM,KAAK,MAAM,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,OAAO,KAAK,EAAE;AAGvE,UAAM,OAAO,KAAK;AAClB,UAAM,OAAO,KAAK;AAClB,UAAM,OAAO,KAAK;AAClB,UAAM,SAAS,KAAK;AACpB,UAAM,QAAQ,KAAK;AACnB,UAAM,OAAOA,OAAM,QAAQ;AAE3B,UAAM,aAAa,SAAS,QAAQ,IAAI;AACxC,UAAM,aAAa,QAAQ,QAAQ,IAAI;AAEvC,UAAM,UAAU,GAAG,SAAS,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI;AAEzD,QAAI,MAAM,oDAAoD,OAAO;AACrE,WAAO,YAAY,KAAK,MAAM,CAAC;AAC/B,WAAO;AAEP,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,OAAO,cAAsB;AAC7C,UAAM,OAAO,MAAM,iBAAiB;AACpC,UAAM,QAAQ,KAAK,kBAAkB,SAAS;AAC9C,UAAM,MAAM,aAAa,KAAK;AAC9B,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,OAAO,cAAsB;AAC3C,UAAM,MAAM,MAAM,UAAU,SAAS;AACrC,SAAK,GAAG;AAAA,EACV;AAEA,SAAO,EAAE,SAAS,UAAU;AAC9B;;;ACnEA,SAAS,oBAAoB;AAuC7B,IAAM,UAAU,WAAW;AAE3B,SAAS,IAAI,GAAW,GAAW;AACjC,SAAO,IAAI,IAAI,IAAI;AACrB;AAEA,SAAS,aAAa,QAAwB;AAC5C,MAAI,WAAW,QAAQ;AACrB,WAAO;AAAA,EACT,WAAW,OAAO,WAAW,UAAU;AACrC,WAAO,SAAS,cAAc,MAAM,KAAK,SAAS;AAAA,EACpD,OAAO;AACL,WACE,aAAa,MAA+C,KAC5D,SAAS;AAAA,EAEb;AACF;AAEA,SAAS,aAAa,QAAwB,UAA4B;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,cAAc,aAAa,SAAS,WAAY;AACtD,WAAO,YAAY,cAAc,MAAM;AAAA,EACzC,OAAO;AACL,WAAO,aAAa,MAA+C;AAAA,EACrE;AACF;AAEO,SAAS,cAAc;AAC5B,WAAS,kBAAkB,SAGzB;AACA,QAAI,YAAY,QAAQ;AACtB,aAAO,EAAE,GAAG,OAAO,aAAa,GAAG,OAAO,YAAY;AAAA,IACxD,WAAW,mBAAmB,SAAS;AACrC,aAAO,EAAE,GAAG,QAAQ,YAAY,GAAG,QAAQ,UAAU;AAAA,IACvD,OAAO;AACL,aAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,IACtB;AAAA,EACF;AAEA,WAAS,YAAY,SAAiD;AACpE,UAAM,OAAO,QAAQ,sBAAsB;AAC3C,UAAM,WAAW,SAAS,oBAAoB,SAAS;AAEvD,WAAO;AAAA,MACL,KAAK,KAAK,MAAM,SAAS;AAAA,MACzB,MAAM,KAAK,OAAO,SAAS;AAAA,IAC7B;AAAA,EACF;AAEA,WAAS,kBAAkB;AAAA,IACzB,SAAS,SAAS,mBAAmB,SAAS;AAAA,IAC9C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,GAA4B;AAC1B,UAAM,aAAa,kBAAkB,MAAM;AAC3C,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,YAAY,WAAW,IAAI;AACjC,UAAM,YAAY,KAAK,IAAK,YAAY,QAAS,GAAG;AACpD,UAAM,YAAY,KAAK,IAAK,YAAY,QAAS,GAAG;AAEpD,WAAO,EAAE,GAAG,WAAW,GAAG,UAAU;AAAA,EACtC;AAEA,WAAS,SAAS;AAAA,IAChB,SAAS,SAAS,mBAAmB,SAAS;AAAA,IAC9C;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,IACZ,SAAS,QAAQ;AAAA,IACjB;AAAA,EACF,GAAmB;AACjB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,EAAE,GAAG,OAAO,GAAG,MAAM,IAAI,kBAAkB,MAAM;AAEvD,QAAI,UAAU,OAAO,UAAU,MAAM;AACnC,UAAI;AAAU,iBAAS;AACvB;AAAA,IACF;AAEA,UAAM,iBAAiB,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS;AAErD,UAAM,SAAS,MAAM;AACnB,YAAM,cAAc,KAAK,IAAI;AAE7B,YAAM,QAAQ,IAAI,IAAI,cAAc,aAAa,eAAe,CAAC;AACjE,YAAM,QAAQ,IAAI,IAAI,cAAc,aAAa,eAAe,CAAC;AACjE,YAAM,aAAa,OAAO,KAAK;AAC/B,YAAM,aAAa,OAAO,KAAK;AAG/B,YAAM,UAAU,KAAK,IAAI,YAAY,UAAU;AAE/C,aAAO,OAAO;AAAA,QACZ,MAAM,WAAW,OAAO,SAAS;AAAA,QACjC,KAAK,WAAW,MAAM,SAAS;AAAA,MACjC,CAAC;AAED,UAAI,aAAa,KAAK,aAAa,GAAG;AACpC,8BAAsB,MAAM;AAAA,MAC9B,WAAW,UAAU;AACnB,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,0BAAsB,MAAM;AAAA,EAC9B;AAEA,WAAS,eAAe;AAAA,IACtB;AAAA,IACA,SAAS,SAAS,mBAAmB,SAAS;AAAA,IAC9C,SAAS,CAAC;AAAA,IACV,QAAQ;AAAA,IACR,SAAS,QAAQ;AAAA,EACnB,GAAyB;AACvB,QAAI,WAAW,aAAa,MAAM;AAClC,QAAI,CAAC;AAAU;AACf,QAAI,WAAW,aAAa,QAAQ,QAAQ;AAC5C,QAAI,CAAC;AAAU;AAEf,UAAM,eAAe,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO;AAC7C,UAAM,WAAW,YAAY,QAAQ;AACrC,UAAM,eAAe,SAAS,OAAO,aAAa;AAClD,UAAM,cAAc,SAAS,MAAM,aAAa;AAEhD,UAAM,iBAAiB,kBAAkB;AAAA,MACvC,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,KAAK;AAAA,MACL;AAAA,IACF,CAAC;AAED,aAAS;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,KAAK;AAAA,MACL,UAAU;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC/LA,SAAS,aAAAC,YAAW,mBAAmB;AAShC,SAAS,sBAAsB,SAAwC;AAC5E,QAAM,gBAAgB;AAAA,IACpB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,eAAe;AAAA,IACf,GAAG;AAAA,EACL;AAEA,QAAM,mBAAmB,CAAC,YAAsB;AAC9C,UAAM,KAAK,OAAO,OAAO,aAAa,IAAI,EAAE,QAAQ,CAAC;AAErD,QAAI,cAAc,OAAO;AACvB,eAAS,gBAAgB,MAAM,YAAY,cAAc,OAAO,GAAG,EAAE,IAAI;AAAA,IAC3E;AAEA,QAAI,WAAW,cAAc,cAAc;AACzC,eAAS,gBAAgB,MAAM;AAAA,QAC7B,cAAc;AAAA,QACd,GAAG,EAAE;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,YAAsB;AAC/C,UAAM,KAAK,OAAO,OAAO,cAAc,IAAI,EAAE,QAAQ,CAAC;AAEtD,QAAI,cAAc,QAAQ;AACxB,eAAS,gBAAgB,MAAM;AAAA,QAC7B,cAAc,UAAU;AAAA,QACxB,GAAG,EAAE;AAAA,MACP;AAAA,IACF;AAEA,QAAI,WAAW,cAAc,eAAe;AAC1C,eAAS,gBAAgB,MAAM;AAAA,QAC7B,cAAc,iBAAiB;AAAA,QAC/B,GAAG,EAAE;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB,MAAM;AAC1B,qBAAiB;AACjB,sBAAkB;AAAA,EACpB;AAEA,EAAAA,WAAU,MAAM;AACd,qBAAiB,IAAI;AACrB,sBAAkB,IAAI;AAEtB,WAAO,iBAAiB,UAAU,eAAe,EAAE,SAAS,KAAK,CAAC;AAAA,EACpE,CAAC;AAED,cAAY,MAAM;AAChB,WAAO,oBAAoB,UAAU,aAAa;AAAA,EACpD,CAAC;AACH;","names":["callback","easings","unref","onMounted"]}
|
package/dist/nuxt/module.json
CHANGED
package/dist/nuxt/module.mjs
CHANGED
|
@@ -53,9 +53,9 @@ const functions = [
|
|
|
53
53
|
{
|
|
54
54
|
name: "useCountdown",
|
|
55
55
|
"package": "composables",
|
|
56
|
-
lastUpdated:
|
|
56
|
+
lastUpdated: 1695298136000,
|
|
57
57
|
docs: "https://maas.egineering/vue-equipment/composables/useCountdown/",
|
|
58
|
-
description: "
|
|
58
|
+
description: "a composable function that returns the remaining time until a given Date and Time"
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
name: "useEasings",
|
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.9.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",
|