@maas/vue-equipment 1.0.0-beta.12 → 1.0.0-beta.14

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.
Files changed (96) hide show
  1. package/dist/nuxt/module.json +1 -1
  2. package/dist/plugins/.turbo/turbo-lint.log +2 -2
  3. package/dist/plugins/MagicAccordion/src/components/MagicAccordionContent.vue +65 -82
  4. package/dist/plugins/MagicAccordion/src/components/MagicAccordionContent.vue.d.ts +2 -2
  5. package/dist/plugins/MagicAccordion/src/components/MagicAccordionProvider.vue +24 -30
  6. package/dist/plugins/MagicAccordion/src/components/MagicAccordionTrigger.vue +65 -61
  7. package/dist/plugins/MagicAccordion/src/components/MagicAccordionTrigger.vue.d.ts +1 -1
  8. package/dist/plugins/MagicAccordion/src/components/MagicAccordionView.vue +41 -45
  9. package/dist/plugins/MagicAccordion/src/components/MagicAccordionView.vue.d.ts +1 -1
  10. package/dist/plugins/MagicCommand/src/components/MagicCommandContent.vue +137 -150
  11. package/dist/plugins/MagicCommand/src/components/MagicCommandContent.vue.d.ts +1 -1
  12. package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue +45 -52
  13. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue +80 -82
  14. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +1 -1
  15. package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue +40 -47
  16. package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +68 -74
  17. package/dist/plugins/MagicCommand/src/components/MagicCommandRenderer.vue +22 -38
  18. package/dist/plugins/MagicCommand/src/components/MagicCommandTrigger.vue +95 -85
  19. package/dist/plugins/MagicCommand/src/components/MagicCommandTrigger.vue.d.ts +1 -1
  20. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +41 -47
  21. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue.d.ts +1 -1
  22. package/dist/plugins/MagicCookie/src/components/MagicCookieItem.vue +41 -39
  23. package/dist/plugins/MagicCookie/src/components/MagicCookieItem.vue.d.ts +2 -2
  24. package/dist/plugins/MagicCookie/src/components/MagicCookieProvider.vue +23 -34
  25. package/dist/plugins/MagicCookie/src/components/MagicCookieView.vue +40 -73
  26. package/dist/plugins/MagicCookie/src/components/MagicCookieView.vue.d.ts +1 -1
  27. package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue +70 -87
  28. package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue.d.ts +7 -7
  29. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +262 -304
  30. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +12 -12
  31. package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +100 -100
  32. package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +41 -69
  33. package/dist/plugins/MagicMarquee/src/composables/useMagicMarquee.d.ts +1 -1
  34. package/dist/plugins/MagicMenu/src/components/MagicMenuChannel.vue +54 -59
  35. package/dist/plugins/MagicMenu/src/components/MagicMenuChannel.vue.d.ts +2 -2
  36. package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +188 -208
  37. package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue.d.ts +3 -3
  38. package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue +181 -194
  39. package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue +91 -100
  40. package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue.d.ts +1 -1
  41. package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue +83 -85
  42. package/dist/plugins/MagicMenu/src/components/MagicMenuRemote.vue +79 -75
  43. package/dist/plugins/MagicMenu/src/components/MagicMenuRemote.vue.d.ts +1 -1
  44. package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue +106 -105
  45. package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue.d.ts +1 -1
  46. package/dist/plugins/MagicMenu/src/components/MagicMenuView.vue +54 -60
  47. package/dist/plugins/MagicMenu/src/components/MagicMenuView.vue.d.ts +1 -1
  48. package/dist/plugins/MagicModal/src/components/MagicModal.vue +136 -164
  49. package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +1 -1
  50. package/dist/plugins/MagicNoise/src/components/MagicNoise.vue +53 -78
  51. package/dist/plugins/MagicPie/src/components/MagicPie.vue +147 -175
  52. package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudio.vue +51 -62
  53. package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudioControls.vue +101 -122
  54. package/dist/plugins/MagicPlayer/src/components/MagicPlayerAudioControls.vue.d.ts +8 -5
  55. package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue +35 -42
  56. package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue +101 -108
  57. package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue +49 -77
  58. package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue.d.ts +3 -3
  59. package/dist/plugins/MagicPlayer/src/components/MagicPlayerPoster.vue +18 -37
  60. package/dist/plugins/MagicPlayer/src/components/MagicPlayerPoster.vue.d.ts +1 -2
  61. package/dist/plugins/MagicPlayer/src/components/MagicPlayerProvider.vue +45 -52
  62. package/dist/plugins/MagicPlayer/src/components/MagicPlayerProvider.vue.d.ts +5 -5
  63. package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue +60 -109
  64. package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideo.vue +74 -70
  65. package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideoControls.vue +171 -213
  66. package/dist/plugins/MagicPlayer/src/components/MagicPlayerVideoControls.vue.d.ts +8 -6
  67. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerAudioApi.d.ts +0 -4
  68. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerAudioApi.mjs +6 -47
  69. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerControlsApi.d.ts +4 -31
  70. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerControlsApi.mjs +147 -234
  71. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.d.ts +1 -15
  72. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +17 -164
  73. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.d.ts +0 -1
  74. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.mjs +6 -24
  75. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.d.ts +7 -0
  76. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerState.mjs +56 -0
  77. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerVideoApi.d.ts +0 -5
  78. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerVideoApi.mjs +7 -62
  79. package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.d.ts +32 -51
  80. package/dist/plugins/MagicPlayer/src/composables/useMagicPlayer.mjs +47 -0
  81. package/dist/plugins/MagicPlayer/src/symbols/index.d.ts +5 -2
  82. package/dist/plugins/MagicPlayer/src/symbols/index.mjs +10 -1
  83. package/dist/plugins/MagicPlayer/src/types/index.d.ts +29 -0
  84. package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue +49 -59
  85. package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +63 -70
  86. package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue +29 -33
  87. package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue +59 -69
  88. package/dist/plugins/MagicToast/src/components/MagicToastProvider.vue +80 -95
  89. package/dist/plugins/MagicToast/src/components/MagicToastView.vue +52 -70
  90. package/dist/plugins/MagicToast/src/components/MagicToastView.vue.d.ts +2 -2
  91. package/package.json +4 -4
  92. package/dist/plugins/MagicAccordion/demo/data/footer.json +0 -117
  93. package/dist/plugins/MagicCommand/demo/data/about.json +0 -3
  94. package/dist/plugins/MagicCommand/demo/data/search.json +0 -594
  95. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerStateEmitter.d.ts +0 -15
  96. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerStateEmitter.mjs +0 -9
