@maas/vue-equipment 0.24.4 → 0.24.6
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 +1 -1
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +29 -8
- package/dist/plugins/MagicDrawer/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicDrawer/src/utils/defaultOptions.mjs +2 -1
- package/dist/plugins/MagicPlayer/index.d.ts +3 -1
- package/dist/plugins/MagicPlayer/index.mjs +3 -2
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayer.vue +1 -1
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue +23 -22
- package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue.d.ts +0 -2
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue +41 -0
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue.d.ts +29 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.d.ts +1 -0
- package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +3 -1
- package/dist/plugins/MagicPlayer/src/composables/usePlayerApi.d.ts +1 -0
- package/dist/utils/index.d.mts +7 -5
- package/dist/utils/index.d.ts +7 -5
- package/dist/utils/index.js +37 -13
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +36 -13
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerCurrentTime.vue +0 -58
- package/dist/plugins/MagicPlayer/src/components/MagicPlayerCurrentTime.vue.d.ts +0 -14
package/dist/nuxt/module.json
CHANGED
package/dist/nuxt/module.mjs
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
:class="[
|
|
13
13
|
toValue(props.class),
|
|
14
14
|
`-${mappedOptions.position}`,
|
|
15
|
-
{ '-dragging': dragging },
|
|
15
|
+
{ '-dragging': dragging, '-disabled': disabled },
|
|
16
16
|
]"
|
|
17
17
|
aria-modal="true"
|
|
18
18
|
>
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
<div
|
|
24
24
|
v-show="innerActive"
|
|
25
25
|
class="magic-drawer__backdrop"
|
|
26
|
-
@click.self="
|
|
26
|
+
@click.self="guardedClose"
|
|
27
27
|
>
|
|
28
28
|
<slot name="backdrop" />
|
|
29
29
|
</div>
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
ref="elRef"
|
|
46
46
|
class="magic-drawer__drag"
|
|
47
47
|
:style="style"
|
|
48
|
-
@pointerdown="
|
|
49
|
-
@click="
|
|
48
|
+
@pointerdown="guardedPointerdown"
|
|
49
|
+
@click="guardedClick"
|
|
50
50
|
>
|
|
51
51
|
<component
|
|
52
52
|
v-if="component"
|
|
53
53
|
v-bind="props"
|
|
54
54
|
:is="component"
|
|
55
|
-
@close="
|
|
55
|
+
@close="guardedClose"
|
|
56
56
|
/>
|
|
57
57
|
<slot v-else />
|
|
58
58
|
<div v-if="hasDragged" class="magic-drawer__overlay" />
|
|
@@ -209,6 +209,15 @@ const contentTransition = computed(() => {
|
|
|
209
209
|
: mappedOptions.transitions?.content
|
|
210
210
|
})
|
|
211
211
|
|
|
212
|
+
// Make sure this is reactive
|
|
213
|
+
const disabled = computed(() => {
|
|
214
|
+
if (props.options.disabled === undefined) {
|
|
215
|
+
return defaultOptions.disabled
|
|
216
|
+
} else {
|
|
217
|
+
return props.options.disabled
|
|
218
|
+
}
|
|
219
|
+
})
|
|
220
|
+
|
|
212
221
|
// Private functions
|
|
213
222
|
function convertToPixels(value: string) {
|
|
214
223
|
const regex = /^(\d*\.?\d+)\s*(rem|px)$/
|
|
@@ -246,8 +255,20 @@ function onClose() {
|
|
|
246
255
|
}
|
|
247
256
|
|
|
248
257
|
// Public functions
|
|
249
|
-
function
|
|
250
|
-
if (
|
|
258
|
+
function guardedPointerdown(event: PointerEvent) {
|
|
259
|
+
if (!disabled.value) {
|
|
260
|
+
onPointerdown(event)
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function guardedClick(event: PointerEvent) {
|
|
265
|
+
if (!disabled.value) {
|
|
266
|
+
onClick(event)
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function guardedClose() {
|
|
271
|
+
if (canClose && !disabled) {
|
|
251
272
|
close()
|
|
252
273
|
}
|
|
253
274
|
}
|
|
@@ -297,5 +318,5 @@ onBeforeUnmount(() => {
|
|
|
297
318
|
</script>
|
|
298
319
|
|
|
299
320
|
<style>
|
|
300
|
-
:root{--magic-drawer-height:75svh;--magic-drawer-width:100%;--magic-drawer-z-index:999;--magic-drawer-justify-content:center;--magic-drawer-align-items:flex-end;--magic-drawer-backdrop-color:rgba(0,0,0,.5);--magic-drawer-backdrop-filter:unset;--magic-drawer-content-overflow-x:hidden;--magic-drawer-content-overflow-y:hidden;--magic-drawer-enter-animation:slide-btt-in 300ms ease;--magic-drawer-leave-animation:slide-btt-out 300ms ease;--magic-drawer-drag-overshoot:4rem;--magic-drawer-padding:0px}.magic-drawer{--magic-drawer-drag-overshoot-x:0px;--magic-drawer-drag-overshoot-y:0px;align-items:var(--magic-drawer-align-items);background:transparent;border:none;color:inherit;display:flex;height:100%;inset:0;justify-content:var(--magic-drawer-justify-content);padding:0;pointer-events:none;position:fixed;width:100%;z-index:var(--magic-drawer-z-index)}.magic-drawer.-bottom{--magic-drawer-drag-overshoot-y:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 0 var(--magic-drawer-drag-overshoot-y) 0}.magic-drawer.-bottom>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-top{--magic-drawer-enter-animation:slide-ttb-in 300ms ease;--magic-drawer-leave-animation:slide-ttb-out 300ms ease;--magic-drawer-align-items:flex-start;--magic-drawer-drag-overshoot-y:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:var(--magic-drawer-drag-overshoot-y) 0 0 0}.magic-drawer.-top>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-right{--magic-drawer-enter-animation:slide-rtl-in 300ms ease;--magic-drawer-leave-animation:slide-rtl-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-end;--magic-drawer-drag-overshoot-x:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 var(--magic-drawer-drag-overshoot-x) 0 0}.magic-drawer.-right>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-left{--magic-drawer-enter-animation:slide-ltr-in 300ms ease;--magic-drawer-leave-animation:slide-ltr-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-start;--magic-drawer-drag-overshoot-x:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:0 0 0 var(--magic-drawer-drag-overshoot-x)}.magic-drawer.-left>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer__wrapper{height:var(--magic-drawer-height);pointer-events:none;transform:translate(var(--magic-drawer-drag-overshoot-x),var(--magic-drawer-drag-overshoot-y));width:var(--magic-drawer-width)}.magic-drawer__content{height:100%;max-height:100%;position:relative;width:100%}.magic-drawer__drag{-webkit-overflow-scrolling:touch;align-items:var(--magic-drawer-align-items);cursor:grab;display:flex;height:100%;justify-content:var(--magic-drawer-justify-content);overflow-x:var(--magic-drawer-content-overflow-x);overflow-y:var(--magic-drawer-content-overflow-y);pointer-events:auto;position:relative;scroll-behavior:smooth;width:100%}dialog.magic-drawer__drag{background:transparent;border:0;margin:0;outline:0;padding:0}dialog.magic-drawer__drag::backdrop{background-color:transparent}.magic-drawer.-dragging .magic-drawer__drag{cursor:grabbing;-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-drawer__drag>*{padding:var(--magic-drawer-padding)}.magic-drawer__overlay{inset:0;position:absolute;z-index:9999}.magic-drawer__backdrop{-webkit-backdrop-filter:var(--magic-drawer-backdrop-filter);backdrop-filter:var(--magic-drawer-backdrop-filter);background-color:var(--magic-drawer-backdrop-color);bottom:0;height:100%;left:0;pointer-events:auto;position:fixed;right:0;top:0;width:100%;z-index:-1}.magic-drawer--content-enter-active{animation:var(--magic-drawer-enter-animation)}.magic-drawer--content-leave-active{animation:var(--magic-drawer-leave-animation)}.magic-drawer--backdrop-enter-active{animation:fade-in .3s ease}.magic-drawer--backdrop-leave-active{animation:fade-out .3s ease}
|
|
321
|
+
:root{--magic-drawer-height:75svh;--magic-drawer-width:100%;--magic-drawer-z-index:999;--magic-drawer-justify-content:center;--magic-drawer-align-items:flex-end;--magic-drawer-backdrop-color:rgba(0,0,0,.5);--magic-drawer-backdrop-filter:unset;--magic-drawer-content-overflow-x:hidden;--magic-drawer-content-overflow-y:hidden;--magic-drawer-enter-animation:slide-btt-in 300ms ease;--magic-drawer-leave-animation:slide-btt-out 300ms ease;--magic-drawer-drag-overshoot:4rem;--magic-drawer-padding:0px}.magic-drawer{--magic-drawer-drag-overshoot-x:0px;--magic-drawer-drag-overshoot-y:0px;align-items:var(--magic-drawer-align-items);background:transparent;border:none;color:inherit;display:flex;height:100%;inset:0;justify-content:var(--magic-drawer-justify-content);padding:0;pointer-events:none;position:fixed;width:100%;z-index:var(--magic-drawer-z-index)}.magic-drawer.-bottom{--magic-drawer-drag-overshoot-y:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 0 var(--magic-drawer-drag-overshoot-y) 0}.magic-drawer.-bottom>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-top{--magic-drawer-enter-animation:slide-ttb-in 300ms ease;--magic-drawer-leave-animation:slide-ttb-out 300ms ease;--magic-drawer-align-items:flex-start;--magic-drawer-drag-overshoot-y:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:var(--magic-drawer-drag-overshoot-y) 0 0 0}.magic-drawer.-top>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-right{--magic-drawer-enter-animation:slide-rtl-in 300ms ease;--magic-drawer-leave-animation:slide-rtl-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-end;--magic-drawer-drag-overshoot-x:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 var(--magic-drawer-drag-overshoot-x) 0 0}.magic-drawer.-right>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-left{--magic-drawer-enter-animation:slide-ltr-in 300ms ease;--magic-drawer-leave-animation:slide-ltr-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-start;--magic-drawer-drag-overshoot-x:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:0 0 0 var(--magic-drawer-drag-overshoot-x)}.magic-drawer.-left>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer__wrapper{height:var(--magic-drawer-height);pointer-events:none;transform:translate(var(--magic-drawer-drag-overshoot-x),var(--magic-drawer-drag-overshoot-y));width:var(--magic-drawer-width)}.magic-drawer__content{height:100%;max-height:100%;position:relative;width:100%}.magic-drawer__drag{-webkit-overflow-scrolling:touch;align-items:var(--magic-drawer-align-items);cursor:grab;display:flex;height:100%;justify-content:var(--magic-drawer-justify-content);overflow-x:var(--magic-drawer-content-overflow-x);overflow-y:var(--magic-drawer-content-overflow-y);pointer-events:auto;position:relative;scroll-behavior:smooth;width:100%}dialog.magic-drawer__drag{background:transparent;border:0;margin:0;outline:0;padding:0}dialog.magic-drawer__drag::backdrop{background-color:transparent}.magic-drawer.-dragging .magic-drawer__drag{cursor:grabbing;-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-drawer.-disabled .magic-drawer__drag{cursor:auto}.magic-drawer__drag>*{padding:var(--magic-drawer-padding)}.magic-drawer__overlay{inset:0;position:absolute;z-index:9999}.magic-drawer__backdrop{-webkit-backdrop-filter:var(--magic-drawer-backdrop-filter);backdrop-filter:var(--magic-drawer-backdrop-filter);background-color:var(--magic-drawer-backdrop-color);bottom:0;height:100%;left:0;pointer-events:auto;position:fixed;right:0;top:0;width:100%;z-index:-1}.magic-drawer.-disabled .magic-drawer__backdrop{pointer-events:none}.magic-drawer--content-enter-active{animation:var(--magic-drawer-enter-animation)}.magic-drawer--content-leave-active{animation:var(--magic-drawer-leave-animation)}.magic-drawer--backdrop-enter-active{animation:fade-in .3s ease}.magic-drawer--backdrop-leave-active{animation:fade-out .3s ease}
|
|
301
322
|
</style>
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Plugin } from 'vue';
|
|
2
2
|
import MagicPlayer from './src/components/MagicPlayer.vue.js';
|
|
3
3
|
import MagicPlayerControls from './src/components/MagicPlayerControls.vue.js';
|
|
4
|
+
import MagicPlayerDisplayTime from './src/components/MagicPlayerDisplayTime.vue.js';
|
|
4
5
|
import MagicPlayerMuxPopover from './src/components/MagicPlayerMuxPopover.vue.js';
|
|
5
6
|
import MagicPlayerOverlay from './src/components/MagicPlayerOverlay.vue.js';
|
|
6
7
|
import MagicPlayerPoster from './src/components/MagicPlayerPoster.vue.js';
|
|
7
8
|
import MagicPlayerTimeline from './src/components/MagicPlayerTimeline.vue.js';
|
|
8
9
|
import { usePlayerApi } from './src/composables/usePlayerApi.js';
|
|
9
10
|
declare const MagicPlayerPlugin: Plugin;
|
|
10
|
-
export { MagicPlayerPlugin, MagicPlayer, MagicPlayerControls, MagicPlayerMuxPopover, MagicPlayerPoster, MagicPlayerOverlay, MagicPlayerTimeline, usePlayerApi, };
|
|
11
|
+
export { MagicPlayerPlugin, MagicPlayer, MagicPlayerControls, MagicPlayerDisplayTime, MagicPlayerMuxPopover, MagicPlayerPoster, MagicPlayerOverlay, MagicPlayerTimeline, usePlayerApi, };
|
|
12
|
+
export type * from './src/types/index';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import MagicAudioPlayer from "./src/components/MagicAudioPlayer.vue";
|
|
2
2
|
import MagicPlayer from "./src/components/MagicPlayer.vue";
|
|
3
3
|
import MagicPlayerControls from "./src/components/MagicPlayerControls.vue";
|
|
4
|
-
import
|
|
4
|
+
import MagicPlayerDisplayTime from "./src/components/MagicPlayerDisplayTime.vue";
|
|
5
5
|
import MagicPlayerMuxPopover from "./src/components/MagicPlayerMuxPopover.vue";
|
|
6
6
|
import MagicPlayerOverlay from "./src/components/MagicPlayerOverlay.vue";
|
|
7
7
|
import MagicPlayerPoster from "./src/components/MagicPlayerPoster.vue";
|
|
@@ -12,7 +12,7 @@ const MagicPlayerPlugin = {
|
|
|
12
12
|
app.component("MagicAudioPlayer", MagicAudioPlayer);
|
|
13
13
|
app.component("MagicPlayer", MagicPlayer);
|
|
14
14
|
app.component("MagicPlayerControls", MagicPlayerControls);
|
|
15
|
-
app.component("
|
|
15
|
+
app.component("MagicPlayerDisplayTime", MagicPlayerDisplayTime);
|
|
16
16
|
app.component("MagicPlayerMuxPopover", MagicPlayerMuxPopover);
|
|
17
17
|
app.component("MagicPlayerOverlay", MagicPlayerOverlay);
|
|
18
18
|
app.component("MagicPlayerPoster", MagicPlayerPoster);
|
|
@@ -23,6 +23,7 @@ export {
|
|
|
23
23
|
MagicPlayerPlugin,
|
|
24
24
|
MagicPlayer,
|
|
25
25
|
MagicPlayerControls,
|
|
26
|
+
MagicPlayerDisplayTime,
|
|
26
27
|
MagicPlayerMuxPopover,
|
|
27
28
|
MagicPlayerPoster,
|
|
28
29
|
MagicPlayerOverlay,
|
|
@@ -81,5 +81,5 @@ onBeforeUnmount(() => {
|
|
|
81
81
|
</script>
|
|
82
82
|
|
|
83
83
|
<style>
|
|
84
|
-
:root{--magic-audio-player-color:#fff;--magic-audio-player-background:rgba(32,32,32,.8);--magic-audio-player-background-slot:hsla(0,0%,98%,.15);--magic-audio-player-backdrop-filter:blur(80px);--magic-audio-player-border-radius:1.25rem;--magic-audio-player-padding:0.25rem;--magic-audio-player-gap:0.25rem;--magic-audio-player-slot-padding:0.75rem 1rem;--magic-audio-player-slot-radius:calc(var(--magic-audio-player-border-radius) - var(--magic-audio-player-padding));--magic-audio-player-slot-background:rgba(32,32,32,.8)}.magic-audio-player{-webkit-backdrop-filter:var(--magic-audio-player-backdrop-filter);backdrop-filter:var(--magic-audio-player-backdrop-filter);background:var(--magic-audio-player-background);border-radius:var(--magic-audio-player-border-radius);color:var(--magic-audio-player-color);padding:var(--magic-audio-player-padding);position:relative;width:100%}.magic-audio-player.-slot{background:var(--magic-audio-player-background-slot)}.magic-audio-player__container{display:flex;flex-direction:column;gap:var(--magic-audio-player-gap);height:100%;position:relative;width:100%}.magic-audio-player__slot{background-color:var(--magic-audio-player-background);border-radius:var(--magic-audio-player-slot-radius);color:inherit;padding:var(--magic-audio-player-slot-padding)}.magic-audio-player__audio{width:100%}
|
|
84
|
+
:root{--magic-audio-player-color:#fff;--magic-audio-player-background:rgba(32,32,32,.8);--magic-audio-player-background-slot:hsla(0,0%,98%,.15);--magic-audio-player-backdrop-filter:blur(80px);--magic-audio-player-border-radius:1.25rem;--magic-audio-player-padding:0.25rem;--magic-audio-player-gap:0.25rem;--magic-audio-player-slot-padding:0.75rem 1rem;--magic-audio-player-slot-radius:calc(var(--magic-audio-player-border-radius) - var(--magic-audio-player-padding));--magic-audio-player-slot-background:rgba(32,32,32,.8)}.magic-audio-player{-webkit-backdrop-filter:var(--magic-audio-player-backdrop-filter);backdrop-filter:var(--magic-audio-player-backdrop-filter);background:var(--magic-audio-player-background);border-radius:var(--magic-audio-player-border-radius);color:var(--magic-audio-player-color);container-type:inline-size;padding:var(--magic-audio-player-padding);position:relative;width:100%}.magic-audio-player.-slot{background:var(--magic-audio-player-background-slot)}.magic-audio-player__container{display:flex;flex-direction:column;gap:var(--magic-audio-player-gap);height:100%;position:relative;width:100%}.magic-audio-player__slot{background-color:var(--magic-audio-player-background);border-radius:var(--magic-audio-player-slot-radius);color:inherit;padding:var(--magic-audio-player-slot-padding)}.magic-audio-player__audio{width:100%}
|
|
85
85
|
</style>
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
>
|
|
16
16
|
<div class="magic-audio-player-controls__bar">
|
|
17
17
|
<div class="magic-audio-player-controls__bar--inner" ref="barRef">
|
|
18
|
-
<div
|
|
18
|
+
<div
|
|
19
|
+
class="magic-audio-player-controls__item -shrink-0"
|
|
20
|
+
data-slot="play-toggle"
|
|
21
|
+
>
|
|
19
22
|
<button v-if="!playing" @click="play">
|
|
20
23
|
<slot name="playIcon">
|
|
21
24
|
<icon-play />
|
|
@@ -27,25 +30,25 @@
|
|
|
27
30
|
</slot>
|
|
28
31
|
</button>
|
|
29
32
|
</div>
|
|
30
|
-
<div
|
|
31
|
-
|
|
33
|
+
<div
|
|
34
|
+
class="magic-audio-player-controls__item -shrink-0"
|
|
35
|
+
data-slot="display-time-current"
|
|
36
|
+
>
|
|
37
|
+
<magic-player-display-time :id="id" type="current" />
|
|
32
38
|
</div>
|
|
33
|
-
<div
|
|
39
|
+
<div
|
|
40
|
+
class="magic-audio-player-controls__item -grow"
|
|
41
|
+
data-slot="timeline"
|
|
42
|
+
>
|
|
34
43
|
<div class="magic-audio-player-controls__timeline" ref="trackRef">
|
|
35
44
|
<magic-player-timeline :id="id" />
|
|
36
45
|
</div>
|
|
37
46
|
</div>
|
|
38
|
-
<div
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
</button>
|
|
44
|
-
<button v-else @click="mute">
|
|
45
|
-
<slot name="volumeOnIcon">
|
|
46
|
-
<icon-volume-on />
|
|
47
|
-
</slot>
|
|
48
|
-
</button>
|
|
47
|
+
<div
|
|
48
|
+
class="magic-audio-player-controls__item -shrink-0"
|
|
49
|
+
data-slot="display-time-duration"
|
|
50
|
+
>
|
|
51
|
+
<magic-player-display-time :id="id" type="duration" />
|
|
49
52
|
</div>
|
|
50
53
|
</div>
|
|
51
54
|
</div>
|
|
@@ -55,13 +58,11 @@
|
|
|
55
58
|
<script setup lang="ts">
|
|
56
59
|
import { ref } from 'vue'
|
|
57
60
|
import { useIdle } from '@vueuse/core'
|
|
58
|
-
import IconPlay from './icons/Play.vue'
|
|
59
|
-
import IconPause from './icons/Pause.vue'
|
|
60
|
-
import IconVolumeOn from './icons/VolumeOn.vue'
|
|
61
|
-
import IconVolumeOff from './icons/VolumeOff.vue'
|
|
62
61
|
import { usePlayerMediaApi } from '../composables/private/usePlayerMediaApi'
|
|
63
62
|
import { usePlayerAudioApi } from '../composables/private/usePlayerAudioApi'
|
|
64
63
|
import { usePlayerControlsApi } from '../composables/private/usePlayerControlsApi'
|
|
64
|
+
import IconPlay from './icons/Play.vue'
|
|
65
|
+
import IconPause from './icons/Pause.vue'
|
|
65
66
|
|
|
66
67
|
interface Props {
|
|
67
68
|
id: string
|
|
@@ -72,11 +73,11 @@ const props = defineProps<Props>()
|
|
|
72
73
|
const barRef = ref<HTMLDivElement | undefined>(undefined)
|
|
73
74
|
const trackRef = ref<HTMLDivElement | undefined>(undefined)
|
|
74
75
|
|
|
75
|
-
const { playing, waiting
|
|
76
|
+
const { playing, waiting } = usePlayerMediaApi({
|
|
76
77
|
id: props.id,
|
|
77
78
|
})
|
|
78
79
|
|
|
79
|
-
const { play, pause,
|
|
80
|
+
const { play, pause, touched, mouseEntered } = usePlayerAudioApi({
|
|
80
81
|
id: props.id,
|
|
81
82
|
})
|
|
82
83
|
|
|
@@ -90,5 +91,5 @@ const { idle } = useIdle(3000)
|
|
|
90
91
|
</script>
|
|
91
92
|
|
|
92
93
|
<style>
|
|
93
|
-
:root{--magic-audio-player-controls-height:3rem;--magic-audio-player-controls-padding:0rem;--magic-audio-player-controls-color:inherit;--magic-audio-player-controls-icon-width:1.25rem;--magic-audio-player-controls-button-width:4rem}.magic-audio-player-controls{pointer-events:none;width:100%}.magic-audio-player-controls__bar{align-items:flex-start;display:flex;flex-direction:column;margin:0 auto;pointer-events:auto;width:100%}.magic-audio-player-controls__bar--inner{align-items:center;box-sizing:border-box;color:var(--magic-audio-player-controls-color);display:flex;height:var(--magic-audio-player-controls-height);padding:0 var(--magic-audio-player-controls-padding);width:100%}.magic-audio-player-controls__item{align-items:center;display:inline-flex;-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-audio-player-controls__item.-shrink-0{flex-shrink:0}.magic-audio-player-controls__item.-grow{flex-grow:1}.magic-audio-player-controls__item button{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;border-radius:0;color:inherit;cursor:pointer;display:flex;height:var(--magic-audio-player-controls-height);justify-content:center;outline:none;padding:0;width:var(--magic-audio-player-controls-button-width)}.magic-audio-player-controls__item button svg{display:block;height:auto;width:var(--magic-audio-player-controls-icon-width)}.magic-audio-player-controls__timeline{width:100%}
|
|
94
|
+
:root{--magic-audio-player-controls-height:3rem;--magic-audio-player-controls-padding:0rem;--magic-audio-player-controls-color:inherit;--magic-audio-player-controls-icon-width:1.25rem;--magic-audio-player-controls-button-width:4rem}.magic-audio-player-controls{pointer-events:none;width:100%}.magic-audio-player-controls__bar{align-items:flex-start;display:flex;flex-direction:column;margin:0 auto;pointer-events:auto;width:100%}.magic-audio-player-controls__bar--inner{align-items:center;box-sizing:border-box;color:var(--magic-audio-player-controls-color);display:flex;height:var(--magic-audio-player-controls-height);padding:0 var(--magic-audio-player-controls-padding);width:100%}.magic-audio-player-controls__item{align-items:center;display:inline-flex;-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-audio-player-controls__item.-shrink-0{flex-shrink:0}.magic-audio-player-controls__item.-grow{flex-grow:1}.magic-audio-player-controls__item button{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;border-radius:0;color:inherit;cursor:pointer;display:flex;height:var(--magic-audio-player-controls-height);justify-content:center;outline:none;padding:0;width:var(--magic-audio-player-controls-button-width)}.magic-audio-player-controls__item button svg{display:block;height:auto;width:var(--magic-audio-player-controls-icon-width)}.magic-audio-player-controls__timeline{width:100%}@container (max-width: 480px){.magic-audio-player-controls__item[data-slot=display-time-current]{display:none}}@container (max-width: 320px ){.magic-audio-player-controls__item[data-slot=display-time-duration]{display:none}.magic-audio-player-controls__item[data-slot=timeline]{padding-right:1rem}}@container (max-width: 240px){.magic-audio-player-controls__item[data-slot=timeline]{display:none}.magic-audio-player-controls__bar--inner{justify-content:center}}
|
|
94
95
|
</style>
|
|
@@ -4,8 +4,6 @@ interface Props {
|
|
|
4
4
|
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<Props>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<Props>>>, {}, {}>, {
|
|
5
5
|
playIcon?(_: {}): any;
|
|
6
6
|
pauseIcon?(_: {}): any;
|
|
7
|
-
volumeOffIcon?(_: {}): any;
|
|
8
|
-
volumeOnIcon?(_: {}): any;
|
|
9
7
|
}>;
|
|
10
8
|
export default _default;
|
|
11
9
|
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="magic-player-time-display">
|
|
3
|
+
{{ stringifiedTime }}
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { computed } from 'vue'
|
|
9
|
+
import { usePlayerMediaApi } from '../composables/private/usePlayerMediaApi'
|
|
10
|
+
import { formatTime } from '@maas/vue-equipment/utils'
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
id: string
|
|
14
|
+
type: 'current' | 'remaining' | 'duration'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
18
|
+
type: 'current',
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
const { currentTime, remainingTime, duration } = usePlayerMediaApi({
|
|
22
|
+
id: props.id,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
const stringifiedTime = computed(() => {
|
|
26
|
+
switch (props.type) {
|
|
27
|
+
case 'current':
|
|
28
|
+
return formatTime(currentTime.value, currentTime.value)
|
|
29
|
+
case 'remaining':
|
|
30
|
+
return `-${formatTime(remainingTime.value, remainingTime.value)}`
|
|
31
|
+
case 'duration':
|
|
32
|
+
return formatTime(duration.value, duration.value)
|
|
33
|
+
default:
|
|
34
|
+
return ''
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<style>
|
|
40
|
+
:root{--magic-player-time-display-font-size:0.875rem;--magic-player-time-display-color:inherit;--magic-player-time-display-width:4rem;--magic-player-time-display-justify-content:center;--magic-player-time-display-font-variant-numeric:tabular-nums}.magic-player-time-display{align-items:center;color:var(--magic-player-time-display-color);display:flex;font-size:var(--magic-player-time-display-font-size);font-variant-numeric:var(--magic-player-time-display-font-variant-numeric);height:100%;justify-content:var(--magic-player-time-display-justify-content);width:var(--magic-player-time-display-width)}
|
|
41
|
+
</style>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
id: string;
|
|
3
|
+
type: 'current' | 'remaining' | 'duration';
|
|
4
|
+
}
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
|
|
6
|
+
type: string;
|
|
7
|
+
}>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
|
|
8
|
+
type: string;
|
|
9
|
+
}>>>, {
|
|
10
|
+
type: "duration" | "current" | "remaining";
|
|
11
|
+
}, {}>;
|
|
12
|
+
export default _default;
|
|
13
|
+
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
14
|
+
type __VLS_TypePropsToRuntimeProps<T> = {
|
|
15
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? {
|
|
16
|
+
type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
|
|
17
|
+
} : {
|
|
18
|
+
type: import('vue').PropType<T[K]>;
|
|
19
|
+
required: true;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
type __VLS_WithDefaults<P, D> = {
|
|
23
|
+
[K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
|
|
24
|
+
default: D[K];
|
|
25
|
+
}> : P[K];
|
|
26
|
+
};
|
|
27
|
+
type __VLS_Prettify<T> = {
|
|
28
|
+
[K in keyof T]: T[K];
|
|
29
|
+
} & {};
|
|
@@ -5,6 +5,7 @@ export type UsePlayerMediaApiArgs = {
|
|
|
5
5
|
};
|
|
6
6
|
export declare function usePlayerMediaApi(args: UsePlayerMediaApiArgs): {
|
|
7
7
|
currentTime: import("vue").Ref<number>;
|
|
8
|
+
remainingTime: import("vue").ComputedRef<number>;
|
|
8
9
|
duration: import("vue").Ref<number>;
|
|
9
10
|
seeking: import("vue").Ref<boolean>;
|
|
10
11
|
volume: import("vue").Ref<number>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref, watch, unref, toValue } from "vue";
|
|
1
|
+
import { ref, computed, watch, unref, toValue } from "vue";
|
|
2
2
|
import { useEventListener, watchIgnorable } from "@vueuse/core";
|
|
3
3
|
import { usePlayerStateEmitter } from "./usePlayerStateEmitter.mjs";
|
|
4
4
|
export function usePlayerMediaApi(args) {
|
|
@@ -14,6 +14,7 @@ export function usePlayerMediaApi(args) {
|
|
|
14
14
|
const buffered = ref([]);
|
|
15
15
|
const muted = ref(false);
|
|
16
16
|
const { mediaRef } = args;
|
|
17
|
+
const remainingTime = computed(() => duration.value - currentTime.value);
|
|
17
18
|
function timeRangeToArray(timeRanges) {
|
|
18
19
|
let ranges = [];
|
|
19
20
|
for (let i = 0; i < timeRanges.length; ++i)
|
|
@@ -249,6 +250,7 @@ export function usePlayerMediaApi(args) {
|
|
|
249
250
|
});
|
|
250
251
|
return {
|
|
251
252
|
currentTime,
|
|
253
|
+
remainingTime,
|
|
252
254
|
duration,
|
|
253
255
|
seeking,
|
|
254
256
|
volume,
|
|
@@ -5,6 +5,7 @@ type usePlayerApiArgs = {
|
|
|
5
5
|
export declare function usePlayerApi(args: usePlayerApiArgs): {
|
|
6
6
|
mediaApi: {
|
|
7
7
|
currentTime: import("vue").Ref<number>;
|
|
8
|
+
remainingTime: import("vue").ComputedRef<number>;
|
|
8
9
|
duration: import("vue").Ref<number>;
|
|
9
10
|
seeking: import("vue").Ref<boolean>;
|
|
10
11
|
volume: import("vue").Ref<number>;
|
package/dist/utils/index.d.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
declare function clampValue(value: number, min: number, max: number): number;
|
|
2
2
|
|
|
3
|
+
declare function formatTime(seconds: number, guide: number): string;
|
|
4
|
+
|
|
3
5
|
type InterpolateArgs = {
|
|
4
6
|
from: number;
|
|
5
7
|
to: number;
|
|
@@ -16,10 +18,6 @@ declare function mapValue(value: number, inMin: number, inMax: number, outMin: n
|
|
|
16
18
|
|
|
17
19
|
declare function matchClass(el: Element, regex: RegExp): boolean;
|
|
18
20
|
|
|
19
|
-
declare function uuid(): string;
|
|
20
|
-
|
|
21
|
-
declare function uniq<T extends any[]>(a: T): any[];
|
|
22
|
-
|
|
23
21
|
interface SlugifyOptions {
|
|
24
22
|
separator?: string;
|
|
25
23
|
trim?: boolean;
|
|
@@ -29,6 +27,10 @@ interface SlugifyOptions {
|
|
|
29
27
|
}
|
|
30
28
|
declare function slugify(string: string, options?: SlugifyOptions): string;
|
|
31
29
|
|
|
30
|
+
declare function uuid(): string;
|
|
31
|
+
|
|
32
|
+
declare function uniq<T extends any[]>(a: T): any[];
|
|
33
|
+
|
|
32
34
|
type PickPartial<T, K extends keyof T> = {
|
|
33
35
|
[P in K]: Partial<T[P]>;
|
|
34
36
|
};
|
|
@@ -41,4 +43,4 @@ type RequireAllNested<T> = {
|
|
|
41
43
|
[P in keyof T]-?: RequireAllNested<T[P]>;
|
|
42
44
|
};
|
|
43
45
|
|
|
44
|
-
export { type InterpolateArgs, type PickPartial, type RequireAll, type RequireAllNested, type SlugifyOptions, clampValue, interpolate, isIOS, mapValue, matchClass, slugify, uniq, uuid };
|
|
46
|
+
export { type InterpolateArgs, type PickPartial, type RequireAll, type RequireAllNested, type SlugifyOptions, clampValue, formatTime, interpolate, isIOS, mapValue, matchClass, slugify, uniq, uuid };
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
declare function clampValue(value: number, min: number, max: number): number;
|
|
2
2
|
|
|
3
|
+
declare function formatTime(seconds: number, guide: number): string;
|
|
4
|
+
|
|
3
5
|
type InterpolateArgs = {
|
|
4
6
|
from: number;
|
|
5
7
|
to: number;
|
|
@@ -16,10 +18,6 @@ declare function mapValue(value: number, inMin: number, inMax: number, outMin: n
|
|
|
16
18
|
|
|
17
19
|
declare function matchClass(el: Element, regex: RegExp): boolean;
|
|
18
20
|
|
|
19
|
-
declare function uuid(): string;
|
|
20
|
-
|
|
21
|
-
declare function uniq<T extends any[]>(a: T): any[];
|
|
22
|
-
|
|
23
21
|
interface SlugifyOptions {
|
|
24
22
|
separator?: string;
|
|
25
23
|
trim?: boolean;
|
|
@@ -29,6 +27,10 @@ interface SlugifyOptions {
|
|
|
29
27
|
}
|
|
30
28
|
declare function slugify(string: string, options?: SlugifyOptions): string;
|
|
31
29
|
|
|
30
|
+
declare function uuid(): string;
|
|
31
|
+
|
|
32
|
+
declare function uniq<T extends any[]>(a: T): any[];
|
|
33
|
+
|
|
32
34
|
type PickPartial<T, K extends keyof T> = {
|
|
33
35
|
[P in K]: Partial<T[P]>;
|
|
34
36
|
};
|
|
@@ -41,4 +43,4 @@ type RequireAllNested<T> = {
|
|
|
41
43
|
[P in keyof T]-?: RequireAllNested<T[P]>;
|
|
42
44
|
};
|
|
43
45
|
|
|
44
|
-
export { type InterpolateArgs, type PickPartial, type RequireAll, type RequireAllNested, type SlugifyOptions, clampValue, interpolate, isIOS, mapValue, matchClass, slugify, uniq, uuid };
|
|
46
|
+
export { type InterpolateArgs, type PickPartial, type RequireAll, type RequireAllNested, type SlugifyOptions, clampValue, formatTime, interpolate, isIOS, mapValue, matchClass, slugify, uniq, uuid };
|
package/dist/utils/index.js
CHANGED
|
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var utils_exports = {};
|
|
22
22
|
__export(utils_exports, {
|
|
23
23
|
clampValue: () => clampValue,
|
|
24
|
+
formatTime: () => formatTime,
|
|
24
25
|
interpolate: () => interpolate,
|
|
25
26
|
isIOS: () => isIOS,
|
|
26
27
|
mapValue: () => mapValue,
|
|
@@ -36,6 +37,28 @@ function clampValue(value, min, max) {
|
|
|
36
37
|
return value <= min ? min : value >= max ? max : value;
|
|
37
38
|
}
|
|
38
39
|
|
|
40
|
+
// src/functions/toNumber.ts
|
|
41
|
+
function toNumber(value) {
|
|
42
|
+
return typeof value === "string" ? parseFloat(value) : Number(value);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/functions/formatTime.ts
|
|
46
|
+
function formatTime(seconds, guide) {
|
|
47
|
+
seconds = seconds < 0 ? 0 : seconds;
|
|
48
|
+
let s = Math.floor(seconds % 60);
|
|
49
|
+
let m = Math.floor(seconds / 60 % 60);
|
|
50
|
+
let h = Math.floor(seconds / 3600);
|
|
51
|
+
const gm = Math.floor(guide / 60 % 60);
|
|
52
|
+
const gh = Math.floor(guide / 3600);
|
|
53
|
+
if (isNaN(seconds) || seconds === Infinity) {
|
|
54
|
+
h = m = s = "-";
|
|
55
|
+
}
|
|
56
|
+
h = toNumber(h) > 0 || gh > 0 ? h + ":" : "";
|
|
57
|
+
m = ((h || gm >= 10) && toNumber(m) < 10 ? "0" + m : m) + ":";
|
|
58
|
+
s = toNumber(s) < 10 ? "0" + s : s;
|
|
59
|
+
return h + m + s;
|
|
60
|
+
}
|
|
61
|
+
|
|
39
62
|
// src/functions/interpolate.ts
|
|
40
63
|
function interpolate(args) {
|
|
41
64
|
const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args;
|
|
@@ -71,19 +94,6 @@ function matchClass(el, regex) {
|
|
|
71
94
|
return Array.from(el.classList).some((className) => regex.test(className));
|
|
72
95
|
}
|
|
73
96
|
|
|
74
|
-
// src/functions/uuid.ts
|
|
75
|
-
function uuid() {
|
|
76
|
-
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").reduce(
|
|
77
|
-
(c, i) => c + (i === "x" ? Math.floor(Math.random() * 15).toString(16) : i === "y" ? Math.floor(Math.random() * 4 + 8).toString(16) : i),
|
|
78
|
-
""
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// src/functions/uniq.ts
|
|
83
|
-
function uniq(a) {
|
|
84
|
-
return Array.from(new Set(a));
|
|
85
|
-
}
|
|
86
|
-
|
|
87
97
|
// src/functions/slugify.ts
|
|
88
98
|
var defaultOptions = {
|
|
89
99
|
separator: "-",
|
|
@@ -120,9 +130,23 @@ function slugify(string, options) {
|
|
|
120
130
|
}
|
|
121
131
|
return slug;
|
|
122
132
|
}
|
|
133
|
+
|
|
134
|
+
// src/functions/uuid.ts
|
|
135
|
+
function uuid() {
|
|
136
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").reduce(
|
|
137
|
+
(c, i) => c + (i === "x" ? Math.floor(Math.random() * 15).toString(16) : i === "y" ? Math.floor(Math.random() * 4 + 8).toString(16) : i),
|
|
138
|
+
""
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// src/functions/uniq.ts
|
|
143
|
+
function uniq(a) {
|
|
144
|
+
return Array.from(new Set(a));
|
|
145
|
+
}
|
|
123
146
|
// Annotate the CommonJS export names for ESM import in node:
|
|
124
147
|
0 && (module.exports = {
|
|
125
148
|
clampValue,
|
|
149
|
+
formatTime,
|
|
126
150
|
interpolate,
|
|
127
151
|
isIOS,
|
|
128
152
|
mapValue,
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/
|
|
1
|
+
{"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/toNumber.ts","../../packages/utils/src/functions/formatTime.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/slugify.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts"],"sourcesContent":["export * from './src/functions/clampValue'\nexport * from './src/functions/formatTime'\nexport * from './src/functions/interpolate'\nexport * from './src/functions/isIOS'\nexport * from './src/functions/mapValue'\nexport * from './src/functions/matchClass'\nexport * from './src/functions/slugify'\nexport * from './src/functions/uuid'\nexport * from './src/functions/uniq'\n\nexport type * from './src/types'\n","export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\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 interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args\n\n let startTime: 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 requestAnimationFrame(animate)\n }\n }\n\n requestAnimationFrame(animate)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\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","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","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n"],"mappings":"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","names":[]}
|
package/dist/utils/index.mjs
CHANGED
|
@@ -3,6 +3,28 @@ function clampValue(value, min, max) {
|
|
|
3
3
|
return value <= min ? min : value >= max ? max : value;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
+
// src/functions/toNumber.ts
|
|
7
|
+
function toNumber(value) {
|
|
8
|
+
return typeof value === "string" ? parseFloat(value) : Number(value);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// src/functions/formatTime.ts
|
|
12
|
+
function formatTime(seconds, guide) {
|
|
13
|
+
seconds = seconds < 0 ? 0 : seconds;
|
|
14
|
+
let s = Math.floor(seconds % 60);
|
|
15
|
+
let m = Math.floor(seconds / 60 % 60);
|
|
16
|
+
let h = Math.floor(seconds / 3600);
|
|
17
|
+
const gm = Math.floor(guide / 60 % 60);
|
|
18
|
+
const gh = Math.floor(guide / 3600);
|
|
19
|
+
if (isNaN(seconds) || seconds === Infinity) {
|
|
20
|
+
h = m = s = "-";
|
|
21
|
+
}
|
|
22
|
+
h = toNumber(h) > 0 || gh > 0 ? h + ":" : "";
|
|
23
|
+
m = ((h || gm >= 10) && toNumber(m) < 10 ? "0" + m : m) + ":";
|
|
24
|
+
s = toNumber(s) < 10 ? "0" + s : s;
|
|
25
|
+
return h + m + s;
|
|
26
|
+
}
|
|
27
|
+
|
|
6
28
|
// src/functions/interpolate.ts
|
|
7
29
|
function interpolate(args) {
|
|
8
30
|
const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args;
|
|
@@ -38,19 +60,6 @@ function matchClass(el, regex) {
|
|
|
38
60
|
return Array.from(el.classList).some((className) => regex.test(className));
|
|
39
61
|
}
|
|
40
62
|
|
|
41
|
-
// src/functions/uuid.ts
|
|
42
|
-
function uuid() {
|
|
43
|
-
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").reduce(
|
|
44
|
-
(c, i) => c + (i === "x" ? Math.floor(Math.random() * 15).toString(16) : i === "y" ? Math.floor(Math.random() * 4 + 8).toString(16) : i),
|
|
45
|
-
""
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// src/functions/uniq.ts
|
|
50
|
-
function uniq(a) {
|
|
51
|
-
return Array.from(new Set(a));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
63
|
// src/functions/slugify.ts
|
|
55
64
|
var defaultOptions = {
|
|
56
65
|
separator: "-",
|
|
@@ -87,8 +96,22 @@ function slugify(string, options) {
|
|
|
87
96
|
}
|
|
88
97
|
return slug;
|
|
89
98
|
}
|
|
99
|
+
|
|
100
|
+
// src/functions/uuid.ts
|
|
101
|
+
function uuid() {
|
|
102
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").reduce(
|
|
103
|
+
(c, i) => c + (i === "x" ? Math.floor(Math.random() * 15).toString(16) : i === "y" ? Math.floor(Math.random() * 4 + 8).toString(16) : i),
|
|
104
|
+
""
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// src/functions/uniq.ts
|
|
109
|
+
function uniq(a) {
|
|
110
|
+
return Array.from(new Set(a));
|
|
111
|
+
}
|
|
90
112
|
export {
|
|
91
113
|
clampValue,
|
|
114
|
+
formatTime,
|
|
92
115
|
interpolate,
|
|
93
116
|
isIOS,
|
|
94
117
|
mapValue,
|
package/dist/utils/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/
|
|
1
|
+
{"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/toNumber.ts","../../packages/utils/src/functions/formatTime.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/matchClass.ts","../../packages/utils/src/functions/slugify.ts","../../packages/utils/src/functions/uuid.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","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 interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const { from, to, duration, callback, easing = (t) => t * (2 - t) } = args\n\n let startTime: 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 requestAnimationFrame(animate)\n }\n }\n\n requestAnimationFrame(animate)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\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","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","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(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": "A magic collection of Vue composables, plugins, components and directives",
|
|
4
|
-
"version": "0.24.
|
|
4
|
+
"version": "0.24.6",
|
|
5
5
|
"author": "Robin Scholz <https://github.com/robinscholz>, Christoph Jeworutzki <https://github.com/ChristophJeworutzki>",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@antfu/ni": "^0.21.12",
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="magic-player-current-time">
|
|
3
|
-
{{ stringifiedTime }}
|
|
4
|
-
</div>
|
|
5
|
-
</template>
|
|
6
|
-
|
|
7
|
-
<script setup lang="ts">
|
|
8
|
-
import { computed } from 'vue'
|
|
9
|
-
import { usePlayerMediaApi } from '../composables/private/usePlayerMediaApi'
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
id: string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const props = defineProps<Props>()
|
|
16
|
-
|
|
17
|
-
const { currentTime } = usePlayerMediaApi({
|
|
18
|
-
id: props.id,
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
function toNumber(value: string | number): number {
|
|
22
|
-
return typeof value === 'string' ? parseFloat(value) : Number(value)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const formatTime = function (seconds: number, guide: number) {
|
|
26
|
-
seconds = seconds < 0 ? 0 : seconds
|
|
27
|
-
let s: string | number = Math.floor(seconds % 60)
|
|
28
|
-
let m: string | number = Math.floor((seconds / 60) % 60)
|
|
29
|
-
let h: string | number = Math.floor(seconds / 3600)
|
|
30
|
-
const gm = Math.floor((guide / 60) % 60)
|
|
31
|
-
const gh = Math.floor(guide / 3600)
|
|
32
|
-
|
|
33
|
-
// handle invalid times
|
|
34
|
-
if (isNaN(seconds) || seconds === Infinity) {
|
|
35
|
-
// '-' is false for all relational operators (e.g. <, >=) so this setting
|
|
36
|
-
// will add the minimum number of fields specified by the guide
|
|
37
|
-
h = m = s = '-'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Check if we need to show hours
|
|
41
|
-
h = toNumber(h) > 0 || gh > 0 ? h + ':' : ''
|
|
42
|
-
|
|
43
|
-
// If hours are showing, we may need to add a leading zero.
|
|
44
|
-
// Always show at least one digit of minutes.
|
|
45
|
-
m = ((h || gm >= 10) && toNumber(m) < 10 ? '0' + m : m) + ':'
|
|
46
|
-
|
|
47
|
-
// Check if leading zero is need for seconds
|
|
48
|
-
s = toNumber(s) < 10 ? '0' + s : s
|
|
49
|
-
|
|
50
|
-
return h + m + s
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const stringifiedTime = computed(() => formatTime(currentTime.value, 60))
|
|
54
|
-
</script>
|
|
55
|
-
|
|
56
|
-
<style>
|
|
57
|
-
:root{--magic-player-current-time-font-size:0.875rem;--magic-player-current-time-color:inherit;--magic-player-current-time-width:3.25rem;--magic-player-current-time-justify-content:flex-start}.magic-player-current-time{align-items:center;color:var(--magic-player-current-time-color);display:flex;font-size:var(--magic-player-current-time-font-size);height:100%;justify-content:var(--magic-player-current-time-justify-content);width:var(--magic-player-current-time-width)}
|
|
58
|
-
</style>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
interface Props {
|
|
2
|
-
id: string;
|
|
3
|
-
}
|
|
4
|
-
declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<Props>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<Props>>>, {}, {}>;
|
|
5
|
-
export default _default;
|
|
6
|
-
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
7
|
-
type __VLS_TypePropsToRuntimeProps<T> = {
|
|
8
|
-
[K in keyof T]-?: {} extends Pick<T, K> ? {
|
|
9
|
-
type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
|
|
10
|
-
} : {
|
|
11
|
-
type: import('vue').PropType<T[K]>;
|
|
12
|
-
required: true;
|
|
13
|
-
};
|
|
14
|
-
};
|