@barabel324/react-player 0.0.8 → 0.0.10

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/README.md CHANGED
@@ -23,15 +23,23 @@ preview: {
23
23
  В плеер можно кастомизировать изображение и кнопку, которые будут показываться, если есть превью.
24
24
 
25
25
  ```ts
26
- const components={
27
- button,
28
- previewPicture
26
+ components={
27
+ button: {
28
+ /** компонент */
29
+ component: FCClass;
30
+ /** его пропсы */
31
+ props?: Record<string, any>;
32
+ },
33
+ previewPicture: {
34
+ component: FCClass;
35
+ props?: Record<string, any>;
36
+ },
29
37
  }
30
38
  ```
31
39
 
32
40
  ```tsx
33
- const PlayButton = () => (
34
- <button>▶ Play</button>
41
+ const PlayButton = (props) => (
42
+ <button {...props}>▶ Play</button>
35
43
  );
36
44
 
37
45
  const PreviewImage = () => (
@@ -41,8 +49,15 @@ const PreviewImage = () => (
41
49
  <Player
42
50
  url={url}
43
51
  components={{
44
- button: () => PlayButton,
45
- previewPicture: () => PreviewImage,
52
+ button: {
53
+ component: PlayButton,
54
+ props: {
55
+ type: "button"
56
+ }
57
+ },
58
+ previewPicture: {
59
+ component: PreviewImage,
60
+ },
46
61
  }}
47
62
  />
48
63
  ```
@@ -1,6 +1,6 @@
1
1
  import { jsx as d } from "react/jsx-runtime";
2
2
  import { useRef as a, useImperativeHandle as l, useEffect as u } from "react";
3
- import { u as p } from "./index-B8sUd3YU.js";
3
+ import { u as p } from "./index-DUNavqhH.js";
4
4
  const m = async () => new Promise((t, n) => {
5
5
  if (window.VK?.VideoPlayer) {
6
6
  t(window.VK);
@@ -54,7 +54,7 @@ const m = async () => new Promise((t, n) => {
54
54
  }), () => {
55
55
  e.current && e.current.destroy();
56
56
  };
57
- }, [c]), /* @__PURE__ */ d(
57
+ }, []), /* @__PURE__ */ d(
58
58
  "iframe",
59
59
  {
60
60
  className: t,
@@ -1,35 +1,35 @@
1
1
  import { jsx as i } from "react/jsx-runtime";
2
- import { u as p } from "./index-B8sUd3YU.js";
2
+ import { u as p } from "./index-DUNavqhH.js";
3
3
  import { useRef as c, useImperativeHandle as f, useEffect as l } from "react";
4
4
  const w = ({
5
- className: a,
6
- ref: s,
7
- url: n
5
+ className: t,
6
+ ref: a,
7
+ url: s
8
8
  }) => {
9
- const e = c(null), r = p(), o = () => {
9
+ const e = c(null), n = p(), o = () => {
10
10
  e.current && e.current.contentWindow?.postMessage(JSON.stringify({
11
11
  type: "player:play",
12
12
  data: {}
13
13
  }), "*");
14
14
  };
15
- return f(s, () => ({
15
+ return f(a, () => ({
16
16
  play: o
17
17
  })), l(() => {
18
- const t = (u) => {
18
+ const r = (u) => {
19
19
  if (!e.current) return;
20
- JSON.parse(u.data).type === "player:ready" && r({ type: "canplay" });
20
+ JSON.parse(u.data).type === "player:ready" && n({ type: "canplay" });
21
21
  };
22
- return window.addEventListener("message", t), () => {
23
- window.removeEventListener("message", t);
22
+ return window.addEventListener("message", r), () => {
23
+ window.removeEventListener("message", r);
24
24
  };
25
- }, [r]), /* @__PURE__ */ i(
25
+ }, []), /* @__PURE__ */ i(
26
26
  "iframe",
27
27
  {
28
- className: a,
28
+ className: t,
29
29
  ref: e,
30
30
  width: "100%",
31
31
  height: "100%",
32
- src: n,
32
+ src: s,
33
33
  allowFullScreen: !0,
34
34
  frameBorder: "0"
35
35
  }
@@ -1,5 +1,5 @@
1
1
  import { jsx as y } from "react/jsx-runtime";
2
- import { u as d, P as t } from "./index-B8sUd3YU.js";
2
+ import { u as d, P as t } from "./index-DUNavqhH.js";
3
3
  import { useRef as i, useImperativeHandle as P } from "react";
4
4
  const v = ({
5
5
  className: n,
@@ -0,0 +1,179 @@
1
+ import { jsx as a, jsxs as d } from "react/jsx-runtime";
2
+ import { createContext as b, useContext as m, useReducer as g, lazy as _, useMemo as k, useRef as q } from "react";
3
+ function v() {
4
+ let e, r = "", t = 0;
5
+ for (; t < arguments.length; ) (e = arguments[t++]) && typeof e == "string" && (r && (r += " "), r += e);
6
+ return r;
7
+ }
8
+ const c = {
9
+ show: "show",
10
+ hide: "hide",
11
+ showButton: "showButton",
12
+ hideButton: "hideButton",
13
+ canplay: "canplay"
14
+ }, f = {
15
+ showButton: !1,
16
+ showPreview: !0,
17
+ canplay: !1
18
+ }, E = (e, r) => {
19
+ const { type: t } = r;
20
+ switch (t) {
21
+ case c.show:
22
+ return { ...e, showButton: !0, showPreview: !0 };
23
+ case c.hide:
24
+ return { ...e, showButton: !1, showPreview: !1 };
25
+ case c.showButton:
26
+ return { ...e, showButton: !0 };
27
+ case c.hideButton:
28
+ return { ...e, showButton: !1 };
29
+ case c.canplay:
30
+ return { ...e, canplay: !0, showButton: !0 };
31
+ default:
32
+ return e;
33
+ }
34
+ }, B = b(f), x = b(() => {
35
+ }), R = ({ children: e }) => {
36
+ const [r, t] = g(E, f);
37
+ return /* @__PURE__ */ a(B.Provider, { value: r, children: /* @__PURE__ */ a(x.Provider, { value: t, children: e }) });
38
+ }, S = () => {
39
+ const e = m(B);
40
+ if (e === void 0)
41
+ throw new Error("usePlayerState нужно использовать внутри PlayerProvider");
42
+ return e;
43
+ }, T = () => {
44
+ const e = m(x);
45
+ if (e === void 0)
46
+ throw new Error("usePlayerDispatch нужно использовать внутри PlayerProvider");
47
+ return e;
48
+ }, C = "_button_1xali_2", $ = {
49
+ button: C
50
+ }, D = ({
51
+ className: e,
52
+ onClick: r
53
+ }) => /* @__PURE__ */ a(
54
+ "button",
55
+ {
56
+ className: v(
57
+ $.button,
58
+ e
59
+ ),
60
+ type: "button",
61
+ onClick: r
62
+ }
63
+ ), V = "_playerPreview_lqhcw_1", j = "_playerPreview__wrapper_lqhcw_7", A = "_playerPreview__wrapper_cursor_lqhcw_11", L = "_playerPreview__button_lqhcw_14", O = "_playerPreview__preview_lqhcw_21", Y = "_playerPreview__player_lqhcw_30", o = {
64
+ playerPreview: V,
65
+ playerPreview__wrapper: j,
66
+ playerPreview__wrapper_cursor: A,
67
+ playerPreview__button: L,
68
+ playerPreview__preview: O,
69
+ playerPreview__player: Y
70
+ }, z = ({
71
+ className: e,
72
+ preview: r,
73
+ onPlay: t,
74
+ children: u,
75
+ buttonComponent: n,
76
+ previewPictureComponent: l
77
+ }) => {
78
+ const { showButton: i, showPreview: p, canplay: P } = S(), y = T(), h = () => {
79
+ P && (y({
80
+ type: c.hide
81
+ }), t && t());
82
+ }, w = !!r || !!l;
83
+ return /* @__PURE__ */ d(
84
+ "div",
85
+ {
86
+ className: v(
87
+ o.playerPreview,
88
+ e
89
+ ),
90
+ children: [
91
+ (i || w && p) && /* @__PURE__ */ d(
92
+ "div",
93
+ {
94
+ className: v(
95
+ o.playerPreview__wrapper,
96
+ i && o.playerPreview__wrapper_cursor
97
+ ),
98
+ onClick: h,
99
+ children: [
100
+ i && (n ? /* @__PURE__ */ a(n.component, { className: o.playerPreview__button, ...n.props }) : /* @__PURE__ */ a(
101
+ D,
102
+ {
103
+ className: o.playerPreview__button
104
+ }
105
+ )),
106
+ w && p && (l ? /* @__PURE__ */ a(l.component, { className: o.playerPreview__preview, ...l.props }) : r && /* @__PURE__ */ a("img", { className: o.playerPreview__preview, src: r.src, alt: r.alt ?? "preview" }))
107
+ ]
108
+ }
109
+ ),
110
+ /* @__PURE__ */ a("div", { className: o.playerPreview__player, children: u })
111
+ ]
112
+ }
113
+ );
114
+ }, s = {
115
+ youtube: "youtube",
116
+ rutube: "rutube",
117
+ video: "video",
118
+ vk: "vk"
119
+ }, I = {
120
+ [s.youtube]: _(async () => await import("./index-FsQN9AUJ.js")),
121
+ [s.rutube]: _(async () => await import("./index-C4BbrYIr.js")),
122
+ [s.video]: _(async () => await import("./index-DSFxsWiZ.js")),
123
+ [s.vk]: _(async () => await import("./index-Bpmt5HjW.js"))
124
+ }, M = (e) => {
125
+ const r = /^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/, t = /^(?:https?:\/\/)?(?:rutu\.be\/|rutube\.ru(\/play\/))/, u = /^(?:https?:\/\/)?(?:www\.|m\.)?(?:vk\.com|vkvideo\.ru)\/.+$/;
126
+ return t.test(e) ? s.rutube : r.test(e) ? s.youtube : u.test(e) ? s.vk : s.video;
127
+ }, U = "_player_1afml_1", F = {
128
+ player: U
129
+ }, G = ({
130
+ children: e,
131
+ hasPreview: r,
132
+ ...t
133
+ }) => r ? /* @__PURE__ */ a(
134
+ z,
135
+ {
136
+ ...t,
137
+ children: e
138
+ }
139
+ ) : e, H = ({
140
+ className: e,
141
+ url: r,
142
+ preview: t,
143
+ classNames: u,
144
+ components: n
145
+ }) => {
146
+ const l = u?.player, i = n?.button, p = n?.previewPicture, P = k(() => {
147
+ const N = M(r);
148
+ return I[N];
149
+ }, [r]), y = q(null), h = () => {
150
+ y.current && y.current.play();
151
+ }, w = !!t || !!p;
152
+ return /* @__PURE__ */ a(
153
+ G,
154
+ {
155
+ hasPreview: w,
156
+ className: e,
157
+ preview: t,
158
+ onPlay: h,
159
+ buttonComponent: i,
160
+ previewPictureComponent: p,
161
+ children: /* @__PURE__ */ a(
162
+ P,
163
+ {
164
+ className: v(
165
+ l ?? F.player,
166
+ !w && e
167
+ ),
168
+ ref: y,
169
+ url: r
170
+ }
171
+ )
172
+ }
173
+ );
174
+ }, Q = (e) => /* @__PURE__ */ a(R, { children: /* @__PURE__ */ a(H, { ...e }) });
175
+ export {
176
+ c as P,
177
+ Q as a,
178
+ T as u
179
+ };
@@ -1,6 +1,6 @@
1
1
  import { jsx as l } from "react/jsx-runtime";
2
2
  import { useRef as s, useImperativeHandle as p, useEffect as y } from "react";
3
- import { u as f } from "./index-B8sUd3YU.js";
3
+ import { u as f } from "./index-DUNavqhH.js";
4
4
  const m = (t) => {
5
5
  const n = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/, o = t.match(n);
6
6
  return o && o[7].length === 11 ? o[7] : "";
@@ -1 +1 @@
1
- ._button_1xali_2{--idmrp-button-play-size: 3.375rem;--idmrp-button-play-bg: #2D3C31;--idmrp-button-play-triangle-color: #E3DFD7;position:relative;width:var(--idmrp-button-play-size);min-width:var(--idmrp-button-play-size);height:var(--idmrp-button-play-size);background-color:var(--idmrp-button-play-bg);border-radius:50%}._button_1xali_2:before{content:"";position:absolute;top:50%;left:58%;border:.3125rem solid transparent;border-left:.5625rem solid var(--idmrp-button-play-triangle-color);transform:translate(-50%,-50%)}._playerPreview_so1s6_1{position:relative;width:100%;height:100%;object-fit:cover}._playerPreview__wrapper_so1s6_7{position:absolute;inset:0;cursor:pointer}._playerPreview__button_so1s6_12{z-index:2;position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%)}._playerPreview__preview_so1s6_19{z-index:1;position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}._playerPreview__player_so1s6_28{width:100%;height:100%}._player_1afml_1{display:block;width:100%;height:100%;object-fit:cover;object-position:center}
1
+ ._button_1xali_2{--idmrp-button-play-size: 3.375rem;--idmrp-button-play-bg: #2D3C31;--idmrp-button-play-triangle-color: #E3DFD7;position:relative;width:var(--idmrp-button-play-size);min-width:var(--idmrp-button-play-size);height:var(--idmrp-button-play-size);background-color:var(--idmrp-button-play-bg);border-radius:50%}._button_1xali_2:before{content:"";position:absolute;top:50%;left:58%;border:.3125rem solid transparent;border-left:.5625rem solid var(--idmrp-button-play-triangle-color);transform:translate(-50%,-50%)}._playerPreview_lqhcw_1{position:relative;width:100%;height:100%;object-fit:cover}._playerPreview__wrapper_lqhcw_7{position:absolute;inset:0}._playerPreview__wrapper_cursor_lqhcw_11{cursor:pointer}._playerPreview__button_lqhcw_14{z-index:2;position:absolute;top:50%;left:50%;transform:translate(-50%) translateY(-50%)}._playerPreview__preview_lqhcw_21{z-index:1;position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}._playerPreview__player_lqhcw_30{width:100%;height:100%}._player_1afml_1{display:block;width:100%;height:100%;object-fit:cover;object-position:center}
@@ -1,4 +1,3 @@
1
- import { ReactNode } from 'react';
2
1
  import { RefObject } from 'react';
3
2
 
4
3
  /** Утилитарный дженерик для обозначения функционального компонента с пропсами children и className */
@@ -14,7 +13,7 @@ declare type KeysWithClassNames = {
14
13
 
15
14
  declare type KeysWithComponent = {
16
15
  [K in keyof TMapComponents]: TMapComponents[K] extends {
17
- component: () => ReactNode;
16
+ component: TComp;
18
17
  } ? K : never;
19
18
  }[keyof TMapComponents];
20
19
 
@@ -24,6 +23,11 @@ declare type TClassNames = {
24
23
  [K in KeysWithClassNames]?: TMapComponents[K]['className'];
25
24
  };
26
25
 
26
+ declare type TComp = {
27
+ component: any;
28
+ props?: Record<string, any>;
29
+ };
30
+
27
31
  declare type TComponents = {
28
32
  [K in KeysWithComponent]?: TMapComponents[K]['component'];
29
33
  };
@@ -32,12 +36,12 @@ declare type TMapComponents = {
32
36
  /** изображение превью */
33
37
  previewPicture: {
34
38
  /** компонент изображения */
35
- component: () => ReactNode;
39
+ component: TComp;
36
40
  };
37
41
  /** кнопка, которая отображаентся, когда видео загрузилось */
38
42
  button: {
39
43
  /** компонент кнопки */
40
- component: () => ReactNode;
44
+ component: TComp;
41
45
  };
42
46
  /** Плеер */
43
47
  player: {
@@ -73,8 +77,8 @@ declare type TPlayerPreview = {
73
77
  /** Альт изображения */
74
78
  alt: string;
75
79
  };
76
- renderPreviewPicture?: () => ReactNode;
77
- renderButton?: () => ReactNode;
80
+ previewPictureComponent?: TComp;
81
+ buttonComponent?: TComp;
78
82
  onPlay?: () => void;
79
83
  };
80
84
 
@@ -1,4 +1,4 @@
1
- import { a as e } from "./index-B8sUd3YU.js";
1
+ import { a as e } from "./index-DUNavqhH.js";
2
2
  export {
3
3
  e as Player
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barabel324/react-player",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "type": "module",
5
5
  "main": "./dist/react-player.js",
6
6
  "types": "./dist/react-player.d.ts",
@@ -1,175 +0,0 @@
1
- import { jsx as o, jsxs as d } from "react/jsx-runtime";
2
- import { createContext as b, useContext as f, useReducer as k, lazy as v, useMemo as C, useRef as N } from "react";
3
- function h() {
4
- let e, t = "", r = 0;
5
- for (; r < arguments.length; ) (e = arguments[r++]) && typeof e == "string" && (t && (t += " "), t += e);
6
- return t;
7
- }
8
- const a = {
9
- show: "show",
10
- hide: "hide",
11
- showButton: "showButton",
12
- hideButton: "hideButton",
13
- canplay: "canplay"
14
- }, m = {
15
- showButton: !1,
16
- showPreview: !0,
17
- canplay: !1
18
- }, E = (e, t) => {
19
- const { type: r } = t;
20
- switch (r) {
21
- case a.show:
22
- return { ...e, showButton: !0, showPreview: !0 };
23
- case a.hide:
24
- return { ...e, showButton: !1, showPreview: !1 };
25
- case a.showButton:
26
- return { ...e, showButton: !0 };
27
- case a.hideButton:
28
- return { ...e, showButton: !1 };
29
- case a.canplay:
30
- return { ...e, canplay: !0, showButton: !0 };
31
- default:
32
- return e;
33
- }
34
- }, B = b(m), x = b(() => {
35
- }), R = ({ children: e }) => {
36
- const [t, r] = k(E, m);
37
- return /* @__PURE__ */ o(B.Provider, { value: t, children: /* @__PURE__ */ o(x.Provider, { value: r, children: e }) });
38
- }, S = () => {
39
- const e = f(B);
40
- if (e === void 0)
41
- throw new Error("usePlayerState нужно использовать внутри PlayerProvider");
42
- return e;
43
- }, T = () => {
44
- const e = f(x);
45
- if (e === void 0)
46
- throw new Error("usePlayerDispatch нужно использовать внутри PlayerProvider");
47
- return e;
48
- }, $ = "_button_1xali_2", D = {
49
- button: $
50
- }, V = ({
51
- className: e,
52
- onClick: t
53
- }) => /* @__PURE__ */ o(
54
- "button",
55
- {
56
- className: h(
57
- D.button,
58
- e
59
- ),
60
- type: "button",
61
- onClick: t
62
- }
63
- ), j = "_playerPreview_so1s6_1", A = "_playerPreview__wrapper_so1s6_7", L = "_playerPreview__button_so1s6_12", O = "_playerPreview__preview_so1s6_19", Y = "_playerPreview__player_so1s6_28", y = {
64
- playerPreview: j,
65
- playerPreview__wrapper: A,
66
- playerPreview__button: L,
67
- playerPreview__preview: O,
68
- playerPreview__player: Y
69
- }, z = ({
70
- className: e,
71
- preview: t,
72
- onPlay: r,
73
- children: n,
74
- renderButton: u,
75
- renderPreviewPicture: l
76
- }) => {
77
- const { showButton: p, showPreview: c, canplay: _ } = S(), i = T(), P = () => {
78
- _ && (i({
79
- type: a.hide
80
- }), r && r());
81
- }, w = !!t || !!l;
82
- return /* @__PURE__ */ d(
83
- "div",
84
- {
85
- className: h(
86
- y.playerPreview,
87
- e
88
- ),
89
- children: [
90
- (p || t && c) && /* @__PURE__ */ d(
91
- "div",
92
- {
93
- className: y.playerPreview__wrapper,
94
- onClick: P,
95
- children: [
96
- p && (u ? u() : /* @__PURE__ */ o(
97
- V,
98
- {
99
- className: y.playerPreview__button
100
- }
101
- )),
102
- w && c && (l ? l() : t && /* @__PURE__ */ o("img", { className: y.playerPreview__preview, src: t.src, alt: t.alt ?? "preview" }))
103
- ]
104
- }
105
- ),
106
- /* @__PURE__ */ o("div", { className: y.playerPreview__player, children: n })
107
- ]
108
- }
109
- );
110
- }, s = {
111
- youtube: "youtube",
112
- rutube: "rutube",
113
- video: "video",
114
- vk: "vk"
115
- }, I = {
116
- [s.youtube]: v(async () => await import("./index-Dj9G-CFc.js")),
117
- [s.rutube]: v(async () => await import("./index-P3WMQDqC.js")),
118
- [s.video]: v(async () => await import("./index-CczXORYY.js")),
119
- [s.vk]: v(async () => await import("./index-C8oYhGns.js"))
120
- }, M = (e) => {
121
- const t = /^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/, r = /^(?:https?:\/\/)?(?:rutu\.be\/|rutube\.ru(\/play\/))/, n = /^(?:https?:\/\/)?(?:www\.|m\.)?(?:vk\.com|vkvideo\.ru)\/.+$/;
122
- return r.test(e) ? s.rutube : t.test(e) ? s.youtube : n.test(e) ? s.vk : s.video;
123
- }, U = "_player_1afml_1", q = {
124
- player: U
125
- }, F = ({
126
- children: e,
127
- hasPreview: t,
128
- ...r
129
- }) => t ? /* @__PURE__ */ o(
130
- z,
131
- {
132
- ...r,
133
- children: e
134
- }
135
- ) : e, G = ({
136
- className: e,
137
- url: t,
138
- preview: r,
139
- classNames: n,
140
- components: u
141
- }) => {
142
- const l = n?.player, p = u?.button, c = u?.previewPicture, _ = C(() => {
143
- const g = M(t);
144
- return I[g];
145
- }, [t]), i = N(null), P = () => {
146
- i.current && i.current.play();
147
- }, w = !!r || !!c;
148
- return /* @__PURE__ */ o(
149
- F,
150
- {
151
- hasPreview: w,
152
- className: e,
153
- preview: r,
154
- onPlay: P,
155
- renderButton: p,
156
- renderPreviewPicture: c,
157
- children: /* @__PURE__ */ o(
158
- _,
159
- {
160
- className: h(
161
- l ?? q.player,
162
- !w && e
163
- ),
164
- ref: i,
165
- url: t
166
- }
167
- )
168
- }
169
- );
170
- }, K = (e) => /* @__PURE__ */ o(R, { children: /* @__PURE__ */ o(G, { ...e }) });
171
- export {
172
- a as P,
173
- K as a,
174
- T as u
175
- };