react-select-media-devices-modal 0.0.6 → 0.0.8
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 +8 -5
- package/dist/react-select-media-devices-modal.mjs +66 -61
- package/dist/react-select-media-devices-modal.umd.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types/SelectMediaDevicesModal/components/button/index.d.ts +1 -1
- package/dist/types/SelectMediaDevicesModal/index.d.ts +3 -3
- package/package.json +15 -3
- /package/dist/types/SelectMediaDevicesModal/hooks/{getDevices.d.ts → useGetDevices.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# react-select-media-devices-modal
|
|
2
2
|
|
|
3
3
|
[](https://badge.fury.io/js/react-select-media-devices-modal)
|
|
4
|
+
[](https://github.com/kadoshita/react-select-media-devices-modal/actions/workflows/test.yaml)
|
|
5
|
+
[](https://github.com/kadoshita/react-select-media-devices-modal/actions/workflows/e2e-test.yaml)
|
|
4
6
|
[](https://github.com/kadoshita/react-select-media-devices-modal/actions/workflows/release.yaml)
|
|
7
|
+
[](https://github.com/kadoshita/react-select-media-devices-modal/actions/workflows/deploy.yaml)
|
|
5
8
|
[](https://opensource.org/licenses/MIT)
|
|
6
9
|
|
|
7
10
|
A React component library for select media devices.
|
|
@@ -22,7 +25,7 @@ npm install --save react-select-media-devices-modal
|
|
|
22
25
|
|
|
23
26
|
## Usage
|
|
24
27
|
|
|
25
|
-
```
|
|
28
|
+
```jsx
|
|
26
29
|
import { useState } from 'react';
|
|
27
30
|
import { SelectMediaDevicesModal } from 'react-select-media-devices-modal';
|
|
28
31
|
|
|
@@ -49,8 +52,8 @@ function App() {
|
|
|
49
52
|
audioInputDeviceLabel="Audio input device"
|
|
50
53
|
audioOutputDeviceLabel="Audio output device"
|
|
51
54
|
videoInputDeviceLabel="Video input device"
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
confirmButtonText="Confirm"
|
|
56
|
+
cancelButtonText="Cancel"
|
|
54
57
|
allowOutsideClick={false}
|
|
55
58
|
onDeviceSelected={handleDeviceSelected}
|
|
56
59
|
onDeviceSelectCanceled={handleDeviceSelectCanceled}
|
|
@@ -75,8 +78,8 @@ export default App;
|
|
|
75
78
|
| audioInputDeviceLabel | `string` | `'audio input device'` | Label for list of audio input devices. |
|
|
76
79
|
| audioOutputDeviceLabel | `string` | `'audio output device'` | Label for list of audio output devices. |
|
|
77
80
|
| videoInputDeviceLabel | `string` | `'video input device'` | Label for list of video input devices. |
|
|
78
|
-
|
|
|
79
|
-
|
|
|
81
|
+
| confirmButtonText | `string` | `'Confirm'` | Label for the confirm button. |
|
|
82
|
+
| cancelButtonText | `string` | `'Cancel'` | Label for the cancel button. |
|
|
80
83
|
| allowOutsideClick | `boolean` | `true` | Flag that cancel selection when clicking outside of the modal. |
|
|
81
84
|
| onDeviceSelected | `function` | `(devices: { audioInput?: MediaDeviceInfo; audioOutput?: MediaDeviceInfo; videoInput?: MediaDeviceInfo; }) => void` | Handler function called when devices are selected. |
|
|
82
85
|
| onDeviceSelectCanceled | `function` | `() => void` | Handler function called when selection canceled. |
|
|
@@ -1,94 +1,99 @@
|
|
|
1
|
-
import e, { useState as l, useEffect as
|
|
2
|
-
const
|
|
3
|
-
background:
|
|
4
|
-
modal:
|
|
5
|
-
deviceLists:
|
|
6
|
-
buttons:
|
|
7
|
-
chancelButton:
|
|
8
|
-
confirmButton:
|
|
9
|
-
},
|
|
1
|
+
import e, { useState as l, useEffect as j } from "react";
|
|
2
|
+
const x = "_background_2h4vl_1", G = "_modal_2h4vl_13", P = "_deviceLists_2h4vl_19", R = "_buttons_2h4vl_23", S = "_chancelButton_2h4vl_30", T = "_confirmButton_2h4vl_32", a = {
|
|
3
|
+
background: x,
|
|
4
|
+
modal: G,
|
|
5
|
+
deviceLists: P,
|
|
6
|
+
buttons: R,
|
|
7
|
+
chancelButton: S,
|
|
8
|
+
confirmButton: T
|
|
9
|
+
}, U = () => {
|
|
10
10
|
const [n, c] = l([]);
|
|
11
11
|
return [n, () => {
|
|
12
12
|
(async () => {
|
|
13
|
-
const
|
|
14
|
-
c(
|
|
13
|
+
const u = await navigator.mediaDevices.getUserMedia({ audio: !0, video: !0 }), s = await navigator.mediaDevices.enumerateDevices();
|
|
14
|
+
c(s), u.getTracks().forEach((i) => i.stop());
|
|
15
15
|
})();
|
|
16
16
|
}];
|
|
17
|
-
}, z = ({ name: n, value: c }) => /* @__PURE__ */ e.createElement("option", { value: c }, n),
|
|
17
|
+
}, z = ({ name: n, value: c }) => /* @__PURE__ */ e.createElement("option", { value: c }, n), H = "_deviceList_1bfq1_1", J = "_select_1bfq1_5", C = {
|
|
18
|
+
deviceList: H,
|
|
19
|
+
select: J
|
|
20
|
+
}, h = ({ devices: n, label: c, onChange: o }) => {
|
|
18
21
|
if (n === void 0)
|
|
19
22
|
return /* @__PURE__ */ e.createElement(e.Fragment, null);
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
return /* @__PURE__ */ e.createElement(
|
|
24
|
-
},
|
|
23
|
+
const u = (i) => {
|
|
24
|
+
o(i.target.value);
|
|
25
|
+
}, s = `device-select-${c.toLowerCase().replace(/\s/g, "-")}`;
|
|
26
|
+
return /* @__PURE__ */ e.createElement("div", { className: C.deviceList }, /* @__PURE__ */ e.createElement("label", { htmlFor: s }, c), /* @__PURE__ */ e.createElement("select", { className: C.select, id: s, onChange: u }, n.map((i, v) => /* @__PURE__ */ e.createElement(z, { value: i.deviceId, name: i.label, key: v }))));
|
|
27
|
+
}, K = "_button_keu24_1", Q = {
|
|
28
|
+
button: K
|
|
29
|
+
}, k = ({ className: n, children: c, onClick: o }) => /* @__PURE__ */ e.createElement("button", { onClick: o, className: [Q.button, n].filter(Boolean).join(" ") }, c), X = ({
|
|
25
30
|
isSelectAudioInput: n = !0,
|
|
26
31
|
isSelectAudioOutput: c = !0,
|
|
27
|
-
isSelectVideoInput:
|
|
28
|
-
open:
|
|
29
|
-
audioInputDeviceLabel:
|
|
30
|
-
audioOutputDeviceLabel:
|
|
31
|
-
videoInputDeviceLabel:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
allowOutsideClick:
|
|
32
|
+
isSelectVideoInput: o = !0,
|
|
33
|
+
open: u,
|
|
34
|
+
audioInputDeviceLabel: s = "audio input device",
|
|
35
|
+
audioOutputDeviceLabel: i = "audio output device",
|
|
36
|
+
videoInputDeviceLabel: v = "video input device",
|
|
37
|
+
confirmButtonText: I = "Confirm",
|
|
38
|
+
cancelButtonText: L = "Cancel",
|
|
39
|
+
allowOutsideClick: g = !0,
|
|
35
40
|
onDeviceSelected: B,
|
|
36
|
-
onDeviceSelectCanceled:
|
|
41
|
+
onDeviceSelectCanceled: D
|
|
37
42
|
}) => {
|
|
38
|
-
const [r,
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
const [r, N] = U(), [f, O] = l(), [b, A] = l(), [E, F] = l(), m = r.filter((t) => t.kind === "audioinput"), p = r.filter((t) => t.kind === "audiooutput"), _ = r.filter((t) => t.kind === "videoinput");
|
|
44
|
+
j(() => {
|
|
45
|
+
N();
|
|
41
46
|
}, []);
|
|
42
|
-
const
|
|
47
|
+
const M = () => {
|
|
43
48
|
B({
|
|
44
|
-
audioInput:
|
|
45
|
-
audioOutput:
|
|
46
|
-
videoInput:
|
|
49
|
+
audioInput: f !== void 0 ? f : m[0],
|
|
50
|
+
audioOutput: b !== void 0 ? b : p[0],
|
|
51
|
+
videoInput: E !== void 0 ? E : _[0]
|
|
47
52
|
});
|
|
48
|
-
},
|
|
49
|
-
|
|
50
|
-
},
|
|
51
|
-
|
|
53
|
+
}, $ = () => {
|
|
54
|
+
D();
|
|
55
|
+
}, q = (t) => {
|
|
56
|
+
O(m.find((d) => d.deviceId === t));
|
|
57
|
+
}, w = (t) => {
|
|
58
|
+
A(p.find((d) => d.deviceId === t));
|
|
52
59
|
}, y = (t) => {
|
|
53
|
-
|
|
54
|
-
}, V = (
|
|
55
|
-
|
|
56
|
-
}, j = () => {
|
|
57
|
-
k();
|
|
60
|
+
F(_.find((d) => d.deviceId === t));
|
|
61
|
+
}, V = () => {
|
|
62
|
+
D();
|
|
58
63
|
};
|
|
59
|
-
return
|
|
64
|
+
return u ? /* @__PURE__ */ e.createElement("div", { className: a.background, ...g ? { onClick: V } : {} }, /* @__PURE__ */ e.createElement(
|
|
60
65
|
"div",
|
|
61
66
|
{
|
|
62
|
-
className:
|
|
63
|
-
...
|
|
67
|
+
className: a.modal,
|
|
68
|
+
...g ? {
|
|
64
69
|
onClick: (t) => t.stopPropagation()
|
|
65
70
|
} : {}
|
|
66
71
|
},
|
|
67
|
-
/* @__PURE__ */ e.createElement("div", { className:
|
|
68
|
-
|
|
72
|
+
/* @__PURE__ */ e.createElement("div", { className: a.deviceLists }, n && /* @__PURE__ */ e.createElement(
|
|
73
|
+
h,
|
|
69
74
|
{
|
|
70
|
-
label:
|
|
71
|
-
devices:
|
|
72
|
-
onChange:
|
|
75
|
+
label: s,
|
|
76
|
+
devices: m,
|
|
77
|
+
onChange: q
|
|
73
78
|
}
|
|
74
79
|
), c && /* @__PURE__ */ e.createElement(
|
|
75
|
-
|
|
80
|
+
h,
|
|
76
81
|
{
|
|
77
|
-
label:
|
|
78
|
-
devices:
|
|
79
|
-
onChange:
|
|
82
|
+
label: i,
|
|
83
|
+
devices: p,
|
|
84
|
+
onChange: w
|
|
80
85
|
}
|
|
81
|
-
),
|
|
82
|
-
|
|
86
|
+
), o && /* @__PURE__ */ e.createElement(
|
|
87
|
+
h,
|
|
83
88
|
{
|
|
84
|
-
label:
|
|
85
|
-
devices:
|
|
86
|
-
onChange:
|
|
89
|
+
label: v,
|
|
90
|
+
devices: _,
|
|
91
|
+
onChange: y
|
|
87
92
|
}
|
|
88
93
|
)),
|
|
89
|
-
/* @__PURE__ */ e.createElement("div", { className:
|
|
94
|
+
/* @__PURE__ */ e.createElement("div", { className: a.buttons }, /* @__PURE__ */ e.createElement(k, { className: a.cancelButton, onClick: $ }, L), /* @__PURE__ */ e.createElement(k, { className: a.confirmButton, onClick: M }, I))
|
|
90
95
|
)) : /* @__PURE__ */ e.createElement(e.Fragment, null);
|
|
91
96
|
};
|
|
92
97
|
export {
|
|
93
|
-
|
|
98
|
+
X as SelectMediaDevicesModal
|
|
94
99
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(c,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],e):(c=typeof globalThis<"u"?globalThis:c||self,e(c.ReactSelectMediaDevicesModal={},c.React))})(this,function(c,e){"use strict";const s={background:"
|
|
1
|
+
(function(c,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],e):(c=typeof globalThis<"u"?globalThis:c||self,e(c.ReactSelectMediaDevicesModal={},c.React))})(this,function(c,e){"use strict";const s={background:"_background_2h4vl_1",modal:"_modal_2h4vl_13",deviceLists:"_deviceLists_2h4vl_19",buttons:"_buttons_2h4vl_23",chancelButton:"_chancelButton_2h4vl_30",confirmButton:"_confirmButton_2h4vl_32"},I=()=>{const[n,i]=e.useState([]);return[n,()=>{(async()=>{const a=await navigator.mediaDevices.getUserMedia({audio:!0,video:!0}),d=await navigator.mediaDevices.enumerateDevices();i(d),a.getTracks().forEach(o=>o.stop())})()}]},L=({name:n,value:i})=>e.createElement("option",{value:i},n),_={deviceList:"_deviceList_1bfq1_1",select:"_select_1bfq1_5"},r=({devices:n,label:i,onChange:u})=>{if(n===void 0)return e.createElement(e.Fragment,null);const a=o=>{u(o.target.value)},d=`device-select-${i.toLowerCase().replace(/\s/g,"-")}`;return e.createElement("div",{className:_.deviceList},e.createElement("label",{htmlFor:d},i),e.createElement("select",{className:_.select,id:d,onChange:a},n.map((o,v)=>e.createElement(L,{value:o.deviceId,name:o.label,key:v}))))},B={button:"_button_keu24_1"},g=({className:n,children:i,onClick:u})=>e.createElement("button",{onClick:u,className:[B.button,n].filter(Boolean).join(" ")},i),N=({isSelectAudioInput:n=!0,isSelectAudioOutput:i=!0,isSelectVideoInput:u=!0,open:a,audioInputDeviceLabel:d="audio input device",audioOutputDeviceLabel:o="audio output device",videoInputDeviceLabel:v="video input device",confirmButtonText:M="Confirm",cancelButtonText:S="Cancel",allowOutsideClick:b=!0,onDeviceSelected:y,onDeviceSelectCanceled:D})=>{const[m,O]=I(),[E,A]=e.useState(),[C,T]=e.useState(),[k,j]=e.useState(),p=m.filter(t=>t.kind==="audioinput"),f=m.filter(t=>t.kind==="audiooutput"),h=m.filter(t=>t.kind==="videoinput");e.useEffect(()=>{O()},[]);const q=()=>{y({audioInput:E!==void 0?E:p[0],audioOutput:C!==void 0?C:f[0],videoInput:k!==void 0?k:h[0]})},F=()=>{D()},$=t=>{A(p.find(l=>l.deviceId===t))},w=t=>{T(f.find(l=>l.deviceId===t))},x=t=>{j(h.find(l=>l.deviceId===t))},P=()=>{D()};return a?e.createElement("div",{className:s.background,...b?{onClick:P}:{}},e.createElement("div",{className:s.modal,...b?{onClick:t=>t.stopPropagation()}:{}},e.createElement("div",{className:s.deviceLists},n&&e.createElement(r,{label:d,devices:p,onChange:$}),i&&e.createElement(r,{label:o,devices:f,onChange:w}),u&&e.createElement(r,{label:v,devices:h,onChange:x})),e.createElement("div",{className:s.buttons},e.createElement(g,{className:s.cancelButton,onClick:F},S),e.createElement(g,{className:s.confirmButton,onClick:q},M)))):e.createElement(e.Fragment,null)};c.SelectMediaDevicesModal=N,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.
|
|
1
|
+
._background_2h4vl_1{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0000004d;display:flex;align-items:center;justify-content:center}._modal_2h4vl_13{background:white;padding:16px;border-radius:8px}._deviceLists_2h4vl_19{display:grid}._buttons_2h4vl_23{padding-top:16px;display:flex;align-items:center;justify-content:right}._confirmButton_2h4vl_32{margin-left:4px}._deviceList_1bfq1_1{padding-top:8px}._select_1bfq1_5{margin-top:4px;border-radius:4px;height:32px;display:flex;align-items:center;justify-content:right;width:100%}._button_keu24_1{border-radius:4px;height:32px;padding-left:16px;padding-right:16px;background-color:#fff;border-width:1px}
|
|
@@ -7,8 +7,8 @@ interface SelectMediaDevicesModalProps {
|
|
|
7
7
|
audioInputDeviceLabel: string;
|
|
8
8
|
audioOutputDeviceLabel: string;
|
|
9
9
|
videoInputDeviceLabel: string;
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
confirmButtonText: string;
|
|
11
|
+
cancelButtonText: string;
|
|
12
12
|
allowOutsideClick: boolean;
|
|
13
13
|
onDeviceSelected: (devices: {
|
|
14
14
|
audioInput?: MediaDeviceInfo;
|
|
@@ -17,5 +17,5 @@ interface SelectMediaDevicesModalProps {
|
|
|
17
17
|
}) => void;
|
|
18
18
|
onDeviceSelectCanceled: () => void;
|
|
19
19
|
}
|
|
20
|
-
declare const SelectMediaDevicesModal: ({ isSelectAudioInput, isSelectAudioOutput, isSelectVideoInput, open, audioInputDeviceLabel, audioOutputDeviceLabel, videoInputDeviceLabel,
|
|
20
|
+
declare const SelectMediaDevicesModal: ({ isSelectAudioInput, isSelectAudioOutput, isSelectVideoInput, open, audioInputDeviceLabel, audioOutputDeviceLabel, videoInputDeviceLabel, confirmButtonText, cancelButtonText, allowOutsideClick, onDeviceSelected, onDeviceSelectCanceled, }: SelectMediaDevicesModalProps) => JSX.Element;
|
|
21
21
|
export default SelectMediaDevicesModal;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-select-media-devices-modal",
|
|
3
3
|
"description": "A React component library for select media devices",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.8",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -32,7 +32,10 @@
|
|
|
32
32
|
],
|
|
33
33
|
"scripts": {
|
|
34
34
|
"dev": "vite serve example",
|
|
35
|
-
"build": "vite build"
|
|
35
|
+
"build": "vite build",
|
|
36
|
+
"test": "vitest",
|
|
37
|
+
"coverage": "vitest run --coverage",
|
|
38
|
+
"test:e2e": "vitest run -c vitest.e2e.config.ts"
|
|
36
39
|
},
|
|
37
40
|
"dependencies": {
|
|
38
41
|
"react": "^18.2.0",
|
|
@@ -41,14 +44,23 @@
|
|
|
41
44
|
},
|
|
42
45
|
"devDependencies": {
|
|
43
46
|
"@mdx-js/react": "^2.3.0",
|
|
47
|
+
"@playwright/test": "^1.33.0",
|
|
44
48
|
"@rollup/plugin-typescript": "^11.1.0",
|
|
49
|
+
"@testing-library/jest-dom": "^5.16.5",
|
|
50
|
+
"@testing-library/react": "^14.0.0",
|
|
51
|
+
"@testing-library/user-event": "^14.4.3",
|
|
45
52
|
"@types/node": "^18.15.11",
|
|
46
53
|
"@types/react": "^18.0.33",
|
|
47
54
|
"@vitejs/plugin-react": "^3.1.0",
|
|
55
|
+
"@vitest/coverage-c8": "^0.30.1",
|
|
56
|
+
"@vitest/ui": "^0.30.1",
|
|
57
|
+
"jsdom": "^21.1.1",
|
|
58
|
+
"playwright": "^1.33.0",
|
|
48
59
|
"rimraf": "^4.4.1",
|
|
49
60
|
"serve": "^14.2.0",
|
|
50
61
|
"vite": "^4.2.1",
|
|
51
62
|
"vite-pages-theme-doc": "^4.0.0",
|
|
52
|
-
"vite-plugin-react-pages": "^4.0.0"
|
|
63
|
+
"vite-plugin-react-pages": "^4.0.0",
|
|
64
|
+
"vitest": "^0.30.1"
|
|
53
65
|
}
|
|
54
66
|
}
|
|
File without changes
|