@maas/vue-equipment 1.0.0-beta.57 → 1.0.0-beta.58
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/useScrollTo/index.js +3 -1
- package/dist/composables/useScrollTo/index.js.map +1 -1
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +1 -1
- package/dist/plugins/MagicCommand/src/composables/private/useCommandView.mjs +3 -1
- package/dist/plugins/MagicCookie/src/components/MagicCookieProvider.d.vue.ts +2 -2
- package/dist/plugins/MagicCookie/src/components/MagicCookieProvider.vue +3 -8
- package/dist/plugins/MagicCookie/src/components/MagicCookieProvider.vue.d.ts +2 -2
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +8 -8
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +12 -4
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerGuards.mjs +6 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerProgress.mjs +6 -2
- package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +36 -36
- package/dist/plugins/MagicMenu/src/composables/private/useMenuView.mjs +3 -1
- package/dist/plugins/MagicModal/src/components/MagicModal.vue +11 -11
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudio.vue +4 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue +7 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue +3 -1
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerProvider.vue +26 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideo.vue +6 -4
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +2 -1
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerPlaylistApi.d.ts +10 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerPlaylistApi.mjs +27 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.d.ts +1 -1
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.mjs +52 -7
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.mjs +5 -1
- package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.d.ts +6 -0
- package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.mjs +12 -1
- package/dist/plugins/MagicPlayer/src/symbols/index.d.ts +3 -2
- package/dist/plugins/MagicPlayer/src/symbols/index.mjs +2 -0
- package/dist/plugins/MagicPlayer/src/types/index.d.ts +6 -2
- package/dist/plugins/MagicToast/src/components/MagicToastProvider.vue +5 -1
- package/dist/plugins/tsconfig.test.json +8 -0
- package/dist/utils/index.js +9 -3
- package/dist/utils/index.js.map +1 -1
- package/package.json +8 -4
|
@@ -80,7 +80,9 @@ function useScrollTo() {
|
|
|
80
80
|
const startTime = Date.now();
|
|
81
81
|
const { x: fromX, y: fromY } = getScrollPosition(parent);
|
|
82
82
|
if (fromX === top && fromY === left) {
|
|
83
|
-
if (callback)
|
|
83
|
+
if (callback) {
|
|
84
|
+
callback();
|
|
85
|
+
}
|
|
84
86
|
return;
|
|
85
87
|
}
|
|
86
88
|
const mappedDuration = { x: 500, y: 500, ...duration };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/composables/useScrollTo/index.ts"],"sourcesContent":["import {\n unrefElement,\n type MaybeComputedElementRef,\n type MaybeElement,\n} from '@vueuse/core'\nimport { easeOutQuad } from '@maas/vue-equipment/utils'\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?: (t: number) => number\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?: (t: number) => number\n}\n\n// Private functions\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\nfunction isHtmlElement(\n parentEl: Window | SVGElement | Element\n): parentEl is HTMLElement {\n return parentEl instanceof HTMLElement\n}\n\nfunction disableScrollSnap(parentEl: Window | SVGElement | Element) {\n if (isHtmlElement(parentEl)) {\n parentEl.style.scrollSnapType = 'none'\n }\n}\n\nfunction reenableScrollSnap(parentEl: Window | SVGElement | Element) {\n if (isHtmlElement(parentEl)) {\n parentEl.style.scrollSnapType = ''\n }\n}\n\n// Public composable\nexport function useScrollTo() {\n function getScrollPosition(element: Element | Window): {\n x: number\n y: number\n } {\n if (element === window) {\n return { x: window.scrollX, y: window.scrollY }\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(\n target: Element,\n parent?: Element | Window\n ): { top: number; left: number } {\n const rect = target.getBoundingClientRect()\n const scrollEl =\n parent || document.scrollingElement || document.documentElement\n\n const scrollTop = scrollEl instanceof Window ? 0 : scrollEl.scrollTop\n const scrollLeft = scrollEl instanceof Window ? 0 : scrollEl.scrollLeft\n\n return {\n top: rect.top + scrollTop,\n left: rect.left + 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 = 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 = easeOutQuad,\n }: scrollToTargetParams) {\n const parentEl = unwrapParent(parent)\n if (!parentEl) {\n return\n }\n const targetEl = unwrapTarget(target, parentEl)\n if (!targetEl) {\n return\n }\n\n disableScrollSnap(parentEl)\n\n const mappedOffset = { x: 0, y: 0, ...offset }\n const distance = getDistance(targetEl, parentEl)\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 callback: () => reenableScrollSnap(parentEl),\n })\n }\n\n return {\n getScrollPosition,\n getDistance,\n getScrollDuration,\n scrollTo,\n scrollToTarget,\n }\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAGK;AACP,SAAS,mBAAmB;AAsC5B,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;AAEA,SAAS,cACP,UACyB;AACzB,SAAO,oBAAoB;AAC7B;AAEA,SAAS,kBAAkB,UAAyC;AAClE,MAAI,cAAc,QAAQ,GAAG;AAC3B,aAAS,MAAM,iBAAiB;AAAA,EAClC;AACF;AAEA,SAAS,mBAAmB,UAAyC;AACnE,MAAI,cAAc,QAAQ,GAAG;AAC3B,aAAS,MAAM,iBAAiB;AAAA,EAClC;AACF;AAGO,SAAS,cAAc;AAC5B,WAAS,kBAAkB,SAGzB;AACA,QAAI,YAAY,QAAQ;AACtB,aAAO,EAAE,GAAG,OAAO,SAAS,GAAG,OAAO,QAAQ;AAAA,IAChD,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,YACP,QACA,QAC+B;AAC/B,UAAM,OAAO,OAAO,sBAAsB;AAC1C,UAAM,WACJ,UAAU,SAAS,oBAAoB,SAAS;AAElD,UAAM,YAAY,oBAAoB,SAAS,IAAI,SAAS;AAC5D,UAAM,aAAa,oBAAoB,SAAS,IAAI,SAAS;AAE7D,WAAO;AAAA,MACL,KAAK,KAAK,MAAM;AAAA,MAChB,MAAM,KAAK,OAAO;AAAA,IACpB;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;AAAA,IACT;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,
|
|
1
|
+
{"version":3,"sources":["../../../packages/composables/useScrollTo/index.ts"],"sourcesContent":["import {\n unrefElement,\n type MaybeComputedElementRef,\n type MaybeElement,\n} from '@vueuse/core'\nimport { easeOutQuad } from '@maas/vue-equipment/utils'\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?: (t: number) => number\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?: (t: number) => number\n}\n\n// Private functions\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\nfunction isHtmlElement(\n parentEl: Window | SVGElement | Element\n): parentEl is HTMLElement {\n return parentEl instanceof HTMLElement\n}\n\nfunction disableScrollSnap(parentEl: Window | SVGElement | Element) {\n if (isHtmlElement(parentEl)) {\n parentEl.style.scrollSnapType = 'none'\n }\n}\n\nfunction reenableScrollSnap(parentEl: Window | SVGElement | Element) {\n if (isHtmlElement(parentEl)) {\n parentEl.style.scrollSnapType = ''\n }\n}\n\n// Public composable\nexport function useScrollTo() {\n function getScrollPosition(element: Element | Window): {\n x: number\n y: number\n } {\n if (element === window) {\n return { x: window.scrollX, y: window.scrollY }\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(\n target: Element,\n parent?: Element | Window\n ): { top: number; left: number } {\n const rect = target.getBoundingClientRect()\n const scrollEl =\n parent || document.scrollingElement || document.documentElement\n\n const scrollTop = scrollEl instanceof Window ? 0 : scrollEl.scrollTop\n const scrollLeft = scrollEl instanceof Window ? 0 : scrollEl.scrollLeft\n\n return {\n top: rect.top + scrollTop,\n left: rect.left + 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 = 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) {\n callback()\n }\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 = easeOutQuad,\n }: scrollToTargetParams) {\n const parentEl = unwrapParent(parent)\n if (!parentEl) {\n return\n }\n const targetEl = unwrapTarget(target, parentEl)\n if (!targetEl) {\n return\n }\n\n disableScrollSnap(parentEl)\n\n const mappedOffset = { x: 0, y: 0, ...offset }\n const distance = getDistance(targetEl, parentEl)\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 callback: () => reenableScrollSnap(parentEl),\n })\n }\n\n return {\n getScrollPosition,\n getDistance,\n getScrollDuration,\n scrollTo,\n scrollToTarget,\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/nuxt/module.json
CHANGED
package/dist/nuxt/module.mjs
CHANGED
|
@@ -137,7 +137,7 @@ const functions$1 = [
|
|
|
137
137
|
{
|
|
138
138
|
name: "useScrollTo",
|
|
139
139
|
"package": "composables",
|
|
140
|
-
lastUpdated:
|
|
140
|
+
lastUpdated: 1780311933000,
|
|
141
141
|
docs: "https://maas.egineering/vue-equipment/composables/useScrollTo/",
|
|
142
142
|
description: "Scroll to an element with consistent speed"
|
|
143
143
|
}
|
|
@@ -4,9 +4,9 @@ type MagicCookieProviderProps = {
|
|
|
4
4
|
id: MaybeRef<string>;
|
|
5
5
|
options?: MagicCookieOptions;
|
|
6
6
|
};
|
|
7
|
-
declare var
|
|
7
|
+
declare var __VLS_1: {};
|
|
8
8
|
type __VLS_Slots = {} & {
|
|
9
|
-
default?: (props: typeof
|
|
9
|
+
default?: (props: typeof __VLS_1) => any;
|
|
10
10
|
};
|
|
11
11
|
declare const __VLS_base: import("vue").DefineComponent<MagicCookieProviderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicCookieProviderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
12
12
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
</div>
|
|
6
|
-
</client-only>
|
|
2
|
+
<div class="magic-cookie-provider">
|
|
3
|
+
<slot />
|
|
4
|
+
</div>
|
|
7
5
|
</template>
|
|
8
6
|
|
|
9
7
|
<script setup>
|
|
@@ -12,9 +10,6 @@ import { defu } from "defu";
|
|
|
12
10
|
import { useCookieState } from "../composables/private/useCookieState";
|
|
13
11
|
import { defaultOptions } from "../utils/defaultOptions";
|
|
14
12
|
import { MagicCookieInstanceId } from "../symbols";
|
|
15
|
-
defineOptions({
|
|
16
|
-
inheritAttrs: false
|
|
17
|
-
});
|
|
18
13
|
const { id, options } = defineProps({
|
|
19
14
|
id: { type: null, required: true },
|
|
20
15
|
options: { type: Object, required: false }
|
|
@@ -4,9 +4,9 @@ type MagicCookieProviderProps = {
|
|
|
4
4
|
id: MaybeRef<string>;
|
|
5
5
|
options?: MagicCookieOptions;
|
|
6
6
|
};
|
|
7
|
-
declare var
|
|
7
|
+
declare var __VLS_1: {};
|
|
8
8
|
type __VLS_Slots = {} & {
|
|
9
|
-
default?: (props: typeof
|
|
9
|
+
default?: (props: typeof __VLS_1) => any;
|
|
10
10
|
};
|
|
11
11
|
declare const __VLS_base: import("vue").DefineComponent<MagicCookieProviderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicCookieProviderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
12
12
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -309,15 +309,15 @@ onUnmounted(() => {
|
|
|
309
309
|
--magic-drawer-padding: 0px;
|
|
310
310
|
--magic-drawer-drag-overshoot-x: 0px;
|
|
311
311
|
--magic-drawer-drag-overshoot-y: 0px;
|
|
312
|
-
position: fixed;
|
|
313
|
-
inset: 0;
|
|
314
|
-
|
|
315
|
-
height: 100%;
|
|
316
|
-
display: flex;
|
|
317
|
-
pointer-events: none;
|
|
312
|
+
position: var(--magic-drawer-position, fixed);
|
|
313
|
+
inset: var(--magic-drawer-inset, 0);
|
|
314
|
+
display: var(--magic-drawer-display, flex);
|
|
318
315
|
justify-content: var(--magic-drawer-justify-content);
|
|
319
316
|
align-items: var(--magic-drawer-align-items);
|
|
320
317
|
z-index: var(--magic-drawer-z-index, 999);
|
|
318
|
+
width: 100%;
|
|
319
|
+
height: 100%;
|
|
320
|
+
pointer-events: none;
|
|
321
321
|
background: transparent;
|
|
322
322
|
color: inherit;
|
|
323
323
|
padding: 0;
|
|
@@ -402,8 +402,8 @@ onUnmounted(() => {
|
|
|
402
402
|
}
|
|
403
403
|
|
|
404
404
|
.magic-drawer__content {
|
|
405
|
-
width: 100
|
|
406
|
-
max-height: 100
|
|
405
|
+
width: var(--magic-drawer-content-width, 100%);
|
|
406
|
+
max-height: var(--magic-drawer-content-max-height, 100%);
|
|
407
407
|
height: var(--magic-drawer-content-height, 100%);
|
|
408
408
|
position: relative;
|
|
409
409
|
}
|
|
@@ -217,28 +217,36 @@ export function useDrawerDrag(args) {
|
|
|
217
217
|
switch (position) {
|
|
218
218
|
case "bottom": {
|
|
219
219
|
const newDraggedB = clamp(y - originY.value, 0, os * -1, false);
|
|
220
|
-
if (newDraggedB === draggedY.value)
|
|
220
|
+
if (newDraggedB === draggedY.value) {
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
221
223
|
relDirectionY.value = newDraggedB < draggedY.value ? "below" : "above";
|
|
222
224
|
draggedY.value = newDraggedB;
|
|
223
225
|
break;
|
|
224
226
|
}
|
|
225
227
|
case "top": {
|
|
226
228
|
const newDraggedT = clamp(y - originY.value, 0, os, true);
|
|
227
|
-
if (newDraggedT === draggedY.value)
|
|
229
|
+
if (newDraggedT === draggedY.value) {
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
228
232
|
relDirectionY.value = newDraggedT < draggedY.value ? "below" : "above";
|
|
229
233
|
draggedY.value = newDraggedT;
|
|
230
234
|
break;
|
|
231
235
|
}
|
|
232
236
|
case "right": {
|
|
233
237
|
const newDraggedR = clamp(x - originX.value, 0, os * -1, false);
|
|
234
|
-
if (newDraggedR === draggedX.value)
|
|
238
|
+
if (newDraggedR === draggedX.value) {
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
235
241
|
relDirectionX.value = newDraggedR < draggedX.value ? "below" : "above";
|
|
236
242
|
draggedX.value = newDraggedR;
|
|
237
243
|
break;
|
|
238
244
|
}
|
|
239
245
|
case "left": {
|
|
240
246
|
const newDraggedL = clamp(x - originX.value, 0, os, true);
|
|
241
|
-
if (newDraggedL === draggedX.value)
|
|
247
|
+
if (newDraggedL === draggedX.value) {
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
242
250
|
relDirectionX.value = newDraggedL < draggedX.value ? "below" : "above";
|
|
243
251
|
draggedX.value = newDraggedL;
|
|
244
252
|
break;
|
|
@@ -9,6 +9,9 @@ export function useDrawerGuards(args) {
|
|
|
9
9
|
return toValue(activeSnapPoint) !== 1 && !!toValue(activeSnapPoint);
|
|
10
10
|
});
|
|
11
11
|
function canScrollY(element) {
|
|
12
|
+
if (!(element instanceof Element)) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
12
15
|
const style = window.getComputedStyle(element);
|
|
13
16
|
const overflowY = style.overflowY;
|
|
14
17
|
const canScroll = ["auto", "scroll"].includes(overflowY);
|
|
@@ -16,6 +19,9 @@ export function useDrawerGuards(args) {
|
|
|
16
19
|
return canScroll && hasOverflow;
|
|
17
20
|
}
|
|
18
21
|
function canScrollX(element) {
|
|
22
|
+
if (!(element instanceof Element)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
19
25
|
const style = window.getComputedStyle(element);
|
|
20
26
|
const overflowX = style.overflowX;
|
|
21
27
|
const canScroll = ["auto", "scroll"].includes(overflowX);
|
|
@@ -82,8 +82,12 @@ export function useDrawerProgress(args) {
|
|
|
82
82
|
);
|
|
83
83
|
break;
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
if (Object.is(rawX, -0)) {
|
|
86
|
+
rawX = 0;
|
|
87
|
+
}
|
|
88
|
+
if (Object.is(rawY, -0)) {
|
|
89
|
+
rawY = 0;
|
|
90
|
+
}
|
|
87
91
|
const x = clampValue(rawX, 0, 1);
|
|
88
92
|
const y = clampValue(rawY, 0, 1);
|
|
89
93
|
progress.value = { x, y };
|
|
@@ -74,26 +74,26 @@ export declare function useMagicEmitter(): {
|
|
|
74
74
|
} & Omit<{
|
|
75
75
|
beforeSnap: {
|
|
76
76
|
id: string;
|
|
77
|
-
snapPoint: import("../../../
|
|
77
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
78
78
|
} | {
|
|
79
79
|
id: string;
|
|
80
|
-
snapPoint: import("../../../
|
|
80
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
81
81
|
};
|
|
82
82
|
snapTo: {
|
|
83
83
|
id: string;
|
|
84
|
-
snapPoint: import("../../../
|
|
84
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
85
85
|
duration?: number;
|
|
86
86
|
} | {
|
|
87
87
|
id: string;
|
|
88
|
-
snapPoint: import("../../../
|
|
88
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
89
89
|
duration?: number;
|
|
90
90
|
};
|
|
91
91
|
afterSnap: {
|
|
92
92
|
id: string;
|
|
93
|
-
snapPoint: import("../../../
|
|
93
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
94
94
|
} | {
|
|
95
95
|
id: string;
|
|
96
|
-
snapPoint: import("../../../
|
|
96
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
97
97
|
};
|
|
98
98
|
beforeDrag: {
|
|
99
99
|
id: string;
|
|
@@ -341,26 +341,26 @@ export declare function useMagicEmitter(): {
|
|
|
341
341
|
} & Omit<{
|
|
342
342
|
beforeSnap: {
|
|
343
343
|
id: string;
|
|
344
|
-
snapPoint: import("../../../
|
|
344
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
345
345
|
} | {
|
|
346
346
|
id: string;
|
|
347
|
-
snapPoint: import("../../../
|
|
347
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
348
348
|
};
|
|
349
349
|
snapTo: {
|
|
350
350
|
id: string;
|
|
351
|
-
snapPoint: import("../../../
|
|
351
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
352
352
|
duration?: number;
|
|
353
353
|
} | {
|
|
354
354
|
id: string;
|
|
355
|
-
snapPoint: import("../../../
|
|
355
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
356
356
|
duration?: number;
|
|
357
357
|
};
|
|
358
358
|
afterSnap: {
|
|
359
359
|
id: string;
|
|
360
|
-
snapPoint: import("../../../
|
|
360
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
361
361
|
} | {
|
|
362
362
|
id: string;
|
|
363
|
-
snapPoint: import("../../../
|
|
363
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
364
364
|
};
|
|
365
365
|
beforeDrag: {
|
|
366
366
|
id: string;
|
|
@@ -610,26 +610,26 @@ export declare function useMagicEmitter(): {
|
|
|
610
610
|
} & Omit<{
|
|
611
611
|
beforeSnap: {
|
|
612
612
|
id: string;
|
|
613
|
-
snapPoint: import("../../../
|
|
613
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
614
614
|
} | {
|
|
615
615
|
id: string;
|
|
616
|
-
snapPoint: import("../../../
|
|
616
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
617
617
|
};
|
|
618
618
|
snapTo: {
|
|
619
619
|
id: string;
|
|
620
|
-
snapPoint: import("../../../
|
|
620
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
621
621
|
duration?: number;
|
|
622
622
|
} | {
|
|
623
623
|
id: string;
|
|
624
|
-
snapPoint: import("../../../
|
|
624
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
625
625
|
duration?: number;
|
|
626
626
|
};
|
|
627
627
|
afterSnap: {
|
|
628
628
|
id: string;
|
|
629
|
-
snapPoint: import("../../../
|
|
629
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
630
630
|
} | {
|
|
631
631
|
id: string;
|
|
632
|
-
snapPoint: import("../../../
|
|
632
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
633
633
|
};
|
|
634
634
|
beforeDrag: {
|
|
635
635
|
id: string;
|
|
@@ -877,26 +877,26 @@ export declare function useMagicEmitter(): {
|
|
|
877
877
|
} & Omit<{
|
|
878
878
|
beforeSnap: {
|
|
879
879
|
id: string;
|
|
880
|
-
snapPoint: import("../../../
|
|
880
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
881
881
|
} | {
|
|
882
882
|
id: string;
|
|
883
|
-
snapPoint: import("../../../
|
|
883
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
884
884
|
};
|
|
885
885
|
snapTo: {
|
|
886
886
|
id: string;
|
|
887
|
-
snapPoint: import("../../../
|
|
887
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
888
888
|
duration?: number;
|
|
889
889
|
} | {
|
|
890
890
|
id: string;
|
|
891
|
-
snapPoint: import("../../../
|
|
891
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
892
892
|
duration?: number;
|
|
893
893
|
};
|
|
894
894
|
afterSnap: {
|
|
895
895
|
id: string;
|
|
896
|
-
snapPoint: import("../../../
|
|
896
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
897
897
|
} | {
|
|
898
898
|
id: string;
|
|
899
|
-
snapPoint: import("../../../
|
|
899
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
900
900
|
};
|
|
901
901
|
beforeDrag: {
|
|
902
902
|
id: string;
|
|
@@ -1146,26 +1146,26 @@ export declare function useMagicEmitter(): {
|
|
|
1146
1146
|
} & Omit<{
|
|
1147
1147
|
beforeSnap: {
|
|
1148
1148
|
id: string;
|
|
1149
|
-
snapPoint: import("../../../
|
|
1149
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
1150
1150
|
} | {
|
|
1151
1151
|
id: string;
|
|
1152
|
-
snapPoint: import("../../../
|
|
1152
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
1153
1153
|
};
|
|
1154
1154
|
snapTo: {
|
|
1155
1155
|
id: string;
|
|
1156
|
-
snapPoint: import("../../../
|
|
1156
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
1157
1157
|
duration?: number;
|
|
1158
1158
|
} | {
|
|
1159
1159
|
id: string;
|
|
1160
|
-
snapPoint: import("../../../
|
|
1160
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
1161
1161
|
duration?: number;
|
|
1162
1162
|
};
|
|
1163
1163
|
afterSnap: {
|
|
1164
1164
|
id: string;
|
|
1165
|
-
snapPoint: import("../../../
|
|
1165
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
1166
1166
|
} | {
|
|
1167
1167
|
id: string;
|
|
1168
|
-
snapPoint: import("../../../
|
|
1168
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
1169
1169
|
};
|
|
1170
1170
|
beforeDrag: {
|
|
1171
1171
|
id: string;
|
|
@@ -1413,26 +1413,26 @@ export declare function useMagicEmitter(): {
|
|
|
1413
1413
|
} & Omit<{
|
|
1414
1414
|
beforeSnap: {
|
|
1415
1415
|
id: string;
|
|
1416
|
-
snapPoint: import("../../../
|
|
1416
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
1417
1417
|
} | {
|
|
1418
1418
|
id: string;
|
|
1419
|
-
snapPoint: import("../../../
|
|
1419
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
1420
1420
|
};
|
|
1421
1421
|
snapTo: {
|
|
1422
1422
|
id: string;
|
|
1423
|
-
snapPoint: import("../../../
|
|
1423
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
1424
1424
|
duration?: number;
|
|
1425
1425
|
} | {
|
|
1426
1426
|
id: string;
|
|
1427
|
-
snapPoint: import("../../../
|
|
1427
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
1428
1428
|
duration?: number;
|
|
1429
1429
|
};
|
|
1430
1430
|
afterSnap: {
|
|
1431
1431
|
id: string;
|
|
1432
|
-
snapPoint: import("../../../
|
|
1432
|
+
snapPoint: import("../../../MagicDraggable/src/types/index.js").DraggableSnapPoint;
|
|
1433
1433
|
} | {
|
|
1434
1434
|
id: string;
|
|
1435
|
-
snapPoint: import("../../../
|
|
1435
|
+
snapPoint: import("../../../MagicDrawer/src/types/index.js").DrawerSnapPoint;
|
|
1436
1436
|
};
|
|
1437
1437
|
beforeDrag: {
|
|
1438
1438
|
id: string;
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
@after-leave="onAfterLeave"
|
|
36
36
|
>
|
|
37
37
|
<component
|
|
38
|
-
ref="component"
|
|
39
38
|
:is="mappedOptions.tag"
|
|
40
39
|
v-show="innerActive"
|
|
40
|
+
ref="component"
|
|
41
41
|
class="magic-modal__content"
|
|
42
42
|
@pointerdown.self="onPointerdown"
|
|
43
43
|
>
|
|
@@ -183,13 +183,13 @@ onUnmounted(() => {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
.magic-modal {
|
|
186
|
-
position: fixed;
|
|
187
|
-
inset: 0;
|
|
188
|
-
width: 100
|
|
189
|
-
height: 100
|
|
190
|
-
display: flex;
|
|
191
|
-
justify-content: center;
|
|
192
|
-
align-items: center;
|
|
186
|
+
position: var(--magic-modal-position, fixed);
|
|
187
|
+
inset: var(--magic-modal-inset, 0);
|
|
188
|
+
width: var(--magic-modal-width, 100%);
|
|
189
|
+
height: var(--magic-modal-height, 100%);
|
|
190
|
+
display: var(--magic-modal-display, flex);
|
|
191
|
+
justify-content: var(--magic-modal-justify-content, center);
|
|
192
|
+
align-items: var(--magic-modal-align-items, center);
|
|
193
193
|
z-index: var(--magic-modal-z-index, 999);
|
|
194
194
|
background: transparent;
|
|
195
195
|
color: inherit;
|
|
@@ -200,9 +200,9 @@ onUnmounted(() => {
|
|
|
200
200
|
.magic-modal__content {
|
|
201
201
|
-webkit-overflow-scrolling: touch;
|
|
202
202
|
scroll-behavior: smooth;
|
|
203
|
-
max-height: 100
|
|
204
|
-
width: 100
|
|
205
|
-
display: flex;
|
|
203
|
+
max-height: var(--magic-modal-content-max-height, 100%);
|
|
204
|
+
width: var(--magic-modal-content-width, 100%);
|
|
205
|
+
display: var(--magic-modal-content-display, flex);
|
|
206
206
|
align-items: var(--magic-modal-content-align-items, center);
|
|
207
207
|
justify-content: var(--magic-modal-content-justify-content, center);
|
|
208
208
|
overflow-y: var(--magic-modal-content-overflow-y, auto);
|
|
@@ -29,7 +29,8 @@ import { audioModePlaybackDefaults } from "../utils/playbackDefaults";
|
|
|
29
29
|
import {
|
|
30
30
|
MagicPlayerInstanceId,
|
|
31
31
|
MagicPlayerOptionsKey,
|
|
32
|
-
MagicPlayerRef
|
|
32
|
+
MagicPlayerRef,
|
|
33
|
+
MagicPlayerCurrentSrcKey
|
|
33
34
|
} from "../symbols";
|
|
34
35
|
const magicError = useMagicError({
|
|
35
36
|
prefix: "MagicPlayer",
|
|
@@ -38,6 +39,7 @@ const magicError = useMagicError({
|
|
|
38
39
|
const injectedInstanceId = inject(MagicPlayerInstanceId, void 0);
|
|
39
40
|
const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
|
|
40
41
|
const injectedPlayerRef = inject(MagicPlayerRef, void 0);
|
|
42
|
+
const injectedCurrentSrc = inject(MagicPlayerCurrentSrcKey, void 0);
|
|
41
43
|
let cancelFocus = void 0;
|
|
42
44
|
let cancelBlur = void 0;
|
|
43
45
|
magicError.assert(injectedInstanceId, {
|
|
@@ -52,7 +54,7 @@ const elRef = useTemplateRef("el");
|
|
|
52
54
|
const { initialize } = usePlayerRuntime({
|
|
53
55
|
id: injectedInstanceId,
|
|
54
56
|
mediaRef: elRef,
|
|
55
|
-
src:
|
|
57
|
+
src: injectedCurrentSrc,
|
|
56
58
|
srcType: injectedOptions.srcType,
|
|
57
59
|
debug: injectedOptions.debug
|
|
58
60
|
});
|
|
@@ -29,7 +29,11 @@ import {
|
|
|
29
29
|
useMagicError
|
|
30
30
|
} from "@maas/vue-equipment/plugins/MagicError";
|
|
31
31
|
import { usePlayerState } from "../composables/private/usePlayerState";
|
|
32
|
-
import {
|
|
32
|
+
import {
|
|
33
|
+
MagicPlayerInstanceId,
|
|
34
|
+
MagicPlayerOptionsKey,
|
|
35
|
+
MagicPlayerCurrentSrcKey
|
|
36
|
+
} from "../symbols";
|
|
33
37
|
const { playbackId } = defineProps({
|
|
34
38
|
playbackId: { type: String, required: false }
|
|
35
39
|
});
|
|
@@ -39,6 +43,7 @@ const magicError = useMagicError({
|
|
|
39
43
|
});
|
|
40
44
|
const instanceId = inject(MagicPlayerInstanceId, void 0);
|
|
41
45
|
const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
|
|
46
|
+
const injectedCurrentSrc = inject(MagicPlayerCurrentSrcKey, void 0);
|
|
42
47
|
magicError.assert(instanceId, {
|
|
43
48
|
message: "MagicPlayerMuxPopover must be nested inside MagicPlayerVideoControls",
|
|
44
49
|
errorCode: "missing_instance_id"
|
|
@@ -107,7 +112,7 @@ function drawFrame(time) {
|
|
|
107
112
|
);
|
|
108
113
|
}
|
|
109
114
|
async function initialize() {
|
|
110
|
-
const parsedPlaybackId = getMuxId(
|
|
115
|
+
const parsedPlaybackId = getMuxId(injectedCurrentSrc?.value);
|
|
111
116
|
const mappedPlaybackId = playbackId ?? parsedPlaybackId;
|
|
112
117
|
if (!mappedPlaybackId) {
|
|
113
118
|
magicError.throwError({
|
|
@@ -83,7 +83,8 @@ const {
|
|
|
83
83
|
muted,
|
|
84
84
|
loaded,
|
|
85
85
|
waiting,
|
|
86
|
-
hasOverlay
|
|
86
|
+
hasOverlay,
|
|
87
|
+
skipping
|
|
87
88
|
} = toRefs(state);
|
|
88
89
|
hasOverlay.value = true;
|
|
89
90
|
const mappedOverlayTransition = computed(
|
|
@@ -98,6 +99,7 @@ const { togglePlay } = usePlayerVideoApi({
|
|
|
98
99
|
const { idle } = useIdle(injectedOptions?.threshold?.idle);
|
|
99
100
|
const isVisible = computed(() => {
|
|
100
101
|
switch (true) {
|
|
102
|
+
case skipping.value:
|
|
101
103
|
case (playing.value && idle.value):
|
|
102
104
|
case (playing.value && !mouseEntered.value):
|
|
103
105
|
case (injectedOptions?.autoplay && (!started.value || !mouseEntered.value)):
|
|
@@ -21,13 +21,22 @@
|
|
|
21
21
|
</template>
|
|
22
22
|
|
|
23
23
|
<script setup>
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
toRefs,
|
|
26
|
+
provide,
|
|
27
|
+
onMounted,
|
|
28
|
+
useTemplateRef,
|
|
29
|
+
computed,
|
|
30
|
+
watch
|
|
31
|
+
} from "vue";
|
|
25
32
|
import defu from "defu";
|
|
26
33
|
import { usePlayerState } from "../composables/private/usePlayerState";
|
|
34
|
+
import { usePlayerPlaylistApi } from "../composables/private/usePlayerPlaylistApi";
|
|
27
35
|
import {
|
|
28
36
|
MagicPlayerInstanceId,
|
|
29
37
|
MagicPlayerOptionsKey,
|
|
30
|
-
MagicPlayerRef
|
|
38
|
+
MagicPlayerRef,
|
|
39
|
+
MagicPlayerCurrentSrcKey
|
|
31
40
|
} from "../symbols";
|
|
32
41
|
import { defaultOptions } from "../utils/defaultOptions";
|
|
33
42
|
import { usePlayerEmitter } from "../composables/private/usePlayerEmitter";
|
|
@@ -49,6 +58,20 @@ const {
|
|
|
49
58
|
fullscreen,
|
|
50
59
|
touched
|
|
51
60
|
} = toRefs(state);
|
|
61
|
+
const rawSrc = options?.src ?? "";
|
|
62
|
+
const srcs = Array.isArray(rawSrc) ? rawSrc : [rawSrc];
|
|
63
|
+
state.playlistCount = srcs.length;
|
|
64
|
+
state.loop = mappedOptions.loop;
|
|
65
|
+
const currentSrc = computed(() => srcs[state.playlistIndex] ?? "");
|
|
66
|
+
const { next } = usePlayerPlaylistApi({ id });
|
|
67
|
+
watch(
|
|
68
|
+
() => state.ended,
|
|
69
|
+
(value) => {
|
|
70
|
+
if (value && state.playlistCount > 1) {
|
|
71
|
+
next();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
);
|
|
52
75
|
const { onMouseenter, onMouseleave, onPointerdown } = usePlayerProvider(id);
|
|
53
76
|
const playerRef = useTemplateRef("player");
|
|
54
77
|
const { initializeEmitter } = usePlayerEmitter({ id });
|
|
@@ -58,6 +81,7 @@ onMounted(() => {
|
|
|
58
81
|
provide(MagicPlayerInstanceId, id);
|
|
59
82
|
provide(MagicPlayerOptionsKey, mappedOptions);
|
|
60
83
|
provide(MagicPlayerRef, playerRef);
|
|
84
|
+
provide(MagicPlayerCurrentSrcKey, currentSrc);
|
|
61
85
|
</script>
|
|
62
86
|
|
|
63
87
|
<style>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
playsinline
|
|
6
6
|
disablePictureInPicture
|
|
7
7
|
:preload="injectedOptions.preload"
|
|
8
|
-
:loop="injectedOptions.loop"
|
|
8
|
+
:loop="playlistCount <= 1 && injectedOptions.loop"
|
|
9
9
|
:muted="muted"
|
|
10
10
|
/>
|
|
11
11
|
</template>
|
|
@@ -37,7 +37,8 @@ import { videoModePlaybackDefaults } from "../utils/playbackDefaults";
|
|
|
37
37
|
import {
|
|
38
38
|
MagicPlayerInstanceId,
|
|
39
39
|
MagicPlayerOptionsKey,
|
|
40
|
-
MagicPlayerRef
|
|
40
|
+
MagicPlayerRef,
|
|
41
|
+
MagicPlayerCurrentSrcKey
|
|
41
42
|
} from "../symbols";
|
|
42
43
|
const magicError = useMagicError({
|
|
43
44
|
prefix: "MagicPlayer",
|
|
@@ -46,6 +47,7 @@ const magicError = useMagicError({
|
|
|
46
47
|
const injectedInstanceId = inject(MagicPlayerInstanceId, void 0);
|
|
47
48
|
const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
|
|
48
49
|
const injectedPlayerRef = inject(MagicPlayerRef, void 0);
|
|
50
|
+
const injectedCurrentSrc = inject(MagicPlayerCurrentSrcKey, void 0);
|
|
49
51
|
let cancelFocus = void 0;
|
|
50
52
|
let cancelBlur = void 0;
|
|
51
53
|
magicError.assert(injectedInstanceId, {
|
|
@@ -60,13 +62,13 @@ const elRef = useTemplateRef("el");
|
|
|
60
62
|
const { initialize } = usePlayerRuntime({
|
|
61
63
|
id: injectedInstanceId,
|
|
62
64
|
mediaRef: elRef,
|
|
63
|
-
src:
|
|
65
|
+
src: injectedCurrentSrc,
|
|
64
66
|
srcType: injectedOptions.srcType,
|
|
65
67
|
debug: injectedOptions.debug
|
|
66
68
|
});
|
|
67
69
|
const { initializeState } = usePlayerState(injectedInstanceId);
|
|
68
70
|
const state = initializeState();
|
|
69
|
-
const { muted, playing, started, loaded } = toRefs(state);
|
|
71
|
+
const { muted, playing, started, loaded, playlistCount } = toRefs(state);
|
|
70
72
|
usePlayerMediaApi({
|
|
71
73
|
id: injectedInstanceId,
|
|
72
74
|
mediaRef: elRef
|
|
@@ -76,8 +76,9 @@ export function usePlayerMediaApi(args) {
|
|
|
76
76
|
}
|
|
77
77
|
function timeRangeToArray(timeRanges) {
|
|
78
78
|
let ranges = [];
|
|
79
|
-
for (let i = 0; i < timeRanges.length; ++i)
|
|
79
|
+
for (let i = 0; i < timeRanges.length; ++i) {
|
|
80
80
|
ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];
|
|
81
|
+
}
|
|
81
82
|
return ranges;
|
|
82
83
|
}
|
|
83
84
|
watch(volume, () => {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type MaybeRef } from 'vue';
|
|
2
|
+
export type UsePlayerPlaylistApiArgs = {
|
|
3
|
+
id: MaybeRef<string>;
|
|
4
|
+
};
|
|
5
|
+
export declare function usePlayerPlaylistApi(args: UsePlayerPlaylistApiArgs): {
|
|
6
|
+
next: () => void;
|
|
7
|
+
prev: () => void;
|
|
8
|
+
goTo: (index: number) => void;
|
|
9
|
+
};
|
|
10
|
+
export type UsePlayerPlaylistApiReturn = ReturnType<typeof usePlayerPlaylistApi>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { toValue } from "vue";
|
|
2
|
+
import { usePlayerState } from "./usePlayerState.mjs";
|
|
3
|
+
export function usePlayerPlaylistApi(args) {
|
|
4
|
+
const { id } = args;
|
|
5
|
+
const { initializeState } = usePlayerState(toValue(id));
|
|
6
|
+
const state = initializeState();
|
|
7
|
+
function next() {
|
|
8
|
+
if (state.playlistIndex < state.playlistCount - 1) {
|
|
9
|
+
state.playlistIndex++;
|
|
10
|
+
} else if (state.loop) {
|
|
11
|
+
state.playlistIndex = 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function prev() {
|
|
15
|
+
if (state.playlistIndex > 0) {
|
|
16
|
+
state.playlistIndex--;
|
|
17
|
+
} else if (state.loop) {
|
|
18
|
+
state.playlistIndex = state.playlistCount - 1;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function goTo(index) {
|
|
22
|
+
if (index >= 0 && index < state.playlistCount) {
|
|
23
|
+
state.playlistIndex = index;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { next, prev, goTo };
|
|
27
|
+
}
|
|
@@ -4,7 +4,7 @@ export type UsePlayerRuntimeArgs = {
|
|
|
4
4
|
id: MaybeRef<string>;
|
|
5
5
|
mediaRef?: Ref<HTMLVideoElement | HTMLAudioElement | null>;
|
|
6
6
|
srcType?: MagicPlayerOptions['srcType'];
|
|
7
|
-
src?: string
|
|
7
|
+
src?: MaybeRef<string>;
|
|
8
8
|
debug?: boolean;
|
|
9
9
|
};
|
|
10
10
|
export declare function usePlayerRuntime(args: UsePlayerRuntimeArgs): {
|
|
@@ -2,7 +2,8 @@ import {
|
|
|
2
2
|
onScopeDispose,
|
|
3
3
|
shallowRef,
|
|
4
4
|
toRefs,
|
|
5
|
-
toValue
|
|
5
|
+
toValue,
|
|
6
|
+
watch
|
|
6
7
|
} from "vue";
|
|
7
8
|
import { useEventListener } from "@vueuse/core";
|
|
8
9
|
import { useMagicError } from "@maas/vue-equipment/plugins/MagicError";
|
|
@@ -21,6 +22,8 @@ export function usePlayerRuntime(args) {
|
|
|
21
22
|
let cancelLoaded = void 0;
|
|
22
23
|
let cancelPlay = void 0;
|
|
23
24
|
let cancelPause = void 0;
|
|
25
|
+
let cancelResumeOnLoad = void 0;
|
|
26
|
+
let initialized = false;
|
|
24
27
|
function handleHlsRuntimeError(args2) {
|
|
25
28
|
const { data, hls: hls2 } = args2;
|
|
26
29
|
const error = new Error(data.details || "HLS error");
|
|
@@ -75,11 +78,12 @@ export function usePlayerRuntime(args) {
|
|
|
75
78
|
return;
|
|
76
79
|
}
|
|
77
80
|
const el = toValue(mediaRef);
|
|
78
|
-
|
|
81
|
+
const currentSrc = toValue(src);
|
|
82
|
+
if (!el || !currentSrc) {
|
|
79
83
|
return;
|
|
80
84
|
}
|
|
81
85
|
try {
|
|
82
|
-
el.src =
|
|
86
|
+
el.src = currentSrc;
|
|
83
87
|
cancelLoaded?.();
|
|
84
88
|
cancelLoaded = useEventListener(
|
|
85
89
|
mediaRef,
|
|
@@ -102,6 +106,10 @@ export function usePlayerRuntime(args) {
|
|
|
102
106
|
if (!el) {
|
|
103
107
|
return;
|
|
104
108
|
}
|
|
109
|
+
const currentSrc = toValue(src);
|
|
110
|
+
if (!currentSrc) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
105
113
|
deferredLoading.value = autoplay;
|
|
106
114
|
try {
|
|
107
115
|
const { default: Hls } = await import("hls.js");
|
|
@@ -110,9 +118,6 @@ export function usePlayerRuntime(args) {
|
|
|
110
118
|
useNative();
|
|
111
119
|
return;
|
|
112
120
|
}
|
|
113
|
-
if (!src) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
121
|
hls.on(Hls.Events.FRAG_LOADED, () => {
|
|
117
122
|
loaded.value = true;
|
|
118
123
|
});
|
|
@@ -135,7 +140,7 @@ export function usePlayerRuntime(args) {
|
|
|
135
140
|
cancelPlay = useEventListener(mediaRef, "play", () => {
|
|
136
141
|
hls?.startLoad();
|
|
137
142
|
});
|
|
138
|
-
hls.loadSource(
|
|
143
|
+
hls.loadSource(currentSrc);
|
|
139
144
|
hls.attachMedia(el);
|
|
140
145
|
} catch (error) {
|
|
141
146
|
throwError({
|
|
@@ -149,6 +154,7 @@ export function usePlayerRuntime(args) {
|
|
|
149
154
|
cancelLoaded?.();
|
|
150
155
|
cancelPlay?.();
|
|
151
156
|
cancelPause?.();
|
|
157
|
+
cancelResumeOnLoad?.();
|
|
152
158
|
try {
|
|
153
159
|
hls?.destroy();
|
|
154
160
|
} finally {
|
|
@@ -156,7 +162,46 @@ export function usePlayerRuntime(args) {
|
|
|
156
162
|
deferredLoading.value = false;
|
|
157
163
|
}
|
|
158
164
|
}
|
|
165
|
+
function resetState() {
|
|
166
|
+
state.playing = false;
|
|
167
|
+
state.loaded = false;
|
|
168
|
+
state.started = false;
|
|
169
|
+
state.ended = false;
|
|
170
|
+
state.currentTime = 0;
|
|
171
|
+
state.duration = 0;
|
|
172
|
+
state.buffered = [];
|
|
173
|
+
state.waiting = false;
|
|
174
|
+
state.stalled = false;
|
|
175
|
+
}
|
|
176
|
+
watch(
|
|
177
|
+
() => state.playlistIndex,
|
|
178
|
+
(newIndex, oldIndex) => {
|
|
179
|
+
if (!initialized || newIndex === oldIndex || state.playlistCount <= 1) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const wasPlaying = state.playing;
|
|
183
|
+
state.skipping = true;
|
|
184
|
+
resetState();
|
|
185
|
+
destroy();
|
|
186
|
+
cancelResumeOnLoad = watch(loaded, (value) => {
|
|
187
|
+
if (value) {
|
|
188
|
+
state.skipping = false;
|
|
189
|
+
if (wasPlaying) {
|
|
190
|
+
state.playing = true;
|
|
191
|
+
}
|
|
192
|
+
cancelResumeOnLoad?.();
|
|
193
|
+
cancelResumeOnLoad = void 0;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
if (srcType === "native") {
|
|
197
|
+
useNative();
|
|
198
|
+
} else if (srcType === "hls") {
|
|
199
|
+
useHlsJS(wasPlaying);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
);
|
|
159
203
|
function initialize(autoplay = false) {
|
|
204
|
+
initialized = true;
|
|
160
205
|
if (srcType === "native") {
|
|
161
206
|
useNative();
|
|
162
207
|
} else if (srcType === "hls") {
|
|
@@ -40,7 +40,11 @@ export function usePlayerState(id) {
|
|
|
40
40
|
hasControls: false,
|
|
41
41
|
controlsBarRect: void 0,
|
|
42
42
|
controlsTrackRect: void 0,
|
|
43
|
-
controlsPopoverRect: void 0
|
|
43
|
+
controlsPopoverRect: void 0,
|
|
44
|
+
playlistIndex: 0,
|
|
45
|
+
playlistCount: 0,
|
|
46
|
+
loop: false,
|
|
47
|
+
skipping: false
|
|
44
48
|
};
|
|
45
49
|
return reactive(state);
|
|
46
50
|
}
|
|
@@ -22,6 +22,12 @@ export declare function useMagicPlayer(id: MaybeRef<string>): {
|
|
|
22
22
|
scrubbedPercentage: import("vue").Ref<number, number>;
|
|
23
23
|
thumbPercentage: import("vue").Ref<number, number>;
|
|
24
24
|
popoverOffsetX: import("vue").Ref<number | null, number | null>;
|
|
25
|
+
playlistIndex: import("vue").Ref<number, number>;
|
|
26
|
+
playlistCount: import("vue").Ref<number, number>;
|
|
27
|
+
skipping: import("vue").Ref<boolean, boolean>;
|
|
28
|
+
next: () => void;
|
|
29
|
+
prev: () => void;
|
|
30
|
+
goTo: (index: number) => void;
|
|
25
31
|
audioApi: {
|
|
26
32
|
play: () => void;
|
|
27
33
|
pause: () => void;
|
|
@@ -4,11 +4,13 @@ import { usePlayerAudioApi } from "./private/usePlayerAudioApi.mjs";
|
|
|
4
4
|
import { usePlayerRuntime } from "./private/usePlayerRuntime.mjs";
|
|
5
5
|
import { usePlayerControlsApi } from "./private/usePlayerControlsApi.mjs";
|
|
6
6
|
import { usePlayerState } from "./private/usePlayerState.mjs";
|
|
7
|
+
import { usePlayerPlaylistApi } from "./private/usePlayerPlaylistApi.mjs";
|
|
7
8
|
export function useMagicPlayer(id) {
|
|
8
9
|
const audioApi = usePlayerAudioApi({ id });
|
|
9
10
|
const videoApi = usePlayerVideoApi({ id });
|
|
10
11
|
const controlsApi = usePlayerControlsApi({ id });
|
|
11
12
|
const playerRuntime = usePlayerRuntime({ id });
|
|
13
|
+
const { next, prev, goTo } = usePlayerPlaylistApi({ id });
|
|
12
14
|
const { initializeState } = usePlayerState(id);
|
|
13
15
|
const state = initializeState();
|
|
14
16
|
const {
|
|
@@ -33,7 +35,10 @@ export function useMagicPlayer(id) {
|
|
|
33
35
|
seekedPercentage,
|
|
34
36
|
scrubbedPercentage,
|
|
35
37
|
thumbPercentage,
|
|
36
|
-
popoverOffsetX
|
|
38
|
+
popoverOffsetX,
|
|
39
|
+
playlistIndex,
|
|
40
|
+
playlistCount,
|
|
41
|
+
skipping
|
|
37
42
|
} = toRefs(state);
|
|
38
43
|
return {
|
|
39
44
|
duration,
|
|
@@ -58,6 +63,12 @@ export function useMagicPlayer(id) {
|
|
|
58
63
|
scrubbedPercentage,
|
|
59
64
|
thumbPercentage,
|
|
60
65
|
popoverOffsetX,
|
|
66
|
+
playlistIndex,
|
|
67
|
+
playlistCount,
|
|
68
|
+
skipping,
|
|
69
|
+
next,
|
|
70
|
+
prev,
|
|
71
|
+
goTo,
|
|
61
72
|
audioApi,
|
|
62
73
|
videoApi,
|
|
63
74
|
controlsApi,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { InjectionKey, MaybeRef, Ref } from 'vue';
|
|
1
|
+
import type { ComputedRef, InjectionKey, MaybeRef, Ref } from 'vue';
|
|
2
2
|
import type { MagicPlayerOptions } from '../types/index.js';
|
|
3
3
|
declare const MagicPlayerInstanceId: InjectionKey<MaybeRef<string>>;
|
|
4
4
|
declare const MagicPlayerOptionsKey: InjectionKey<MagicPlayerOptions>;
|
|
5
5
|
declare const MagicPlayerRef: InjectionKey<Ref<HTMLDivElement | null>>;
|
|
6
|
+
declare const MagicPlayerCurrentSrcKey: InjectionKey<ComputedRef<string>>;
|
|
6
7
|
declare const MagicPlayerTrackRef: InjectionKey<Ref<HTMLDivElement | null>>;
|
|
7
8
|
declare const MagicPlayerBarRef: InjectionKey<Ref<HTMLDivElement | null>>;
|
|
8
9
|
declare const MagicPlayerPopoverRef: InjectionKey<Ref<HTMLDivElement | null>>;
|
|
9
|
-
export { MagicPlayerInstanceId, MagicPlayerOptionsKey, MagicPlayerRef, MagicPlayerTrackRef, MagicPlayerBarRef, MagicPlayerPopoverRef, };
|
|
10
|
+
export { MagicPlayerInstanceId, MagicPlayerOptionsKey, MagicPlayerRef, MagicPlayerCurrentSrcKey, MagicPlayerTrackRef, MagicPlayerBarRef, MagicPlayerPopoverRef, };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const MagicPlayerInstanceId = Symbol();
|
|
2
2
|
const MagicPlayerOptionsKey = Symbol();
|
|
3
3
|
const MagicPlayerRef = Symbol();
|
|
4
|
+
const MagicPlayerCurrentSrcKey = Symbol();
|
|
4
5
|
const MagicPlayerTrackRef = Symbol();
|
|
5
6
|
const MagicPlayerBarRef = Symbol();
|
|
6
7
|
const MagicPlayerPopoverRef = Symbol();
|
|
@@ -8,6 +9,7 @@ export {
|
|
|
8
9
|
MagicPlayerInstanceId,
|
|
9
10
|
MagicPlayerOptionsKey,
|
|
10
11
|
MagicPlayerRef,
|
|
12
|
+
MagicPlayerCurrentSrcKey,
|
|
11
13
|
MagicPlayerTrackRef,
|
|
12
14
|
MagicPlayerBarRef,
|
|
13
15
|
MagicPlayerPopoverRef
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
type PlayerMode = 'audio' | 'video';
|
|
2
2
|
export interface MagicPlayerOptions {
|
|
3
|
-
src: string;
|
|
3
|
+
src: string | string[];
|
|
4
4
|
mode?: PlayerMode;
|
|
5
5
|
srcType?: 'native' | 'hls';
|
|
6
6
|
preload?: 'auto' | 'metadata' | 'none';
|
|
@@ -18,7 +18,7 @@ export interface MagicPlayerOptions {
|
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
export interface RequiredMagicPlayerOptions {
|
|
21
|
-
src: string;
|
|
21
|
+
src: string | string[];
|
|
22
22
|
mode: 'audio' | 'video';
|
|
23
23
|
srcType: 'native' | 'hls';
|
|
24
24
|
preload: 'auto' | 'metadata' | 'none';
|
|
@@ -68,6 +68,10 @@ export interface PlayerState {
|
|
|
68
68
|
controlsBarRect: DOMRect | undefined;
|
|
69
69
|
controlsTrackRect: DOMRect | undefined;
|
|
70
70
|
controlsPopoverRect: DOMRect | undefined;
|
|
71
|
+
playlistIndex: number;
|
|
72
|
+
playlistCount: number;
|
|
73
|
+
loop: boolean;
|
|
74
|
+
skipping: boolean;
|
|
71
75
|
}
|
|
72
76
|
export interface PlayerEvents {
|
|
73
77
|
onDragStart: string;
|
|
@@ -35,7 +35,11 @@
|
|
|
35
35
|
v-bind="view.props"
|
|
36
36
|
@remove="deleteView(view.id)"
|
|
37
37
|
>
|
|
38
|
-
<template
|
|
38
|
+
<template
|
|
39
|
+
v-for="(slot, name) in view.slots"
|
|
40
|
+
:key="name"
|
|
41
|
+
#[name]="slotProps"
|
|
42
|
+
>
|
|
39
43
|
<component :is="slot" v-bind="slotProps" />
|
|
40
44
|
</template>
|
|
41
45
|
</component>
|
package/dist/utils/index.js
CHANGED
|
@@ -104,7 +104,9 @@ function interpolate(args) {
|
|
|
104
104
|
let startTime;
|
|
105
105
|
let interpolationId;
|
|
106
106
|
function animate(timestamp) {
|
|
107
|
-
if (!startTime)
|
|
107
|
+
if (!startTime) {
|
|
108
|
+
startTime = timestamp;
|
|
109
|
+
}
|
|
108
110
|
const progress = Math.min(1, (timestamp - startTime) / duration);
|
|
109
111
|
const easedProgress = easing(progress);
|
|
110
112
|
const value = from + (to - from) * easedProgress;
|
|
@@ -212,8 +214,12 @@ function slugify(string, options) {
|
|
|
212
214
|
const charMap = {};
|
|
213
215
|
let slug = string.normalize().split("").reduce(function(result, ch) {
|
|
214
216
|
let appendChar = charMap[ch];
|
|
215
|
-
if (appendChar === void 0)
|
|
216
|
-
|
|
217
|
+
if (appendChar === void 0) {
|
|
218
|
+
appendChar = ch;
|
|
219
|
+
}
|
|
220
|
+
if (appendChar === (_options == null ? void 0 : _options.separator)) {
|
|
221
|
+
appendChar = " ";
|
|
222
|
+
}
|
|
217
223
|
return result + appendChar.replace((_options == null ? void 0 : _options.remove) || /[^\w\s$*_+~.()'"!\-:@]+/g, "");
|
|
218
224
|
}, "");
|
|
219
225
|
if (_options.strict) {
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/createStateStore.ts","../../packages/utils/src/functions/easings.ts","../../packages/utils/src/functions/toNumber.ts","../../packages/utils/src/functions/formatTime.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isAndroid.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/isWithinRange.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/pointerCapture.ts","../../packages/utils/src/functions/scrollbarGutterSupport.ts","../../packages/utils/src/functions/scrollbarWidth.ts","../../packages/utils/src/functions/slugify.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","import { getCurrentInstance, ref, type Ref } from 'vue'\n\nexport type CreateStore<T> = () => Ref<T>\n\nexport function createStateStore<T>(\n key: string,\n setInitialValue: () => T\n): CreateStore<T> {\n return function getOrCreateStore(): Ref<T> {\n const instance = getCurrentInstance()\n const app = instance?.appContext.app\n\n // If no app instance is found, return a fresh store\n if (!app || !key) {\n return ref(setInitialValue()) as Ref<T>\n }\n\n // Create a global Map to hold all state stores\n if (!app.config.globalProperties.__VEStateStores) {\n app.config.globalProperties.__VEStateStores = new Map<string, Ref<T>>()\n }\n\n // Check if a store already exists for this app instance\n let store = app.config.globalProperties.__VEStateStores.get(key)\n\n // If no store exists for this app instance, create one\n if (!store) {\n store = ref(setInitialValue()) as Ref<T>\n app.config.globalProperties.__VEStateStores.set(key, store)\n }\n\n return store\n }\n}\n","export function linear(t: number) {\n return t\n}\nexport function easeInQuad(t: number) {\n return t * t\n}\nexport function easeOutQuad(t: number) {\n return t * (2 - t)\n}\nexport function easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n}\nexport function easeOutBack(t: number, o: number = 1.25) {\n return 1 + (t - 1) * (t - 1) * ((o + 1) * (t - 1) + o)\n}\nexport function easeInCubic(t: number) {\n return t * t * t\n}\nexport function easeOutCubic(t: number) {\n return --t * t * t + 1\n}\nexport function easeInOutCubic(t: number) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n}\nexport function easeInQuart(t: number) {\n return t * t * t * t\n}\nexport function easeOutQuart(t: number) {\n return 1 - --t * t * t * t\n}\nexport function easeInOutQuart(t: number) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t\n}\nexport function easeInQuint(t: number) {\n return t * t * t * t * t\n}\nexport function easeOutQuint(t: number) {\n return 1 + --t * t * t * t * t\n}\nexport function easeInOutQuint(t: number) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t\n}\n","export function toNumber(value: string | number): number {\n return typeof value === 'string' ? parseFloat(value) : Number(value)\n}\n","import { toNumber } from './toNumber'\n\nexport function formatTime(seconds: number, guide: number) {\n seconds = seconds < 0 ? 0 : seconds\n let s: string | number = Math.floor(seconds % 60)\n let m: string | number = Math.floor((seconds / 60) % 60)\n let h: string | number = Math.floor(seconds / 3600)\n const gm = Math.floor((guide / 60) % 60)\n const gh = Math.floor(guide / 3600)\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-'\n }\n\n // Check if we need to show hours\n h = toNumber(h) > 0 || gh > 0 ? h + ':' : ''\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = ((h || gm >= 10) && toNumber(m) < 10 ? '0' + m : m) + ':'\n\n // Check if leading zero is need for seconds\n s = toNumber(s) < 10 ? '0' + s : s\n\n return h + m + s\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n easing?: (t: number) => number\n callback: (result: number) => void\n interpolationIdCallback?: (id: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const {\n from,\n to,\n duration,\n callback,\n interpolationIdCallback = () => {},\n easing = (t) => t * (2 - t),\n } = args\n\n let startTime: number\n let interpolationId: number\n\n function animate(timestamp: number) {\n if (!startTime) startTime = timestamp\n\n const progress = Math.min(1, (timestamp - startTime) / duration)\n const easedProgress = easing(progress)\n const value = from + (to - from) * easedProgress\n\n callback(value)\n\n if (progress < 1) {\n interpolationId = requestAnimationFrame(animate)\n interpolationIdCallback(interpolationId)\n }\n }\n\n interpolationId = requestAnimationFrame(animate)\n\n return interpolationId\n}\n","export function isAndroid() {\n if (typeof window === 'undefined') {\n return false\n }\n return /android/i.test(navigator?.userAgent)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') {\n return false\n }\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","interface isWithinRangeArgs {\n input: number\n base: number\n threshold: number\n}\n\nexport function isWithinRange(args: isWithinRangeArgs): boolean {\n const { input, base, threshold } = args\n return input >= base - threshold && input <= base + threshold\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","export function matchClass(el: Element, regex: RegExp) {\n return Array.from(el.classList).some((className) => regex.test(className))\n}\n","interface GuardedSetPointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n mouse?: boolean\n debug?: boolean\n}\n\ninterface GuardedReleasePointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n}\n\nexport function guardedSetPointerCapture(\n args: GuardedSetPointerCaptureArgs\n): void {\n const { event, element, mouse, debug } = args\n if (element && event.isPrimary && (mouse || event.pointerType !== 'mouse')) {\n try {\n const coalescedEvents: PointerEvent[] =\n 'getCoalescedEvents' in event ? event.getCoalescedEvents() : [event]\n\n if (coalescedEvents.length > 0 || mouse) {\n element?.setPointerCapture(event.pointerId)\n }\n } catch (error) {\n if (debug) {\n console.warn('Failed to set pointer capture:', error)\n }\n }\n }\n}\n\nexport function guardedReleasePointerCapture(\n args: GuardedReleasePointerCaptureArgs\n): void {\n const { event, element } = args\n if (element?.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId)\n }\n}\n","export function scrollbarGutterSupport() {\n return CSS.supports('scrollbar-gutter', 'stable')\n}\n","export function scrollbarWidth() {\n const wrapper = document.createElement('div')\n wrapper.style.position = 'absolute'\n wrapper.style.visibility = 'hidden'\n wrapper.style.overflow = 'hidden'\n wrapper.style.width = '100px'\n wrapper.style.height = '100px'\n wrapper.style.top = '-9999px'\n\n wrapper.innerHTML = '<div style=\"width: 200px; height: 200px;\"></div>'\n document.body.appendChild(wrapper)\n\n // Get the scrollbar width\n const withoutScrollbar = wrapper.clientWidth\n wrapper.style.overflow = 'scroll'\n const withScrollbar = wrapper.clientWidth\n\n // Clean up\n document.body.removeChild(wrapper)\n\n return Math.round(withoutScrollbar - withScrollbar)\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n","export function uniq<T extends unknown[]>(a: T) {\n return Array.from(new Set(a))\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/createStateStore.ts","../../packages/utils/src/functions/easings.ts","../../packages/utils/src/functions/toNumber.ts","../../packages/utils/src/functions/formatTime.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isAndroid.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/isWithinRange.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/pointerCapture.ts","../../packages/utils/src/functions/scrollbarGutterSupport.ts","../../packages/utils/src/functions/scrollbarWidth.ts","../../packages/utils/src/functions/slugify.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","import { getCurrentInstance, ref, type Ref } from 'vue'\n\nexport type CreateStore<T> = () => Ref<T>\n\nexport function createStateStore<T>(\n key: string,\n setInitialValue: () => T\n): CreateStore<T> {\n return function getOrCreateStore(): Ref<T> {\n const instance = getCurrentInstance()\n const app = instance?.appContext.app\n\n // If no app instance is found, return a fresh store\n if (!app || !key) {\n return ref(setInitialValue()) as Ref<T>\n }\n\n // Create a global Map to hold all state stores\n if (!app.config.globalProperties.__VEStateStores) {\n app.config.globalProperties.__VEStateStores = new Map<string, Ref<T>>()\n }\n\n // Check if a store already exists for this app instance\n let store = app.config.globalProperties.__VEStateStores.get(key)\n\n // If no store exists for this app instance, create one\n if (!store) {\n store = ref(setInitialValue()) as Ref<T>\n app.config.globalProperties.__VEStateStores.set(key, store)\n }\n\n return store\n }\n}\n","export function linear(t: number) {\n return t\n}\nexport function easeInQuad(t: number) {\n return t * t\n}\nexport function easeOutQuad(t: number) {\n return t * (2 - t)\n}\nexport function easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n}\nexport function easeOutBack(t: number, o: number = 1.25) {\n return 1 + (t - 1) * (t - 1) * ((o + 1) * (t - 1) + o)\n}\nexport function easeInCubic(t: number) {\n return t * t * t\n}\nexport function easeOutCubic(t: number) {\n return --t * t * t + 1\n}\nexport function easeInOutCubic(t: number) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n}\nexport function easeInQuart(t: number) {\n return t * t * t * t\n}\nexport function easeOutQuart(t: number) {\n return 1 - --t * t * t * t\n}\nexport function easeInOutQuart(t: number) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t\n}\nexport function easeInQuint(t: number) {\n return t * t * t * t * t\n}\nexport function easeOutQuint(t: number) {\n return 1 + --t * t * t * t * t\n}\nexport function easeInOutQuint(t: number) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t\n}\n","export function toNumber(value: string | number): number {\n return typeof value === 'string' ? parseFloat(value) : Number(value)\n}\n","import { toNumber } from './toNumber'\n\nexport function formatTime(seconds: number, guide: number) {\n seconds = seconds < 0 ? 0 : seconds\n let s: string | number = Math.floor(seconds % 60)\n let m: string | number = Math.floor((seconds / 60) % 60)\n let h: string | number = Math.floor(seconds / 3600)\n const gm = Math.floor((guide / 60) % 60)\n const gh = Math.floor(guide / 3600)\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-'\n }\n\n // Check if we need to show hours\n h = toNumber(h) > 0 || gh > 0 ? h + ':' : ''\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = ((h || gm >= 10) && toNumber(m) < 10 ? '0' + m : m) + ':'\n\n // Check if leading zero is need for seconds\n s = toNumber(s) < 10 ? '0' + s : s\n\n return h + m + s\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n easing?: (t: number) => number\n callback: (result: number) => void\n interpolationIdCallback?: (id: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const {\n from,\n to,\n duration,\n callback,\n interpolationIdCallback = () => {},\n easing = (t) => t * (2 - t),\n } = args\n\n let startTime: number\n let interpolationId: number\n\n function animate(timestamp: number) {\n if (!startTime) {\n startTime = timestamp\n }\n\n const progress = Math.min(1, (timestamp - startTime) / duration)\n const easedProgress = easing(progress)\n const value = from + (to - from) * easedProgress\n\n callback(value)\n\n if (progress < 1) {\n interpolationId = requestAnimationFrame(animate)\n interpolationIdCallback(interpolationId)\n }\n }\n\n interpolationId = requestAnimationFrame(animate)\n\n return interpolationId\n}\n","export function isAndroid() {\n if (typeof window === 'undefined') {\n return false\n }\n return /android/i.test(navigator?.userAgent)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') {\n return false\n }\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","interface isWithinRangeArgs {\n input: number\n base: number\n threshold: number\n}\n\nexport function isWithinRange(args: isWithinRangeArgs): boolean {\n const { input, base, threshold } = args\n return input >= base - threshold && input <= base + threshold\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","export function matchClass(el: Element, regex: RegExp) {\n return Array.from(el.classList).some((className) => regex.test(className))\n}\n","interface GuardedSetPointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n mouse?: boolean\n debug?: boolean\n}\n\ninterface GuardedReleasePointerCaptureArgs {\n event: PointerEvent\n element?: Element | null\n}\n\nexport function guardedSetPointerCapture(\n args: GuardedSetPointerCaptureArgs\n): void {\n const { event, element, mouse, debug } = args\n if (element && event.isPrimary && (mouse || event.pointerType !== 'mouse')) {\n try {\n const coalescedEvents: PointerEvent[] =\n 'getCoalescedEvents' in event ? event.getCoalescedEvents() : [event]\n\n if (coalescedEvents.length > 0 || mouse) {\n element?.setPointerCapture(event.pointerId)\n }\n } catch (error) {\n if (debug) {\n console.warn('Failed to set pointer capture:', error)\n }\n }\n }\n}\n\nexport function guardedReleasePointerCapture(\n args: GuardedReleasePointerCaptureArgs\n): void {\n const { event, element } = args\n if (element?.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId)\n }\n}\n","export function scrollbarGutterSupport() {\n return CSS.supports('scrollbar-gutter', 'stable')\n}\n","export function scrollbarWidth() {\n const wrapper = document.createElement('div')\n wrapper.style.position = 'absolute'\n wrapper.style.visibility = 'hidden'\n wrapper.style.overflow = 'hidden'\n wrapper.style.width = '100px'\n wrapper.style.height = '100px'\n wrapper.style.top = '-9999px'\n\n wrapper.innerHTML = '<div style=\"width: 200px; height: 200px;\"></div>'\n document.body.appendChild(wrapper)\n\n // Get the scrollbar width\n const withoutScrollbar = wrapper.clientWidth\n wrapper.style.overflow = 'scroll'\n const withScrollbar = wrapper.clientWidth\n\n // Clean up\n document.body.removeChild(wrapper)\n\n return Math.round(withoutScrollbar - withScrollbar)\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) {\n appendChar = ch\n }\n if (appendChar === _options?.separator) {\n appendChar = ' '\n }\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n","export function uniq<T extends unknown[]>(a: T) {\n return Array.from(new Set(a))\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maas/vue-equipment",
|
|
3
3
|
"description": "Our Frontend Toolkit, Free and Open Source",
|
|
4
|
-
"version": "1.0.0-beta.
|
|
4
|
+
"version": "1.0.0-beta.58",
|
|
5
5
|
"contributors": [
|
|
6
6
|
{
|
|
7
7
|
"name": "Robin Scholz",
|
|
@@ -13,16 +13,20 @@
|
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@maas/config": "^1.
|
|
16
|
+
"@maas/config": "^1.13.0",
|
|
17
17
|
"@maas/mirror": "catalog:",
|
|
18
18
|
"@release-it/bumper": "^7.0.5",
|
|
19
19
|
"@types/node": "catalog:",
|
|
20
|
+
"@vitejs/plugin-vue": "^6.0.5",
|
|
21
|
+
"@vitest/browser-playwright": "^4.1.2",
|
|
20
22
|
"eslint": "^9.39.1",
|
|
21
23
|
"prettier": "catalog:",
|
|
22
24
|
"prettier-plugin-tailwindcss": "^0.7.1",
|
|
23
25
|
"release-it": "^19.0.5",
|
|
24
26
|
"turbo": "^2.6.0",
|
|
25
|
-
"typescript": "catalog:"
|
|
27
|
+
"typescript": "catalog:",
|
|
28
|
+
"vitest": "^4.1.2",
|
|
29
|
+
"vitest-browser-vue": "^2.1.0"
|
|
26
30
|
},
|
|
27
31
|
"exports": {
|
|
28
32
|
"./nuxt": {
|
|
@@ -134,7 +138,7 @@
|
|
|
134
138
|
"build:docs": "turbo run build --filter=docs",
|
|
135
139
|
"preview:docs": "turbo run preview --filter=docs",
|
|
136
140
|
"update:metadata": "turbo run update --filter=metadata",
|
|
137
|
-
"test": "
|
|
141
|
+
"test": "turbo run test",
|
|
138
142
|
"lint": "turbo run lint",
|
|
139
143
|
"uninstall": "pnpm dlx rimraf --glob ./**/node_modules --glob ./**/pnpm-lock.yaml",
|
|
140
144
|
"release": "turbo run t:release && release-it",
|