@graphland/react-video-player
Version:
A customizable React component serving as a wrapper for the popular Video.js library. This component provides a sleek and responsive video player with theme options.
145 lines (142 loc) • 5.32 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __objRest = (source, exclude) => {
var target = {};
for (var prop in source)
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
target[prop] = source[prop];
if (source != null && __getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(source)) {
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
VideoPlayer: () => VideoPlayer_default
});
module.exports = __toCommonJS(src_exports);
// src/VideoPlayer.tsx
var import_react = __toESM(require("react"));
var import_video_js = require("video.js/dist/video-js.css");
var import_city = require("@videojs/themes/dist/city/index.css");
var import_fantasy = require("@videojs/themes/dist/fantasy/index.css");
var import_forest = require("@videojs/themes/dist/forest/index.css");
var import_sea = require("@videojs/themes/dist/sea/index.css");
var import_video = __toESM(require("video.js"));
var VideoPlayer = (_a) => {
var _b = _a, {
height = 1080,
width = 1920,
sources,
autoPlay = false,
loop = false,
theme = "city",
poster,
controlBar: controlBar = {
skipButtons: {
forward: 5,
back: 5
}
},
isFluid = false,
playbackRates = [0.5, 1, 1.5, 2],
disablePictureInPicture = false,
onReady
} = _b, props = __objRest(_b, [
"height",
"width",
"sources",
"autoPlay",
"loop",
"theme",
"poster",
// videojs specific props
"controlBar",
"isFluid",
"playbackRates",
"disablePictureInPicture",
"onReady"
]);
const videoRef = import_react.default.useRef(null);
import_react.default.useEffect(() => {
if (videoRef.current)
(0, import_video.default)(
videoRef.current,
{
controlBar,
playbackRates,
disablePictureInPicture,
preferFullWindow: true
},
function onPlayerReady(ready) {
import_video.default.log("Your player is ready!");
if (onReady)
onReady(ready);
}
);
}, [videoRef]);
return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", __spreadValues({ className: "gl-video-player__wrapper" }, props), /* @__PURE__ */ import_react.default.createElement(
"video",
{
ref: videoRef,
className: `video-js vjs-theme-${theme} gl-video-player__video ${isFluid ? "vjs-fluid" : ""}}`,
controls: true,
autoPlay,
preload: "auto",
width,
height,
loop,
poster
},
sources == null ? void 0 : sources.map(({ src, type }) => /* @__PURE__ */ import_react.default.createElement("source", { key: src, src, type })),
/* @__PURE__ */ import_react.default.createElement("p", { className: "vjs-no-js" }, "To view this video please enable JavaScript, and consider upgrading to a web browser that", /* @__PURE__ */ import_react.default.createElement("a", { href: "https://videojs.com/html5-video-support/", target: "_blank" }, "supports HTML5 video"))
)));
};
var VideoPlayer_default = VideoPlayer;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
VideoPlayer
});