@@ -1,8 +1,24 @@
1
- <script>
2
- import { defineComponent as _defineComponent } from "vue";
3
- import { unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
4
- const _hoisted_1 = ["preload", "loop", "muted"];
5
- import { useTemplateRef, watch, onMounted, inject, onBeforeUnmount } from "vue";
1
+ <template>
2
+ <video
3
+ ref="el"
4
+ class="magic-player-video"
5
+ playsinline
6
+ disablePictureInPicture
7
+ :preload="injectedOptions.preload"
8
+ :loop="injectedOptions.loop"
9
+ :muted="muted"
10
+ />
11
+ </template>
12
+
13
+ <script setup>
14
+ import {
15
+ toRefs,
16
+ useTemplateRef,
17
+ watch,
18
+ onMounted,
19
+ inject,
20
+ onBeforeUnmount
21
+ } from "vue";
6
22
  import {
7
23
  useElementVisibility,
8
24
  useEventListener,
@@ -11,75 +27,63 @@ import {
11
27
  import { usePlayerVideoApi } from "../composables/private/usePlayerVideoApi";
12
28
  import { usePlayerMediaApi } from "../composables/private/usePlayerMediaApi";
13
29
  import { usePlayerRuntime } from "../composables/private/usePlayerRuntime";
30
+ import { usePlayerState } from "../composables/private/usePlayerState";
14
31
  import { MagicPlayerInstanceId, MagicPlayerOptionsKey } from "../symbols";
15
- export default /* @__PURE__ */ _defineComponent({
16
- __name: "MagicPlayerVideo",
17
- setup(__props) {
18
- const injectedId = inject(MagicPlayerInstanceId, void 0);
19
- const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
20
- if (!injectedId) {
21
- throw new Error("MagicPlayerVideo must be used within a MagicPlayerProvider");
22
- }
23
- if (!injectedOptions) {
24
- throw new Error("MagicPlayerVideo must be used within a MagicPlayerProvider");
25
- }
26
- const elRef = useTemplateRef("el");
27
- const isVisible = useElementVisibility(elRef);
28
- const { initialize, destroy } = usePlayerRuntime({
29
- id: injectedId,
30
- mediaRef: elRef,
31
- src: injectedOptions.src,
32
- srcType: injectedOptions.srcType
33
- });
34
- const { muted, playing } = usePlayerMediaApi({
35
- id: injectedId,
36
- mediaRef: elRef
37
- });
38
- const { play, pause } = usePlayerVideoApi({
39
- id: injectedId,
40
- videoRef: elRef
41
- });
42
- function onWindowFocus() {
43
- if (isVisible.value && !playing.value && injectedOptions?.autoplay) {
44
- play();
45
- }
32
+ const injectedInstanceId = inject(MagicPlayerInstanceId, void 0);
33
+ const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
34
+ if (!injectedInstanceId) {
35
+ throw new Error("MagicPlayerVideo must be used within a MagicPlayerProvider");
36
+ }
37
+ if (!injectedOptions) {
38
+ throw new Error("MagicPlayerVideo must be used within a MagicPlayerProvider");
39
+ }
40
+ const elRef = useTemplateRef("el");
41
+ const isVisible = useElementVisibility(elRef);
42
+ const { initialize, destroy } = usePlayerRuntime({
43
+ id: injectedInstanceId,
44
+ mediaRef: elRef,
45
+ src: injectedOptions.src,
46
+ srcType: injectedOptions.srcType
47
+ });
48
+ const { initializeState } = usePlayerState(injectedInstanceId);
49
+ const state = initializeState();
50
+ const { muted, playing } = toRefs(state);
51
+ usePlayerMediaApi({
52
+ id: injectedInstanceId,
53
+ mediaRef: elRef
54
+ });
55
+ const { play, pause } = usePlayerVideoApi({
56
+ id: injectedInstanceId,
57
+ videoRef: elRef
58
+ });
59
+ function onWindowFocus() {
60
+ if (isVisible.value && !playing.value && injectedOptions?.autoplay) {
61
+ play();
62
+ }
63
+ }
64
+ useEventListener(defaultWindow, "focus", onWindowFocus);
65
+ watch(
66
+ isVisible,
67
+ (value) => {
68
+ if (value && !playing.value && injectedOptions.autoplay) {
69
+ play();
70
+ } else if (!value && playing.value) {
71
+ pause();
46
72
  }
47
- useEventListener(defaultWindow, "focus", onWindowFocus);
48
- watch(
49
- isVisible,
50
- (value) => {
51
- if (value && !playing.value && injectedOptions.autoplay) {
52
- play();
53
- } else if (!value && playing.value) {
54
- pause();
55
- }
56
- },
57
- {
58
- immediate: true
59
- }
60
- );
61
- onMounted(() => {
62
- initialize();
63
- if (injectedOptions.autoplay) {
64
- muted.value = true;
65
- }
66
- });
67
- onBeforeUnmount(() => {
68
- destroy();
69
- });
70
- return (_ctx, _cache) => {
71
- return _openBlock(), _createElementBlock("video", {
72
- ref: "el",
73
- class: "magic-player-video",
74
- playsinline: "",
75
- disablePictureInPicture: "",
76
- preload: _unref(injectedOptions).preload,
77
- loop: _unref(injectedOptions).loop,
78
- muted: _unref(muted)
79
- }, null, 8, _hoisted_1);
80
- };
73
+ },
74
+ {
75
+ immediate: true
76
+ }
77
+ );
78
+ onMounted(() => {
79
+ initialize();
80
+ if (injectedOptions.autoplay) {
81
+ muted.value = true;
81
82
  }
82
83
  });
84
+ onBeforeUnmount(() => {
85
+ destroy();
86
+ });
83
87
  </script>
84
88
 
85
89
  <style>
@@ -1,221 +1,179 @@
1
- <script>
2
- import { defineComponent as _defineComponent } from "vue";
3
- import { unref as _unref, renderSlot as _renderSlot, vShow as _vShow, normalizeStyle as _normalizeStyle, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, Transition as _Transition, withCtx as _withCtx } from "vue";
4
- const _hoisted_1 = ["data-fullscreen", "data-touched", "data-playing", "data-paused", "data-waiting", "data-muted", "data-idle", "data-hover", "data-standalone"];
5
- const _hoisted_2 = { class: "magic-player-video-controls__bar" };
6
- const _hoisted_3 = {
7
- ref: "bar",
8
- class: "magic-player-video-controls__bar--inner"
9
- };
10
- const _hoisted_4 = { class: "magic-player-video-controls__item -shrink-0" };
11
- const _hoisted_5 = { class: "magic-player-video-controls__item -grow" };
12
- const _hoisted_6 = {
13
- ref: "track",
14
- class: "magic-player-video-controls__timeline"
15
- };
16
- const _hoisted_7 = { class: "magic-player-video-controls__item -shrink-0" };
17
- const _hoisted_8 = { class: "magic-player-video-controls__item -shrink-0" };
18
- import { computed, inject, provide, useTemplateRef } from "vue";
19
- import { useIdle } from "@vueuse/core";
20
- import IconPlay from "./icons/Play.vue";
21
- import IconPause from "./icons/Pause.vue";
22
- import IconVolumeOn from "./icons/VolumeOn.vue";
23
- import IconVolumeOff from "./icons/VolumeOff.vue";
24
- import IconFullscreenEnter from "./icons/FullscreenEnter.vue";
25
- import IconFullscreenExit from "./icons/FullscreenExit.vue";
26
- import { usePlayerMediaApi } from "../composables/private/usePlayerMediaApi";
1
+ <template>
2
+ <div
3
+ ref="el"
4
+ class="magic-player-video-controls"
5
+ :data-fullscreen="isFullscreen"
6
+ :data-touched="touched"
7
+ :data-playing="playing"
8
+ :data-paused="!playing"
9
+ :data-waiting="waiting"
10
+ :data-muted="muted"
11
+ :data-idle="idle"
12
+ :data-hover="controlsMouseEntered"
13
+ :data-standalone="standalone"
14
+ @mouseenter="onMouseenter"
15
+ @mouseleave="onMouseleave"
16
+ >
17
+ <transition :name="mappedTransition">
18
+ <div v-show="!hidden" class="magic-player-video-controls__bar">
19
+ <div
20
+ v-if="$slots.popover"
21
+ v-show="!!seekedTime && touched"
22
+ ref="popover"
23
+ class="magic-player-video-controls__popover"
24
+ :style="{ marginLeft: `${popoverOffsetX}%` }"
25
+ >
26
+ <slot name="popover" />
27
+ </div>
28
+ <div ref="bar" class="magic-player-video-controls__bar--inner">
29
+ <div class="magic-player-video-controls__item -shrink-0">
30
+ <button v-if="!playing" @click="play">
31
+ <slot name="playIcon">
32
+ <icon-play />
33
+ </slot>
34
+ </button>
35
+ <button v-else @click="pause">
36
+ <slot name="pauseIcon">
37
+ <icon-pause />
38
+ </slot>
39
+ </button>
40
+ </div>
41
+ <div class="magic-player-video-controls__item -grow">
42
+ <slot name="timelineBefore" />
43
+ <div ref="track" class="magic-player-video-controls__timeline">
44
+ <magic-player-timeline />
45
+ </div>
46
+ <slot name="timelineAfter" />
47
+ </div>
48
+ <div class="magic-player-video-controls__item -shrink-0">
49
+ <button v-if="muted" @click="unmute">
50
+ <slot name="volumeOffIcon">
51
+ <icon-volume-off />
52
+ </slot>
53
+ </button>
54
+ <button v-else @click="mute">
55
+ <slot name="volumeOnIcon">
56
+ <icon-volume-on />
57
+ </slot>
58
+ </button>
59
+ </div>
60
+ <div class="magic-player-video-controls__item -shrink-0">
61
+ <button v-if="isFullscreen" @click="exitFullscreen">
62
+ <slot name="fullscreenExitIcon">
63
+ <icon-fullscreen-exit />
64
+ </slot>
65
+ </button>
66
+ <button v-else @click="enterFullscreen">
67
+ <slot name="fullscreenEnterIcon">
68
+ <icon-fullscreen-enter />
69
+ </slot>
70
+ </button>
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </transition>
75
+ </div>
76
+ </template>
77
+
78
+ <script setup>
79
+ import {
80
+ toRefs,
81
+ computed,
82
+ inject,
83
+ provide,
84
+ useTemplateRef,
85
+ onBeforeUnmount
86
+ } from "vue";
87
+ import { useElementVisibility, useIdle } from "@vueuse/core";
88
+ import { usePlayerState } from "../composables/private/usePlayerState";
27
89
  import { usePlayerVideoApi } from "../composables/private/usePlayerVideoApi";
28
90
  import { usePlayerControlsApi } from "../composables/private/usePlayerControlsApi";
29
- import { MagicPlayerInstanceId, MagicPlayerOptionsKey } from "../symbols";
91
+ import {
92
+ MagicPlayerInstanceId,
93
+ MagicPlayerOptionsKey,
94
+ MagicPlayerTrackRef,
95
+ MagicPlayerPopoverRef,
96
+ MagicPlayerBarRef
97
+ } from "../symbols";
30
98
  import "@maas/vue-equipment/utils/css/animations/fade-up-in.css";
31
99
  import "@maas/vue-equipment/utils/css/animations/fade-up-out.css";
32
- export default /* @__PURE__ */ _defineComponent({
33
- __name: "MagicPlayerVideoControls",
34
- props: {
35
- id: { type: String, required: false },
36
- standalone: { type: Boolean, required: false, default: false },
37
- transition: { type: String, required: false }
100
+ const {
101
+ id,
102
+ standalone = false,
103
+ transition
104
+ } = defineProps({
105
+ id: {
106
+ type: String,
107
+ required: false
38
108
  },
39
- setup(__props) {
40
- const instanceId = inject(MagicPlayerInstanceId, void 0);
41
- const mappedId = computed(() => __props.id ?? instanceId);
42
- if (!mappedId.value) {
43
- throw new Error(
44
- "MagicPlayerVideoControls must be nested inside MagicPlayerProvider or be passed an id as a prop."
45
- );
46
- }
47
- const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
48
- const mappedTransition = computed(
49
- () => __props.transition ?? injectedOptions?.transition?.videoControls
50
- );
51
- const barRef = useTemplateRef("bar");
52
- const trackRef = useTemplateRef("track");
53
- const popoverRef = useTemplateRef("popover");
54
- const { playing, waiting, muted } = usePlayerMediaApi({
55
- id: mappedId.value
56
- });
57
- const {
58
- touched,
59
- mouseEntered,
60
- isFullscreen,
61
- play,
62
- pause,
63
- mute,
64
- unmute,
65
- enterFullscreen,
66
- exitFullscreen
67
- } = usePlayerVideoApi({ id: mappedId.value });
68
- const { popoverOffsetX, seekedTime } = usePlayerControlsApi({
69
- id: mappedId.value,
70
- barRef,
71
- trackRef,
72
- popoverRef
73
- });
74
- const { idle } = useIdle(3e3);
75
- const hidden = computed(() => {
76
- switch (true) {
77
- case __props.standalone:
78
- return false;
79
- case (playing.value && idle.value):
80
- return true;
81
- case (playing.value && !mouseEntered.value):
82
- return true;
83
- case !touched.value:
84
- return true;
85
- default:
86
- return false;
87
- }
88
- });
89
- provide(MagicPlayerInstanceId, mappedId.value);
90
- return (_ctx, _cache) => {
91
- const _component_magic_player_timeline = _resolveComponent("magic-player-timeline");
92
- return _openBlock(), _createElementBlock("div", {
93
- class: "magic-player-video-controls",
94
- "data-fullscreen": _unref(isFullscreen),
95
- "data-touched": _unref(touched),
96
- "data-playing": _unref(playing),
97
- "data-paused": !_unref(playing),
98
- "data-waiting": _unref(waiting),
99
- "data-muted": _unref(muted),
100
- "data-idle": _unref(idle),
101
- "data-hover": _unref(mouseEntered),
102
- "data-standalone": _ctx.standalone
103
- }, [
104
- _createVNode(_Transition, {
105
- name: mappedTransition.value,
106
- persisted: ""
107
- }, {
108
- default: _withCtx(() => [
109
- _withDirectives(_createElementVNode(
110
- "div",
111
- _hoisted_2,
112
- [
113
- _ctx.$slots.popover ? _withDirectives((_openBlock(), _createElementBlock(
114
- "div",
115
- {
116
- key: 0,
117
- ref: "popover",
118
- class: "magic-player-video-controls__popover",
119
- style: _normalizeStyle({ marginLeft: `${_unref(popoverOffsetX)}%` })
120
- },
121
- [
122
- _renderSlot(_ctx.$slots, "popover")
123
- ],
124
- 4
125
- /* STYLE */
126
- )), [
127
- [_vShow, !!_unref(seekedTime) && _unref(touched)]
128
- ]) : _createCommentVNode("v-if", true),
129
- _createElementVNode(
130
- "div",
131
- _hoisted_3,
132
- [
133
- _createElementVNode("div", _hoisted_4, [
134
- !_unref(playing) ? (_openBlock(), _createElementBlock("button", {
135
- key: 0,
136
- onClick: _cache[0] || (_cache[0] = //@ts-ignore
137
- (...args) => _unref(play) && _unref(play)(...args))
138
- }, [
139
- _renderSlot(_ctx.$slots, "playIcon", {}, () => [
140
- _createVNode(IconPlay)
141
- ])
142
- ])) : (_openBlock(), _createElementBlock("button", {
143
- key: 1,
144
- onClick: _cache[1] || (_cache[1] = //@ts-ignore
145
- (...args) => _unref(pause) && _unref(pause)(...args))
146
- }, [
147
- _renderSlot(_ctx.$slots, "pauseIcon", {}, () => [
148
- _createVNode(IconPause)
149
- ])
150
- ]))
151
- ]),
152
- _createElementVNode("div", _hoisted_5, [
153
- _renderSlot(_ctx.$slots, "timelineBefore"),
154
- _createElementVNode(
155
- "div",
156
- _hoisted_6,
157
- [
158
- _createVNode(_component_magic_player_timeline)
159
- ],
160
- 512
161
- /* NEED_PATCH */
162
- ),
163
- _renderSlot(_ctx.$slots, "timelineAfter")
164
- ]),
165
- _createElementVNode("div", _hoisted_7, [
166
- _unref(muted) ? (_openBlock(), _createElementBlock("button", {
167
- key: 0,
168
- onClick: _cache[2] || (_cache[2] = //@ts-ignore
169
- (...args) => _unref(unmute) && _unref(unmute)(...args))
170
- }, [
171
- _renderSlot(_ctx.$slots, "volumeOffIcon", {}, () => [
172
- _createVNode(IconVolumeOff)
173
- ])
174
- ])) : (_openBlock(), _createElementBlock("button", {
175
- key: 1,
176
- onClick: _cache[3] || (_cache[3] = //@ts-ignore
177
- (...args) => _unref(mute) && _unref(mute)(...args))
178
- }, [
179
- _renderSlot(_ctx.$slots, "volumeOnIcon", {}, () => [
180
- _createVNode(IconVolumeOn)
181
- ])
182
- ]))
183
- ]),
184
- _createElementVNode("div", _hoisted_8, [
185
- _unref(isFullscreen) ? (_openBlock(), _createElementBlock("button", {
186
- key: 0,
187
- onClick: _cache[4] || (_cache[4] = //@ts-ignore
188
- (...args) => _unref(exitFullscreen) && _unref(exitFullscreen)(...args))
189
- }, [
190
- _renderSlot(_ctx.$slots, "fullscreenExitIcon", {}, () => [
191
- _createVNode(IconFullscreenExit)
192
- ])
193
- ])) : (_openBlock(), _createElementBlock("button", {
194
- key: 1,
195
- onClick: _cache[5] || (_cache[5] = //@ts-ignore
196
- (...args) => _unref(enterFullscreen) && _unref(enterFullscreen)(...args))
197
- }, [
198
- _renderSlot(_ctx.$slots, "fullscreenEnterIcon", {}, () => [
199
- _createVNode(IconFullscreenEnter)
200
- ])
201
- ]))
202
- ])
203
- ],
204
- 512
205
- /* NEED_PATCH */
206
- )
207
- ],
208
- 512
209
- /* NEED_PATCH */
210
- ), [
211
- [_vShow, !hidden.value]
212
- ])
213
- ]),
214
- _: 3
215
- /* FORWARDED */
216
- }, 8, ["name"])
217
- ], 8, _hoisted_1);
218
- };
109
+ standalone: {
110
+ type: Boolean,
111
+ required: false
112
+ },
113
+ transition: {
114
+ type: String,
115
+ required: false
219
116
  }
220
117
  });
118
+ const injectedInstanceId = inject(MagicPlayerInstanceId, void 0);
119
+ const mappedInstanceId = computed(() => id ?? injectedInstanceId);
120
+ if (!mappedInstanceId.value) {
121
+ throw new Error(
122
+ "MagicPlayerVideoControls must be nested inside MagicPlayerProvider or be passed an id as a prop."
123
+ );
124
+ }
125
+ const injectedOptions = inject(MagicPlayerOptionsKey, void 0);
126
+ const mappedTransition = computed(
127
+ () => transition ?? injectedOptions?.transition?.videoControls
128
+ );
129
+ const barRef = useTemplateRef("bar");
130
+ const trackRef = useTemplateRef("track");
131
+ const popoverRef = useTemplateRef("popover");
132
+ const { initializeState } = usePlayerState(mappedInstanceId.value);
133
+ const state = initializeState();
134
+ const {
135
+ playing,
136
+ waiting,
137
+ muted,
138
+ touched,
139
+ mouseEntered,
140
+ controlsMouseEntered,
141
+ isFullscreen,
142
+ popoverOffsetX,
143
+ seekedTime
144
+ } = toRefs(state);
145
+ const { play, pause, mute, unmute, enterFullscreen, exitFullscreen } = usePlayerVideoApi({ id: mappedInstanceId.value });
146
+ const { initialize, destroy, onMouseenter, onMouseleave } = usePlayerControlsApi({
147
+ id: mappedInstanceId.value,
148
+ barRef,
149
+ trackRef,
150
+ popoverRef
151
+ });
152
+ const elRef = useTemplateRef("el");
153
+ const isVisible = useElementVisibility(elRef);
154
+ const { idle } = useIdle(3e3);
155
+ const hidden = computed(() => {
156
+ switch (true) {
157
+ case standalone:
158
+ return false;
159
+ case (playing.value && idle.value):
160
+ return true;
161
+ case (playing.value && !controlsMouseEntered.value && !mouseEntered.value):
162
+ return true;
163
+ case !isVisible.value:
164
+ return true;
165
+ case !touched.value:
166
+ return true;
167
+ default:
168
+ return false;
169
+ }
170
+ });
171
+ initialize();
172
+ onBeforeUnmount(() => {
173
+ destroy();
174
+ });
175
+ provide(MagicPlayerInstanceId, mappedInstanceId.value);
176
+ provide(MagicPlayerTrackRef, trackRef);
177
+ provide(MagicPlayerPopoverRef, popoverRef);
178
+ provide(MagicPlayerBarRef, barRef);
221
179
  </script>
@@ -12,9 +12,9 @@ interface MagicPlayerControlsProps {
12
12
  transition?: string;
13
13
  }
14
14
  declare const mappedTransition: import("vue").ComputedRef<string | undefined>;
15
- declare const playing: import("vue").ShallowRef<boolean, boolean>, waiting: import("vue").ShallowRef<boolean, boolean>, muted: import("vue").ShallowRef<boolean, boolean>;
16
- declare const touched: import("vue").ShallowRef<boolean, boolean>, mouseEntered: import("vue").ShallowRef<boolean, boolean>, isFullscreen: import("vue").Ref<boolean, boolean>, play: () => void, pause: () => void, mute: () => void, unmute: () => void, enterFullscreen: () => void, exitFullscreen: () => void;
17
- declare const popoverOffsetX: import("vue").ShallowRef<number, number>, seekedTime: import("vue").ShallowRef<number, number>;
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
18
  declare const idle: import("vue").Ref<boolean, boolean>;
19
19
  declare const hidden: import("vue").ComputedRef<boolean>;
20
20
  declare const __VLS_ctx: InstanceType<__VLS_PickNotAny<typeof __VLS_self, new () => {}>>;
@@ -50,16 +50,18 @@ declare const __VLS_self: import("vue").DefineComponent<MagicPlayerControlsProps
50
50
  waiting: typeof waiting;
51
51
  muted: typeof muted;
52
52
  touched: typeof touched;
53
- mouseEntered: typeof mouseEntered;
53
+ controlsMouseEntered: typeof controlsMouseEntered;
54
54
  isFullscreen: typeof isFullscreen;
55
+ popoverOffsetX: typeof popoverOffsetX;
56
+ seekedTime: typeof seekedTime;
55
57
  play: typeof play;
56
58
  pause: typeof pause;
57
59
  mute: typeof mute;
58
60
  unmute: typeof unmute;
59
61
  enterFullscreen: typeof enterFullscreen;
60
62
  exitFullscreen: typeof exitFullscreen;
61
- popoverOffsetX: typeof popoverOffsetX;
62
- seekedTime: typeof seekedTime;
63
+ onMouseenter: typeof onMouseenter;
64
+ onMouseleave: typeof onMouseleave;
63
65
  idle: typeof idle;
64
66
  hidden: typeof hidden;
65
67
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MagicPlayerControlsProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -3,15 +3,11 @@ export type UsePlayerAudioApiArgs = {
3
3
  id: MaybeRef<string>;
4
4
  };
5
5
  export declare function usePlayerAudioApi(args: UsePlayerAudioApiArgs): {
6
- mouseEntered: import("vue").ShallowRef<boolean, boolean>;
7
- touched: import("vue").ShallowRef<boolean, boolean>;
8
6
  play: () => void;
9
7
  pause: () => void;
10
8
  togglePlay: () => void;
11
9
  seek: (time: number) => void;
12
10
  mute: () => void;
13
11
  unmute: () => void;
14
- onMouseenter: () => void;
15
- onMouseleave: () => void;
16
12
  };
17
13
  export type UsePlayerAudioApiReturn = ReturnType<typeof usePlayerAudioApi>;