@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,11 +1,10 @@
1
- import { shallowRef, watch, toValue } from "vue";
2
- import { usePlayerStateEmitter } from "./usePlayerStateEmitter.mjs";
3
- import { usePlayerMediaApi } from "./usePlayerMediaApi.mjs";
1
+ import { toRefs, watch, toValue } from "vue";
2
+ import { usePlayerState } from "./usePlayerState.mjs";
4
3
  export function usePlayerAudioApi(args) {
5
4
  const { id } = args;
6
- const { playing, currentTime, muted } = usePlayerMediaApi({ id });
7
- const touched = shallowRef(false);
8
- const mouseEntered = shallowRef(false);
5
+ const { initializeState } = usePlayerState(toValue(id));
6
+ const state = initializeState();
7
+ const { touched, currentTime, playing, muted } = toRefs(state);
9
8
  function play() {
10
9
  playing.value = true;
11
10
  }
@@ -24,57 +23,17 @@ export function usePlayerAudioApi(args) {
24
23
  function unmute() {
25
24
  muted.value = false;
26
25
  }
27
- function onMouseenter() {
28
- mouseEntered.value = true;
29
- }
30
- function onMouseleave() {
31
- mouseEntered.value = false;
32
- }
33
26
  watch(playing, (value) => {
34
27
  if (!touched.value && value) {
35
28
  touched.value = true;
36
29
  }
37
30
  });
38
- const emitter = usePlayerStateEmitter();
39
- emitter.on("update", (payload) => {
40
- if (payload.id !== toValue(id)) return;
41
- if (payload.api === "player") {
42
- switch (payload.key) {
43
- case "mouseEntered":
44
- mouseEntered.value = payload.value;
45
- break;
46
- case "touched":
47
- touched.value = payload.value;
48
- break;
49
- }
50
- }
51
- });
52
- watch(mouseEntered, (value) => {
53
- emitter.emit("update", {
54
- id: toValue(id),
55
- api: "player",
56
- key: "mouseEntered",
57
- value
58
- });
59
- });
60
- watch(touched, (value) => {
61
- emitter.emit("update", {
62
- id: toValue(id),
63
- api: "player",
64
- key: "touched",
65
- value
66
- });
67
- });
68
31
  return {
69
- mouseEntered,
70
- touched,
71
32
  play,
72
33
  pause,
73
34
  togglePlay,
74
35
  seek,
75
36
  mute,
76
- unmute,
77
- onMouseenter,
78
- onMouseleave
37
+ unmute
79
38
  };
80
39
  }
@@ -6,39 +6,12 @@ export type UsePlayerControlsApiArgs = {
6
6
  popoverRef?: Ref<HTMLDivElement | null>;
7
7
  };
8
8
  export declare function usePlayerControlsApi(args: UsePlayerControlsApiArgs): {
9
- mouseEntered: import("vue").ShallowRef<boolean, boolean>;
10
- dragging: import("vue").ShallowRef<boolean, boolean>;
11
- seekedTime: import("vue").ShallowRef<number, number>;
12
- seekedPercentage: import("vue").ShallowRef<number, number>;
13
- scrubbedPercentage: import("vue").ShallowRef<number, number>;
9
+ initialize: () => void;
10
+ destroy: () => void;
14
11
  bufferedPercentage: import("vue").ComputedRef<number>;
15
- thumbPercentage: import("vue").ShallowRef<number, number>;
16
- popoverOffsetX: import("vue").ShallowRef<number, number>;
17
12
  onMouseenter: () => void;
18
13
  onMouseleave: () => void;
19
- onPointerdown: (e: MouseEvent | TouchEvent) => void;
20
- onPointerup: () => void;
21
- onPointermove: (e: MouseEvent | TouchEvent) => void;
22
- trackRect: Ref<{
23
- height: number;
24
- width: number;
25
- x: number;
26
- y: number;
27
- readonly bottom: number;
28
- readonly left: number;
29
- readonly right: number;
30
- readonly top: number;
31
- toJSON: () => any;
32
- } | undefined, DOMRect | {
33
- height: number;
34
- width: number;
35
- x: number;
36
- y: number;
37
- readonly bottom: number;
38
- readonly left: number;
39
- readonly right: number;
40
- readonly top: number;
41
- toJSON: () => any;
42
- } | undefined>;
14
+ onPointerdown: (e: PointerEvent) => void;
15
+ onPointermove: (e: PointerEvent) => void;
43
16
  };
44
17
  export type UsePlayerControlsApiReturn = ReturnType<typeof usePlayerControlsApi>;
@@ -1,5 +1,5 @@
1
1
  import {
2
- ref,
2
+ toRefs,
3
3
  shallowRef,
4
4
  computed,
5
5
  watch,
@@ -8,65 +8,87 @@ import {
8
8
  import {
9
9
  useResizeObserver,
10
10
  useEventListener,
11
- defaultWindow
11
+ defaultWindow,
12
+ useThrottleFn
12
13
  } from "@vueuse/core";
14
+ import {
15
+ isIOS,
16
+ guardedReleasePointerCapture,
17
+ guardedSetPointerCapture
18
+ } from "@maas/vue-equipment/utils";
13
19
  import { clampValue, mapValue } from "@maas/vue-equipment/utils";
14
- import { usePlayerMediaApi } from "./usePlayerMediaApi.mjs";
15
20
  import { usePlayerVideoApi } from "./usePlayerVideoApi.mjs";
16
- import { usePlayerStateEmitter } from "./usePlayerStateEmitter.mjs";
21
+ import { usePlayerState } from "./usePlayerState.mjs";
17
22
  export function usePlayerControlsApi(args) {
23
+ const { id, barRef, trackRef, popoverRef } = args;
24
+ const { initializeState } = usePlayerState(toValue(id));
25
+ const state = initializeState();
26
+ const {
27
+ currentTime,
28
+ duration,
29
+ dragging,
30
+ controlsMouseEntered,
31
+ seekedTime,
32
+ seekedPercentage,
33
+ scrubbedPercentage,
34
+ thumbPercentage,
35
+ popoverOffsetX,
36
+ playing,
37
+ buffered,
38
+ controlsBarRect,
39
+ controlsTrackRect,
40
+ controlsPopoverRect
41
+ } = toRefs(state);
18
42
  const resumePlay = shallowRef(false);
19
- const barRect = ref(void 0);
20
- const trackRect = ref(void 0);
21
- const popoverRect = ref(void 0);
22
- const { id, trackRef, barRef, popoverRef } = args;
23
- const { buffered, duration, playing, currentTime } = usePlayerMediaApi({ id });
24
- const { play, pause, seek } = usePlayerVideoApi({ id });
25
- const dragging = shallowRef(false);
26
- const mouseEntered = shallowRef(false);
27
- const seekedTime = shallowRef(0);
28
- const seekedPercentage = shallowRef(0);
29
- const scrubbedPercentage = shallowRef(0);
30
- const thumbPercentage = shallowRef(0);
31
- const popoverOffsetX = shallowRef(0);
43
+ let cancelPointerup = void 0;
44
+ let cancelPointermove = void 0;
45
+ let cancelTouchend = void 0;
32
46
  const bufferedPercentage = computed(() => {
33
- if (!buffered) return 0;
47
+ if (!buffered.value) {
48
+ return 0;
49
+ }
34
50
  const endBuffer = buffered.value?.length > 0 ? buffered.value[0][1] : 0;
35
51
  const percentage = endBuffer / duration.value * 100;
36
52
  return clampValue(percentage, 0, thumbPercentage.value);
37
53
  });
54
+ const { play, pause, seek } = usePlayerVideoApi({ id });
38
55
  function getPopoverOffsetX() {
39
- if (!trackRect.value || !popoverRect.value || !barRect.value) {
40
- return 0;
41
- } else {
42
- const trackFactor = barRect.value.width / trackRect.value.width;
43
- const offsetXPercentage = Math.abs(trackRect.value.x - barRect.value.x) / barRect.value.width * 100;
44
- const popoverWidthPercentage = popoverRect.value.width / barRect.value.width * 100;
45
- const maxPercentage = 100 - popoverWidthPercentage;
46
- const percentage = seekedPercentage.value / trackFactor + offsetXPercentage - popoverWidthPercentage / 2;
47
- popoverOffsetX.value = clampValue(percentage, 0, maxPercentage);
56
+ if (!controlsTrackRect.value || !controlsPopoverRect.value || !controlsBarRect.value) {
57
+ return;
48
58
  }
59
+ const trackFactor = controlsBarRect.value.width / controlsTrackRect.value.width;
60
+ const offsetXPercentage = Math.abs(controlsTrackRect.value.x - controlsBarRect.value.x) / controlsBarRect.value.width * 100;
61
+ const popoverWidthPercentage = controlsPopoverRect.value.width / controlsBarRect.value.width * 100;
62
+ const maxPercentage = 100 - popoverWidthPercentage;
63
+ const percentage = seekedPercentage.value / trackFactor + offsetXPercentage - popoverWidthPercentage / 2;
64
+ popoverOffsetX.value = clampValue(percentage, 0, maxPercentage);
49
65
  }
50
66
  function getTimelineTrackSize() {
51
67
  if (!toValue(trackRef)) {
52
68
  return;
53
69
  }
54
- trackRect.value = toValue(trackRef).getBoundingClientRect();
55
- thumbPercentage.value = 100 - trackRect.value.height / trackRect.value.width * 100;
70
+ controlsTrackRect.value = toValue(trackRef).getBoundingClientRect();
71
+ thumbPercentage.value = 100 - controlsTrackRect.value.height / controlsTrackRect.value.width * 100;
56
72
  }
57
73
  function getPopoverSizes() {
58
74
  if (!toValue(barRef) || !toValue(popoverRef)) {
59
75
  return;
60
76
  }
61
- barRect.value = toValue(barRef).getBoundingClientRect();
62
- popoverRect.value = toValue(popoverRef).getBoundingClientRect();
77
+ controlsBarRect.value = toValue(barRef).getBoundingClientRect();
78
+ controlsPopoverRect.value = toValue(popoverRef).getBoundingClientRect();
63
79
  }
80
+ function getSizes() {
81
+ getTimelineTrackSize();
82
+ getPopoverSizes();
83
+ getPopoverOffsetX();
84
+ }
85
+ const getSizesThrottled = useThrottleFn(getSizes, 100);
64
86
  function seekToTrackPosition(absX) {
65
- if (!trackRect.value) {
66
- throw new Error("trackRect is undefined");
87
+ if (!controlsTrackRect.value) {
88
+ return;
67
89
  }
68
- const relX = absX - trackRect.value.x - trackRect.value.height / 2;
69
- const percentage = Math.round(relX / trackRect.value.width * 100);
90
+ const relX = absX - controlsTrackRect.value.x - controlsTrackRect.value.height / 2;
91
+ const percentage = Math.round(relX / controlsTrackRect.value.width * 100);
70
92
  seekedPercentage.value = clampValue(percentage, 0, thumbPercentage.value);
71
93
  seekedTime.value = duration.value * mapValue(seekedPercentage.value, 0, thumbPercentage.value, 0, 100) / 100;
72
94
  if (dragging.value) {
@@ -75,220 +97,111 @@ export function usePlayerControlsApi(args) {
75
97
  }
76
98
  getPopoverOffsetX();
77
99
  }
78
- function onMouseenter() {
79
- getTimelineTrackSize();
80
- getPopoverSizes();
81
- mouseEntered.value = true;
82
- }
83
- function onMouseleave() {
84
- mouseEntered.value = false;
100
+ function resetStateAndListeners() {
85
101
  dragging.value = false;
86
- seekedTime.value = 0;
102
+ cancelTouchend?.();
103
+ cancelPointerup?.();
104
+ cancelPointermove?.();
87
105
  }
88
- function onPointerdown(e) {
89
- dragging.value = true;
90
- resumePlay.value = playing.value;
91
- pause();
92
- const x = e instanceof MouseEvent ? e.pageX : e.touches[0].pageX;
93
- seekToTrackPosition(x);
94
- }
95
- function onPointerup() {
96
- dragging.value = false;
106
+ function onPointerup(e) {
107
+ resetStateAndListeners();
108
+ guardedReleasePointerCapture({ event: e, element: barRef?.value });
97
109
  if (resumePlay.value) {
98
110
  play();
99
111
  }
100
112
  }
101
113
  function onPointermove(e) {
102
- const x = e instanceof MouseEvent ? e.pageX : e.touches[0].pageX;
103
- seekToTrackPosition(x);
114
+ if (!e.isPrimary) {
115
+ return;
116
+ }
117
+ getSizesThrottled();
118
+ e.stopImmediatePropagation();
119
+ e.stopPropagation();
120
+ seekToTrackPosition(e.clientX);
104
121
  }
105
- watch(() => trackRef, getTimelineTrackSize);
106
- watch(() => popoverRef, getPopoverSizes);
107
- watch(() => barRef, getPopoverSizes);
108
- watch(currentTime, (value) => {
109
- const percentage = value / duration?.value * 100;
110
- scrubbedPercentage.value = mapValue(
111
- percentage,
112
- 0,
113
- 100,
114
- 0,
115
- thumbPercentage.value
116
- );
117
- });
118
- useResizeObserver(trackRef, getTimelineTrackSize);
119
- useResizeObserver(popoverRef, getPopoverSizes);
120
- useEventListener(
121
- defaultWindow,
122
- "resize",
123
- () => {
124
- getTimelineTrackSize();
125
- getPopoverSizes();
126
- },
127
- {
128
- passive: true
122
+ function onPointerdown(e) {
123
+ if (dragging.value) {
124
+ return;
125
+ } else {
126
+ guardedSetPointerCapture({ event: e, element: barRef?.value });
127
+ resumePlay.value = playing.value;
128
+ dragging.value = true;
129
+ pause();
130
+ getSizes();
131
+ cancelPointerup = useEventListener(document, "pointerup", onPointerup);
132
+ cancelPointermove = useEventListener(
133
+ document,
134
+ "pointermove",
135
+ onPointermove,
136
+ { passive: false }
137
+ );
138
+ cancelTouchend = isIOS() ? useEventListener(document, "touchend", onPointerup) : void 0;
139
+ onPointermove(e);
129
140
  }
130
- );
131
- const emitter = usePlayerStateEmitter();
132
- emitter.on("update", (payload) => {
133
- if (payload.id !== toValue(id)) return;
134
- if (payload.api === "controls") {
135
- switch (payload.key) {
136
- case "dragging": {
137
- dragging.value = payload.value;
138
- break;
139
- }
140
- case "mouseEntered": {
141
- mouseEntered.value = payload.value;
142
- break;
143
- }
144
- case "seekedTime": {
145
- seekedTime.value = payload.value;
146
- break;
147
- }
148
- case "seekedPercentage": {
149
- seekedPercentage.value = payload.value;
150
- break;
151
- }
152
- case "scrubbedPercentage": {
153
- scrubbedPercentage.value = payload.value;
154
- break;
155
- }
156
- case "thumbPercentage": {
157
- thumbPercentage.value = payload.value;
158
- break;
159
- }
160
- case "popoverOffsetX": {
161
- popoverOffsetX.value = payload.value;
162
- break;
163
- }
164
- case "barRect": {
165
- barRect.value = payload.value;
166
- break;
167
- }
168
- case "trackRect": {
169
- trackRect.value = payload.value;
170
- break;
171
- }
172
- case "popoverRect": {
173
- popoverRect.value = payload.value;
174
- break;
175
- }
176
- }
141
+ }
142
+ function onMouseenter() {
143
+ getSizes();
144
+ controlsMouseEntered.value = true;
145
+ }
146
+ function onMouseleave() {
147
+ controlsMouseEntered.value = false;
148
+ if (!dragging.value) {
149
+ seekedTime.value = 0;
177
150
  }
178
- });
179
- watch(dragging, (value) => {
180
- emitter.emit("update", {
181
- id: toValue(id),
182
- api: "controls",
183
- key: "dragging",
184
- value
185
- });
186
- });
187
- watch(mouseEntered, (value) => {
188
- emitter.emit("update", {
189
- id: toValue(id),
190
- api: "controls",
191
- key: "mouseEntered",
192
- value
193
- });
194
- });
195
- watch(seekedTime, (value) => {
196
- emitter.emit("update", {
197
- id: toValue(id),
198
- api: "controls",
199
- key: "seekedTime",
200
- value
201
- });
202
- });
203
- watch(seekedPercentage, (value) => {
204
- emitter.emit("update", {
205
- id: toValue(id),
206
- api: "controls",
207
- key: "seekedPercentage",
208
- value
209
- });
210
- });
211
- watch(scrubbedPercentage, (value) => {
212
- emitter.emit("update", {
213
- id: toValue(id),
214
- api: "controls",
215
- key: "scrubbedPercentage",
216
- value
217
- });
218
- });
219
- watch(bufferedPercentage, (value) => {
220
- emitter.emit("update", {
221
- id: toValue(id),
222
- api: "controls",
223
- key: "bufferedPercentage",
224
- value
225
- });
226
- });
227
- watch(thumbPercentage, (value) => {
228
- emitter.emit("update", {
229
- id: toValue(id),
230
- api: "controls",
231
- key: "thumbPercentage",
232
- value
233
- });
234
- });
235
- watch(popoverOffsetX, (value) => {
236
- emitter.emit("update", {
237
- id: toValue(id),
238
- api: "controls",
239
- key: "popoverOffsetX",
240
- value
241
- });
242
- });
243
- watch(resumePlay, (value) => {
244
- emitter.emit("update", {
245
- id: toValue(id),
246
- api: "controls",
247
- key: "resumePlay",
248
- value
249
- });
250
- });
251
- watch(barRect, (value) => {
252
- if (!value) return;
253
- emitter.emit("update", {
254
- id: toValue(id),
255
- api: "controls",
256
- key: "barRect",
257
- value
258
- });
259
- });
260
- watch(trackRect, (value) => {
261
- if (!value) return;
262
- emitter.emit("update", {
263
- id: toValue(id),
264
- api: "controls",
265
- key: "trackRect",
266
- value
267
- });
268
- });
269
- watch(popoverRect, (value) => {
270
- if (!value) return;
271
- emitter.emit("update", {
272
- id: toValue(id),
273
- api: "controls",
274
- key: "popoverRect",
275
- value
151
+ }
152
+ let watchTrack = null;
153
+ let watchPopover = null;
154
+ let watchBar = null;
155
+ let watchCurrentTime = null;
156
+ let resizeObserverTrack = null;
157
+ let resizeObserverPopover = null;
158
+ let resizeObserverBar = null;
159
+ let windowResizeCleanup = null;
160
+ function initialize() {
161
+ watchTrack = watch(() => trackRef, getTimelineTrackSize);
162
+ watchPopover = watch(() => popoverRef, getPopoverSizes);
163
+ watchBar = watch(() => barRef, getPopoverSizes);
164
+ watchCurrentTime = watch(currentTime, (value) => {
165
+ const percentage = value / duration?.value * 100;
166
+ scrubbedPercentage.value = mapValue(
167
+ percentage,
168
+ 0,
169
+ 100,
170
+ 0,
171
+ thumbPercentage.value
172
+ );
276
173
  });
277
- });
174
+ resizeObserverTrack = useResizeObserver(trackRef, getTimelineTrackSize);
175
+ resizeObserverPopover = useResizeObserver(popoverRef, getPopoverSizes);
176
+ resizeObserverBar = useResizeObserver(barRef, getPopoverSizes);
177
+ windowResizeCleanup = useEventListener(
178
+ defaultWindow,
179
+ "resize",
180
+ () => {
181
+ getSizes();
182
+ },
183
+ {
184
+ passive: true
185
+ }
186
+ );
187
+ }
188
+ function destroy() {
189
+ watchTrack?.();
190
+ watchPopover?.();
191
+ watchBar?.();
192
+ watchCurrentTime?.();
193
+ resizeObserverTrack?.stop();
194
+ resizeObserverPopover?.stop();
195
+ resizeObserverBar?.stop();
196
+ windowResizeCleanup?.();
197
+ }
278
198
  return {
279
- mouseEntered,
280
- dragging,
281
- seekedTime,
282
- seekedPercentage,
283
- scrubbedPercentage,
199
+ initialize,
200
+ destroy,
284
201
  bufferedPercentage,
285
- thumbPercentage,
286
- popoverOffsetX,
287
202
  onMouseenter,
288
203
  onMouseleave,
289
204
  onPointerdown,
290
- onPointerup,
291
- onPointermove,
292
- trackRect
205
+ onPointermove
293
206
  };
294
207
  }
@@ -1,21 +1,7 @@
1
1
  import { type Ref, type MaybeRef } from 'vue';
2
- import type { Buffered } from '../../types/index.js';
3
2
  export type UsePlayerMediaApiArgs = {
4
3
  id: MaybeRef<string>;
5
4
  mediaRef?: Ref<HTMLMediaElement | null>;
6
5
  };
7
- export declare function usePlayerMediaApi(args: UsePlayerMediaApiArgs): {
8
- currentTime: import("vue").ShallowRef<number, number>;
9
- remainingTime: import("vue").ComputedRef<number>;
10
- duration: import("vue").ShallowRef<number, number>;
11
- seeking: import("vue").ShallowRef<boolean, boolean>;
12
- volume: import("vue").ShallowRef<number, number>;
13
- rate: import("vue").ShallowRef<number, number>;
14
- waiting: import("vue").ShallowRef<boolean, boolean>;
15
- ended: import("vue").ShallowRef<boolean, boolean>;
16
- playing: import("vue").ShallowRef<boolean, boolean>;
17
- stalled: import("vue").ShallowRef<boolean, boolean>;
18
- buffered: Ref<[number, number][], Buffered | [number, number][]>;
19
- muted: import("vue").ShallowRef<boolean, boolean>;
20
- };
6
+ export declare function usePlayerMediaApi(args: UsePlayerMediaApiArgs): void;
21
7
  export type UsePlayerMediaApiReturn = ReturnType<typeof usePlayerMediaApi>;