@maas/vue-equipment 1.0.0-beta.23 → 1.0.0-beta.24
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/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +24 -24
- package/dist/plugins/.turbo/turbo-lint.log +2 -2
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionContent.vue.d.ts +2 -29
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionProvider.vue.d.ts +2 -7
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionTrigger.vue.d.ts +2 -16
- package/dist/plugins/MagicAccordion/src/components/MagicAccordionView.vue.d.ts +2 -11
- package/dist/plugins/MagicAccordion/src/types/index.d.ts +2 -2
- package/dist/plugins/MagicCommand/src/components/MagicCommandContent.vue.d.ts +2 -20
- package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue.d.ts +2 -7
- package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +2 -19
- package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue.d.ts +2 -7
- package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue.d.ts +2 -7
- package/dist/plugins/MagicCommand/src/components/MagicCommandTrigger.vue.d.ts +2 -18
- package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue.d.ts +2 -9
- package/dist/plugins/MagicCommand/src/types/index.d.ts +2 -2
- package/dist/plugins/MagicCookie/src/components/MagicCookieItem.vue.d.ts +2 -7
- package/dist/plugins/MagicCookie/src/components/MagicCookieProvider.vue.d.ts +2 -4
- package/dist/plugins/MagicCookie/src/components/MagicCookieView.vue.d.ts +2 -16
- package/dist/plugins/MagicCookie/src/types/index.d.ts +2 -2
- package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue.d.ts +2 -92
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableSnap.mjs +12 -15
- package/dist/plugins/MagicDraggable/src/types/index.d.ts +2 -2
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +2 -161
- package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.mjs +1 -1
- package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +112 -10
- package/dist/plugins/MagicEmitter/src/types/index.d.ts +2 -0
- package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue.d.ts +2 -7
- package/dist/plugins/MagicMenu/src/components/MagicMenuChannel.vue.d.ts +2 -13
- package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue.d.ts +2 -34
- package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue.d.ts +2 -33
- package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue.d.ts +2 -21
- package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue.d.ts +2 -7
- package/dist/plugins/MagicMenu/src/components/MagicMenuRemote.vue.d.ts +2 -12
- package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue.d.ts +2 -18
- package/dist/plugins/MagicMenu/src/components/MagicMenuView.vue.d.ts +2 -9
- package/dist/plugins/MagicMenu/src/types/index.d.ts +2 -2
- package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +2 -40
- package/dist/plugins/MagicModal/src/types/index.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudio.vue +51 -18
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudioControls.vue +12 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudioControls.vue.d.ts +2 -22
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue +48 -10
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue.d.ts +6 -23
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerPoster.vue +5 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerPoster.vue.d.ts +2 -8
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerProvider.vue +37 -5
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerProvider.vue.d.ts +2 -18
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue +2 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideo.vue +47 -20
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideoControls.vue +11 -10
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideoControls.vue.d.ts +2 -42
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerAudioApi.mjs +5 -7
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerControlsApi.mjs +5 -1
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerEmitter.d.ts +8 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerEmitter.mjs +103 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +22 -11
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.mjs +4 -4
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.mjs +13 -9
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerVideoApi.d.ts +1 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerVideoApi.mjs +39 -32
- package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.d.ts +4 -1
- package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.mjs +6 -3
- package/dist/plugins/MagicPlayer/src/symbols/index.d.ts +2 -1
- package/dist/plugins/MagicPlayer/src/symbols/index.mjs +2 -0
- package/dist/plugins/MagicPlayer/src/types/index.d.ts +45 -19
- package/dist/plugins/MagicPlayer/src/utils/defaultOptions.d.ts +2 -2
- package/dist/plugins/MagicPlayer/src/utils/playbackDefaults.d.ts +3 -0
- package/dist/plugins/MagicPlayer/src/utils/playbackDefaults.mjs +7 -0
- package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue.d.ts +2 -4
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue.d.ts +2 -4
- package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue.d.ts +2 -24
- package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue.d.ts +2 -7
- package/dist/plugins/MagicToast/src/components/MagicToastView.vue.d.ts +2 -19
- package/dist/plugins/MagicToast/src/composables/private/useToastDrag.mjs +1 -1
- package/dist/plugins/MagicToast/src/types/index.d.ts +2 -2
- package/package.json +5 -3
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
declare const loaded: import("vue").Ref<boolean, boolean>, touched: import("vue").Ref<boolean, boolean>;
|
|
2
|
-
declare const __VLS_ctx: InstanceType<__VLS_PickNotAny<typeof __VLS_self, new () => {}>>;
|
|
3
1
|
declare var __VLS_1: {};
|
|
4
|
-
type __VLS_Slots =
|
|
2
|
+
type __VLS_Slots = {} & {
|
|
5
3
|
default?: (props: typeof __VLS_1) => any;
|
|
6
|
-
}
|
|
7
|
-
declare const __VLS_self: import("vue").DefineComponent<{}, {
|
|
8
|
-
loaded: typeof loaded;
|
|
9
|
-
touched: typeof touched;
|
|
10
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
4
|
+
};
|
|
11
5
|
declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
12
6
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
13
7
|
export default _default;
|
|
@@ -4,26 +4,39 @@
|
|
|
4
4
|
class="magic-player-provider"
|
|
5
5
|
:data-id="id"
|
|
6
6
|
:data-mode="mappedOptions.mode"
|
|
7
|
-
:data-fullscreen="
|
|
7
|
+
:data-fullscreen="fullscreen"
|
|
8
8
|
:data-touched="touched"
|
|
9
9
|
:data-playing="playing"
|
|
10
|
-
:data-paused="
|
|
10
|
+
:data-paused="paused"
|
|
11
|
+
:data-started="started"
|
|
11
12
|
:data-waiting="waiting"
|
|
12
13
|
:data-loaded="loaded"
|
|
13
14
|
:data-muted="muted"
|
|
14
15
|
@mouseenter="onMouseenter"
|
|
15
16
|
@mouseleave="onMouseleave"
|
|
17
|
+
@pointerdown="onPointerdown"
|
|
16
18
|
>
|
|
17
19
|
<slot />
|
|
18
20
|
</div>
|
|
19
21
|
</template>
|
|
20
22
|
|
|
21
23
|
<script setup>
|
|
22
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
toRefs,
|
|
26
|
+
provide,
|
|
27
|
+
onMounted,
|
|
28
|
+
onUnmounted,
|
|
29
|
+
useTemplateRef
|
|
30
|
+
} from "vue";
|
|
23
31
|
import defu from "defu";
|
|
24
32
|
import { usePlayerState } from "../composables/private/usePlayerState";
|
|
25
|
-
import {
|
|
33
|
+
import {
|
|
34
|
+
MagicPlayerInstanceId,
|
|
35
|
+
MagicPlayerOptionsKey,
|
|
36
|
+
MagicPlayerRef
|
|
37
|
+
} from "../symbols";
|
|
26
38
|
import { defaultOptions } from "../utils/defaultOptions";
|
|
39
|
+
import { usePlayerEmitter } from "../composables/private/usePlayerEmitter";
|
|
27
40
|
const { id, options } = defineProps({
|
|
28
41
|
id: { type: null, required: true },
|
|
29
42
|
options: { type: Object, required: false }
|
|
@@ -31,18 +44,37 @@ const { id, options } = defineProps({
|
|
|
31
44
|
const mappedOptions = defu(options, defaultOptions);
|
|
32
45
|
const { initializeState, deleteState } = usePlayerState(id);
|
|
33
46
|
const state = initializeState();
|
|
34
|
-
const {
|
|
47
|
+
const {
|
|
48
|
+
playing,
|
|
49
|
+
paused,
|
|
50
|
+
started,
|
|
51
|
+
waiting,
|
|
52
|
+
muted,
|
|
53
|
+
loaded,
|
|
54
|
+
fullscreen,
|
|
55
|
+
touched,
|
|
56
|
+
mouseEntered
|
|
57
|
+
} = toRefs(state);
|
|
58
|
+
const { initializeEmitter } = usePlayerEmitter({ id });
|
|
59
|
+
const playerRef = useTemplateRef("player");
|
|
35
60
|
function onMouseenter() {
|
|
36
61
|
mouseEntered.value = true;
|
|
37
62
|
}
|
|
38
63
|
function onMouseleave() {
|
|
39
64
|
mouseEntered.value = false;
|
|
40
65
|
}
|
|
66
|
+
function onPointerdown() {
|
|
67
|
+
touched.value = true;
|
|
68
|
+
}
|
|
69
|
+
onMounted(() => {
|
|
70
|
+
initializeEmitter();
|
|
71
|
+
});
|
|
41
72
|
onUnmounted(() => {
|
|
42
73
|
deleteState();
|
|
43
74
|
});
|
|
44
75
|
provide(MagicPlayerInstanceId, id);
|
|
45
76
|
provide(MagicPlayerOptionsKey, mappedOptions);
|
|
77
|
+
provide(MagicPlayerRef, playerRef);
|
|
46
78
|
</script>
|
|
47
79
|
|
|
48
80
|
<style>
|
|
@@ -4,26 +4,10 @@ interface MagicPlayerProps {
|
|
|
4
4
|
id: MaybeRef<string>;
|
|
5
5
|
options?: MagicPlayerOptions;
|
|
6
6
|
}
|
|
7
|
-
declare const mappedOptions: MagicPlayerOptions;
|
|
8
|
-
declare const playing: import("vue").Ref<boolean, boolean>, waiting: import("vue").Ref<boolean, boolean>, muted: import("vue").Ref<boolean, boolean>, loaded: import("vue").Ref<boolean, boolean>, isFullscreen: import("vue").Ref<boolean, boolean>, touched: import("vue").Ref<boolean, boolean>;
|
|
9
|
-
declare function onMouseenter(): void;
|
|
10
|
-
declare function onMouseleave(): void;
|
|
11
|
-
declare const __VLS_ctx: InstanceType<__VLS_PickNotAny<typeof __VLS_self, new () => {}>>;
|
|
12
7
|
declare var __VLS_1: {};
|
|
13
|
-
type __VLS_Slots =
|
|
8
|
+
type __VLS_Slots = {} & {
|
|
14
9
|
default?: (props: typeof __VLS_1) => any;
|
|
15
|
-
}
|
|
16
|
-
declare const __VLS_self: import("vue").DefineComponent<MagicPlayerProps, {
|
|
17
|
-
mappedOptions: typeof mappedOptions;
|
|
18
|
-
playing: typeof playing;
|
|
19
|
-
waiting: typeof waiting;
|
|
20
|
-
muted: typeof muted;
|
|
21
|
-
loaded: typeof loaded;
|
|
22
|
-
isFullscreen: typeof isFullscreen;
|
|
23
|
-
touched: typeof touched;
|
|
24
|
-
onMouseenter: typeof onMouseenter;
|
|
25
|
-
onMouseleave: typeof onMouseleave;
|
|
26
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicPlayerProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
};
|
|
27
11
|
declare const __VLS_component: import("vue").DefineComponent<MagicPlayerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicPlayerProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
12
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
29
13
|
export default _default;
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
const instanceId = inject(MagicPlayerInstanceId, void 0);
|
|
46
46
|
if (!instanceId) {
|
|
47
47
|
throw new Error(
|
|
48
|
-
"
|
|
48
|
+
"MagicPlayerTimeline must be nested inside MagicPlayerVideoControls or MagicPlayerAudioControls."
|
|
49
49
|
);
|
|
50
50
|
}
|
|
51
51
|
const { initializeState } = usePlayerState(instanceId);
|
|
@@ -53,7 +53,7 @@ const state = initializeState();
|
|
|
53
53
|
const { controlsMouseEntered, seekedPercentage, scrubbedPercentage } = toRefs(state);
|
|
54
54
|
const barRef = inject(MagicPlayerBarRef);
|
|
55
55
|
const trackRef = inject(MagicPlayerTrackRef);
|
|
56
|
-
const popoverRef = inject(MagicPlayerPopoverRef);
|
|
56
|
+
const popoverRef = inject(MagicPlayerPopoverRef, void 0);
|
|
57
57
|
const { bufferedPercentage, onPointerdown, onPointermove } = usePlayerControlsApi({
|
|
58
58
|
id: instanceId,
|
|
59
59
|
barRef,
|
|
@@ -17,7 +17,9 @@ import {
|
|
|
17
17
|
watch,
|
|
18
18
|
onMounted,
|
|
19
19
|
inject,
|
|
20
|
-
onBeforeUnmount
|
|
20
|
+
onBeforeUnmount,
|
|
21
|
+
shallowRef,
|
|
22
|
+
computed
|
|
21
23
|
} from "vue";
|
|
22
24
|
import {
|
|
23
25
|
useElementVisibility,
|
|
@@ -28,9 +30,15 @@ import { usePlayerVideoApi } from "../composables/private/usePlayerVideoApi";
|
|
|
28
30
|
import { usePlayerMediaApi } from "../composables/private/usePlayerMediaApi";
|
|
29
31
|
import { usePlayerRuntime } from "../composables/private/usePlayerRuntime";
|
|
30
32
|
import { usePlayerState } from "../composables/private/usePlayerState";
|
|
31
|
-
import {
|
|
33
|
+
import { videoModePlaybackDefaults } from "../utils/playbackDefaults";
|
|
34
|
+
import {
|
|
35
|
+
MagicPlayerInstanceId,
|
|
36
|
+
MagicPlayerOptionsKey,
|
|
37
|
+
MagicPlayerRef
|
|
38
|
+
} from "../symbols";
|
|
32
39
|
const injectedInstanceId = inject(MagicPlayerInstanceId, void 0);
|
|
33
40
|
const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
|
|
41
|
+
const injectedPlayerRef = inject(MagicPlayerRef, void 0);
|
|
34
42
|
if (!injectedInstanceId) {
|
|
35
43
|
throw new Error("MagicPlayerVideo must be used within a MagicPlayerProvider");
|
|
36
44
|
}
|
|
@@ -38,7 +46,6 @@ if (!injectedOptions) {
|
|
|
38
46
|
throw new Error("MagicPlayerVideo must be used within a MagicPlayerProvider");
|
|
39
47
|
}
|
|
40
48
|
const elRef = useTemplateRef("el");
|
|
41
|
-
const isVisible = useElementVisibility(elRef);
|
|
42
49
|
const { initialize, destroy } = usePlayerRuntime({
|
|
43
50
|
id: injectedInstanceId,
|
|
44
51
|
mediaRef: elRef,
|
|
@@ -47,38 +54,58 @@ const { initialize, destroy } = usePlayerRuntime({
|
|
|
47
54
|
});
|
|
48
55
|
const { initializeState } = usePlayerState(injectedInstanceId);
|
|
49
56
|
const state = initializeState();
|
|
50
|
-
const { muted, playing } = toRefs(state);
|
|
57
|
+
const { muted, playing, started } = toRefs(state);
|
|
51
58
|
usePlayerMediaApi({
|
|
52
59
|
id: injectedInstanceId,
|
|
53
60
|
mediaRef: elRef
|
|
54
61
|
});
|
|
55
|
-
const { play, pause } = usePlayerVideoApi({
|
|
62
|
+
const { play, pause, mute, initializeFullscreen } = usePlayerVideoApi({
|
|
56
63
|
id: injectedInstanceId,
|
|
57
|
-
videoRef: elRef
|
|
64
|
+
videoRef: elRef,
|
|
65
|
+
playerRef: injectedPlayerRef
|
|
66
|
+
});
|
|
67
|
+
const wasPlaying = shallowRef(false);
|
|
68
|
+
const isVisible = useElementVisibility(elRef);
|
|
69
|
+
const manageWindow = computed(() => {
|
|
70
|
+
const playbackOptions = injectedOptions.playback || videoModePlaybackDefaults;
|
|
71
|
+
return playbackOptions !== false && playbackOptions?.includes("window");
|
|
72
|
+
});
|
|
73
|
+
const manageViewport = computed(() => {
|
|
74
|
+
const playbackOptions = injectedOptions.playback || videoModePlaybackDefaults;
|
|
75
|
+
return playbackOptions !== false && playbackOptions?.includes("viewport");
|
|
58
76
|
});
|
|
59
77
|
function onWindowFocus() {
|
|
60
|
-
if (isVisible.value &&
|
|
78
|
+
if (isVisible.value && wasPlaying.value) {
|
|
61
79
|
play();
|
|
62
80
|
}
|
|
63
81
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
function onWindowBlur() {
|
|
83
|
+
wasPlaying.value = playing.value;
|
|
84
|
+
pause();
|
|
85
|
+
}
|
|
86
|
+
if (manageWindow.value) {
|
|
87
|
+
useEventListener(defaultWindow, "focus", onWindowFocus);
|
|
88
|
+
useEventListener(defaultWindow, "blur", onWindowBlur);
|
|
89
|
+
}
|
|
90
|
+
if (manageViewport.value) {
|
|
91
|
+
watch(isVisible, (value) => {
|
|
92
|
+
if (!value) {
|
|
93
|
+
wasPlaying.value = playing.value;
|
|
71
94
|
pause();
|
|
72
95
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
);
|
|
96
|
+
if (value && wasPlaying.value) {
|
|
97
|
+
play();
|
|
98
|
+
}
|
|
99
|
+
if (value && injectedOptions.autoplay && !started.value) {
|
|
100
|
+
play();
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
78
104
|
onMounted(() => {
|
|
79
105
|
initialize();
|
|
106
|
+
initializeFullscreen();
|
|
80
107
|
if (injectedOptions.autoplay) {
|
|
81
|
-
|
|
108
|
+
mute();
|
|
82
109
|
}
|
|
83
110
|
});
|
|
84
111
|
onBeforeUnmount(() => {
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
<div
|
|
3
3
|
ref="el"
|
|
4
4
|
class="magic-player-video-controls"
|
|
5
|
-
:data-fullscreen="
|
|
5
|
+
:data-fullscreen="fullscreen"
|
|
6
6
|
:data-touched="touched"
|
|
7
|
+
:data-started="started"
|
|
7
8
|
:data-playing="playing"
|
|
8
|
-
:data-paused="
|
|
9
|
+
:data-paused="paused"
|
|
9
10
|
:data-waiting="waiting"
|
|
10
11
|
:data-muted="muted"
|
|
11
12
|
:data-idle="idle"
|
|
@@ -27,7 +28,7 @@
|
|
|
27
28
|
</div>
|
|
28
29
|
<div ref="bar" class="magic-player-video-controls__bar--inner">
|
|
29
30
|
<div class="magic-player-video-controls__item -shrink-0">
|
|
30
|
-
<button v-if="!
|
|
31
|
+
<button v-if="paused || !started" @click="play">
|
|
31
32
|
<slot name="playIcon">
|
|
32
33
|
<icon-play />
|
|
33
34
|
</slot>
|
|
@@ -58,7 +59,7 @@
|
|
|
58
59
|
</button>
|
|
59
60
|
</div>
|
|
60
61
|
<div class="magic-player-video-controls__item -shrink-0">
|
|
61
|
-
<button v-if="
|
|
62
|
+
<button v-if="fullscreen" @click="exitFullscreen">
|
|
62
63
|
<slot name="fullscreenExitIcon">
|
|
63
64
|
<icon-fullscreen-exit />
|
|
64
65
|
</slot>
|
|
@@ -130,13 +131,16 @@ const { initializeState } = usePlayerState(mappedInstanceId.value);
|
|
|
130
131
|
const state = initializeState();
|
|
131
132
|
const {
|
|
132
133
|
playing,
|
|
134
|
+
started,
|
|
135
|
+
paused,
|
|
133
136
|
waiting,
|
|
134
137
|
muted,
|
|
135
138
|
touched,
|
|
136
139
|
mouseEntered,
|
|
137
140
|
controlsMouseEntered,
|
|
138
|
-
|
|
141
|
+
fullscreen,
|
|
139
142
|
popoverOffsetX,
|
|
143
|
+
hasOverlay,
|
|
140
144
|
seekedTime
|
|
141
145
|
} = toRefs(state);
|
|
142
146
|
const { play, pause, mute, unmute, enterFullscreen, exitFullscreen } = usePlayerVideoApi({ id: mappedInstanceId.value });
|
|
@@ -153,14 +157,11 @@ const hidden = computed(() => {
|
|
|
153
157
|
switch (true) {
|
|
154
158
|
case standalone:
|
|
155
159
|
return false;
|
|
160
|
+
case !isVisible.value:
|
|
156
161
|
case (playing.value && idle.value):
|
|
157
|
-
|
|
162
|
+
case (hasOverlay.value && !touched.value && !started.value):
|
|
158
163
|
case (playing.value && !controlsMouseEntered.value && !mouseEntered.value):
|
|
159
164
|
return true;
|
|
160
|
-
case !isVisible.value:
|
|
161
|
-
return true;
|
|
162
|
-
case !touched.value:
|
|
163
|
-
return true;
|
|
164
165
|
default:
|
|
165
166
|
return false;
|
|
166
167
|
}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import IconPlay from './icons/Play.vue.js';
|
|
2
|
-
import IconPause from './icons/Pause.vue.js';
|
|
3
|
-
import IconVolumeOn from './icons/VolumeOn.vue.js';
|
|
4
|
-
import IconVolumeOff from './icons/VolumeOff.vue.js';
|
|
5
|
-
import IconFullscreenEnter from './icons/FullscreenEnter.vue.js';
|
|
6
|
-
import IconFullscreenExit from './icons/FullscreenExit.vue.js';
|
|
7
1
|
import '@maas/vue-equipment/utils/css/keyframes/fade-up-in.css';
|
|
8
2
|
import '@maas/vue-equipment/utils/css/keyframes/fade-up-out.css';
|
|
9
3
|
interface MagicPlayerControlsProps {
|
|
@@ -11,15 +5,8 @@ interface MagicPlayerControlsProps {
|
|
|
11
5
|
standalone?: boolean;
|
|
12
6
|
transition?: string;
|
|
13
7
|
}
|
|
14
|
-
declare const mappedTransition: import("vue").ComputedRef<string | undefined>;
|
|
15
|
-
declare const playing: import("vue").Ref<boolean, boolean>, waiting: import("vue").Ref<boolean, boolean>, muted: import("vue").Ref<boolean, boolean>, touched: import("vue").Ref<boolean, boolean>, controlsMouseEntered: import("vue").Ref<boolean, boolean>, isFullscreen: import("vue").Ref<boolean, boolean>, popoverOffsetX: import("vue").Ref<number, number>, seekedTime: import("vue").Ref<number, number>;
|
|
16
|
-
declare const play: () => void, pause: () => void, mute: () => void, unmute: () => void, enterFullscreen: () => void, exitFullscreen: () => void;
|
|
17
|
-
declare const onMouseenter: () => void, onMouseleave: () => void;
|
|
18
|
-
declare const idle: import("vue").ShallowRef<boolean>;
|
|
19
|
-
declare const hidden: import("vue").ComputedRef<boolean>;
|
|
20
|
-
declare const __VLS_ctx: InstanceType<__VLS_PickNotAny<typeof __VLS_self, new () => {}>>;
|
|
21
8
|
declare var __VLS_5: {}, __VLS_7: {}, __VLS_12: {}, __VLS_17: {}, __VLS_23: {}, __VLS_25: {}, __VLS_30: {}, __VLS_35: {}, __VLS_40: {};
|
|
22
|
-
type __VLS_Slots =
|
|
9
|
+
type __VLS_Slots = {} & {
|
|
23
10
|
popover?: (props: typeof __VLS_5) => any;
|
|
24
11
|
} & {
|
|
25
12
|
playIcon?: (props: typeof __VLS_7) => any;
|
|
@@ -37,34 +24,7 @@ type __VLS_Slots = __VLS_PrettifyGlobal<__VLS_OmitStringIndex<typeof __VLS_ctx.$
|
|
|
37
24
|
fullscreenExitIcon?: (props: typeof __VLS_35) => any;
|
|
38
25
|
} & {
|
|
39
26
|
fullscreenEnterIcon?: (props: typeof __VLS_40) => any;
|
|
40
|
-
}
|
|
41
|
-
declare const __VLS_self: import("vue").DefineComponent<MagicPlayerControlsProps, {
|
|
42
|
-
IconPlay: typeof IconPlay;
|
|
43
|
-
IconPause: typeof IconPause;
|
|
44
|
-
IconVolumeOn: typeof IconVolumeOn;
|
|
45
|
-
IconVolumeOff: typeof IconVolumeOff;
|
|
46
|
-
IconFullscreenEnter: typeof IconFullscreenEnter;
|
|
47
|
-
IconFullscreenExit: typeof IconFullscreenExit;
|
|
48
|
-
mappedTransition: typeof mappedTransition;
|
|
49
|
-
playing: typeof playing;
|
|
50
|
-
waiting: typeof waiting;
|
|
51
|
-
muted: typeof muted;
|
|
52
|
-
touched: typeof touched;
|
|
53
|
-
controlsMouseEntered: typeof controlsMouseEntered;
|
|
54
|
-
isFullscreen: typeof isFullscreen;
|
|
55
|
-
popoverOffsetX: typeof popoverOffsetX;
|
|
56
|
-
seekedTime: typeof seekedTime;
|
|
57
|
-
play: typeof play;
|
|
58
|
-
pause: typeof pause;
|
|
59
|
-
mute: typeof mute;
|
|
60
|
-
unmute: typeof unmute;
|
|
61
|
-
enterFullscreen: typeof enterFullscreen;
|
|
62
|
-
exitFullscreen: typeof exitFullscreen;
|
|
63
|
-
onMouseenter: typeof onMouseenter;
|
|
64
|
-
onMouseleave: typeof onMouseleave;
|
|
65
|
-
idle: typeof idle;
|
|
66
|
-
hidden: typeof hidden;
|
|
67
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicPlayerControlsProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
|
+
};
|
|
68
28
|
declare const __VLS_component: import("vue").DefineComponent<MagicPlayerControlsProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicPlayerControlsProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
69
29
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
70
30
|
export default _default;
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { toRefs,
|
|
1
|
+
import { toRefs, toValue } from "vue";
|
|
2
2
|
import { usePlayerState } from "./usePlayerState.mjs";
|
|
3
3
|
export function usePlayerAudioApi(args) {
|
|
4
4
|
const { id } = args;
|
|
5
5
|
const { initializeState } = usePlayerState(toValue(id));
|
|
6
6
|
const state = initializeState();
|
|
7
|
-
const {
|
|
7
|
+
const { currentTime, playing, paused, muted } = toRefs(state);
|
|
8
8
|
function play() {
|
|
9
9
|
playing.value = true;
|
|
10
|
+
paused.value = false;
|
|
10
11
|
}
|
|
11
12
|
function pause() {
|
|
12
13
|
playing.value = false;
|
|
14
|
+
paused.value = true;
|
|
13
15
|
}
|
|
14
16
|
function togglePlay() {
|
|
15
17
|
playing.value = !playing.value;
|
|
18
|
+
paused.value = !playing.value;
|
|
16
19
|
}
|
|
17
20
|
function seek(time) {
|
|
18
21
|
currentTime.value = time;
|
|
@@ -23,11 +26,6 @@ export function usePlayerAudioApi(args) {
|
|
|
23
26
|
function unmute() {
|
|
24
27
|
muted.value = false;
|
|
25
28
|
}
|
|
26
|
-
watch(playing, (value) => {
|
|
27
|
-
if (!touched.value && value) {
|
|
28
|
-
touched.value = true;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
29
|
return {
|
|
32
30
|
play,
|
|
33
31
|
pause,
|
|
@@ -27,6 +27,7 @@ export function usePlayerControlsApi(args) {
|
|
|
27
27
|
currentTime,
|
|
28
28
|
duration,
|
|
29
29
|
dragging,
|
|
30
|
+
touched,
|
|
30
31
|
controlsMouseEntered,
|
|
31
32
|
seekedTime,
|
|
32
33
|
seekedPercentage,
|
|
@@ -37,7 +38,8 @@ export function usePlayerControlsApi(args) {
|
|
|
37
38
|
buffered,
|
|
38
39
|
controlsBarRect,
|
|
39
40
|
controlsTrackRect,
|
|
40
|
-
controlsPopoverRect
|
|
41
|
+
controlsPopoverRect,
|
|
42
|
+
hasControls
|
|
41
43
|
} = toRefs(state);
|
|
42
44
|
const resumePlay = shallowRef(false);
|
|
43
45
|
let cancelPointerup = void 0;
|
|
@@ -126,6 +128,7 @@ export function usePlayerControlsApi(args) {
|
|
|
126
128
|
guardedSetPointerCapture({ event: e, element: barRef?.value });
|
|
127
129
|
resumePlay.value = playing.value;
|
|
128
130
|
dragging.value = true;
|
|
131
|
+
touched.value = true;
|
|
129
132
|
pause();
|
|
130
133
|
getSizes();
|
|
131
134
|
cancelPointerup = useEventListener(document, "pointerup", onPointerup);
|
|
@@ -158,6 +161,7 @@ export function usePlayerControlsApi(args) {
|
|
|
158
161
|
let resizeObserverBar = null;
|
|
159
162
|
let windowResizeCleanup = null;
|
|
160
163
|
function initialize() {
|
|
164
|
+
hasControls.value = true;
|
|
161
165
|
watchTrack = watch(() => trackRef, getTimelineTrackSize);
|
|
162
166
|
watchPopover = watch(() => popoverRef, getPopoverSizes);
|
|
163
167
|
watchBar = watch(() => barRef, getPopoverSizes);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type MaybeRef } from 'vue';
|
|
2
|
+
export type UsePlayerEmitterArgs = {
|
|
3
|
+
id: MaybeRef<string>;
|
|
4
|
+
};
|
|
5
|
+
export declare function usePlayerEmitter(args: UsePlayerEmitterArgs): {
|
|
6
|
+
initializeEmitter: () => void;
|
|
7
|
+
};
|
|
8
|
+
export type UsePlayerEmitterReturn = ReturnType<typeof usePlayerEmitter>;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { toRefs, watch, toValue } from "vue";
|
|
2
|
+
import { useMagicEmitter } from "@maas/vue-equipment/plugins";
|
|
3
|
+
import { usePlayerState } from "./usePlayerState.mjs";
|
|
4
|
+
export function usePlayerEmitter(args) {
|
|
5
|
+
const { id } = args;
|
|
6
|
+
const { initializeState } = usePlayerState(toValue(id));
|
|
7
|
+
const state = initializeState();
|
|
8
|
+
const {
|
|
9
|
+
dragging,
|
|
10
|
+
ended,
|
|
11
|
+
fullscreen,
|
|
12
|
+
loaded,
|
|
13
|
+
muted,
|
|
14
|
+
paused,
|
|
15
|
+
playing,
|
|
16
|
+
rate,
|
|
17
|
+
stalled,
|
|
18
|
+
started,
|
|
19
|
+
touched,
|
|
20
|
+
volume,
|
|
21
|
+
waiting
|
|
22
|
+
} = toRefs(state);
|
|
23
|
+
const emitter = useMagicEmitter();
|
|
24
|
+
function initializeEmitter() {
|
|
25
|
+
watch(dragging, (newDragging) => {
|
|
26
|
+
if (newDragging) {
|
|
27
|
+
emitter.emit("onDragStart", toValue(id));
|
|
28
|
+
}
|
|
29
|
+
if (!newDragging) {
|
|
30
|
+
emitter.emit("onDragEnd", toValue(id));
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
watch(ended, (newEnded) => {
|
|
34
|
+
if (newEnded) {
|
|
35
|
+
emitter.emit("onEnd", toValue(id));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
watch(fullscreen, (newFullscreen) => {
|
|
39
|
+
if (newFullscreen) {
|
|
40
|
+
emitter.emit("onFullscreenEnter", toValue(id));
|
|
41
|
+
}
|
|
42
|
+
if (!newFullscreen) {
|
|
43
|
+
emitter.emit("onFullscreenLeave", toValue(id));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
watch(loaded, (newLoaded) => {
|
|
47
|
+
if (newLoaded) {
|
|
48
|
+
emitter.emit("onLoad", toValue(id));
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
watch(muted, (newMuted) => {
|
|
52
|
+
if (newMuted) {
|
|
53
|
+
emitter.emit("onMute", toValue(id));
|
|
54
|
+
}
|
|
55
|
+
if (!newMuted) {
|
|
56
|
+
emitter.emit("onUnmute", toValue(id));
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
watch(paused, (newPaused) => {
|
|
60
|
+
if (newPaused) {
|
|
61
|
+
emitter.emit("onPause", toValue(id));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
watch(playing, (newPlaying) => {
|
|
65
|
+
if (newPlaying) {
|
|
66
|
+
emitter.emit("onPlay", toValue(id));
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
watch(rate, (newRate) => {
|
|
70
|
+
if (newRate) {
|
|
71
|
+
emitter.emit("onRateChange", toValue(id));
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
watch(started, (newStarted) => {
|
|
75
|
+
if (newStarted) {
|
|
76
|
+
emitter.emit("onStart", toValue(id));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
watch(stalled, (newStalled) => {
|
|
80
|
+
if (newStalled) {
|
|
81
|
+
emitter.emit("onStall", toValue(id));
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
watch(touched, (newTouched) => {
|
|
85
|
+
if (newTouched) {
|
|
86
|
+
emitter.emit("onTouch", toValue(id));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
watch(volume, (newVolume) => {
|
|
90
|
+
if (newVolume) {
|
|
91
|
+
emitter.emit("onVolumeChange", toValue(id));
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
watch(waiting, (newWaiting) => {
|
|
95
|
+
if (newWaiting) {
|
|
96
|
+
emitter.emit("onWait", toValue(id));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
initializeEmitter
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -12,8 +12,10 @@ export function usePlayerMediaApi(args) {
|
|
|
12
12
|
volume,
|
|
13
13
|
rate,
|
|
14
14
|
waiting,
|
|
15
|
+
started,
|
|
15
16
|
ended,
|
|
16
17
|
playing,
|
|
18
|
+
paused,
|
|
17
19
|
stalled,
|
|
18
20
|
buffered,
|
|
19
21
|
muted
|
|
@@ -42,10 +44,11 @@ export function usePlayerMediaApi(args) {
|
|
|
42
44
|
if (toValue(mediaRef)) {
|
|
43
45
|
watch([mediaRef], () => {
|
|
44
46
|
const el = toValue(mediaRef);
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
if (el) {
|
|
48
|
+
el.volume = volume.value;
|
|
49
|
+
el.muted = muted.value;
|
|
50
|
+
el.playbackRate = rate.value;
|
|
51
|
+
}
|
|
49
52
|
});
|
|
50
53
|
}
|
|
51
54
|
const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(
|
|
@@ -60,11 +63,15 @@ export function usePlayerMediaApi(args) {
|
|
|
60
63
|
playing,
|
|
61
64
|
(isPlaying) => {
|
|
62
65
|
const el = toValue(mediaRef);
|
|
63
|
-
if (!el)
|
|
66
|
+
if (!el) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
64
69
|
if (isPlaying) {
|
|
65
70
|
const playPromise = el.play();
|
|
66
|
-
if (playPromise !== void 0)
|
|
67
|
-
|
|
71
|
+
if (playPromise !== void 0) {
|
|
72
|
+
playPromise.catch(() => {
|
|
73
|
+
});
|
|
74
|
+
}
|
|
68
75
|
} else {
|
|
69
76
|
el.pause();
|
|
70
77
|
}
|
|
@@ -95,12 +102,13 @@ export function usePlayerMediaApi(args) {
|
|
|
95
102
|
waiting.value = false;
|
|
96
103
|
});
|
|
97
104
|
useEventListener(mediaRef, "playing", () => {
|
|
105
|
+
started.value = true;
|
|
98
106
|
waiting.value = false;
|
|
99
107
|
ended.value = false;
|
|
100
108
|
ignorePlayingUpdates(() => playing.value = true);
|
|
101
109
|
});
|
|
102
110
|
useEventListener(mediaRef, "ratechange", () => {
|
|
103
|
-
rate.value = toValue(mediaRef).
|
|
111
|
+
rate.value = toValue(mediaRef)?.playbackRate ?? rate.value;
|
|
104
112
|
});
|
|
105
113
|
useEventListener(mediaRef, "stalled", () => {
|
|
106
114
|
stalled.value = true;
|
|
@@ -113,14 +121,17 @@ export function usePlayerMediaApi(args) {
|
|
|
113
121
|
});
|
|
114
122
|
useEventListener(mediaRef, "pause", () => {
|
|
115
123
|
playing.value = false;
|
|
124
|
+
paused.value = true;
|
|
116
125
|
});
|
|
117
126
|
useEventListener(mediaRef, "play", () => {
|
|
118
127
|
playing.value = true;
|
|
128
|
+
started.value = true;
|
|
119
129
|
});
|
|
120
130
|
useEventListener(mediaRef, "volumechange", () => {
|
|
121
131
|
const el = toValue(mediaRef);
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
|
|
132
|
+
if (el) {
|
|
133
|
+
volume.value = el.volume;
|
|
134
|
+
muted.value = el.muted;
|
|
135
|
+
}
|
|
125
136
|
});
|
|
126
137
|
}
|