customvidplayer 0.0.13 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,6 +11,7 @@ declare namespace VideoPlayer {
11
11
  const sections: PropTypes.Validator<(PropTypes.InferProps<{
12
12
  name: PropTypes.Validator<string>;
13
13
  timestamp: PropTypes.Validator<number>;
14
+ color: PropTypes.Requireable<string>;
14
15
  }> | null | undefined)[]>;
15
16
  const onSectionChange: PropTypes.Requireable<(...args: any[]) => any>;
16
17
  const theme: PropTypes.Requireable<object>;
@@ -61,6 +61,9 @@ var VideoPlayer = function VideoPlayer(_a) {
61
61
  var _b = (0, react_1.useState)(0),
62
62
  currentSectionIndex = _b[0],
63
63
  setCurrentSectionIndex = _b[1];
64
+ var _c = (0, react_1.useState)(false),
65
+ isPlaying = _c[0],
66
+ setIsPlaying = _c[1];
64
67
  var skipToNextSection = function skipToNextSection() {
65
68
  if (currentSectionIndex < sections.length - 1) {
66
69
  var nextSection = sections[currentSectionIndex + 1];
@@ -80,25 +83,57 @@ var VideoPlayer = function VideoPlayer(_a) {
80
83
  if (onSectionChange) onSectionChange(currentSection);
81
84
  }
82
85
  };
86
+ var playVideo = function playVideo() {
87
+ videoRef.current.play();
88
+ setIsPlaying(true);
89
+ };
90
+ var pauseVideo = function pauseVideo() {
91
+ videoRef.current.pause();
92
+ setIsPlaying(false);
93
+ };
94
+ var skipForward = function skipForward() {
95
+ videoRef.current.currentTime += 10;
96
+ };
83
97
  return react_1["default"].createElement("div", {
84
98
  className: "video-player",
85
99
  style: __assign({}, theme)
86
100
  }, react_1["default"].createElement("video", {
87
101
  src: videoSrc,
88
- controls: true,
102
+ controls: false,
89
103
  ref: videoRef,
90
104
  onTimeUpdate: handleTimeUpdate,
91
105
  className: "video-element"
92
- }), react_1["default"].createElement("button", {
106
+ }), react_1["default"].createElement("div", {
107
+ className: "bottom-bar",
108
+ style: {
109
+ backgroundColor: theme.bottomBarColor || '#000'
110
+ }
111
+ }, react_1["default"].createElement("button", {
112
+ onClick: isPlaying ? pauseVideo : playVideo
113
+ }, isPlaying ? 'Pause' : 'Play'), react_1["default"].createElement("button", {
114
+ onClick: skipForward
115
+ }, "Skip 10s"), react_1["default"].createElement("button", {
93
116
  onClick: skipToNextSection,
94
117
  className: "skip-button"
95
- }, "Skip"));
118
+ }, "Skip")), react_1["default"].createElement("div", {
119
+ className: "progress-bar"
120
+ }, sections.map(function (section, index) {
121
+ return react_1["default"].createElement("div", {
122
+ key: index,
123
+ className: "section-indicator",
124
+ style: {
125
+ left: "".concat(section.timestamp / videoRef.current.duration * 100, "%"),
126
+ backgroundColor: section.color || '#007bff'
127
+ }
128
+ }, section.name);
129
+ })));
96
130
  };
97
131
  VideoPlayer.propTypes = {
98
132
  videoSrc: prop_types_1["default"].string.isRequired,
99
133
  sections: prop_types_1["default"].arrayOf(prop_types_1["default"].shape({
100
134
  name: prop_types_1["default"].string.isRequired,
101
- timestamp: prop_types_1["default"].number.isRequired
135
+ timestamp: prop_types_1["default"].number.isRequired,
136
+ color: prop_types_1["default"].string
102
137
  })).isRequired,
103
138
  onSectionChange: prop_types_1["default"].func,
104
139
  theme: prop_types_1["default"].object
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "customvidplayer",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "Customizable video player with section navigation and theming.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -5,6 +5,7 @@ import "./../styles/defaultTheme.css";
5
5
  const VideoPlayer = ({ videoSrc, sections, onSectionChange, theme }) => {
6
6
  const videoRef = useRef(null);
7
7
  const [currentSectionIndex, setCurrentSectionIndex] = useState(0);
8
+ const [isPlaying, setIsPlaying] = useState(false);
8
9
 
9
10
  const skipToNextSection = () => {
10
11
  if (currentSectionIndex < sections.length - 1) {
@@ -30,18 +31,52 @@ const VideoPlayer = ({ videoSrc, sections, onSectionChange, theme }) => {
30
31
  }
31
32
  };
32
33
 
34
+ const playVideo = () => {
35
+ videoRef.current.play();
36
+ setIsPlaying(true);
37
+ };
38
+
39
+ const pauseVideo = () => {
40
+ videoRef.current.pause();
41
+ setIsPlaying(false);
42
+ };
43
+
44
+ const skipForward = () => {
45
+ videoRef.current.currentTime += 10;
46
+ };
47
+
33
48
  return (
34
49
  <div className="video-player" style={{ ...theme }}>
35
50
  <video
36
51
  src={videoSrc}
37
- controls
52
+ controls={false}
38
53
  ref={videoRef}
39
54
  onTimeUpdate={handleTimeUpdate}
40
55
  className="video-element"
41
56
  />
42
- <button onClick={skipToNextSection} className="skip-button">
43
- Skip
44
- </button>
57
+ <div className="bottom-bar" style={{ backgroundColor: theme.bottomBarColor || '#000' }}>
58
+ <button onClick={isPlaying ? pauseVideo : playVideo}>
59
+ {isPlaying ? 'Pause' : 'Play'}
60
+ </button>
61
+ <button onClick={skipForward}>Skip 10s</button>
62
+ <button onClick={skipToNextSection} className="skip-button">
63
+ Skip
64
+ </button>
65
+ </div>
66
+ <div className="progress-bar">
67
+ {sections.map((section, index) => (
68
+ <div
69
+ key={index}
70
+ className="section-indicator"
71
+ style={{
72
+ left: `${(section.timestamp / videoRef.current.duration) * 100}%`,
73
+ backgroundColor: section.color || '#007bff',
74
+ }}
75
+ >
76
+ {section.name}
77
+ </div>
78
+ ))}
79
+ </div>
45
80
  </div>
46
81
  );
47
82
  };
@@ -52,6 +87,7 @@ VideoPlayer.propTypes = {
52
87
  PropTypes.shape({
53
88
  name: PropTypes.string.isRequired,
54
89
  timestamp: PropTypes.number.isRequired,
90
+ color: PropTypes.string,
55
91
  })
56
92
  ).isRequired,
57
93
  onSectionChange: PropTypes.func,
@@ -27,4 +27,24 @@
27
27
  margin: 5px 0;
28
28
  color: #007bff;
29
29
  }
30
+
31
+ .bottom-bar {
32
+ display: flex;
33
+ justify-content: space-between;
34
+ padding: 10px;
35
+ }
36
+
37
+ .progress-bar {
38
+ position: relative;
39
+ height: 5px;
40
+ background: #ccc;
41
+ margin-top: 5px;
42
+ }
43
+
44
+ .section-indicator {
45
+ position: absolute;
46
+ width: 5px;
47
+ height: 100%;
48
+ background: #007bff; /* Default color */
49
+ }
30
50