@smitch/fluid
Version:
A Next/React ui-component libray.
66 lines (65 loc) • 4.35 kB
JavaScript
'use client';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useState, useEffect } from 'react';
import { twMerge } from 'tailwind-merge';
import Video from './Video';
import VideoControls from './VideoControls';
var VideoPlayer = function (_a) {
var src = _a.src, poster = _a.poster, loop = _a.loop, _b = _a.className, className = _b === void 0 ? '' : _b, _c = _a.aspect, aspect = _c === void 0 ? 'video' : _c, preload = _a.preload, fallback = _a.fallback, _d = _a.formats, formats = _d === void 0 ? ['mp4'] : _d, _e = _a.defaultError, defaultError = _e === void 0 ? 'Oops! There was an unknown error.' : _e, _f = _a.muted, muted = _f === void 0 ? false : _f, autoplay = _a.autoplay, _g = _a.controlOptions, controlOptions = _g === void 0 ? ['sound', 'fullscreen', 'pip'] : _g, _h = _a.progressBg, progressBg = _h === void 0 ? '#cccccc' : _h, _j = _a.progressColor, progressColor = _j === void 0 ? '#ffffff' : _j, tracks = _a.tracks, srcLangs = _a.srcLangs, grayscale = _a.grayscale;
var _k = useState(false), play = _k[0], setPlay = _k[1];
var _l = useState(0), duration = _l[0], setDuration = _l[1];
var _m = useState(0), time = _m[0], setTime = _m[1];
var _o = useState(0), currentTime = _o[0], setCurrentTime = _o[1];
var _p = useState(false), fullscreen = _p[0], setFullscreen = _p[1];
var _q = useState(false), pictureInPicture = _q[0], setPictureInPicture = _q[1];
var _r = useState(muted), mute = _r[0], setMute = _r[1];
var _s = useState(5), volume = _s[0], setVolume = _s[1];
var _t = useState(), trackIndex = _t[0], setTrackIndex = _t[1];
useEffect(function () {
var handleFullscreenChange = function () {
if (fullscreen && !document.fullscreenElement)
setFullscreen(false);
};
document.addEventListener('fullscreenchange', handleFullscreenChange);
return function () {
document.removeEventListener('keydown', handleFullscreenChange);
};
}, [setFullscreen, fullscreen]);
useEffect(function () {
setPlay(autoplay !== null && autoplay !== void 0 ? autoplay : false);
return function () {
setPlay(false);
};
}, [autoplay]);
var handleScrubChange = function (time) {
setTime(time);
setCurrentTime(time);
};
var handleEnded = function () {
setPlay(false);
handleScrubChange(0);
};
var handleVolume = function (volume) {
setVolume(volume);
volume === 0 ? setMute(true) : setMute(false);
};
var handleTogglePlay = function () { return setPlay(!play); };
var handleMute = function () { return setMute(!mute); };
var handleFullscreen = function () {
setFullscreen(!fullscreen);
if (typeof document !== null) {
var player = document.getElementById('player');
if (player) {
if (!fullscreen) {
player.requestFullscreen();
}
else
document.exitFullscreen();
}
}
};
var handlePiP = function () { return setPictureInPicture(!pictureInPicture); };
var handleCaption = function (index) { return setTrackIndex(index); };
return (_jsxs("div", { id: 'player', className: twMerge("video-player w-full dark bg-black group relative ".concat(fullscreen ? 'fullscreen' : ''), className), children: [_jsx(Video, { src: src, controls: false, poster: poster, aspect: aspect, loop: loop, setDuration: setDuration, setTime: setTime, currentTime: currentTime, togglePlay: handleTogglePlay, playEnded: handleEnded, play: play, muted: mute, autoplay: autoplay, preload: preload, fallback: fallback, volume: volume, formats: formats, pictureInPicture: pictureInPicture, defaultError: defaultError, tracks: tracks, srcLangs: srcLangs, trackIndex: trackIndex, grayscale: grayscale }), _jsx(VideoControls, { duration: duration, time: time, togglePlay: handleTogglePlay, play: play, onFullscreen: handleFullscreen, fullscreen: fullscreen, onMute: handleMute, muted: mute, onScrubChange: handleScrubChange, onVolume: handleVolume, onPIP: handlePiP, onCaption: handleCaption, controlOptions: controlOptions, progressBg: progressBg, progressColor: progressColor, tracks: tracks, srcLangs: srcLangs })] }));
};
export default VideoPlayer;